[pkg-lighttpd] r565 - in lighttpd/tags: . 1.4.19-5+lenny2 1.4.19-5+lenny2/cygwin 1.4.19-5+lenny2/debian 1.4.19-5+lenny2/debian/conf-available 1.4.19-5+lenny2/debian/patches 1.4.19-5+lenny2/doc 1.4.19-5+lenny2/openwrt 1.4.19-5+lenny2/src 1.4.19-5+lenny2/tests 1.4.19-5+lenny2/tests/docroot 1.4.19-5+lenny2/tests/docroot/123 1.4.19-5+lenny2/tests/docroot/www 1.4.19-5+lenny2/tests/docroot/www/expire 1.4.19-5+lenny2/tests/docroot/www/go 1.4.19-5+lenny2/tests/docroot/www/indexfile

Arno Töll atoell-guest at alioth.debian.org
Sun Dec 18 22:14:22 UTC 2011


Author: atoell-guest
Date: 2011-12-18 22:14:21 +0000 (Sun, 18 Dec 2011)
New Revision: 565

Added:
   lighttpd/tags/1.4.19-5+lenny2/
   lighttpd/tags/1.4.19-5+lenny2/AUTHORS
   lighttpd/tags/1.4.19-5+lenny2/COPYING
   lighttpd/tags/1.4.19-5+lenny2/ChangeLog
   lighttpd/tags/1.4.19-5+lenny2/INSTALL
   lighttpd/tags/1.4.19-5+lenny2/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/NEWS
   lighttpd/tags/1.4.19-5+lenny2/README
   lighttpd/tags/1.4.19-5+lenny2/SConstruct
   lighttpd/tags/1.4.19-5+lenny2/aclocal.m4
   lighttpd/tags/1.4.19-5+lenny2/autogen.sh
   lighttpd/tags/1.4.19-5+lenny2/compile
   lighttpd/tags/1.4.19-5+lenny2/config.guess
   lighttpd/tags/1.4.19-5+lenny2/config.h.in
   lighttpd/tags/1.4.19-5+lenny2/config.sub
   lighttpd/tags/1.4.19-5+lenny2/configure
   lighttpd/tags/1.4.19-5+lenny2/configure.in
   lighttpd/tags/1.4.19-5+lenny2/cygwin/
   lighttpd/tags/1.4.19-5+lenny2/cygwin/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/cygwin/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/cygwin/lighttpd.README
   lighttpd/tags/1.4.19-5+lenny2/cygwin/lighttpd.README.in
   lighttpd/tags/1.4.19-5+lenny2/cygwin/setup.hint
   lighttpd/tags/1.4.19-5+lenny2/debian/
   lighttpd/tags/1.4.19-5+lenny2/debian/NEWS
   lighttpd/tags/1.4.19-5+lenny2/debian/TODO.Debian
   lighttpd/tags/1.4.19-5+lenny2/debian/changelog
   lighttpd/tags/1.4.19-5+lenny2/debian/compat
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/05-auth.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-cgi.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-cml.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-fastcgi.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-magnet.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-proxy.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-rrdtool.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-simple-vhost.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-ssi.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-ssl.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-status.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-trigger-b4-dl.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-userdir.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-webdav.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/README
   lighttpd/tags/1.4.19-5+lenny2/debian/control
   lighttpd/tags/1.4.19-5+lenny2/debian/copyright
   lighttpd/tags/1.4.19-5+lenny2/debian/create-mime.assign.pl
   lighttpd/tags/1.4.19-5+lenny2/debian/include-conf-enabled.pl
   lighttpd/tags/1.4.19-5+lenny2/debian/index.html
   lighttpd/tags/1.4.19-5+lenny2/debian/init.d
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-doc.install
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-cml.install
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-magnet.install
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-mysql-vhost.install
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-trigger-b4-dl.install
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-webdav.install
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.conf
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.cron.daily
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.dirs
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.examples
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.install
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.links
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.logrotate
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.manpages
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.postinst
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.postrm
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.preinst
   lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.prerm
   lighttpd/tags/1.4.19-5+lenny2/debian/lighty-enable-mod
   lighttpd/tags/1.4.19-5+lenny2/debian/lighty-enable-mod.1
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/fastcgi_detach.patch
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap-deprecated.patch
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap_build_filter_fix.patch
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap_leak_bugfix.patch
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_request_header_memleak.patch
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_rewrite_redirect_decode_url.patch
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_userdir_lowercase.patch
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/series
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/ssl-connection-errors.patch
   lighttpd/tags/1.4.19-5+lenny2/debian/patches/ssl-retval-fix.patch
   lighttpd/tags/1.4.19-5+lenny2/debian/rules
   lighttpd/tags/1.4.19-5+lenny2/debian/spawn-fcgi.lighttpd.1
   lighttpd/tags/1.4.19-5+lenny2/debian/use-ipv6.pl
   lighttpd/tags/1.4.19-5+lenny2/debian/watch
   lighttpd/tags/1.4.19-5+lenny2/depcomp
   lighttpd/tags/1.4.19-5+lenny2/distribute.sh.in
   lighttpd/tags/1.4.19-5+lenny2/doc/
   lighttpd/tags/1.4.19-5+lenny2/doc/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/doc/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/doc/access.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/accesslog.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/alias.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/authentication.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/cgi.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/cml.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/compress.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/configuration.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/dirlisting.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/evhost.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/expire.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/extforward.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi-state.dot
   lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi-state.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/features.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.1
   lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.conf
   lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.user
   lighttpd/tags/1.4.19-5+lenny2/doc/magnet.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/mysqlvhost.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/newstyle.css
   lighttpd/tags/1.4.19-5+lenny2/doc/oldstyle.css
   lighttpd/tags/1.4.19-5+lenny2/doc/performance.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/plugins.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/proxy.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/rc.lighttpd
   lighttpd/tags/1.4.19-5+lenny2/doc/rc.lighttpd.redhat
   lighttpd/tags/1.4.19-5+lenny2/doc/redirect.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/rewrite.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/rrdtool-graph.sh
   lighttpd/tags/1.4.19-5+lenny2/doc/rrdtool.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/scgi.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/secdownload.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/security.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/setenv.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/simple-vhost.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/skeleton.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/spawn-fcgi.1
   lighttpd/tags/1.4.19-5+lenny2/doc/spawn-php.sh
   lighttpd/tags/1.4.19-5+lenny2/doc/ssi.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/ssl.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/state.dot
   lighttpd/tags/1.4.19-5+lenny2/doc/state.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/status.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/sysconfig.lighttpd
   lighttpd/tags/1.4.19-5+lenny2/doc/traffic-shaping.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/trigger_b4_dl.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/userdir.txt
   lighttpd/tags/1.4.19-5+lenny2/doc/webdav.txt
   lighttpd/tags/1.4.19-5+lenny2/install-sh
   lighttpd/tags/1.4.19-5+lenny2/lighttpd.spec
   lighttpd/tags/1.4.19-5+lenny2/lighttpd.spec.in
   lighttpd/tags/1.4.19-5+lenny2/ltmain.sh
   lighttpd/tags/1.4.19-5+lenny2/missing
   lighttpd/tags/1.4.19-5+lenny2/openwrt/
   lighttpd/tags/1.4.19-5+lenny2/openwrt/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/openwrt/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/openwrt/S51lighttpd
   lighttpd/tags/1.4.19-5+lenny2/openwrt/conffiles
   lighttpd/tags/1.4.19-5+lenny2/openwrt/control
   lighttpd/tags/1.4.19-5+lenny2/openwrt/control.in
   lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.conf
   lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.mk
   lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.mk.in
   lighttpd/tags/1.4.19-5+lenny2/src/
   lighttpd/tags/1.4.19-5+lenny2/src/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/src/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/src/SConscript
   lighttpd/tags/1.4.19-5+lenny2/src/array.c
   lighttpd/tags/1.4.19-5+lenny2/src/array.h
   lighttpd/tags/1.4.19-5+lenny2/src/base.h
   lighttpd/tags/1.4.19-5+lenny2/src/bitset.c
   lighttpd/tags/1.4.19-5+lenny2/src/bitset.h
   lighttpd/tags/1.4.19-5+lenny2/src/buffer.c
   lighttpd/tags/1.4.19-5+lenny2/src/buffer.h
   lighttpd/tags/1.4.19-5+lenny2/src/chunk.c
   lighttpd/tags/1.4.19-5+lenny2/src/chunk.h
   lighttpd/tags/1.4.19-5+lenny2/src/configfile-glue.c
   lighttpd/tags/1.4.19-5+lenny2/src/configfile.c
   lighttpd/tags/1.4.19-5+lenny2/src/configfile.h
   lighttpd/tags/1.4.19-5+lenny2/src/configparser.c
   lighttpd/tags/1.4.19-5+lenny2/src/configparser.h
   lighttpd/tags/1.4.19-5+lenny2/src/configparser.y
   lighttpd/tags/1.4.19-5+lenny2/src/connections-glue.c
   lighttpd/tags/1.4.19-5+lenny2/src/connections.c
   lighttpd/tags/1.4.19-5+lenny2/src/connections.h
   lighttpd/tags/1.4.19-5+lenny2/src/crc32.c
   lighttpd/tags/1.4.19-5+lenny2/src/crc32.h
   lighttpd/tags/1.4.19-5+lenny2/src/data_array.c
   lighttpd/tags/1.4.19-5+lenny2/src/data_config.c
   lighttpd/tags/1.4.19-5+lenny2/src/data_count.c
   lighttpd/tags/1.4.19-5+lenny2/src/data_fastcgi.c
   lighttpd/tags/1.4.19-5+lenny2/src/data_integer.c
   lighttpd/tags/1.4.19-5+lenny2/src/data_string.c
   lighttpd/tags/1.4.19-5+lenny2/src/etag.c
   lighttpd/tags/1.4.19-5+lenny2/src/etag.h
   lighttpd/tags/1.4.19-5+lenny2/src/fastcgi.h
   lighttpd/tags/1.4.19-5+lenny2/src/fdevent.c
   lighttpd/tags/1.4.19-5+lenny2/src/fdevent.h
   lighttpd/tags/1.4.19-5+lenny2/src/fdevent_freebsd_kqueue.c
   lighttpd/tags/1.4.19-5+lenny2/src/fdevent_linux_rtsig.c
   lighttpd/tags/1.4.19-5+lenny2/src/fdevent_linux_sysepoll.c
   lighttpd/tags/1.4.19-5+lenny2/src/fdevent_poll.c
   lighttpd/tags/1.4.19-5+lenny2/src/fdevent_select.c
   lighttpd/tags/1.4.19-5+lenny2/src/fdevent_solaris_devpoll.c
   lighttpd/tags/1.4.19-5+lenny2/src/http-header-glue.c
   lighttpd/tags/1.4.19-5+lenny2/src/http_auth.c
   lighttpd/tags/1.4.19-5+lenny2/src/http_auth.h
   lighttpd/tags/1.4.19-5+lenny2/src/http_auth_digest.c
   lighttpd/tags/1.4.19-5+lenny2/src/http_auth_digest.h
   lighttpd/tags/1.4.19-5+lenny2/src/http_chunk.c
   lighttpd/tags/1.4.19-5+lenny2/src/http_chunk.h
   lighttpd/tags/1.4.19-5+lenny2/src/inet_ntop_cache.c
   lighttpd/tags/1.4.19-5+lenny2/src/inet_ntop_cache.h
   lighttpd/tags/1.4.19-5+lenny2/src/joblist.c
   lighttpd/tags/1.4.19-5+lenny2/src/joblist.h
   lighttpd/tags/1.4.19-5+lenny2/src/keyvalue.c
   lighttpd/tags/1.4.19-5+lenny2/src/keyvalue.h
   lighttpd/tags/1.4.19-5+lenny2/src/lemon.c
   lighttpd/tags/1.4.19-5+lenny2/src/lempar.c
   lighttpd/tags/1.4.19-5+lenny2/src/lighttpd-angel.c
   lighttpd/tags/1.4.19-5+lenny2/src/log.c
   lighttpd/tags/1.4.19-5+lenny2/src/log.h
   lighttpd/tags/1.4.19-5+lenny2/src/md5.c
   lighttpd/tags/1.4.19-5+lenny2/src/md5.h
   lighttpd/tags/1.4.19-5+lenny2/src/mod_access.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_accesslog.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_alias.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_auth.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_auth.h
   lighttpd/tags/1.4.19-5+lenny2/src/mod_cgi.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_cml.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_cml.h
   lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_funcs.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_funcs.h
   lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_lua.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_compress.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_dirlisting.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_evasive.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_evhost.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_expire.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_extforward.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_fastcgi.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_flv_streaming.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_indexfile.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet_cache.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet_cache.h
   lighttpd/tags/1.4.19-5+lenny2/src/mod_mysql_vhost.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_proxy.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_redirect.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_rewrite.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_rrdtool.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_scgi.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_secure_download.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_setenv.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_simple_vhost.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_skeleton.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi.h
   lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_expr.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_expr.h
   lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.h
   lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.y
   lighttpd/tags/1.4.19-5+lenny2/src/mod_staticfile.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_status.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_trigger_b4_dl.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_userdir.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_usertrack.c
   lighttpd/tags/1.4.19-5+lenny2/src/mod_webdav.c
   lighttpd/tags/1.4.19-5+lenny2/src/network.c
   lighttpd/tags/1.4.19-5+lenny2/src/network.h
   lighttpd/tags/1.4.19-5+lenny2/src/network_backends.h
   lighttpd/tags/1.4.19-5+lenny2/src/network_freebsd_sendfile.c
   lighttpd/tags/1.4.19-5+lenny2/src/network_linux_sendfile.c
   lighttpd/tags/1.4.19-5+lenny2/src/network_openssl.c
   lighttpd/tags/1.4.19-5+lenny2/src/network_solaris_sendfilev.c
   lighttpd/tags/1.4.19-5+lenny2/src/network_write.c
   lighttpd/tags/1.4.19-5+lenny2/src/network_writev.c
   lighttpd/tags/1.4.19-5+lenny2/src/plugin.c
   lighttpd/tags/1.4.19-5+lenny2/src/plugin.h
   lighttpd/tags/1.4.19-5+lenny2/src/proc_open.c
   lighttpd/tags/1.4.19-5+lenny2/src/proc_open.h
   lighttpd/tags/1.4.19-5+lenny2/src/request.c
   lighttpd/tags/1.4.19-5+lenny2/src/request.h
   lighttpd/tags/1.4.19-5+lenny2/src/response.c
   lighttpd/tags/1.4.19-5+lenny2/src/response.h
   lighttpd/tags/1.4.19-5+lenny2/src/server.c
   lighttpd/tags/1.4.19-5+lenny2/src/server.h
   lighttpd/tags/1.4.19-5+lenny2/src/settings.h
   lighttpd/tags/1.4.19-5+lenny2/src/spawn-fcgi.c
   lighttpd/tags/1.4.19-5+lenny2/src/splaytree.c
   lighttpd/tags/1.4.19-5+lenny2/src/splaytree.h
   lighttpd/tags/1.4.19-5+lenny2/src/stat_cache.c
   lighttpd/tags/1.4.19-5+lenny2/src/stat_cache.h
   lighttpd/tags/1.4.19-5+lenny2/src/status_counter.c
   lighttpd/tags/1.4.19-5+lenny2/src/status_counter.h
   lighttpd/tags/1.4.19-5+lenny2/src/stream.c
   lighttpd/tags/1.4.19-5+lenny2/src/stream.h
   lighttpd/tags/1.4.19-5+lenny2/src/sys-mmap.h
   lighttpd/tags/1.4.19-5+lenny2/src/sys-socket.h
   lighttpd/tags/1.4.19-5+lenny2/tests/
   lighttpd/tags/1.4.19-5+lenny2/tests/404-handler.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/LightyTest.pm
   lighttpd/tags/1.4.19-5+lenny2/tests/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/tests/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/tests/SConscript
   lighttpd/tags/1.4.19-5+lenny2/tests/bug-06.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/bug-12.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/cachable.t
   lighttpd/tags/1.4.19-5+lenny2/tests/cleanup.sh
   lighttpd/tags/1.4.19-5+lenny2/tests/condition.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/core-404-handler.t
   lighttpd/tags/1.4.19-5+lenny2/tests/core-condition.t
   lighttpd/tags/1.4.19-5+lenny2/tests/core-keepalive.t
   lighttpd/tags/1.4.19-5+lenny2/tests/core-request.t
   lighttpd/tags/1.4.19-5+lenny2/tests/core-response.t
   lighttpd/tags/1.4.19-5+lenny2/tests/core-var-include.t
   lighttpd/tags/1.4.19-5+lenny2/tests/core.t
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/12345.html
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/12345.txt
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/dummyfile.bla
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/phpinfo.php
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.fcgi
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.html
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.pl
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi-pathinfo.pl
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi.php
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi.pl
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/crlfcrash.pl
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/dummydir/
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/exec-date.shtml
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/access.txt
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/modification.txt
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-env.php
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-header.pl
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-post-len.pl
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-server-env.php
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/cgi.php
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/index.html
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/index.txt
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/Makefile.am
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/Makefile.in
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/index.php
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/return-404.php
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/rewrite.php
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/nph-status.pl
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/phpinfo.php
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/prefix.fcgi
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/redirect.php
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/send404.pl
   lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/ssi.shtml
   lighttpd/tags/1.4.19-5+lenny2/tests/env-variables.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/env-variables.t
   lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-10.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-13.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-auth.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-responder.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/fcgi-auth.c
   lighttpd/tags/1.4.19-5+lenny2/tests/fcgi-responder.c
   lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.htpasswd
   lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.user
   lighttpd/tags/1.4.19-5+lenny2/tests/lowercase.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/lowercase.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-access.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-auth.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-cgi.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-compress.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-fastcgi.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-proxy.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-redirect.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-rewrite.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-secdownload.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-setenv.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-ssi.t
   lighttpd/tags/1.4.19-5+lenny2/tests/mod-userdir.t
   lighttpd/tags/1.4.19-5+lenny2/tests/prepare.sh
   lighttpd/tags/1.4.19-5+lenny2/tests/proxy.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/request.t
   lighttpd/tags/1.4.19-5+lenny2/tests/run-tests.pl
   lighttpd/tags/1.4.19-5+lenny2/tests/symlink.t
   lighttpd/tags/1.4.19-5+lenny2/tests/var-include-sub.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/var-include.conf
   lighttpd/tags/1.4.19-5+lenny2/tests/wrapper.sh
Log:
Tagging 1.4.19-5+lenny2

Added: lighttpd/tags/1.4.19-5+lenny2/AUTHORS
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/AUTHORS	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/AUTHORS	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+jan kneschke <jan at kneschke.de>

Added: lighttpd/tags/1.4.19-5+lenny2/COPYING
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/COPYING	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/COPYING	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,31 @@
+
+
+Copyright (c) 2004, Jan Kneschke, incremental
+ All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+- Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+- Neither the name of the 'incremental' nor the names of its contributors may
+  be used to endorse or promote products derived from this software without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+

Added: lighttpd/tags/1.4.19-5+lenny2/ChangeLog
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/ChangeLog	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/ChangeLog	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,4031 @@
+CVS-Version: $Id: ChangeLog,v 1.18 2004/04/09 22:08:19 weigon Exp $
+
+** NOTE **
+
+This file is abondend in favour of the NEWS file
+
+** NOTE **
+
+
+15.06.2005 20:10 - 1.3.15
+- mod_cml, mod_trigger_b4_dl
+
+  added both plugins
+
+  check http://trac.lighttpd.net/trac/log/branches/lighttpd-1.3.x/ for the
+  rest
+
+15.06.2005 13:59 - 1.3.14
+- documentation
+
+  more fix-ups for mod_fastcgi, configuration and mysql-vhost
+
+- tests
+
+  unified test-scripts to use the same framework
+
+14.06.2005 23:38
+- documentation
+
+  updated docs for mod_proxy and mod_scgi
+
+12.06.2005 12:55 - pre-release
+- mod_fastcgi
+
+  fixed event handling after delayed connect
+
+  make retry timeout configurable
+
+  removed unused events if we switch to FCGI_STATE_READ
+
+  disabled adaptive spawning
+
+- mod_proxy
+
+  added hash-based and round-robin balancing
+
+  use port 80 is default
+
+  fixed errorhandling on connection refused
+
+  fixed usage of dead hosts [285]
+
+- mod_cgi
+
+  send 500 if the CGI died before we received any data
+
+  redirect the stderr of CGI to our errorlog
+
+  cleanup cgi-env after we finished our request
+
+- uri-handling
+
+  don't replace + to space before the ?query part
+
+  accept characters > 127 again
+
+- mod_auth
+
+  fixed segfault if debugging is enabled [371]
+
+- mod_scgi
+
+  added SCGI support for python + WSGI [381], [382]
+
+- mod_setenv
+
+  fixed conditionals for setenv.add-environment [109]
+
+- generic
+
+  report an error on duplicate config-keys in configfile [267]
+
+  call initgroups to join the groups of the users [239]
+
+  fixed automatic redirects if SSL is used
+
+  fixed compilation on Solaris [283]
+
+  disable accept-filtering on FreeBSD if ssl is used [320]
+
+  fixed handling of range-request larger than 2Gb
+
+  fixed comparisions of mime-types to case-insensitive [266]
+
+  added quotation of ETags [376], [378]
+
+06.03.2005 12:22 - 1.3.13
+- mod_accesslog
+
+  fixed NULL dereference on logfile cycling if accesslog is not set
+
+05.03.2005 17:30
+- mod_proxy
+
+  handle delayed connect in the same way as mod_fastcgi
+
+03.03.2005 19:00
+- freebsd
+
+  handle remote-close gracefully
+
+- ssl
+
+  handle remote-close gracefully
+
+- dir-listing
+
+  added dir-listing.hide-dotfiles and added an option to set css files
+
+02.03.2005 19:41
+- fastcgi
+
+  fixed path-info for prefix-patterns
+
+  fixed path-info for PHP
+
+02.03.2005 14:47 - 1.3.12
+- mod_fastcgi
+
+  fixed handling of dead fastcgi process which sent their SIGCLD to
+  initd and not to lighttpd. Moving the daemonize before starting
+  the fastcgi procs fixes this.
+
+01.03.2005 23:59
+- irix
+
+  fixed minor compile issues with MIPSpro
+
+01.03.2005 11:57
+- request-handling
+
+  handle most duplicate headers as 400, Bug #25
+
+- mod_fastcgi
+
+  added more checks
+
+28.02.2005 18:26
+- mod_expire
+
+  don't ignore 'modification' any more, Bug #39
+  only handles static files
+
+- last-modified
+
+  really compare timestamps, Bug #34
+
+28.02.2005 11:54
+- buffer
+
+  rewrote int2buffer functions
+
+  simplified path_simplify
+
+- pid-file
+
+  ignore EACCESS on unlink
+
+28.02.2005 10:35
+- mod_fastcgi
+
+  accept \n\n, Bug #32
+
+- cygwin
+
+  moved functions used by plugin and main-program to *-glue.c
+
+- lemon
+
+  removed warnings about shadowed variables
+
+28.02.2005 01:00
+- ssl
+
+  added ssl.ca-file, Bug #19
+
+  improved error-messages
+
+27.02.2005 23:48
+- test cases
+
+  rewrote to test-framework to use Perl + Test::More
+  ported more test-cases
+
+22.02.2005 01:20
+- mod_fastcgi
+
+  replaced inet_addr by inet_aton
+
+- request-handling
+
+  fixed segfault if host is empty
+
+20.02.2005 20:05
+- cgi
+
+  fixed cgi.assign for empty handlers again
+
+20.02.2005 16:54 - 1.3.11
+- request handling
+
+  ignore \r\n before request-line in keep-alive requests (Bug #13)
+
+- cgi, fastcgi
+
+  added REMOTE_PORT and SERVER_ADDR
+
+  fixed check for broken status-code in nph-scripts (Bug #14)
+
+- fastcgi
+
+  fixed passing cmdline options the spawned binary (Bug #16)
+
+  fixed failed reconnects (Bug #9)
+
+- macos x
+
+  fixed build on max
+
+- mod_secdownload
+
+  parse conditional secure-download.secret (Bug #8)
+
+- mod_userdir
+
+  redirect if username is not followed by / (Bug #15)
+
+13.02.2005 17:33
+- mod_auth
+
+  fix crash if require, realm or method are empty (Bug #5)
+
+13.02.2005 14:52
+- network
+
+  handle EPIPE and ECONNRESET as 'client has closed connection' in writev()
+  (Bug #1)
+
+- macosx
+
+  compile error on MacOS X due to missing environ (patch by Johan Sörensen)
+  (Bug #2)
+
+- indexfiles
+
+  append the detected indexfile only once to uri.path (reported by Thomas
+  Seifert)
+  (Bug #3)
+
+06.02.2005 15:16 - 1.3.10
+- fastcgi
+
+  display a error-message if a hostname if specified in fastcgi.server->host
+  we need an IP here
+
+- debug
+
+  added debug.log-state-handling
+
+- spawn-fcgi
+
+  accept a full commandline for spawning
+
+06.02.2005 12:50
+- fastcgi
+
+  fixed openssl handling
+
+- network_freebsd_sendfilev
+
+  gracefull handling of connections closed on client-side
+  removed debug-message
+
+06.02.2005 01:44 - 1.3.9
+- documentation
+
+  added docs for SSL setup and mod_status
+
+- fastcgi
+
+  fixed config handling on PowerPC for local-spawning
+
+05.02.2005 15:14
+- fastcgi
+
+  added bin-environment to setup the environment of the spawned process
+
+  added bin-copy-environment to copy only the specified set of options
+  from the old environment
+
+  added handling of cmd-line options to bin-path
+
+- setenv
+
+  fixed crashed in setenv.add-response-header
+
+04.02.2005 18:09
+- configure
+
+  fixed docs for --with-mysql
+
+- fastcgi
+
+  improved performance of building the header (drop strlen())
+
+04.02.2005 01:59
+- cgi
+
+  don't send file on error
+
+  check if cgi-handler exists before executing it
+
+  added support for nph-...
+
+02.02.2005 21:18 - pre-release
+- request parsing
+
+  handle invalid characters in URI
+
+02.02.2005 15:12
+- makefiles
+
+  dropped unused header files from the distribution
+
+02.02.2005 14:18
+- fastcgi
+
+  delete sockets on shutdown
+
+- http/1.1
+
+  adding option to disable http/1.1
+
+01.02.2005 12:03
+- cygwin
+
+  fixed plugins_load to use the right extensions again
+  removed mmap check
+  added ssl support
+
+01.02.2005 01:49
+- configure
+
+  make check for valgrind.h covered by --with-valgrind
+
+- mod_localizer, mod_maps
+
+  remove both plugins from the distribution
+
+- file-not-found
+
+  handle file not found again
+
+30.01.2005 16:44
+- HEAD requests
+
+  don't send content on dynamic HEAD requests with status 200
+
+30.01.2005 15:16 - 1.3.8
+- network-handler
+
+  remove debug output on writev() if the remote side closed the connection
+
+- directory index
+
+  handle EACCES correctly
+
+29.01.2005 15:16 - pre-release
+- mod_alias
+
+  fixed mod_alias + pathinfo handling
+
+- mod_accesslog
+
+  added access-log to syslog patch from allan
+
+28.01.2005 17:30
+- directory redirect without Host-header
+
+  use server-ip instead of client-ip for the Location:
+
+- fastcgi + pathinfo
+
+  if fastcgi-auth redirects to a directory which doesn't exist handle it
+  correctly (bug introduced in 1.3.8)
+
+- requesting directories
+
+  clean physical.path if directory is requested and dir-listing is disabled
+  send 403 again (buf introduced in 1.3.8)
+
+28.01.2005 12:08
+- fastcgi
+
+   ignore FDEVENT_HUP for unix-sockets as a simple read + timeout will do
+   the job anyway
+
+22.01.2005 20:28 - pre-release
+- fastcgi
+
+  send content and headers if authorizer mode is used
+
+  use a new connection if connection is died to fastcgi
+  and we have not used it yet
+
+18.01.2005 21:21 - pre-release
+- plugins
+
+  added version-id to plugins to detect plugins which are not up-to-date
+
+16.01.2005 23:11
+- fastcgi
+
+  fixed write-failed after crash of fastcgi-child
+
+16.01.2005 20:43
+- setenv
+
+  fixed setenv.add-environment
+
+- fastcgi
+
+  fixed authorizer + added testcases
+
+16.01.2005 17:40 - pre-release
+- mod_status
+
+  beautified mod_status
+
+- mod_setenv
+
+  added setenv.add-environment
+
+- timeouts
+
+  add timeout to read-post
+
+15.01.2005 12:57
+- debug
+
+  added debug options to log
+  - missing files
+  - request header
+  - response header
+  - request handling
+
+  added a more usefull error message for the status-code changes in the
+  request parser
+
+- server announcement
+
+  set Server: header for dynamic content too
+
+- fastcgi
+
+  fixed double free
+
+  don't crash on FDEVENT_ERR
+
+  added a comment for EAGAIN on connect()
+
+08.01.2005 17:45
+- ssl
+
+  report an error if ssl.engine is enable but no ssl support compiled in
+
+08.01.2005 12:23
+- mod_status
+
+  added request time to the output
+
+  (late changelog) added host and filename to the output (fobax)
+  (late changelog) HTMLalized the output (fobax)
+
+06.01.2005 19:51 - pre-release
+- error-handler
+
+  let the error-handler handle 403 requests too
+
+  make the error-handler setable by a module
+
+- error-pages
+
+  reworked the error-page handling
+
+05.01.2005 13:10
+- keep-alive handling
+
+  made sure that keep-alive is really handled correctly
+
+04.01.2005 17:02
+- mod_setenv
+
+  added a module to added request and response headers on the fly
+
+- error-log
+
+  send error log to syslog() if no errorlogfile is specified (again)
+
+02.01.2005 22:44 - pre-release
+- response handling
+
+  cut of body for status 301, 304 and 205
+
+- buffer
+
+  optimized all _hex functions (Silvan Minghetti)
+
+02.01.2005 20:32
+- fastcgi
+
+  if bin-path is not specified, don't die (bug introduced in the last pre-rel)
+
+- auth
+
+  if userfile is empty don't auth.
+
+02.01.2005 19:06
+- mod_compress
+
+  fixed off by one if cache-dir is not set
+
+02.01.2005 16:10
+- conditional config
+
+  fixed !~ and !=
+
+- buffer
+
+  copy empty buffers correctly
+
+31.12.2004 17:45
+- ipv6 + pidfile
+
+  don't complain if we can't remove the pidfile (Silvan Minghetti)
+
+  remove ipv6 option from the commandline of lighttpd doesn't support
+  ipv6 (Silvan Minghetti)
+
+31.12.2004 15:41 - pre-release
+- kqueue
+
+  simplified event handling (adam)
+
+- fastcgi
+
+  fixed div-by-zero bugs in the adaptive process spawning
+
+- mysql-vhost
+
+  added mysql-vhost (Christer Holgersson)
+
+30.12.2004 19:09
+- fastcgi
+
+  added adaptive spawning of FastCGI processes
+
+- traffic shaping
+
+  added traffic shaping per virtual server
+
+28.12.2004 23:26
+- traffic shaping
+
+  added traffic shaping per connection
+
+25.12.2004 22:58
+- mod_status
+
+  fixed status.url again (Timo)
+
+21.12.2004 11:29
+- configure
+
+  added check for signal and select (compile fix for netbsd 1.4 and 1.5)
+
+11.12.2004 12:38 - 1.3.7
+- fastcgi + php
+
+  retry to connect to another PHP child if one of them dies after
+  connect
+
+- cgi + multipart
+
+  don't transform CONTENT_TYPE to HTTP_CONTENT_TYPE
+
+- debian
+
+  more cleanup, updated changelog, added more deps and suggests
+  (Chris Brown)
+
+10.12.2004 22:33
+- event handler
+
+  fixed crashes in kqueue
+
+10.12.2004 13:57 - pre-release
+- mod_status
+
+  fixed wraparound in total requests and total traffic
+
+- debian
+
+  updated licence and packaging
+
+- security
+
+  call setgroups() to get rid of all groups
+
+- ssl
+
+  handle SSL_shutdown() == 0 correctly
+
+  fixed openssl detection in configure
+
+  fixed handling of chunked encoding
+
+- request handling
+
+  handle Connection: keep-alive correctly (case as not ignored)
+
+21.11.2004 02:39
+- windows
+
+  merged basic native windows port (compiles with mingw)
+
+20.11.2004 18:43
+- conditional
+
+  ported
+  - cgi
+  - secdownload
+  - expire
+  - localizer
+  - usertrack
+  - status
+  - proxy
+
+- server-tag
+
+  Server: ... can now be specified by server.tag = "..."
+
+- spawn-fcgi
+
+  fixed typo in usage text
+
+- ssl
+
+  fixed detection of libs and headers
+
+05.11.2004 16:01
+- fastcgi
+
+  added more usefull error messages
+
+04.11.2004 23:01
+- ssi
+
+  added support for ${...}
+
+03.11.2004 14:51 - 1.3.6
+- fastcgi
+
+  added spawn-fcgi to the distribution
+  added spawn-local-fastcgi yourself ( bin-path )
+
+03.11.2004 11:22
+- accesslog
+
+  don't cycle accesslogs of external processes are used
+
+02.11.2004 15:34
+- fastcgi
+
+  handle END-OF-REQUEST correctly if chunk-encoding is not used
+
+02.11.2004 10:53
+- internal redirects
+
+  fixed handling of query strings in internal redirects for directories
+
+02.11.2004 09:54 - pre-release
+- cgi
+
+  add REMOTE_USER, suppress AUTHORIZATION
+  handle payloads > 4k
+
+- mod_alias
+
+  fixed url checking
+
+- follow-symlink
+
+  fixed config
+
+31.10.2004 11:30 - 1.3.5
+- writev
+
+  fixed seg-fault in debug-message if write() fails and LFS is enabled
+  handle EINTR
+
+- sendfile linux
+
+  handle EINTR
+
+31.10.2004 09:09
+- freebsd
+
+  added missing header in joblist.c
+  fixed test-scripts for zsh
+
+30.10.2004 22:26
+- modules
+
+  added mod_userdir and mod_alias
+  added docs for the new modules
+
+30.10.2004 19:52
+- porting
+
+  added defines for MAP_FAILED for NetBSD 1.3.x
+
+30.10.2004 18:54 - pre-release
+- pipelining
+
+  fixed offset calculations
+
+- ipv6
+
+  IPv6 might be disabled at compile-time
+
+- rewrite
+
+  close mem-leak
+
+- auth
+
+  forgot to reset the global-config handler
+
+- symlink
+
+  add option to disable follow-symlink
+
+- ssi
+
+  added support for exec-cmd
+
+23.10.2004 - 1.3.4
+- max-fds
+
+  set the upper limit of fds only if server.max-fds is set
+
+23.10.2004 13:49
+- accesslog
+
+  use a shell to handle accesslog-pipes
+
+22.10.2004 17:00
+- accesslog
+
+  added logging of user-supplied data via %{...}o and
+  X-LIGHTTPD-* header
+
+22.10.2004 14:57 - pre-release
+- openwrt
+
+  fixed configure-checks and Makefile.am's to build cleanly with a
+  cross-compiler
+
+  builds cleanly for openwrt
+
+22.10.2004 13:03
+- out-of-fd
+
+  improved the out-of-fd handler
+
+- cgi, fastcgi
+
+  set SERVER_NAME to server.name or the value submitted by Host:
+
+- error-handler
+
+  only set old status code if it wasn't set by a handler
+
+21.10.2004 22:36 - pre-release
+- fastcgi
+
+  don't crash on out-of-fd condition
+
+- out-of-fd
+
+  try handle the out-of-fd condition in a sane way
+
+21.10.2004 15:03
+- mod_auth
+
+  seperated auth.backend.*.userfile for plain, htpasswd and htdigest
+
+  added 'digest-auth' against 'plain-backend'
+
+  added auth.debug for debugging
+
+16.10.2004 10:18 - 1.3.3
+- mod_simple_vhost, mod_evhost
+
+  conditional-ized
+
+- mod_rrdtool
+
+  maintain the request-counter for each conditional-config (adam)
+
+14.10.2004 11:30
+- accesslogs
+
+  cycle all access-logs
+
+- mod_rewrite
+
+  tell the user to install pcre.h if he wants to use mod_rewrite
+
+10.10.2004 10:11 - pre-release
+- error-handler
+
+  added a error-handler for status 404 (server.error-handler-404)
+
+09.10.2004 16:28 - pre-release
+- cgi
+
+  added support for \n in headers
+
+- mod_auth
+
+  added conditional auth
+
+01.10.2004 09:28
+- plugins
+
+  fixed off by one error in plugin initialization (Mike)
+  related into a segfault on AMD64
+
+30.09.2004 21:44 - 1.3.2
+- file-cache
+
+  disabled the file-cache it was taken the wrong files from the cache
+
+30.09.2004 08:39 - 1.3.1
+- file-cache
+
+  drop a unused file-cache entry after 10 seconds
+  reuse unused entries
+
+- request-parser
+
+  accept IPv6 adresses in Host header
+
+- tests
+
+  modified the scripts to work with zsh (check on Linux, Irix and FreeBSD)
+
+26.09.2004 12:28
+- comparission function
+
+  file-cache has delivering the wrong entry if only the last character of
+  the filename differed and the filesize was the same.
+
+- cgi + cygwin
+
+  cgi need s SYSTEMROOT environment
+
+
+22.09.2004 08:55
+- network
+
+  detect of file has been shrinked while we are sending it out and terminate
+  the connection if would run over the edge
+
+22.09.2004 07:56
+- mod rewrite, fastcgi, ...
+
+  keep REQUEST_URI after rewrite
+
+21.09.2004 22:49
+- fastcgi authorizer
+
+  fixed cleanup code (matt)
+
+21.09.2004 20:08
+- rrdtool
+
+  rrdtool.db-name is now conditional
+
+  fixed check if write() failed (adam)
+
+17.09.2004 17:50 - 1.3.0
+- rewrite
+
+  added url.rewrite-final = ...
+
+17.09.2004 15:55
+- code cleanup
+
+  integrated the fixes from cygwin into the main tree
+
+- kqueue
+
+  init kqueue after daemonizing (broken since 12.09.2004 14:02)
+
+16.09.2004 21:00
+- cygwin + macosx
+
+  finished the cygwin port
+  this port seems to fix the problems on macosx too
+
+12.09.2004 14:02
+- socket handling
+
+  added support to handle more than one server socket
+
+11.09.2004 12:23 - 1.2.8
+- EINTR
+
+  handle EINTR for linux-sendfile
+
+- configfile
+
+  ignore an extra comma at the end of the array declaration
+
+11.09.2004 09:46
+- mod_proxy
+
+  pass remote-addr as X-Forwarded-For to the real server behind the proxy
+
+- code cleanup
+
+  moved all cut'n'paste versions of the inet_ntop cache to inet_ntop_cache.c
+
+- fcgi
+
+  don't overwrite the fd in fcgi_establish connection if connect fails. this
+  results in various problem in other places.
+
+05.09.2004 09:46
+- file-cache
+
+  cache the mimetype
+
+- last-modified
+
+  don't complain if the If-Modified-Since contains a valid comment/option
+  like <timestamp>; length = ...
+
+05.09.2004 09:13
+- expires
+
+  overwrite the Expire if it is set by a previous plugin
+
+- conditional config
+
+  conditional config as disabled in 1.2.7 by accident
+
+04.09.2004 10:02 - 1.2.7
+- mod-proxy
+
+  remove the \0 before the post content
+
+- cgi
+
+  fixed hanging process if cgi-crash terminates to fast (before we read its
+  response)
+
+- extented attributes
+
+  added xattr support, submitted by Ari
+
+29.08.2004 16:00
+- rrdtool
+
+  moved the rrdtool support from mod_status into its own module mod_rrdtool
+
+  rrdtool.binary = "/usr/bin/rrdtool"
+  rrdtool.db-name = "/var/www/lighttpd.rrd"
+
+29.08.2004 11:00 - pre-release
+- timeouts
+
+  server.max-keep-alive-requests = 0 replaces
+    server.use-keep-alive = "disable"
+
+  added
+    server.max-keep-alive-idle
+    server.max-read-idle
+    server.max-write-idle
+
+- docs
+
+  added a entry for each config-value into configuration.txt
+  added simple docs for
+    rewrite
+    redirect
+    compress
+    cgi
+    simple-vhost
+
+29.08.2004 10:05
+- config options
+
+  complain if no configfile is specified
+
+- fastcgi
+
+  removed stupid allocation bug which might cause a problem in really rare
+  cases
+
+26.08.2004 22:06 - 1.2.6
+- optimize
+
+  use array_strcasecmp() in favour of strcasecmp() as it is slightly
+  faster.
+
+  apply the case-insentive conversion also on the last character. (adam)
+
+  sort the checked elements in request.c and filter apply the logic to
+  compare some less fields, if the header is not used.
+
+  improved the config-patch function to use our internal buffer-compare
+  functions instead of strcmp
+
+22.08.2004 16:09 - pre-release
+- cgi
+
+  added missing cleanup code
+
+- fastcgi
+
+  remove double-free
+  added handling of EINTR in some places
+
+- leaks
+
+  fixed some leaks in the new config code
+
+- array_strcasecmp
+
+  fixed alignment in the improved array_strcasecmp function (adam)
+
+20.08.2004 14:46 - pre-release
+- performance
+
+  optimized a few useless strlen() away as we either know the length from
+  buffer->used - 1 or by sizeof(str) - 1 if it is constant.
+
+  optimized the 'find the \r\n\r\n' function.
+
+  improved the array_strcasecmp() based on another idea from (ralf)
+
+- accesslog
+
+  enabled the strftime cache again
+
+15.08.2004 23:41
+- accesslog
+
+  added apache-like CustomLog handling in accesslog.format
+
+  accesslog.format = "..."
+
+15.08.2004 21:08
+- test-cases
+
+  remove testdir
+
+- configfiles
+
+  handle escaping of " in strings properly
+
+13.08.2004 12:07
+- array
+
+  improved inner-loop of array_strcasecmp() (ralf)
+
+11.08.2004 14:14
+- fcgi socket
+
+  use SUN_LEN if available
+
+- keep-alive
+
+  disable keep-alive on request
+
+  server.use-keep-alive = "disable"
+
+10.08.2004 15:59 - 1.2.5
+- conditional config
+
+  mod_fastcgi
+  mod_rewrite
+  mod_redirect
+  mod_access
+  mod_compress
+  mod_accesslog
+
+  are ported
+
+10.08.2004 13:05
+- pipelining
+
+  fixed very stupid pipelining bug
+
+09.08.2004 22:07 - pre-release
+- conditional config
+
+  first code for conditional config
+
+09.08.2004 14:21
+- fcgi
+
+  fixed access to free()'d memory (doesn't create any harm)
+
+- isdigit, warings
+
+  signed -> unsigned for 2 more isdigit() calls (adam)
+  removed some unused var's if pcre is not available (adam)
+
+08.08.2004 20:57 - pre-release
+- debian
+
+  added a chmod to /var/log/lighttpd/ (allan)
+
+08.08.2004 12:05
+- kqueue
+
+  use EV_SET() instead of setting the ev-struct by hand (adam)
+
+- fcgi
+
+  fixed the EINPROGRESS handling to use getsockopt (er)
+  fixed a leak of server is disabled (er)
+
+- solaris 10 port-api
+
+  added a skeleton for the sol10 port api
+
+06.08.2004 10:18
+- mod_ssi
+
+  fix DATE_LOCAL so it displays the correct time zone (Jeremy Hinegardner)
+
+04.08.2004 11:43
+- openbsd fixes
+
+  dropped usage of MAX() in buffer.c
+  added prober includes for md5.h if openssl is enabled (brad)
+
+- memory usage
+
+  documented the way how lighttpd caches memory blocks
+  reset the buffers after they have been written by the network-layer
+
+- kqueue
+
+  modify fd-bitmask only if kevent succeeded (adam)
+
+
+03.08.2004 15:09
+- mod_compress
+
+  compress even if you have no cachedir set
+
+03.08.2004 13:26 - pre-release
+- Makefile
+
+  fixed dependencies for parallel build in mod_ssi_expr.c
+
+- combo patch
+
+  * Tinker with kqueue().  Add a reset method so that the kqueue file
+    descriptor can be re-enabled after a fork().  Emulate the devpoll driver
+    in that adds and deletes are sent to the notification mechanism im-
+    mediately, which should cut down on phantom events.  Use
+    ev->kq_results as a sliding window.
+
+  * Change F_SETFD calls to use the preferred FD_CLOEXEC instead of 1.
+
+  * Remove unnecessary fdevent fcntl handlers.  It appears that the only
+    driver that needs one is Linux RT signals.
+
+  * Quiet compiler warning about unused parameter.
+
+  * Set the close-on-exec flag for the /dev/poll and epoll_create() file
+    descriptors.
+
+  * Return failure if /dev/poll could not be opened instead of logging
+    and continuing.
+
+  * Detect EAGAIN after writev() failures.  FreeBSD sendfile() doesn't need
+    protection, as the man page says:
+
+     When using a socket marked for non-blocking I/O, sendfile() may send
+     fewer bytes than requested.  In this case, the number of bytes success-
+     fully written is returned in *sbytes (if specified), and the error
+     EAGAIN is returned.
+
+  (adam, georg, matt)
+
+
+02.08.2004 18:08
+- mod_ssi
+
+  check for pcre before compiling the module
+
+- fdevents
+
+  dropped fdevent_fcntl added by the last patch (adam)
+  kqueue: events == FDEVENT_IN -> events & FDEVENT_IN (adam)
+
+31.07.2004 22:07 - 1.2.4
+- fdevents
+
+  * Test at configure time for kqueue() and <sys/event.h>
+  * Remove various hard-coded constants from event handlers
+  * Move maxfds into the event structure, and out of the
+    fdevent_*_init handlers.  Event handlers can use the maxfds
+    member to size arrays.
+  * Various event structure renames to discourage clashes
+  * Remove extra (ignored) call to fdevent_event_next_fdndx() in
+    the main server loop.
+  * Wrestle with kqueue().  The implementation has to deal with
+    phantom events (for fds which have been deleted/closed), similar
+    to the Linux RT signals code.  Like the RT code, it maintains a
+    bitmask of active fds.  After a successful call to kevent(), the
+    code will compress/overwrite dead events.  The other annoyance is
+    that the handler must track the event filter for each fd, even
+    though you cannot support both read and write filters for the same
+    fd in one kqueue.  The handler maintains a separate bitmask for fd
+    filters (1 == EVFILT_IN, 0 == EVFILT_OUT).
+  (adam)
+
+- server side includes
+
+  added native server-side includes based on the docs from apache:
+  http://httpd.apache.org/docs/mod/mod_include.html
+
+  not supported are:
+  - exec
+  - nested virtual
+  - config.errmsg
+  - echo.encoding
+
+24.07.2004
+- fdevents
+
+  added a bitset to figure out if we received a event for an unregistered fd
+  in rt-signal (adam)
+
+- kqueue
+
+  added kqueue support (Matt Levine)
+
+13.07.2004 08:58
+- configfile
+
+  parse keys correctly that contain a digit (Geoff Adams)
+
+- fcgi
+
+  fixed large post uploads (Geoff Adams)
+  fixed uri if docroot is set (Geoff Adams)
+
+03.07.2004 22:50 - 1.2.3
+- index-files
+
+  rewrite uri.path to the index-file instead of keeping it at .../
+  this fixes index-file handling in FastCGI/CGI docroot is used
+
+- close-on-exec
+
+  enable close-on-exec handling to simplify FD handling in CGI code
+
+- cgi
+
+  keep error-log-fd open to catch the error handling for execve()
+
+  report error if cgi-exec file doesn't exist
+
+- proxy
+
+  pass page-content on error to the user (E.R.)
+  code cleanup (E.R.)
+
+- ssi
+
+  first skeleton of a plugin for ServerSideIncludes
+
+- security
+
+  limit the headerlength again to 64k max
+
+03.07.2004 14:23
+- configure
+
+  fixed compile-check for libpcre if pcre-config doesn't point to /usr/lib
+
+02.07.2004 18:17
+- buffers
+
+  always allocate a multiply of 64bytes. this should reduce the number of
+  realloc()s and still doesn't has a too high overhead.
+
+02.07.2004 11:07
+- fds
+
+  connect stdin, stdout and stderr to /dev/null instead of just closing it
+  use dup2() instead of dup()
+
+- accesslog
+
+  if accesslog.filename starts with a | spawn a process which will get data
+  in one chunk once in a while
+
+01.07.2004 11:00
+- sample config
+
+  added text/css and text/javascript mimetypes
+
+28.06.2004 12:18
+- proxy module
+
+  added a proxy module (based on the fastcgi module) and added some
+  documentation
+
+25.06.2004 21:41
+- last-modified handling
+
+  replaced %Z by GMT. otherwise the last-modified check will most often fail.
+
+24.06.2004 20:20
+- relax http-parser
+
+  don't reply 400 in case of an empty header-field, just ignore it
+
+23.06.2004 22:10
+- file-cache
+
+  don't cache mmap() for files larger than 64k as we run out of RAM otherwise
+  too fast (check with some 200mb files)
+
+- 64bit fixes
+
+  fixed buffer_equal on sparc64
+
+15.06.2004 19:09 - 1.2.2
+- mmap cache
+
+  fixed mmap-caching in network_write.c and network_writev.c after a direct
+  hint by E.Rodichev
+
+- sendfile + linux
+
+  check at config-time if sendfile() works on Linux
+
+11.06.2004 15:09
+- fcgi + unix sockets
+
+  added support for unix domain sockets (spawn-fcgi 1.2.0 required)
+
+10.06.2004 11:49
+- configure
+
+  use pcre-config to determine the position of the pcre headers
+
+05.06.2004 22:06
+- filehandle-cache
+
+  remove mmap-segment if filecache gets invalidated
+
+30.05.2004 14:13 - lighttpd 1.2.1
+- response headers
+
+  request headers that appear twice are grouped together like expected by
+  the CGI spec (concat with a ", ")
+  response headers behaved the same way but are not grouped anymore. They
+  stay seperated. Actually they are concated by \r\n<key>: <value> which is
+  the same in the end.
+
+- file uploads
+
+  the handling of longer post requests is fixed now.
+
+28.05.2004 09:13
+- cgi
+
+  added support for direct calls to cgi-binary
+
+22.05.2004 21:58
+- pipeling
+
+  the code cleanup is finished successfully. Now all cases of pipelining are
+  handle the right way. POST pipelining was still not working up to now.
+
+22.05.2004 12:55
+- code cleanup
+
+  use the well-tested code from the write-queue as the base for the
+  read-queues and simplify the pipeline handling alot that way.
+
+20.05.2004 15:08
+- network backends
+
+  enabled sendfile support again (__FreeBSD__ instead of __freebsd__)
+
+  added a mmap cache as part of the filedescriptor cache
+
+  added AIX specific send_file() support (untested)
+
+20.05.2004 10:40
+- segfaults
+
+  fixed some minor segfaults on startup when no config file is used.
+
+17.05.2004 10:58 - lighttpd 1.2.0
+- documentation
+
+  reformated the documentation the doc/ directory
+
+15.05.2004 14:45
+- localizer
+
+  fixed build of localizer extension
+
+15.05.2004 12:35
+- POST requests
+
+  there is no need to die if we spot a simple POST request on a static file
+
+- pipelining
+
+  fixed HTTP/1.1 pipelining which caused the problems with opera
+
+- array handling
+
+  how did that bug survive such a long time ? a wrong compare function was
+  used in one case, but not the other.
+
+15.05.2004 03:20
+- secure and fast downloads
+
+  added a module which allows secure and fast downloading of files:
+  1. the application (.php, ...) controls the access to the files
+  2. the webserver is handling the transfer (and check the app generated
+     tokens)
+
+  the token is based on
+  - a secret
+  - a timestamp
+  - the filename
+  this means even if the token is is distributed by the user it will get
+  invalid after a given timeout (default 60 seconds)
+
+- errorfiles
+
+  check for errorfiles before using them
+
+- code cleanup
+
+  applied cleanup fixes from adam
+
+14.05.2004 18:47
+- fdevent handling
+
+  added a more generic callback interface to the fdevent structures which
+  simplifies the writing of plugins. this might destabilize lighttpd for a
+  while
+
+- cgi
+
+  fixed header parsing of the header is sent in chunks and the terminator is
+  sent in a single chunk
+
+- EINTR
+
+  fixed some occurences of EINTR which read()
+
+03.05.2004 23:55
+- portability
+
+  E.R.:
+  * portability fixes for Solaris 2.5
+
+02.05.2004 10:15
+- Expect: Handling
+
+  added incomplete support for Expect: 100-continue (RFC 2616 8.2.3) by
+  sending always 417 for every Expect-request (see 14.20)
+
+  we have been blamed for not supporting it:
+  http://lists.w3.org/Archives/Public/ietf-http-wg/2004JanMar/0059.html
+
+29.04.2004 23:07 - 1.1.9
+- usertracking
+
+  added a very basic usertracking cookie handler
+
+29.04.2004 19:37
+- network-writev
+
+  Adam:
+  * call munmap() on error in write()
+
+- docs
+
+  E.R:
+  * documented 'check-local'
+
+- test-env
+
+  made the shell scripts more portable (checked with zsh, bash and ksh)
+
+  fixed compilation on NetBSD
+
+28.04.2004 22:22
+- FastCGI
+
+  E.Rodichev:
+  * added "Authorizer" mode for FastCGI
+
+27.04.2004 18:08
+- ssl
+
+  Alexey Slynko:
+  * handle SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE in SSL_write the
+    right way.
+
+- FastCGI
+
+  add 'check-local' instead of the implicit 'if-docroot-is-set' handling
+  implemented at 24.04.2004 14:34
+
+  E.Rodichev:
+  * remove useless extra-/ in before uri.path
+  * add 'prefix' notation for FastCGI processes
+
+26.04.2004 16:52
+- code cleanup
+
+  patches from Alexey Slynko:
+  * remove the pidfile if lighttpd terminates the normal way (if not in chroot)
+  * init SSL before getting daemonized
+
+25.04.2004 19.15
+- mem-leak
+
+  fixed mem-leak on broken HTTP-headers
+
+- FastCGI
+
+  patches from E.Rodichev:
+
+  1. CONTENT_LENGTH
+  "If no data are attached, then this metavariable is either NULL or not
+  defined".
+
+  2. QUERY_STRING
+  If the Script-URI does not include a query component, the QUERY_STRING
+  metavariable MUST be defined as an empty string ("").
+
+  3. Doubling of REMOTE_ADDR removed.
+
+  patches from adam:
+  * fixed bug in the sizeof() patches from yesterday.
+  * some more *_long to *_off_t
+
+24.04.2004 14:34
+- FastCGI
+
+  don't check for localfile if 'docroot' for a FastCGI host is specified.
+
+24.04.2004 12:13
+- POST
+
+  fixed POST request handling
+
+- chunk-encoding
+
+  the generated HEX strings where broken since the 1.1.8
+  (this effected all HTTP/1.1 requests without Content-Length like FastCGI-PHP)
+
+- code cleanup
+
+  patches from adam:
+  * malloc + memset -> calloc
+  * sizeof(int) -> sizeof(<variable>)
+  * assign fd_set instead of memcpy()
+  * init fd -> connection fd pointers to -1
+
+16.04.2004 08:48 - 1.1.8
+- code cleanup
+
+  don't reuse buffer > 64k (see settings.h)
+
+  added server.max-request-size to limit the maximum request-body size
+  (in kBytes)
+
+  don't accept HTTP-request headers larger then 32kBytes (see settings.h)
+
+  minor speed improvements in the request-parser
+
+  More cleanup patches from adam:
+
+  * change pre-ANSI C/valid C++ syntax for function declarations/definitions
+    from using () to (void).  Ex: int foo(); --> int foo(void);
+  * use static linkage as much as possible, to limit possible symbol
+    collisions
+  * whack more unneeded variables
+  * try and prevent any errno clobbering by storing the old errno value before
+    any subsequent system calls, and restoring before function exit.
+  * change printf syntax for unsigned variables from %d to %u
+
+15.04.2004 18:41
+- code cleanup
+
+  handle all int != size_t cases in fcgi.c correctly
+
+  check headerfields to have a value
+
+  handle both EINVAL cases of writev() before the can occur
+
+  limit content-length to SSIZE_MAX
+  disallow negative content-length
+
+  the usage of ltostr() has been reduced to the minimum in favour of
+  buffer_/append|copy)_(long|off_t)
+
+  dropped ultostr() and ultohex() in favour of buffer_*
+
+15.04.2004 16:35
+- portablity
+
+  more patches from adam:
+
+  * remove warnings for unused parameters and variables
+  * remove warnings for mismatched pointer assignments
+  * change "gtime_r" to "gmtime_r"
+
+13.04.2004 20:48
+- test-cases
+
+  made the 'make check' target self-contained
+
+  In our case we have to call the targets in the following order:
+
+  $ ./configure ...
+  $ make
+  $ make install
+  $ make check
+
+  because the path to the plugins is hardcoded in the binary itself
+
+  using
+
+  $ ./configure --prefix=/tmp/lighttpd-1.1.x/
+  ...
+
+  will help if you don't really want to install before testing.
+
+13.04.2004 00:05
+- portability
+
+  adam sent another patchset:
+
+  * Wrap PCRE-specific data member access with an #ifdef
+  * Add const to pointer using return value from dlerror()
+  * Explicitly initialize pointer in the lemon parser to 0,
+    in order to catch missing else { } clause
+  * Use a time_t rather than an int for gmtime() call.  On some
+    systems (including 32- and 64-bit SPARC) time_t is a long.
+
+12.04.2004 17:00 - 1.1.7
+- fastcgi
+
+  strip WS after HTTP-response headers coming from the FastCGI process
+
+  added REMOTE_USER to the Server->FastCGI headers
+  removed HTTP_AUTHORIZATION from the Server->FastCGI headers
+
+12.04.2004 10:24
+- cgi
+
+  if we don't get a partial HTTP-response-header send the content out as soon
+  as the cgi script is finished
+
+12.04.2004 01:23
+- compression
+
+  added bzip2 compression (supported by w3m)
+
+12.04.2004 00:12
+- configfile
+
+  add some usefull error messages if the tokenizer or the parser fail to
+  read the configfile
+
+11.04.2004 22:04
+- configure
+
+  added --with-ldap and --disable-lfs to the configure options
+
+11.04.2004 20:28
+- 64bit offset size
+
+  disable linux-sendfile support for linux 2.4.x for now as it don't
+  support 64bit transfers
+
+  fixed all assignments on the path from the stat() to the Content-Length
+  HTTP-header
+
+- head requests
+  set content-length in HEAD requests
+
+- accesslog
+
+  write accesslog entry on network error
+
+  write the correct amount of byte written to the accesslog
+
+11.04.2004 11:48
+- code cleanup
+
+  moved the config for the cgi-plugin from config.c to the plugin.
+
+  moved some buffers which were only used by a one or two plugin from
+  the server-structure to the plugins
+
+  keeping the plugins independent from the server-core is a 'good thing'
+
+10.04.2004 19:06
+- configfile parser
+
+  removed the leaks from the configfile parser
+
+09.04.2004 23:15 - 1.1.6
+- stricter http-parser
+
+  added line-folding although noone really seems to use it.
+
+09.04.2004 18:42
+- configfile parser
+
+  the hand-written configfile parser has been replaced by a LALR(1) one.
+  'lemon' from the sqlite guys has been used to generate the parser.
+
+- by-host, by-url, by-file, by ...
+
+  $HTTP["url"] =~ "~$" {
+    access.deny = "all"
+  }
+
+  $HTTP["host"] =~ "." {
+    simple-vhost.server-root    = "/home/weigon/wwwroot/servers/"
+    simple-vhost.default-host   = "grisu.home.kneschke.de"
+    simple-vhost.document-root  = "pages"
+  }
+
+  $HTTP["host"] == "incremental.home.kneschke.de" {
+    server.docroot              = "/hasdasd"
+  }
+
+  at least the parser can handle it now. Currently there is no real support
+  for this context-based config-option. But the syntax and the parser are
+  done.
+
+09.04.2004 10:58
+- ssl support
+
+  enable ssl support again
+
+- mmap
+
+  enabled mmap+write again
+
+08.04.2004 12:34
+- stricter http-parser
+
+  based on a thread at
+
+  http://lists.w3.org/Archives/Public/ietf-http-wg/2004JanMar/0050.html
+
+  the HTTP-parser has been adjusted to be more correct when it comes to
+  request-header fieldnames
+
+  the whitespace handling around the ':' has been relaxed as requested
+
+07.04.2004 17:06
+- sigaction
+
+  use sigaction instead of signal if possible
+
+07.04.2004 13:55
+- accesslog
+
+  use localtime-timestamps in accesslogs if struct tm has a tm_gmtoff field
+
+07.04.2004 10:41 - 1.1.5
+- -D_REENTRANT
+
+  solaris + localtime_r() needs it
+
+07.04.2004 02:54
+- mod_auth + ldap
+
+  added a ldap backend to the auth plugin.
+
+06.04.2004 13:37
+- pidfile
+
+  fixed the permissions of the pidfile (Matthijs van der Klip)
+
+- specfile
+
+  merge the RedHat and SuSE specfile with Matthijs
+
+- 64bit file-offsets
+
+  moved the FILE_OFFSET_BITS settings from the config.h the Makefile to enable
+  64bit offsets the right way
+
+06.04.2004 12:32
+- mod_expire
+
+  added an apache compatible mod_expire which adds Expires: headers to the
+  request
+
+  expire.url = ( "/buggy/" => "access 2 hours" )
+
+05.04.2004 22:34
+- solaris devpoll
+
+  forgot to provide the infrastructure to actually enable the devpoll event
+  handler. the same has been done for the freebsd-kqueue handler (which
+  doesn't work yet)
+
+  fixed the devpoll support while testing it on a real solaris box
+
+05.04.2004 09:49
+- debian
+
+  added debian packaging support written by Vincent Wagelaar
+
+- solaris
+
+  Another set of patches for Solaris from Adam
+  * Detect <sys/devpoll.h>
+  * Detect and include <sys/filio.h> for definition of FIONREAD
+  * Detect and link against the library exporting hstrerror
+  * Correct typo in SENDFILE_LIB
+  * Use__sun instead of __solaris__ for detecting operating system.
+    Please see http://predef.sourceforge.net/preos.html for more
+    detail
+  * Explicitly cast arguments to isalpha() and toupper() to unsigned
+    char.  The man page says that the functions support the range of
+    an unsigned char, and EOF.
+  * Include <limits.h> and define UIO_MAXIOV as IOV_MAX for Solaris.
+
+04.04.2004 18:05 - 1.1.4
+- pidfile
+
+  added pidfile writing after deamonizing
+
+04.04.2004 01:05
+- fdevent
+
+  added framework for freebsd_kqueue and solaris_devpoll
+
+  the solaris_devpoll one might event work (untested)
+
+03.04.2004 16:41
+- network
+
+  added framework for filebased chunks
+  - read-write + mmap-write
+  - linux-sendfile
+  - freebsd-sendfile
+  - solaris-sendfilev (untested)
+
+  and memorybased chunks
+  - write
+  - writev
+
+  made TCP_CORK a 'global' flag around the write_chunkqueue-calls
+
+  the writev() support should improve the performance for all non-static
+  pages.
+
+  170 req/s against 158 req/s for the following script if writev() is used
+  instead of write()
+
+  <?php
+
+  for ($i = 0; $i < 1000; $i++) {
+      print $i."<br />\n";
+      flush();
+  }
+
+  ?>
+
+28.03.2004 13:42
+- cleanup
+
+  applied some cleanup patches submitted by Adam:
+  * variables modified in signal handlers should be sig_atomic_t
+  * assert statements should not have side effects
+  * STD{IN,OUT,ERR}_FILENO preferred instead of {0,1,2}
+  * dieing --> dying
+  * SEGFAULT calls abort directly, instead of derefencing a NULL pointer
+
+- mod_accesslog
+
+  modified the accesslog format to be CLF compatible
+  set locale for LC_TIME to C
+
+26.03.2004 16:13
+- path info
+
+  enabled the pathinfo code again
+
+
+25.03.2004 13:30 - 1.1.3
+- portability
+
+  compiles fine now without any patches on IRIX
+
+- hostname detection
+
+  reworked "get the hostname for HTTP/1.0 requests which don't specify a
+  Host: ..." to only query the name in this single case for the server side
+  of the connection
+
+- errorlog handling
+
+  stderr is only used until the errorlog is init'ed
+  if no error-log is specified, syslog() is used
+  if cycling error-log fails, syslog() is used
+
+- accesslog cycling
+
+  don't fall back to stdout anymore
+
+- event-handler
+
+  use poll() as the default event-handler again
+
+24.03.2004 01:37 - 1.1.2a
+- error messages
+
+  added some hints to the failing error-messages
+
+22.03.2004 01:58 - 1.1.2
+- configure
+
+  some protability changes to get the 'inline' working with the MIPS CC
+
+21.03.2004 22:00
+- mod_rewrite, mod_redirect
+
+  reading the config for those two plugins was not working
+
+- fdevents
+
+  changed the compile time setting for the event handling into a run-time
+  setting.
+
+  server.event-handler = "select" # poll, linux-rtsig, linux-sysepoll
+
+  added sys_epoll() for linux 2.6
+
+  select       - all systems
+  poll         - Linux 2.1.23+, all XPG4-UNIX
+  sigio        - linux 2.4.0+
+  sysepoll     - linux 2.5.66+
+
+           1000-4k-nok   1000-100k-nok
+  select       1776.99          296.52
+  poll          678.02          607.28
+  sigio        3754.46         1411.23
+  sysepoll     3817.67         1431.02
+
+21.03.2004 00:10
+- configure script
+
+  rewrote large parts of the lib/header detection of the configure script
+
+20.03.2004 01:39
+- fastcgi
+
+  as the docroot on external hosts might be different than the webserver
+  docroot it can now be specified in the config:
+
+  fastcgi.server            = ( ".php" =>
+				( "grisu" =>
+				  (
+				    "host" => "192.168.2.41",
+				    "docroot" => "/home/jan/servers/",
+				    "port" => 1026
+				  )
+				)
+			      )
+
+  a huge internal cleanup in the config handling made the code more readable.
+  some more warnings and error checking should track most of the config
+  errors for the fastcgi plugin
+
+19.03.2004 12:34
+- external patches
+
+  Matthijs van der Klip submitted three nice patches:
+  - turn off writing in mod_status if status.rrd-reports is set to disable
+  - fix for a debug message
+  - get the hostname for HTTP/1.0 requests which don't specify a Host: ...
+  - rc-script for RedHat
+
+- documentation
+
+  added a documentation section about authentification
+  - doc/authentification.txt
+
+19.03.2004 05:11
+- optimizations
+
+  implemented special versions of
+  - strcasecmp (array_strcasecmp)
+  - isdigit, isalpha, isalnum (light_*)
+
+  added a faster check for a finished header
+
+  after disabling all modules it is still possible to get 20 kreq/s.
+
+15.03.2004 19:45 - 1.1.1
+- localizer server
+
+  added the localizer-server module to the code
+
+- chunked-encoding
+
+  Apple's Safari or HTTP-Handler doesn't handle chunked-extensions defined by
+  RFC 2616 correctly and doesn't ignore them. Disabled the chunked-extension
+  which were just used for debugging purposes.
+
+07.03.2004 12:20
+- optimization
+
+  moved the checks if a plugins support a given function from the dispatcher
+  (plugins_call) to plugins_call_init() to do the check only once.
+
+  equalized the plugins functions to only two types:
+  SERVER_FUNC()
+  CONNECTION_FUNC()
+
+  replaced all handwritten plugin_call-handlers with macros
+
+  made all plugin-functions 'static'
+
+  with all plugins loaded we are at 15kreq/s gain
+  without any plugin loaded at 16kreq/s
+
+  before the change we were at 13kreq/s
+
+06.03.2004 21:13
+- compilation fixes
+
+  fixed some warnings on FreeBSD and NetBSD by adding
+  #include <netinet/in.h>
+
+  ifdef'ed a pcre-entry in base.h
+
+  remove #define _XOPEN_SOURCE from http_auth.c for IRIX
+  crypt() on Linux needs _XOPEN_SOURCE
+
+06.03.2004 19:18 - 1.1.0
+- authentification
+
+  added htpasswd and htdigest backends to work against user-files generated
+  by htpasswd and htdigest.
+
+  for basic auth:
+  - plain
+  - htpasswd (crypt only)
+  - htdigest
+
+  for digest auth:
+  - plain
+  - htdigest
+
+06.03.2004 17:35
+- authentification
+
+  check the method in the authorization header againt the configured method
+
+06.03.2004 14:54
+- hostname parsing
+
+  added a RFC-2396 conforming "Host:" parser
+  added 17 checks for the parser
+
+06.03.2004 10:25
+- configuration
+
+  added a warning for unknown configuration variables.
+
+  dropped the 'specific-for.url' ideas for now as it is not known yet how to
+  implement it the right way
+
+  renamed some config-variables to reflect there actual meaning
+  - server.host -> server.bind
+  - server.virtual-* -> simple-vhost.*
+  - server.userid -> server.username
+  - server.groupid -> server.groupname
+  - server.docroot -> server.document-root
+
+
+05.03.2004 15:36
+- fastcgi
+
+  internals: moved all mod_fastcgi settings from the global struct to the
+    plugin itself
+
+- vhosting
+
+  got a patch for enhanced virtualhosting from christian kruse -> mod_evhost
+
+  moved the virtual hosting config (server.virtual-*) to it's own module
+  called mod_simple_vhost
+
+23.02.2004 10:06
+- configfile
+
+  rearragned the config-file structure again to be able to add settings for
+  a given URL, Host, Filename, ...
+    This change affects some config-options directly (access.deny,
+  url.rewrite, url.redirect, virtual-hosting, ...)
+
+  added 'specific-for.url' for url specific config settings
+
+- digest auth
+
+  FIX: md5-sess type
+
+  seperate the auth-backend stuff
+
+13.02.2004 22:23 - lighttpd 1.0.3
+- content-length + POST
+
+  FIX: If header and content didn't fit into one single packet the rest of
+       the content was not read correctly
+
+13.02.2004 01:07
+- content-length + POST
+
+  the check for content-length on a POST request vanished somehow in one of
+  the previous releases.
+
+- header search
+
+  FIX: the search for header fields was up to now case-sensitive. Now it is
+       like required by the standard case-in-sensitive.
+
+- browser bugs
+
+  w3m 0.2.5 adds an additional \r\n at the end of the POST requests which is
+  handled now
+
+10.02.2004 10:12
+- start script
+
+  took the suse rc-skeleton which states to be LSB compliant and modified it
+  for lighttpd needs
+
+09.02.2004 11:48
+- HEAD requests
+
+  FIX: HEAD requests for static files delived the content from the GET
+       request. (test case is added)
+
+08.02.2004 15:53
+- directory listings
+
+  FIX: the pathname has not encoded at all before it was transfered to the
+       browser. a proper url and html-encoding has been added.
+
+  added modification-time and filesize to the output
+
+  added a basic css for the virtual listings
+
+07.02.2004 22:15 - lighttpd 1.0.2
+- sample configfile
+
+  rearranged the config-file to have all the important options at the top
+
+- docs
+
+  added a mod-rewrite options
+
+- mod_accesslog
+
+  stdout is no longer used a default for the accesslog
+
+- error-messages
+
+  the 404 is now reported in the error-log
+
+07.02.2004 17:30
+- configfile handling
+
+  if a key is used twice like
+
+  url.rewrite = ( "url1" => "url")
+  url.rewrite = ( "url2" => "url")
+
+  you get an error now. You have to write:
+
+  url.rewrite = ( "url1" => "url",
+                  "url2" => "url")
+
+31.01.2004 12:22 - lighttpd 1.0.1
+- log cycling
+
+  added a sighup-handler to the plugin interface and fixed the log-cycling
+  for access-logs
+
+- portability
+
+  disabled the interval-time optimization on IRIX
+
+- documentation
+
+  added a lot of new documentation to README
+
+31.01.2004 10:59
+- status module
+
+  added two new options rrd-dir and rrd-reports:
+
+  rrd-reports = (boolean)  # enables RRD-reports
+  rrd-dir     = (string)   # path for the daily status-files
+
+  fixed the "status-files in /"-bug this way
+
+
+22.01.2004 13:38 - lighttpd 1.0.0
+- simple docroot
+
+  fixed handling of docroots if virtual-host is disabled
+
+27.12.2003 11:12
+- license handling
+
+  added the first interface to license handling.
+
+25.12.2003 23:48
+- protability
+
+  Verified again that the code compiles and runs cleanly on Linux, FreeBSD,
+  NetBSD and IRIX
+
+  compiling with gcc and the option -pedantic works fine
+  compiling with mipspro cc works fine, too
+
+- tests
+
+  added some more tests: 39 tests
+
+25.12.2003 16:01
+- protability
+
+  some compile fixes for FreeBSD have been applied and a new switch has been
+  added to choose between IPv4 and IPv6 on FreeBSD.
+    (cmdline: -6, configfile: server.use-ipv6)
+
+- packaging
+
+  cleaned up the specfile for building RPMs
+
+21.12.2003 01:00
+- authorization
+
+  brought basic and digest auth back to life. this module as the last one
+  which had to be updated after the config-file changes
+
+- test harness framework
+
+  add 3 tests for basic auth
+
+20.12.2003 22:10
+- compression
+
+  added gzip compression (gzip-header + deflate + crc)
+
+- test harness framework
+
+  added a 22 tests to verify the correct behaviour of lighttpd
+
+- request parsing
+
+  GET http://www.yahoo.com/ HTTP/1.0
+
+  is handled now as
+
+  GET / HTTP/1.0
+
+- plugins
+
+  moved FastCGI and CGI handling into modules which can be loaded at run-time
+
+17.12.2003 13:18
+- compression
+
+  the directory structure is now build automaticly
+
+15.12.2003 01:00
+- compression
+
+  added a compression cache to the compression module (mod_compress)
+
+  Vary: Accept-Encoding is set now as it influences to delivered stream of
+  bytes. This is important for caches.
+
+10.12.2003 00:24
+- config files
+
+  a new config-file format is ready for the final release of lighttpd.
+
+  it supports:
+
+  server.docroot   = "string"
+  server.host      = integer
+  server.modules   = ( "string", "string" )
+  server.mimetypes = ( "key" => "value" )
+  server.complex   = ( "key" => ( "string", integer ),
+                       "string",
+		       integer )
+
+  the syntax should look familar to all who worked with Perl or PHP.
+
+  config-file handling has been seperated into a parser and a lexer. Both
+  are currently written by hand and will propably be rewritten into bison +
+  flex if time permits. But that would be a cosmetical change.
+
+05.12.2003 03:07
+- status-page
+
+  improved the status page to display
+  - the current connection-stati
+  - average throughput over 5 seconds
+    (requests/s and output-bound traffic)
+
+  now you can see what is going on in the server
+
+- access-log
+
+  the accesslog is now a module and can be disabled by just removing the
+  plugin from the list of loaded plugins
+
+04.12.2003 16:18
+- chroot-ing
+
+  how-to: using chroot
+
+  - chroot to /home/www/
+  - docroot at /servers/<hostname>/pages/
+  - defaulthost www.example.org
+
+  e.g. (external view)
+  /home/www/servers/www.example.org/pages/index.html
+
+  (in chroot)
+  /servers/www.example.org/pages/index.html
+
+  config:
+
+  chroot  /home/www/
+  userid  wwwrun
+  groupid nogroup
+
+  virtual-server-root /servers/
+  virtual-server-default-host www.example.org
+  virtual-server-docroot /pages/
+
+  The FastCGI process is living outside this chroot definition as it is
+  started seperatly.
+
+01.12.2003 02:06
+- cleanup
+
+  in preparation for the first stable release some internals had to be
+  cleaned up. Basicly it was a cleanup of workflow of the creation of the
+  response-header. All modules can use a clean interface for this purpose
+  now. This is espacially usefull for all modules which have to pass some
+  HTTP-headers to the client.
+
+29.11.2003 22:22
+- modules
+
+  finally moved the modules to shared libraries and cleaned up some code
+  path to become more readable.
+
+  So far we have:
+
+  mod_rewrite
+  mod_redirect
+  mod_access
+  mod_auth
+  mod_cache
+  mod_chat
+  mod_status
+  mod_maps
+
+28.11.2003 18:16
+- redirects
+
+  as lighttpd supports url-rewriting redirection was a few lines of new code.
+
+  redirect ^/wishlist/(.+)    http://jan.kneschke.de/wishlist/$1
+
+  rewrite  ^/wishlist/(.+)    /new/wishlist/$1
+
+28.11.2003 17:00
+- signal stuff
+
+  setitimer is used to send a event every second to call time() only once a
+  second. another system call which has been remove from the main-loop.
+
+  sending HUP to lighttpd will close and re-open the logfiles. this is used
+  for cycling logfiles.
+
+#! /bin/sh
+
+###
+#
+# a simple logfile rotator for lighttpd
+#
+
+DATE=`date +"%Y%m%d-%H%M"`
+LPID=`pidof lighttpd`
+mv access.log access.log.${DATE}
+kill -HUP ${LPID}
+gzip access.log.${DATE}
+
+27.11.2003 01:07
+- native win32 port
+
+  a first attempt for a native win32 has been done. For now mingw is the
+  base for the development as it provides a basic unix-like framework for
+  building native win32 applications.
+
+  the most internal files have been ported and the over all progress is
+  going well. At the end this will just be a prove of concept.
+
+26.11.2003 01:17
+- access denied
+
+  added a access-deny filter to block specific urls like
+
+  access-deny ~
+  access-deny .inc
+
+17.11.2003 01:06
+- bug fixing
+
+  a fstat() on a opened fd which has changed reports wrong the file-info.
+  Using stat() again helps to solve this problem.
+
+  the sig-io version doesn't suffer from this problem.
+
+  the etags are now used for verifing file-cache-entries.
+
+- chat
+
+  enabled the internal login mechanism again
+
+  added support transfering session-infos over MySQL.
+
+15.11.2003 00:19
+- optimizing
+
+  added a buffer_equal_reverse function which is optimized version of strcmp
+  which is going backwards as pathnames are often the same for in the first
+  bytes.
+
+  wrote a one-pass parser for the request-header. The combination of
+  strstr(..., "\r\n") to seperate lines and strchr(..., ':') to seperate
+  keys from values more or less touched every byte twice.
+
+  we are still at 18.000 req/s for 4kb keep-alive requests even with etags
+  and handling all header fields.
+
+14.11.2003 17:26
+- fcgi
+
+  Content-Type wasn't passed correctly to the FastCGI app. HTTP_CONTENT_TYPE
+  was sent instead.
+
+- cache
+
+  provided access to the Session-ID
+
+- error-log
+
+  the timestamp is now written in a human readable form
+
+22.10.2003 00:06
+- fcgi, cgi
+
+  added a special set of array-functions which are optimised for the "insert
+  only once" case.
+
+  this provides access to the headers which are now forwarded to the external
+  interfaces. Before this change only a limited set of request-headers were
+  forwarded.
+
+21.10.2003 11:58
+- modules
+
+  added a new module-hook after the basic-init of the module for handling
+  config-settings and prepare the overall operartion (like building
+  db-connections, compiling regexes, ...)
+
+- cache
+
+  use turckmm-cache 2.4.3 to get some numbers for the php-latency:
+
+  /usr/sbin/ab -n 10000 -c 10 http://alba.home.kneschke.de:1025/index.php
+
+  handling the cache-decision and the cache-hit in php:
+
+    cache-miss: 100% (-> $version = 0)
+
+    plain        : 108.13 req/s
+    turckmm-cache: 218.39 req/s
+
+    cache-hit: 100% (-> $version = 1)
+
+    plain        : 164.45 req/s
+    turckmm-cache: 653.98 req/s
+
+  handling the cache-decision and the cache-hit in the server:
+
+    cache-hit: 100%, but using index.cml
+
+    cml:           4918.84 req/s (no keep-alive)
+    cml:           6901.31 req/s (keep-alive)
+
+    cache-miss: 100%, but using index.cml
+
+    plain        : 108.39 req/s
+    turckmm-cache: 217.84 req/s
+
+  Conclusion:
+  - there is no loss in the cache-miss case through the cml-handling
+  - the cache-hit case can be improved dramaticly with lighttpd-cache
+  - turckmm-cache improves the cache-miss case alot
+
+20.10.2003 00:40
+- cache
+
+  the first 'real-life' test showed dramatic improvements in the req/s
+  handling.
+
+  The basic idea was to move the decision if a php-page can be taken from
+  the cache from the php-code to the webserver.
+
+  See here why this is a good thing:
+
+  the quite common code which works for http://jan.kneschke.de/ is using
+  templates and is quite static, but depends on 4 external files (the
+  menu-structure, the template, the current content, the class-file).
+
+  the index-file is always:
+
+  include_once "jk.inc";
+
+  $v = new view();
+  print $v->get(array(array ("file" => "content.html")));
+
+  It is more or less the same for all pages.
+
+  This basic setup can deliver 100 requests/s.
+
+  The next step has:
+  - application bases caching
+
+  as we know that each pages depends on those 4 files, you can check if they
+  have been modified since the last request and deliver the content from the
+  cache otherwise.
+
+  this increased the throughput to 150 req/s. (cache-hit ratio 100%)
+
+  The next logic step is to move the decision-making process out of the PHP
+  code as PHP is to slow for the cache-hit path:
+
+  a CML (Cache-Markup-Language) has been written which describes the whole
+  decision process which has been written in PHP-code before:
+
+
+output.content-type text/html
+
+output.include _cache.html
+
+trigger.handler index.php
+
+trigger.if  file.mtime("../lib/php/menu.csv") > file.mtime("_cache.html")
+trigger.if  file.mtime("templates/jk.tmpl") > file.mtime("_cache.html")
+trigger.if  file.mtime("content.html") > file.mtime("_cache.html")
+
+  if one of the 'trigger.if' statements is true the 'trigger.handler' is
+  called to generate the pages.
+
+  if none of the them is trigger the files from 'output.include' are sent to
+  the browser with content-type specified in the first line:
+
+  The result was very 'promissing':
+
+  5900 req/s with keep-alive
+  3800 req/s without keep-alive
+
+  (both for a cache-hit ratio of 100%)
+
+  for keep-alive this is factor <b>59</b> against the plain un-cached
+  version and still <b>39</b> againt the php-cache-version which is doing
+  exactly the same.
+
+  Time for party. :)
+
+19.10.2003 - 18:55
+- cache
+
+  the handling of functions has been improved. they are now 'plugable'. just
+  the dlopen() stuff is missing.
+
+  a new datatype has been added: the string
+
+  this makes it possible to evaluate something like:
+
+trigger.if unix.time.now() - file.mtime("head.html") > 30
+trigger.if mysql.query("SELECT count(*) " + \
+                       "  FROM structure AS struc, session AS sess " + \
+		       " WHERE struct.user = sess.user" + \
+		       "   AND sess.id = \"" + mysql.escape("ab\"c") + "\"")
+
+  you see:
+  - string operations (concat)
+  - handing of escape-sequences
+  - functions
+  - comparisions
+
+18.10.2003 - 13:39
+- cvs
+
+  imported everything into the cvs server which makes the whole revision
+  handler a lot easier. The CVS server was up all the time but not used.
+  Importing required 5 minutes of work which included merge the freebsd and
+  the linux tree.
+
+- compilers + platforms
+
+  on a regular various compilers and platform are check to compile with with
+  the current code base:
+
+  platform | os                  | compiler     | state
+  ---------+---------------------+--------------+---------
+  ia32     | Linux 2.4.22        | gcc 2.95.3   | ok
+  ia32     | FreeBSD 5.1-CURRENT | gcc 3.3.1    | ok
+  mips64   | IRIX 6.5            | gcc 3.2.2    | ok
+  misp64   | IRIX 6.5            | MIPSpro 7.41 | ok
+
+  the mipspro compiler revealed some warning which resulted in a nice
+  code-cleanup that made the code more readable.
+
+18.10.2003 - 03:00
+- e-tags and friends
+
+  in preparation for the php-conference at the begin of november in
+  frankfurt/main the server has the support some more caching/proxy tags
+  like:
+  - E-Tag (14.19) [done]
+  - If-Match (14.24)
+  - If-None-Match (14.26) [done]
+  - If-Range (14.27)
+
+  Section (13.3.3) binds them together. [RFC 2616]
+
+  using lxr.kde.org and lxr.mozilla.org revealed that
+  - konqui only uses if-none-match
+  - mozilla uses if-none-match and if-range
+
+  it looks like it isn't that easy to trigger the if-range case.
+
+  As ulf suggested the etag is a hash of file-size, inode-number and mtime.
+
+- fd-caching
+
+  ulf just phoned me ask proposed the free the cache more agressivly in case
+  of fd-shortage. increasing the the fd-limit is the better idea. :)
+
+17.10.2003 12:45
+- chat
+
+  finished the mysql-support for storing the sessions
+
+12.10.2003 20:56
+- valgrind
+
+  used valgrind again to verify that the code a free of mem-leaks and found
+  a 'leak generator' in the chunk-api.
+
+  the last few leaks were just some missing free()'s at the end of the
+  program run which would have been freed anyway.
+
+  at the end valgrind couldn't find any missing free()'s.
+
+11.10.2003 12:09
+- FastCGI
+
+  reduced the number of system calls for FastCGI to WebServer to 2 calls per
+  fd-event. (ioctl() + read())
+
+  this has no direct effect of the performance of the server, but improves
+  the possible througput of the load-balancer.
+
+10.10.2003 21:09
+- FastCGI - load-balancing
+
+  a brown paper bug has been fixed which caused to decreasing throughput if
+  load-balancing was enabled.
+
+
+  benchmarking the req/s with load-balancing shows really nice results:
+
+
+  server   : req/s   comment
+  ---------+--------------------------------------------------
+  ulf      : 764.06  (php)
+  lappi    : 800.06  (php)
+
+  ulf+lappi: 1526.95 (2 * php)
+
+  grisu    : 1265.66 (php + ab + lighttpd)
+
+
+  all      : 1647.72 (3 * php + ab + lighttpd)
+  all(nice): 1904.40 (same as all, but the local php on grisu
+                      has been 'nice -20'd)
+
+
+  if a php is run on the load-balancer it has to get a lower priority than
+  the load-balancer itself as to handle the work of (here) 3 php-servers.
+
+
+10.10.2003 15:11
+- java ?
+
+  http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/common/AJPv13.html
+
+08.10.2003 21:08
+- gigE
+
+  Last week 3 RTL8169S gigE cards arrived and were installed in the
+  test-framework.
+
+  They are very cheap (20 Euros) and are a good start for a low-level
+  benchmark network.
+
+  First result show us:
+
+  48 Mb/s with ab.
+
+  The webserver and the test-server are equipped with a 2000+ AMD CPU. The
+  system load 95%, user load is 3%, the rest is idle on both plattforms.
+
+  After some calculations at gets clear that there are various bottlenecks:
+
+  1. The PCI-Bus (32bit/33Mhz) can only transfer 133Mb/s
+    - 48 Mb/s TCP-Traffic results in 55Mb/s Ethernet-Traffic (verified with
+      slurm) [outgoing]
+    - there is about 10Mb/s incomming traffic at the PCI bus which the
+      requests
+    - the rest of the devices at the PCI bus are eating the last few mb/s
+  2. IRQ-Handling
+    - There are reasons why the RTL8169S cards are so cheap
+      - they can't send jumbo-frames
+      - only 8k/64k buffers which results in a interrupt every 3 packets
+      - they are at least handling checksum offloading for ip, udp and tcp
+
+  In the end there is a need for new hardware to limit the throughput by the
+  Ethernet again.
+  - PCI-X, 64bit-PCI, ...
+  - 'real' gigE-Network cards
+  - ...
+
+
+  BTW: 2.4.22 + the r8139 driver are very flacky and resulted in 3 lock-ups
+  for today.
+
+  In another test the dual-PPro-FreeBSD 5.1-CURRENT machine has been used as
+  server with a gigE interface (re0) at has shown that the CPU is the limit
+  for this combination. The maximum thoughput was 7Mb/s.
+
+  Another small benchmark:
+  $ ab -n 1000 -c 10 http://192.168.2.41:<port>/lighttpd-20030925.tar
+
+  port  | server          | CPU Idle
+  ------+-------­---------+-----------
+  1025  | lighttpd        | 75%
+  1026  | thttpd 2.23b1   | 75%
+  1027  | boa-0.94.14rc17 | 69% *
+  1028  | apache 1.3.x    | 77%
+
+
+  In all 4 cases the thoughput was 8600 kbytes/s.
+
+  * boa had 9 failed transfers.
+
+- FreeBSD
+
+  The problems with FreeBSD 5.0-RELEASE vanished after updating to
+  5.1-CURRENT.
+
+26.09.2003 18:22
+- FreeBSD
+
+  A SMP-machine has been added to the test-farm. It is running FreeBSD
+  5.1-RELEASE and will help to the improve the scalability.
+
+  fixed sendfile() handling.
+
+- FreeBSD problems
+
+  FreeBSD-5.1-RELEASE-SMP
+  2 * Pentium Pro 200 MHz
+  192.168.2.38 (doubleheart)
+  (webserver [lighttpd at port 1025, thttpd at port 1027])
+
+  Linux 2.4.20
+  1 * AMD 2000+
+  192.168.2.10 (grisu)
+  (ab)
+
+  Problem:
+  Connections are reset by the kernel without any application intervention.
+
+  Calling 'ab' (apachebench) at grisu with the following paramters:
+
+  /usr/sbin/ab -n 10000 -c 10 http://192.168.2.38:1025/index.html
+
+  results in the following output:
+
+  ...
+  Time taken for tests:   40.610 seconds
+  Complete requests:      10000
+  Failed requests:        5980
+     (Connect: 0, Length: 5980, Exceptions: 0)
+  ...
+
+
+  This is reproducable and the number of failed requests is always
+  5980 +/- 50 requests. In other words: after 4000 requests tcpdump shows
+  the following output:
+
+  tcpdump shows:
+
+  00:53:48.923029 192.168.2.10.39774 > 192.168.2.38.1025: S [tcp sum ok]
+    1013737315:1013737315(0) win 5840 <mss 1460,sackOK,timestamp 5208461
+    0,nop,wscale0> (DF) (ttl 64, id 7918, len 60)
+0x0000   4500 003c 1eee 4000 4006 964d c0a8 020a        E..<.. at .@..M....
+0x0010   c0a8 0226 9b5e 0401 3c6c 6763 0000 0000        ...&.^..<lgc....
+0x0020   a002 16d0 eeaa 0000 0204 05b4 0402 080a        ................
+0x0030   004f 798d 0000 0000 0103 0300                  .Oy.........
+
+  00:53:48.923330 192.168.2.38.1025 > 192.168.2.10.39774: S [tcp sum ok]
+    1803860672:1803860672(0) ack 1013737316 win 65535 <mss 1460,nop,wscale
+    1,nop,nop,timestamp 4459794 5208461> (DF) (ttl 64, id 6821, len 60)
+0x0000   4500 003c 1aa5 4000 4006 9a96 c0a8 0226        E..<.. at .@......&
+0x0010   c0a8 020a 0401 9b5e 6b84 bac0 3c6c 6764        .......^k...<lgd
+0x0020   a012 ffff d4ce 0000 0204 05b4 0103 0301        ................
+0x0030   0101 080a 0044 0d12 004f 798d                  .....D...Oy.
+
+  00:53:48.924009 192.168.2.10.39774 > 192.168.2.38.1025: . [tcp sum ok] ack 1
+    win 5840 <nop,nop,timestamp 5208461 4459794> (DF)
+    (ttl 64, id 7919, len 52)
+0x0000   4500 0034 1eef 4000 4006 9654 c0a8 020a        E..4.. at .@..T....
+0x0010   c0a8 0226 9b5e 0401 3c6c 6764 6b84 bac1        ...&.^..<lgdk...
+0x0020   8010 16d0 e9c3 0000 0101 080a 004f 798d        .............Oy.
+0x0030   0044 0d12
+
+  00:53:48.924150 192.168.2.10.39774 > 192.168.2.38.1025: P [tcp sum ok]
+    1:29(28) ack 1 win 5840 <nop,nop,timestamp 5208461 4459794> (DF)
+    (ttl 64, id 7920, len 80)
+ 0x0000   4500 0050 1ef0 4000 4006 9637 c0a8 020a        E..P.. at .@..7....
+ 0x0010   c0a8 0226 9b5e 0401 3c6c 6764 6b84 bac1        ...&.^..<lgdk...
+ 0x0020   8018 16d0 27e4 0000 0101 080a 004f 798d        ....'........Oy.
+ 0x0030   0044 0d12 4745 5420 2f69 6e64 6578 2e68        .D..GET./index.h
+ 0x0040   746d 6c20 4854 5450 2f31 2e30 0d0a 0d0a        tml.HTTP/1.0....
+
+  00:53:48.924728 192.168.2.38.1025 > 192.168.2.10.39774: R [tcp sum ok]
+    1803860673:1803860673(0) win 0 (ttl 64, id 6831, len 40)
+0x0000   4500 0028 1aaf 0000 4006 daa0 c0a8 0226        E..(.... at ......&
+0x0010   c0a8 020a 0401 9b5e 6b84 bac1 0000 0000        .......^k.......
+0x0020   5004 0000 64ba 0000
+
+  SYN, SYN+ACK, ACK, DATA, RST
+
+  strace shows that no connection attempt has been reported to the
+  application which is poll()'ing the server socket.
+
+  /* the common loop without any block attempts */
+
+  accept(3, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, [0]) = 5
+  fcntl(5, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
+  read(5, "GET /index.html HTTP/1.0\r\n\r\n", 4095) = 28
+  stat("/home/jan/lighttpd-0.1.0/servers/", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
+  fstat(6, {st_mode=S_IFREG|0644, st_size=4348, ...}) = 0
+  write(5, "HTTP/1.0 200 OK\r\nConnection: clo"..., 235) = 235
+  write(2, "1064875136: (network.c.210) 235 "..., 33) = 33
+  syscall_393(0x6, 0x5, 0, 0, 0x10fc, 0, 0xbfbff2c0, 0) = 0
+  close(5)                                = 0
+
+  /* no futher waiting connections */
+
+  accept(3, 0xbfbff700, [1852702730])     = -1 EAGAIN (Resource temporarily unavailable)
+
+  /* enter the main-loop */
+
+  gettimeofday({1769235301, 1663069807}, NULL) = 0
+  poll([{fd=3, events=POLLIN}], 1, 1000)  = 0
+  gettimeofday({4294967295, 65537}, NULL) = 0
+  poll([{fd=3, events=POLLIN}], 1, 1000)  = 0
+  gettimeofday({4294967295, 65537}, NULL) = 0
+  poll([{fd=3, events=POLLIN}], 1, 1000)  = 0
+  ...
+
+  (strace is broken for accept() and gettimeofday(), syscall_393() is sendfile())
+
+  after entering the main-loop the webserver doesn't receive any new POLLIN
+  events at all for the next 10-15 seconds. Any connection-attempt within
+  the period is, as you can see in the tcpdump output, accepted by the
+  kernel and the received data is thrown away as the kernel sends a RST.
+  After those 10-15 seconds the application gets a POLLIN event for the
+  server socket and the normal data-transfer taken place for the next 4000
+  requests.
+
+  This behaviour is reproducable with thttpd 2.20c and the current lighttpd.
+
+
+26.09.2003 11:42
+- localizer
+
+  ported the localizer-server application into a module for lighttpd. After
+  30 minutes the code was ported and funtional. This modules provides access
+  to the localizer-db by a HTTP-Interface and generates the response as
+  HTML, CSV and plain-text.
+
+  So far, the module-interface looks good and flexible enough.
+
+  7000 req/s is good enough too. Generating the HTML and querying the DB
+  needs some time.
+
+22.09.2003 08:40
+- modules
+
+  introduced a simple module interface which allow to hook into the process
+  of handling the requests. Basicly it allows to move the url-rewriter, the
+  auth-sub-system and the cache out of the main-code. The module-interface
+  will be extended to allow the cgi and the fastcgi sub-processes to be
+  moved into a module.
+
+15.09.2003 09:36
+- error-handling
+
+  fastcgi and cgi connections are now closed correctly if the corresponding
+  client-connection has died.
+
+14.09.2003 10:40
+- cgi
+
+  finally streaming works with CGI, too
+
+  this enable support for cgiirc.sf.net and friends which use streaming as
+  there transport mechanism.
+
+  streaming has been verified with cgiirc-0.5.2.
+
+- fdevents
+
+  there where some reports that sigio didn't work as expected. It just
+  reported no events at all. Looks like a known bug in the glibc on
+  those platforms.
+
+  Using poll() instead solve the problems.
+
+27.08.2003 22:12
+- rewrite
+
+  a pcre based rewrite engine has been integrated
+
+- cgi
+
+  the file-based cgi interface has been replace by two pipes.
+
+23.07.2003 13:29
+- fdevents
+
+  the whole fd-event handling has been reworked and several smaller bugs
+  and design-errors have fixed.
+
+  sigio, poll() and select() are working fine again.
+
+  On IRIX 6.5 SIGIO could be used, but without further testing poll() is used.
+
+- cgi
+  CGI-support is still broken.
+
+21.07.2003 18:46
+- dnotify
+
+  using the F_NOTIFY feautre of the Linux 2.4.x kernel gives anothre nice
+  performance boost as lighttpd can cache the stat()'s the right way, now.
+
+  23009.66 @ 5-4k-k which means +10% against 30.06.2003 14:03
+
+  for 1000-4k-nok the performace nearly doubles: 3730.23 goes up to 6144.39
+
+17.07.2003 13:21
+- FreeBSD
+
+  a small patch (#include <>) to compile lighttpd on FreeBSD again.
+
+08.07.2003 10:48
+- fileinfo-cache
+
+  A reallife test showed that the cache wasn't perfect at all as it made
+  lighttpd crash. This is fixed now.
+
+30.06.2003 17:40
+- lighttpd-bench
+
+  After some problems with other benchmarking tools for webservers the first
+  version of lighttpd-bench has been written.
+
+  It a revealed a nasty strange behaviour which was fixed by increasing the
+  listen-backlog from 5 to 1024.
+
+30.06.2003 14:03
+- fileinfo-cache
+
+  the fileinfo-cache has been relaxed a little bit and there are always 2
+  fstat()'s per file-request now. This isn't that dramatic:
+
+  21800.74 req/s is still a very good result (7-4k-k).
+
+29.06.2003 03:29
+- fileinfo-cache
+
+  a fileinfo cache has been added to reduce the number of system-calls to
+  stat and open a file.
+
+  in the releases before the same file was stat'ed at least 2 times plus a
+  stat on the docroot for each request. Now the stat()'s and the
+  corresponding open() + close() calls are cached and the number of system
+  calls has been reduced to the minimum:
+
+  $ strace -eopen,stat64,read,write,sendfile,accept,shutdown,close \
+    -p `pidof lighttpd`
+
+/* first connection */
+accept(3, {sin_family=AF_INET6, sin6_port=htons(56211),
+  inet_pton(AF_INET6, "::ffff:192.168.2.10", &sin6_addr), sin6_flowinfo=0,
+  sin6_scope_id=0}, [28]) = 5
+accept(3, 0xbffff470, [28])             = -1 EAGAIN
+read(5, "GET /index.html HTTP/1.0\r\nUser-A"..., 4095) = 91
+stat64("/home/weigon/projects/lighttpd/servers/grisu.home.kneschke.de:1025/pages/",
+  {st_mode=S_IFDIR|0755, st_size=3656, ...}) = 0
+stat64("/home/weigon/projects/lighttpd/servers/grisu.home.kneschke.de:1025/pages//index.html",
+  {st_mode=S_IFREG|0644, st_size=4348, ...}) = 0
+open("/home/weigon/projects/lighttpd/servers/grisu.home.kneschke.de:1025/pages//index.html",
+  O_RDONLY) = 6
+write(5, "HTTP/1.0 200 OK\r\nConnection: clo"..., 235) = 235
+sendfile(5, 6, [0], 4348)               = 4348
+shutdown(5, 1 /* send */)               = 0
+close(5)                                = 0
+
+/* second connection */
+accept(3, {sin_family=AF_INET6, sin6_port=htons(56212), inet_pton(AF_INET6,
+  "::ffff:192.168.2.10", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28])
+  = 5
+accept(3, 0xbffff470, [28])             = -1 EAGAIN
+read(5, "GET /index.html HTTP/1.0\r\nUser-A"..., 4095) = 91
+write(5, "HTTP/1.0 200 OK\r\nConnection: clo"..., 235) = 235
+sendfile(5, 6, [0], 4348)               = 4348
+shutdown(5, 1 /* send */)               = 0
+close(5)                                = 0
+
+
+  In the end we have a new speed record:
+
+  (ab -c 8 -n 100000 http://192.168.2.10:1025/index.html with poll())
+  Requests per second:    23435.67 [#/sec] (mean)
+
+  This is a speed increasement of 20-30% against the last internal benchmark.
+
+
+28.06.2003 02:30
+- caching framework
+
+  the trigger.if directive is working fine. the basic algebra is done ( +,
+  -, *, / and comperations =, <=, >=, >, < and the boolean logic
+  && and || including braces)
+
+  two basic function are available:
+  - unix.time.now
+  - file.mtime(...)
+
+25.06.2003 17:33
+- caching framework
+
+  added output.include, output.content-type for a cache-hit and
+  trigger.handler for a cache-miss.
+
+  the actual decision is made be trigger.if which will be added tomorrow.
+
+15.06.2003 15:33
+- sig-io
+
+  After several other smaller optimisations lighttpd performs better with
+  sig-io under high load:
+
+                  sigio+poll        poll
+  c1000-4k-nok  :    2635.95     1643.39
+  c1000-4k-k    :    7335.68     6788.87
+  c1000-100k-nok:    2353.49     1217.73
+  c1000-100k-k  :    3097.89     2080.73
+
+
+  The user-space part has been optimized a lot. Now it is time to optimized
+  the number of context-switches between user and kernel-mode.
+
+  user    0m0.180s
+  sys     0m1.160s
+
+  a fileinfo-cache is the way to go.
+
+  struct {
+  	 buffer *name;
+	 struct stat st;
+	 int handler;
+	 ...
+
+	 int fd;
+	 void *mmap_p;
+  }
+
+11.06.2003 14:57
+- sig-io is back again
+
+  and it works fine.
+
+  sigio (Realtime-Signals under Linux 2.4.x) sends one signal per event and
+  buffers the rest of the events in a kernel queue. If the is full a SIGIO
+  is sent and poll() gets all events at once for further processing.
+
+
+  Currently the behaviour is a little bit strange:
+  - sig-io + poll() is good for non-keep-alive connections
+  - poll() for keep-alive connections
+
+  c1000-4k-nok: (1000 concurrent request, 4k filesize, no keepalive)
+  poll      : 1521.38
+  sigio+poll: 2124.00
+
+  c1000-4k-k: (1000 concurrent request, 4k filesize, keepalive)
+  poll      : 5882.35
+  sigio+poll: 1239.46
+
+  Very strange for now.
+
+09.06.2003 23:59
+- code-cleanup
+
+  the event-handling code has been rewritten to handle single events better
+  as they are expected from sig-io.
+
+  the fallback-mode of sig-io is broken now, but the normal poll() mode got
+  a 10% increasement in speed. This means the we are back the speed level of
+  20030308-0155 are as fast as zeus again.
+
+  Especially under higher load the current lighttpd performes better.
+
+09.06.2003 11:51
+- sig-io benchmark
+
+                    20030609-1151      20030608-2110       20030308-0155
+-c 10                  sigio       select()        poll()         poll()
+4k                :  7870.92        7937.77       8035.36        9443.76
+4k (keep-alive)   : 14098.41       14590.02      14275.52       17985.61
+100k              :  3366.32        3382.03       3261.15        3722.32
+100k (keep-alive) :  5544.77        5576.00       5573.20        5975.86
+-c 100
+4k                :  6144.77        5821.40       5714.29        6724.95
+4k (keep-alive)   :  9097.53        9213.19       8979.08       10833.06
+100k              :  2549.33        2495.94       2318.95        2607.36
+100k (keep-alive) :  4267.67        4283.94       4094.17        4314.06
+
+
+For -c 100 4k and 100k sig-io gives a small increasment.
+
+09.06.2003 01:00
+- sig-io
+
+  writing large files works now as expected. After removing the limit for
+  the chunks of sendfile the write-buffer-is-empty-again signal is
+  generated. that was missing.
+
+  321 of 10000 connections still have the wrong length. After that is fixed
+  it is time to start some benchmarks again.
+
+08.06.2003 21:10
+- sig-io
+
+  first attempts in getting SIGIO support running which were not very
+  successfull yet.
+
+- poll()/select() benchmark
+
+                        20030608-2110       20030525-1623  20030308-0155
+-c 10               select()        poll()         poll()         poll()
+4k                :  7937.77       8035.36        8166.60        9443.76
+4k (keep-alive)   : 14590.02      14275.52       14781.97       17985.61
+100k              :  3382.03       3261.15        3176.42        3722.32
+100k (keep-alive) :  5576.00       5573.20        5809.56        5975.86
+-c 100
+4k                :  5821.40       5714.29        5669.26        6724.95
+4k (keep-alive)   :  9213.19       8979.08        8418.22       10833.06
+100k              :  2495.94       2318.95        2314.28        2607.36
+100k (keep-alive) :  4283.94       4094.17        4456.92        4314.06
+
+
+  as the overall processing cycle has been rearranged the overall figures
+  changed in minor ranges. c100-4k-k increased, *-100k-k decreased.
+
+  At least it still works.
+
+08.06.2003 12:45
+- select()/poll()
+
+  implementate an abstration layer for fd-events (like eevry other webserver).
+  currently we support poll() and select().
+
+  This should bring us support for Mac OS X and propably Windows.
+
+04.06.2003 18:35
+- configure
+
+  lighttpd can now be build without ssl-support even if openssl is installed
+
+- protability
+
+  - on IRIX IPv6 is supported now out of the box
+  - for FreeBSD some missing haeders have been added
+
+04.06.2003 14:34
+- pipelining
+
+  adding support for pipeling introduces a problem if the request-header
+  was broken. this has been fixed now.
+
+- unneccesary slashes
+
+  when building pathes from different portions of a string (e.g. docroot +
+  virt-server-docroot + request-uri) slashes where added for security and
+  simplicity. This resulted in up to 5 adjacent slashes which caused no harm
+  but looked strange. (fixed)
+
+04.06.2003 09:57
+- start/stop messages
+
+  the error-log contains the start and end-times of the lighttpd process,
+  now.
+
+- configfile
+
+  the config-file parser has been relaxed to accepts tabs instead of spaces.
+
+- better error-handling
+
+  fixed a <a
+  href="http://bugs.php.net/?id=24009">bug in the FastCGI-SAPI of PHP</a>
+
+  if the fastcgi process dies or closes the connection unexpectedly we
+  return 500 now instead of closing the connection to the client.
+
+- Location
+
+  the CGI/1.1-rev-03 specification requires us to send Status 302 if a
+  Location-header is sent by the client and a Status-header is missing.
+
+- PATH_TRANSLATED
+
+  if PHP is compiled without --discard-path PATH_TRANSLATED has to be
+  provided.
+
+27.05.2003 15:54
+- directory listings
+
+  if a directory is requested and the directory doesn't contain a index-file
+  a directory-listing can be displayed. You have to enable directory-listings
+  in the config-file (directory-listings on)
+
+- url-decoding
+
+  up to know urls where not decoded at all (%26 -> . and so on). This has
+  been added. Unicode isn't supported as we use 8-bit chars internally.
+
+26.05.2003 00:44
+- pipelining
+
+  as Sascha required pipelining for his benchmarking tool it has been
+  implemented.
+
+  pipelining allows sending a bunch of requests at once without waiting for
+  the actual responses. This reduces the network-overhead and the
+  round-trip-time.
+
+- non-free()d memory
+
+  dmalloc helped to close some non-free()d memory. For the normal operation
+  this isn't important as only memory chunks which had to be free()d at the
+  end of the live-time of the lighttpd-process were not de-allocated.
+
+- partly-initialized variables
+
+  lighttpd wasn't initializing the main-structure which resulted in strange
+  behaviour in rare circumstances.
+
+
+25.05.2003 16:23
+- benchmarks
+
+  after removing some useless internal copies we are more or less at the old
+  speed levels.
+
+  after adding virtual-hosts 10% of the performance were lost. Using less
+  memcpy() operations might add several other boosts.
+
+  I've just checked how lighttpd compares to Zeus.
+
+                    lighttpd (current)       (old)
+-c 10                 20030525-1623  20030308-0155     Zeus 4_2
+4k                :         8166.60        9443.76      7278.55
+4k (keep-alive)   :        14781.97       17985.61     16496.21
+100k              :         3176.42        3722.32      3156.37
+100k (keep-alive) :         5809.56        5975.86      5460.30
+-c 100
+4k                :         5669.26        6724.95      5134.26
+4k (keep-alive)   :         8418.22       10833.06      8010.25
+100k              :         2314.28        2607.36      2688.32
+100k (keep-alive) :         4456.92        4314.06      4240.70
+
+23.05.2003 14:38
+- cgi-variables
+
+  HTTP_HOST was missing for the cgi-module while the fcgi-module passed it
+  through to the handler. Fixed that.
+
+- fcgi-errors
+
+  the connection to the fcgi was dropped and poll() reported an error, the
+  error wasn't reported to the client the right way.
+
+22.05.2003 23:02
+- authorization
+
+  the first password-storage has been added:
+
+  [auth]
+  backend plan
+  plain-userfile <filename>
+
+  require   /download/ user=jan|user=anom
+  http-auth /download/ "download archiv" digest
+
+  groups are prepared but not implemented. basic and digest are working fine.
+
+20.05.2003 17:53
+- authentification
+
+  The auth-methods from RFC 2617 have been added.
+  - auth basic
+  - auth digest
+
+  The only source for accounts is currently only the config-file.
+
+  auth-digest needs the plain-text passwort. Are there any source which
+  provide a plain-text password ?
+
+12.05.2003 14:33
+- virtual hosts
+
+  added very basic virtual-host support
+
+  virtual-server-root /home/weigon/projects/lighttpd/servers/
+  virtual-server-default-host grisu.home.kneschke.de:1025
+  virtual-server-docroot /pages/
+
+  docroot is
+
+  - if http-host exists
+    <virtual-server-root> + <http-host> + <virtual-server-docroot>
+
+  - otherwise
+    <virtual-server-root> + <virtual-server-default-host> +
+    <virtual-server-docroot>
+
+  - if even virtual-server-default-host does not exist, 500 is sent
+
+
+12.05.2003 13:02
+- code cleanup
+
+  After two month of development it was time clean-up the internal
+  structures. It looks like every went fine as lighttpd works es expected
+  like before.
+
+- deflate
+  the on-the-fly compression has been verified to work fine with opera,
+  konqui, mozilla and the IE.
+
+12.05.2003 02:10
+- on-the-fly compression: deflate
+
+  Why the hell are the defining a "deflate" encoding in the form of
+
+  _deflate_ The "zlib" format defined in RFC 1950 [31] in combination
+  with the "deflate" compression mechanism described in RFC 1951 [29].
+  (RFC 2616)
+
+  and noone implements it that way ? Konqui and Mozilla expect a plain
+  deflate() package without the zlib-header.
+
+  Konqui is using "inflate2(..., -MAX_WBITS); " which is noted in the zlib
+  source as
+
+  /* handle undocumented nowrap option (no zlib header or check) */
+
+  Funny. Very, very funny.
+
+
+  Anyway. We have mimetype-depended compression support now.
+
+11.05.2003 21:56
+- logging
+  re-arranged the logfile structure to write CLF + useragent + referrer.
+
+11.05.2003 10:23
+- POST file-upload
+  added the missing functionality to send more than a single packet to the
+  FCGI-Server (or Client ? ... the PHP).
+
+    This gives us the file-upload thing for eg. PHP and large user-forms
+  (>16kb).
+
+05.05.2003 15:21
+- PATH_INFO
+
+  added support for PATH_INFO. PHP is a little strange and doesn't trust the
+  passed PATH_INFO setting. Works fine now.
+
+30.04.2003 15:25
+- bug-fixing day
+
+  While testing the FastCGI interface with the MSIE Björn Schotte discovered
+  that sometimes the output repeats itself from the start in an endless loop.
+    This bug has been fixed.
+
+  The read-write-fallback for ancient systems seeked the wrong FDs.
+
+  The FastCGI handler is now separting the HTTP-Header from the
+  response-body what results in a cleaner interface. The "header too long
+  for caching" message is gone now.
+
+28.04.2003 18:18
+- chunked transfer-encoding
+
+  The FastCGI part is now using Chunked-Transfer-Encoding if HTTP/1.1 is
+  used and no content-length is specified.
+
+27.04.2003 23:10
+- chunked transfer-encoding
+  added "Transfer-Encoding: chunked" which is currently used in the web-chat
+  for the endless stream. Perhaps it helps some browsers.
+
+    The FastCGI interface will get a the chunked-support too, as it will
+  enable keep-alive even if no content-length is returned from the FastCGI
+  process. We know the size of the chunks and will report it to the browser.
+
+16.04.2003 12:02
+- gigE deatchmatch
+
+  sascha compared the current lighttpd to his premium thttpd in his
+  gigabit-Ethernet-Network.
+
+  <a
+href="http://schumann.cx/gbit_deathmatch.txt">http://schumann.cx/gbit_deathmatch.txt</a>
+
+  small comment:
+  lighttpd provides the same performance (req/s and thoughput), but uses more
+  CPU-Time.
+
+10.04.2003 17:22
+- works on IRIX
+
+  Jörg Behrens provided me login to his SGI Origin and after fixing two small
+  typos it worked fine on IRIX. (#if define HAVE... was missing a 'd' and
+  getopt returns a 'int' and not a 'char')
+
+  IPv6 support is currently disabled for IRIX a gethostbyname2() isn't
+  available.
+
+10.04.2003 15:56
+- another bug-fixing day
+  The upper limit of open connections was enforced and a caused a seg-fault.
+  The current limit is set to 4096 parallel connections.
+
+  As sascha benchmarked lighttpd and his premium thttpd I tried to reproduce
+  his reported results and had to fix 2 flaws in the async-io handling of
+  httpd_load which was used for the testing.
+
+  If sascha starts another benchmark session I'll put a link to it here.
+
+09.04.2003 00:08
+- bug-fixing time
+  Date: and Last-Modified: where sending a timezone != GMT what was invalid.
+  The timestamp itself was correct, just the timezone use the wrong
+  characters.
+
+  the fcgi-code had an buffer-overflow for larger POST-Requests.
+
+  The fcgi-code still has problems with POST-Request larger than 16kb as the
+  the write buffer is full. Currently we don't handle this case except from
+  reporting it in the error-log.
+
+02.04.2003 01:17
+- cgi is back
+
+  The CGI Interface wasn't tested for a longer time. It don't really
+  survived the introduction of the config-file handling and the internal
+  changes that were part of it.
+
+  A small test with
+
+#! /usr/bin/perl
+print "Content-Type: text/html\r\n\r\n";
+print time()."\n";
+0;
+
+  produced 219 req/s.
+
+  Calling PHP via the CGI interface results in 100 req/s. Same script, same
+  parameters for 'ab' and same PHP result in 1400 req/s if we use the
+  FastCGI interface.
+
+  <b>Don't forget</b>: these benchmarks only represent figures for scenarios which
+  are not very realistic. They are just usefull for comparisions of the
+  internals. We don't want to benchmark applications.
+
+01.04.2003 23:04
+- new benchmarks
+
+  This time we wanted to see if  we can get the fastcgi-Interface a little bit
+  faster. We use this small script for the testing the interface.
+
+<?php
+
+ob_start(/*"ob_gzhandler"*/);
+print "12345<br />\n";
+header("Content-Length: ".ob_get_length());
+ob_end_flush();
+
+?>
+
+  It generate a small network load and is the best case for benchmarking the
+  overhead of the call to the fastcgi-php.
+
+  Using the chunk-API instead auf tmp-files increase the req/s vom 1200req/s
+  to 1600 req/s and the IO-load went down as expected. Waiting for the
+  filesystem and creating 1200 files per second required some time. The
+  CGI-Interface is still using tempfiles.
+
+01.04.2003 19:28 (no april fools joke)
+- added SSL support
+  I took -lssl and -lcrypto and added SSLv2/SSLv3/TLS support to lighttpd.
+
+  After some reading I realisized that libcrypto contained some of my code.
+  They have a similar buffer-struct with similar functions and they use the
+  same MD5-code from the RFC. :)
+
+  Adding basic SSL-support was quite esay: replacing all write/read-calls by
+  SSL_write/read, initializing the ssl-context the right way and telling
+  openssl where to get the data from (SSL_set_fd). It fits really well into
+  lighttpd.
+
+- sidenote
+  sooner or later the con->filename handler will vanish in favour of the
+  direct interface to the chunk-API which will simplifiy the design a little
+  bit.
+
+31.03.2003 20:50
+- added a web-chat module
+  1400 lines of C-code are neccesary to add a web-chat to lighttpd.
+
+  Features:
+  - bb-code for text-layouting
+  - auto-highlight for URLs and Email-adresses
+  - unlimited number of channels
+  - max. 32.000 users per channel
+  - fast as it is directly integrated into the web-server
+  - easy to install (as easy as lighttpd)
+  - IRC-like (/msg, /kick, /me, ...)
+  - works with MS IE, Mozilla, Konqueror, ...
+  - uses as little JavaScript as possible to stay compatible with all browsers
+  - flood-protection (2 Levels: ignore and kick)
+  - uses CSS for customized look-and-feel
+
+25.03.2003 00:36
+- finished the config-file support
+  now we have config-sections
+
+  [fastcgi]
+  fastcgi .php 192.168.2.76 1025
+
+  The only this missing is -HUP handling to re-read the config. But that
+  will follow when I'm up again.
+
+20.03.2003 01:04
+- adding config-file support
+  the most boring part of the writing programs after writing documentation.
+  The format is quite simple and good enough for lighttpd.
+
+19.03.2003 03:05
+- more on sendfile support
+  added support for freebsd's version of sendfile().
+
+  Linux:
+  ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
+
+  FreeBSD:
+  int     sendfile(int fd, int s, off_t offset, size_t nbytes,
+                   struct sf_hdtr *hdtr, off_t *sbytes, int flags);
+
+  the first 2 params are swap, the next 2 are the same and the last 3 are
+  set to NULL or 0.
+
+  Solaris 9 is providing a direct interface to the chunk-API with the
+  sendfilev() system call:
+
+  ssize_t sendfilev(int fildes,
+                    const struct sendfilevec *vec, int sfvcnt, size_t *xferred);
+
+  recovering from a failure is a little bit more complex, but it should be
+  fast. I just need a system to test it. Anyone ?
+
+18.03.2003 17:32
+- in the news
+  what a surprise: lighttpd is announced in entwickler.com.
+
+  <a href="http://www.entwickler.com/itr/news/psecom,id,9483,nodeid,82.html">http://www.entwickler.com/itr/news/psecom,id,9483,nodeid,82.html</a>
+
+  this was not planned.
+
+
+- implemented the chunked-API
+  rather writing the content of multi-range'd requests to a temp-file we
+  just register the parts in a chunk-queue.
+
+  chunk 1 [mem]  - part-header
+  chunk 2 [file] - source-file (offset, len)
+  chunk 3 [mem]  - part-header
+  chunk 4 [file] - source-file (offset, len)
+  chunk 5 [mem]  - part-footer
+
+  If everything is prepared, the content-length is calculated and the
+  http-header is generated and prepended to the chunk-queue.
+
+  the handle_write() function which handles the write-process just sends the
+  chunks to the network without only further modifications.
+
+  the chunk-api even simplifies the
+  'my-fastcgi-process-needs-some-time-to-create-the-response-
+  and-sends-the-data-in-chunks' case. Just add the chunk to the queue if it
+  is received.
+
+13.03.2003 10:49
+- another set of real-life benchmarks
+
+  the chairman was benchmarked a little bit. Chairman is full-flegded WCMS.
+  As every CMS it needs some time to generate pages. To speed the page
+  generating the static-parts of the page can be cached internally.
+
+                     without caching   with caching
+apache + mod_php   :            2.50          10.64 req/s
+lighttpd + fcgi-php:            2.50          22.74 req/s
+
+  Looks like lighttpd is the way to go :)
+
+  Please, don't compare these numbers with the other benchmarks:
+  We used a different test-machine which is a little bit under-powered
+  for this test-case.
+
+12.03.2003 13:43
+- another large application works with lighttpd
+
+  <a
+href="http://www.thinkphp.de/content/content2.php?CatID=44&NewsID=95">Chairman</a> from <a href="http://www.thinkphp.de/">thinkphp</a> has been verified to work with lighttpd.
+
+  Three things are worth to note:
+
+  1. ALWAYS use log_error in the php.ini if you use FastCGI
+     otherwise it will put the errormessages directly into fastcgi-socket
+     without any FastCGI Header. This will result in strange errors.
+     (its a PHP bug)
+  2. DOCUMENT_ROOT has been added to the environment variables
+  3. a small bug for sending larger output from a fastcgi client has been
+     fixed.
+
+11.03.2003 11:52
+- added two neccesary features
+  - redirect _dir_ to _dir_/
+  - append index-file to _dir_/ if they exist
+
+11.03.2003 00:13
+- another target
+  after adding some headers lighttpd compiles without any warnings
+  under cygwin on Windows.
+
+  A native windows port will take some time as I have to figure out the
+  changes on the winsock.h to the unix headers.
+
+10.03.2003 11:52
+- added Solaris 8 and 9
+  lighttpd has been confirmed to compile and work on
+
+  - linux
+  - FreeBSD, NetBSD
+  - Solaris 8, 9
+
+  Perhaps I can get lcc to compile it on windows.
+
+10.03.2003 01:30
+- another platform was confirmed
+  lighttpd works on NetBSD
+
+- another webserver benchmark
+  mathopd (http://www.mathopd.org/)
+
+                    Mathopd/1.4
+-c 10
+4k                :  6329.11 [#/sec]
+4k (keep-alive)   : 10235.41 [#/sec]
+100k              :  1168.50 [#/sec]
+100k (keep-alive) :   268.82 [#/sec] (99% idle)
+-c 100
+4k                :    ---- (connections dropped)
+4k (keep-alive)   :    ----
+100k              :    ----
+100k (keep-alive) :    ----
+
+Very good values for small files, but the rest ?
+
+10.03.2003 00:06
+- added more write-handlers
+  1. sendfile (linux only)
+  2. mmap + write
+  3. read + write
+
+  This means that lighttpd runs on some more systems. It has been verified
+  to compile and work on linux 2.4.x and FreeBSD.
+
+
+-c 100
+         sendfile  mmap     read
+4k       6476.68   5698.01  5363.08 [#/sec]
+100k     2312.35    841.54   783.09 [#/sec]
+
+  The mmap() numbers could be better with a fd+mmap-cache. The zero-copy thing
+  is good for our performance.
+
+- tested another small httpd - BOA
+  just to get a better view about the performance of lighttpd i've tested
+  another httpd: Boa/0.94.14rc16 (http://www.boa.org/)
+
+                    Boa/0.94.14rc16
+-c 10
+4k                :         5659.63 [#/sec]
+4k (keep-alive)   :          250.23 [#/sec]
+100k              :         1104.29 [#/sec]
+100k (keep-alive) :         1363.14 [#/sec]
+-c 100
+4k                :         4319.65 [#/sec]
+4k (keep-alive)   :         2490.66 [#/sec]
+100k              :          815.93 [#/sec]
+100k (keep-alive) :         1007.05 [#/sec]
+
+  The results are a little bit strange. Keep-Alive for small files seems to be
+  broken.
+
+  It looks like lighttpd has enough power for now. Time the port and add more
+  features.
+
+09.03.2003 13:26
+- load-balancing works great
+
+  I used the framework from http://framework.netuse.de/ as a
+  real-life example again to test the load-balancer.
+
+  setup:
+  - grisu
+    - AMD athlon XP 2000+
+    - runs lighttpd + ab + a 'nice -15'ed FastCGI-PHP
+    - generates 153 req/s alone
+
+  - laptop
+    - Intel PIII 850
+    - runs a FastCGI-PHP
+    - generates 88 req/s
+
+   using the internal load-balancer of lighttpd which balances the
+   php-requests over grisu and laptop generate:
+     221 req/s
+
+   An apache with mod_php running on grisu gives 117.04 req/s only.
+
+09.03.2003 12:46
+- building the connect connection to the fcgi-php is not non-blocking
+  socket() -> connect() -> fcntl(non-blocking) resulted in some problems as
+  the connect() call blocked sometimes for 1 seconds.
+
+  socket() -> fcntl(non-blocking) -> connect() solves this problem, but
+  addes more overhead. The first connect-attempt seems always to
+  return EINPROGRESS.
+
+08.03.2003 15:06
+- the first 'real-life' PHP test showed 2 bugs in the POST handling.
+  1. the Content-Type header was not forwarded via fastcgi
+  2. the internal content_length handler wasn't reset after the request
+
+  now lighttpd + php work with
+
+  http://framework.netuse.de/
+
+  the basic application gives us 145 req/s
+
+08.03.2003 11:06
+- use diet to 'test' your code
+  diet gives some use full warnings which should be followed. I took the
+  chance and removed the last few fprintf() and sprintf() from the code.
+  now, we don't need stdio.h anymore.
+
+    a staticly linked, stripped lighttpd is 42884 bytes large.
+
+08.03.2003 01:55
+- buffer_strcat() uses strlen() to get the length of the 'to-be-catted-string'
+  if the string is constant or has a known length you can pass that function
+  which gives use buffer_strcat_len() which passes the string length as a
+  parameter.
+
+- using a ramdisk as the base for the tempfiles generated mkstemp() is a
+  very cood idea
+  it reduces the io-load on the system and gives as more cpu-time for
+  load-balancing the php-requests.
+
+- cache the output of strftime(), gmtime() and localtime
+  we generate more then 10.000 req/s which results in using the same
+  timestamp over and over again. It is sufficient to generate the timestamp
+  once a second and give us a bunch of CPU-cycles for sending files.
+
+  the same applies for other timestamps like Last-modified which sends a
+  string version of st.st_mtime. Cache it.
+
+- don't try to overoptimize for code for the sake of clean code
+  the range support require some hack in the first versions like setting the
+  write_offset to the start of the range and keeping the rest of the
+  "code 200" send code as usual. Only a few lines added this first range
+  feature. fast, but a hack. It made things more complicated then neccesary
+  to add multi-range support in this scenario.
+
+  removing the hack doing small clean preprocessing helps to clean up the
+  whole 'write a chunk on the wire' code. At the end we use less code and
+  have a cleaner design.
+
+  Sascha proposed a chunked layer which just takes the chunks (http-header,
+  part-header, part-message, ... and the last boundary) and passes them to
+  the write-to-the-wire-code. This is far more elegant and will perhaps same
+  us from other problems, too. Currently I think that it is not necessary.
+  First we have to fix some protability issues.
+
+Ok, today benches:
+
+                       today      last
+-c 10
+4k                :  9443.76   7739.94    + 22%
+4k (keep-alive)   : 17985.61  13885.03    + 29%
+100k              :  3722.32   3349.97    + 11%
+100k (keep-alive) :  5975.86   4965.49    + 20%
+-c 100
+4k                :  6724.95   5918.56    + 13%
+4k (keep-alive)   : 10833.06   8405.48    + 28%
+100k              :  2607.36   2393.60    +  9%
+100k (keep-alive) :  4314.06   4035.35    +  7%
+
+Top Transfer Rate:
+
+    86365.77 [Kbytes/sec] received
+
+Too much for a GigE-link ?
+
+
+so far:
+
+- use state-engines
+
+  a non-forking webserver like described in
+
+  http://www.kegel.com/c10k.html
+
+- don't use fprintf() for logging.
+  writing one line to log file takes more time that sending responsing the a
+  HTTP-request
+
+- take care of your memory
+
+  typedef struct {
+          char *ptr;
+          size_t used;
+          size_t size;
+  } buffer;
+
+  buffer* buffer_init();
+  void buffer_free(buffer *b);
+  int buffer_prepare_copy(buffer *b, size_t size);
+  int buffer_prepare_append(buffer *b, size_t size);
+  int buffer_strcpy(buffer *b, const char *s);
+  int buffer_strcpy_len(buffer *b, const char *s, int s_len);
+  int buffer_strcat(buffer *b, const char *s);
+  int buffer_strcat_len(buffer *b, const char *s, int s_len);
+
+  buffer_init() is only called once per buffer. If you don't need the
+  buffer, set 'used' to zero and reused it afterward.
+    buffer_strcpy() + buffer_strcat() check if the 'used' + the new strlen()
+  fit in to the 'size' of the buffer. If not the realloc() the buffer.
+    buffer_strcat() uses memcpy(ptr + used - 1, s, s_len + 1); which should
+  be faster than the original strcat().
+
+  Using those buffers keep the memory usage at 2Mb. malloc() and free() are
+  only called at the beginnig of the programm and at the end.
+
+- don't used sprintf() to convert a integer into a string as like
+  sprintf(buf, "%d", l);
+
+  write your own ltostr function. sprintf() is to general for the case and
+  is slow.
+
+
+Speed:
+------
+
+Let's assume that <a
+href="http://www.acme.com/software/thttpd/">thttpd</a> is (one of) the
+fastest webservers out there.
+
+all httpds were started with:
+
+$ ./thttpd -p 1026 -D \
+ -d /home/weigon/projects/localizer/src/lighttpd/docroot/ \
+ -l thttpd.access.log
+
+(lighttpd uses the same parameters).
+
+We used ApacheBench for testing the RPS (requests per second).
+
+$ /usr/sbin/ab -dS -c 10 -n 100000 http://192.168.2.10:80/dummy.out
+
+                  lighttpd  thttpd/2.21b+php  thttpd/2.20c  thttpd/2.23b1
+(concurrency 10)
+4k             :   7739.94           6040.84       5078.20        5888.24 [#/sec]
+4k (keep-alive):  13885.03          10349.82       5034.49        5853.09 [#/sec]
+100k           :   3349.97           1176.29[1]    1188.74        1198.29 [#/sec]
+100k (keep-a.) :   4965.49           2513.38[2]    1100.65        1130.51 [#/sec]
+(concurrency 100)
+4k             :   5918.56           4907.01       4987.53        4886.87 [#/sec]
+4k (keep-alive):   8405.48           6379.99       4938.76        4816.26 [#/sec]
+100k           :   2393.60            972.73        958.27         961.09 [#/sec]
+100k (keep-a.) :   4035.35            893.51[3]     970.21         955.05 [#/sec]
+
+thttpd/2.21b+php has been patched with the keep-alive + php patches from PHP4
+sapi/thttpd/thttpd_patch.
+
+[1] ab reported:
+Failed requests:        1
+   (Connect: 0, Length: 1, Exceptions: 0)
+[2] ab reported:
+Failed requests:        5
+   (Connect: 0, Length: 5, Exceptions: 0)
+[3] ab reported:
+Failed requests:        24
+   (Connect: 0, Length: 24, Exceptions: 0)
+
+Tunning the thttpd:
+-------------------
+- disable symlink checking (chroot() or -nos)
+- log to /dev/shm/logfile, a ramdisk or disable logging
+
+
+$ ./thttpd -p 1026 -D \
+ -d /home/weigon/projects/localizer/src/lighttpd/docroot/ \
+ -l /dev/null
+

Added: lighttpd/tags/1.4.19-5+lenny2/INSTALL
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/INSTALL	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/INSTALL	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,32 @@
+
+============
+Installation
+============
+
+:author: Jan Kneschke
+:Date: $Date: $
+:Revision: $Revision: $
+
+Installation
+------------
+
+Get the source from
+
+http://www.lighttpd.net/download/
+
+unpack it by ::
+
+  $ gzip -cd lighttpd-1.x.x.tar.gz | tar xf -
+
+compile and install it with ::
+
+  $ cd lighttpd-1.x.x
+  $ ./configure
+  $ make
+  $ su -
+  # make install
+  # exit
+
+take look at the configfile in ./doc/lighttpd.conf,
+make your own copy of that file and modify it for your needs.
+

Added: lighttpd/tags/1.4.19-5+lenny2/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,3 @@
+SUBDIRS=src doc tests cygwin openwrt
+
+EXTRA_DIST=lighttpd.spec autogen.sh SConstruct

Added: lighttpd/tags/1.4.19-5+lenny2/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,664 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(srcdir)/distribute.sh.in $(srcdir)/lighttpd.spec.in \
+	$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
+	compile config.guess config.sub depcomp install-sh ltmain.sh \
+	missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = lighttpd.spec distribute.sh
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = src doc tests cygwin openwrt
+EXTRA_DIST = lighttpd.spec autogen.sh SConstruct
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+	      cd $(srcdir) && $(AUTOMAKE) --gnu  \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+	@if test ! -f $@; then \
+	  rm -f stamp-h1; \
+	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+	else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+	cd $(top_srcdir) && $(AUTOHEADER)
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+lighttpd.spec: $(top_builddir)/config.status $(srcdir)/lighttpd.spec.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+distribute.sh: $(top_builddir)/config.status $(srcdir)/distribute.sh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d $(distdir) || mkdir $(distdir)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r $(distdir)
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && cd $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@cd $(distuninstallcheck_dir) \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+	distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+	install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am am--refresh check check-am clean clean-generic \
+	clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+	dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \
+	distclean-generic distclean-hdr distclean-libtool \
+	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-recursive uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/NEWS
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/NEWS	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/NEWS	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,784 @@
+
+====
+NEWS
+====
+
+- 1.4.19 -
+
+  * added support for If-Range: <date> (#1346)
+  * added support for matching $HTTP["scheme"] in configs
+  * fixed initgroups() called after chroot (#1384)
+  * fixed case-sensitive check for Auth-Method (#1456)
+  * execute fcgi app without /bin/sh if used as argument to spawn-fcgi (#1428)
+  * fixed a bug that made /-prefixed extensions being handled also when
+    matching the end of the uri in fcgi,scgi and proxy modules (#1489)
+  * print error if X-LIGHTTPD-send-file cannot be done; reset header
+    Content-Length for send-file. Patches by Stefan Buehler
+  * prevent crash in certain php-fcgi configurations (#841)
+  * add IdleServers and Scoreboard directives in ?auto mode for mod_status (#1507)
+  * open log immediately after daemonizing, fixes SIGPIPEs on startup  (#165)
+  * HTTPS env var should be "on" when using mod_extforward and the X-Forwarded-Proto header is set. (#1499)
+  * generate ETag and Last-Modified headers for mod_ssi based on newest modified include (#1491)
+  * support letterhomes in mod_userdir (#1473)
+  * support chained proxies in mod_extforward (#1528)
+  * fixed bogus "cgi died ?" if we kill the CGI process on shutdown
+  * fixed ECONNRESET handling in network-openssl
+  * fixed handling of EAGAIN in network-linux-sendfile (#657)
+  * reset conditional cache (#1164)
+  * create directories in mod_compress (was broken with alias/userdir) (#1027)
+  * fixed out of range access in fd array (#1562, #372) (CVE-2008-0983)
+  * mod_compress should check if the request is already handled, e.g. by fastcgi (#1565)
+  * remove broken workaround for buggy Opera version with ssl/chunked encoding (#285)
+  * generate etag/last-modified header for on-the-fly-compressed files (#1171)
+  * req-method OPTIONS: do not insert default response if request was denied, do not deny OPTIONS by default (#1324)
+  * fixed memory leak on windows (#1347)
+  * fixed building outside of the src dir (#1349)
+  * fixed including of stdint.h/inttypes.h in etag.c (#1413)
+  * do not add Accept-Ranges header if range-request is disabled (#1449)
+  * log the ip of failed auth tries in error.log (enhancement #1544)
+  * fixed RoundRobin in mod_proxy (#516)
+  * check for symlinks after successful pathinfo matching (#1574)
+  * fixed mod-proxy.t to run with a builddir outside of the src dir
+  * do not suppress content on "307 Temporary Redirect" (#1412)
+  * fixed Content-Length header if response body gets removed in connections.c (#1412, part 2)
+  * do not generate a "Content-Length: 0" header for HEAD requests, added test too
+  * remove compress cache file if compression or write failed (#1150)
+  * fixed body handling of status 300 requests 
+  * spawn-fcgi: only try to connect to unix socket (not tcp) before spawning (#1575)
+  * fix sending source of cgi script instead of 500 error if fork fails (CVE-2008-1111)
+  * fix min-procs handling in mod_scgi.c, just set to max-procs (patch from #623)
+  * fix sending "408 - Timeout" instead of "410 - Gone" for timedout urls in mod_secdownload (#1440)
+  * workaround #1587: require userdir.path to be set to enable mod_userdir (empty string allowed) (CVE-2008-1270)
+  * make configure checks for --with-pcre, --with-zlib and --with-bzip2 failing if the headers aren't found
+  * fixed handling of waitpid() == EINTR mod_ssi on solaris 
+
+- 1.4.18 - 2007-09-09
+
+  * fixed compile error on IRIX 6.5.x on prctl() (#1333)
+  * fixed forwarding a SIGINT and SIGHUP when using max-workers (#902)
+  * fixed FastCGI header overrun in mod_fastcgi (reported by mattias at secweb.se)
+  * fixed hanging redirects with keep-alive due to missing
+    "Content-Length: 0" headers
+  * fixed crashing when using undefined environment variables in the config
+  * fixed compilation of mod_mysql_vhost on irix (#1341)
+
+- 1.4.17 - 2007-08-29
+
+  * added dir-listing.set-footer in mod_dirlisting (#1277)
+  * added sending UID and PID for SIGTERM and SIGINT to the logs
+  * fixed hardcoded font-sizes in mod_dirlisting (#1267)
+  * fixed different ETag length on 32/64 platforms (#1279)
+  * fixed compression of files < 128 bytes by disabling compression (#1241)
+  * fixed mysql server reconnects (#518)
+  * fixed disabled keep-alive for dynamic content with HTTP/1.0 (#1166)
+  * fixed crash on mixed EOL sequences in mod_cgi
+  * fixed key compare (#1287)
+  * fixed invalid char in header values (#1286)
+  * fixed invalid "304 Not Modified" on broken timestamps
+  * fixed endless loop on shrinked files with sendfile() on BSD (#1289)
+  * fixed counter overrun in ?auto in mod_status (#909)
+  * fixed too aggresive caching of nested conditionals (#41)
+  * fixed possible overflow in unix-socket path checks on BSD (#713)
+  * fixed extra Content-Length header on 1xx, 204 and 304 (#1002)
+  * fixed handling of duplicate If-Modified-Since to return 304 
+  * fixed extracting status code from NPH scripts (#1125)
+  * fixed prctl() usage (#1310)
+  * removed config-check if passwd files exist (#1188)
+  * fixed crash when etags are disabled but the client sends one (#1322)
+  * fixed crash when freeing the config in mod_alias
+  * fixed server.error-handler-404 breakage from 1.4.16 (#1270)
+  * fixed entering 404-handler from dynamic content (#948)
+  * added more debug infos for FAM based stat-cache
+  * use more LSB like paths in the sample config (#1242)
+
+- 1.4.16 - 2007-07-25
+
+  * added static-file.etags, etag.use-inode, etag.use-mtime, etag.use-size
+    to customize the generation of ETags for static files. (#1209) 
+    (patch by <Yusufg at gmail.com>)
+  * fixed typecast of NULL on execl() (#1235)
+    (patch by F. Denis)
+  * fixed circumventing url.access-deny by trailing slash (#1230)
+  * fixed crash on duplicate headers with trailing WS (#1232)
+  * fixed accepting more connections then requested (#1216)
+  * fixed mem-leak in mod_auth (reported by Stefan Esser)
+  * fixed crash with md5-sess and cnonce not set in mod_auth (reported by Stefan Esser)
+  * fixed missing check for base64 encoded string in mod_auth and Basic auth
+    (reported by Stefan Esser)
+  * fixed possible crash in Auth-Digest header parser on trailing WS in 
+    mod_auth (reported by Stefan Esser) 
+  * fixed check on stale errno values, which broke handling of broken fastcgi
+    applications. (#1245)
+  * fixed crash on 32bit archs when debug-msgs are printed in mod_scgi, mod_fastcgi 
+    and mod_webdav (#1263)
+
+- 1.4.15 - 2007-04-13
+
+  * fixed broken Set-Cookie headers
+
+- 1.4.14 - 2007-04-13
+
+  * fix crash if gethostbyaddr() failed on redirect [1718]
+  * properly handle 206 responses generated by *cgi scripts. (#755) [1716]
+  * added HTTPS=on to the environment of cgi scripts (#861) [1684]
+  * fix handling of 303 (#1045) [1678]
+  * made the configure check for lua more portable [1677]
+  * added mod_extforward module [1665]
+  * references to the fam stat cache engine should be conditional (#1039) [1664]
+  * fix http 500 errors (colin.stephen/at/o2.com) #1041 [1663]
+  * prevent wrong pidfile unlinking on graceful restart (Chris Webb) [1656]
+  * ignore empty packets from STDERR stream. #998
+  * fix a crash for files with an mtime of 0 reported by cubiq on irc [1519]
+    CVE-2007-1870
+  * allow empty passwords with ldap (Jörg Sonnenberger) [1516]
+  * mod_scgi.c segfault fix #964 [1501]
+  * Added round-robin support to mod_fastcgi [1500]
+  * Handle DragonFlyBSD the same way as Freebsd (Jörg Sonnenberger) [1492,1676]
+  * added now and weeks support to mod_expire. #943
+  * fix cpu hog in certain requests [1473] CVE-2007-1869
+  * fix for handling hostnames with trailing dot [1406]
+  * fixed header-injection via server.tag (#1106)
+  * disabled caching of files without a content-type to solve the
+    aggressive caching of FF
+  * remove trailing white-spaces from HTTP-requests before parsing (#1098)
+  * fixed accesslog.use-syslog in a conditional and the caching of the
+    accesslog for files (fixes #1064)
+  * fixed various crashes at startup on broken accesslog.format strings (#1000)
+  * fixed handling of %% in accesslog.format
+  * fixed conditional dir-listing.exclude (#930)
+  * reduced default PATH_MAX to 255 (#826)
+  * ECONNABORTED is not known on cygwin (#863)
+  * fixed crash on url.redirect and url.rewrite if %0 is used in a global context
+    (#800)
+  * fixed possible crash in debug-message in mod_extforward
+  * fixed compilation of mod_extforward on glibc < 2.3.4
+  * fixed include of empty in the configfiles (#1076)
+  * send SIGUSR1 to fastcgi children before SIGTERM. libfcgi wants SIGUSR1. (#737)
+  * fixed missing AUTH_TYPE entry in the fastcgi environment. (#889)
+  * fixed compilation in network_writev.c on MacOS X 10.3.9 (#903)
+  * added kill-signal as another setting for fastcgi backends. See the wiki for more.
+
+- 1.4.13 - 2006-10-09
+
+  * added initgroups in spawn-fcgi (#871)
+  * added apr1 support htpasswd in mod-auth (#870)
+  * added lighty.stat() to mod_magnet
+  * fixed segfault in splitted CRLF CRLF sequences
+    (introduced in 1.4.12) (#876)
+  * fixed compilation of LOCK support in mod-webdav
+  * fixed fragments in request-URLs (#869)
+  * fixed pkg-config check for lua5.1 on debian
+  * fixed Content-Length = 0 on HEAD requests without
+    a known Content-Length (#119)
+  * fixed mkdir() forcing 0700 (#884)
+  * fixed writev() on FreeBSD 4.x and older (#875)
+  * removed warning about a 404-error-handler
+    returned 404
+  * backported and fixed the buildsystem changes for
+    webdav locks
+  * fixed plugin loading so we can finally load lua
+    extensions in mod_magnet scripts
+  * fixed large uploads if xattr is enabled
+
+- 1.4.12 - 2006-09-23
+
+  * added experimental LOCK support for webdav
+  * added Content-Range support for PUT in webdav
+  * added support for += on empty arrays in config-files
+  * added ssl.cipher-list and ssl.use-sslv2
+  * added $HTTP["querystring"] conditional
+  * added mod_magnet as long-term replacement for mod_cml
+  * added work-around for a Opera Bug with SSL + Chunked-Encoding
+  * changed --print-config to print to stdout instead of stderr
+  * changed no longer use 0600 for new files with webdav. umask is
+    honored. Make sure you have set a proper umask.
+  * fixed upload hangs with SSL
+  * fixed connection drops with SSL (aka bad retry)
+  * fixed path traversal with \ on cygwin
+  * fixed mem-leak in mod_flv_streaming
+  * fixed required trailing newline in configfiles (#142)
+  * fixed quoting the autoconf files (#466)
+  * fixed empty Host: + $HTTP["host"] handling (#458)
+  * fixed handling of If-Modified-Since if ETag is not set
+  * fixed default-shell if SHELL is not set (#441)
+  * fixed appending and assigning of env.* vars
+  * fixed empty FCGI_STDERR packets
+  * fixed conditional server.allow-http-11
+  * fixed handling of follow-symlink + lstat()
+  * fixed SIGHUP handling if max-workers is used
+  * fixed "Software caused connection abort" messages on FreeBSD
+
+- 1.4.11 - 2006-03-09
+
+  * added ability to specify which ip address spawn-fci listens on
+    (agkr/at/pobox.com)
+  * added mod_flv_streaming to streaming Flash Movies efficiently
+  * fixed handling of error codes returned by mod_dav_svn behing a
+    mod_proxy
+  * fixed error-messages in mod_auth and mod_fastcgi
+  * fixed re-enabling overloaded local fastcgi backends
+  * fixed handling of deleted files in linux-sendfile
+  * fixed compilation on BSD and MacOSX
+  * fixed $SERVER["socket"] on a already bound socket
+  * fixed local source retrieval on windows
+    (secunia)
+  * fixed hanging cgi if remote side is dieing while reading
+    from the pipe (sandy/at/meebo.com)
+
+- 1.4.10 - 2006-02-08
+
+  * added docs for mod_dirlisting
+  * added fastcgi.map-extensions to mod_fastcgi
+  * fixed load balancing for mod_fastcgi
+  * fixed extra newline for syslog() in mod_accesslog
+  * fixed user-track cookie for IE in mod_usertrack
+  * fixed crash in digest handling in mod_auth
+  * fixed handling of 301 response-bodies from a mod_proxy backend
+  * fixed loading of base modules if server.modules is not set
+  * fixed broken cgi if mod_scgi is loaded
+
+- 1.4.9 - 2006-01-14
+
+  * added server.core-files option (sandy <sandy/at/meebo.com>)
+  * added docs for mod_status
+  * added mod_evasive to limit the number of connections by IP (<w1zzard/at/techpowerup.com>)
+  * added the power-magnet to mod_cml
+  * added internal statistics to mod_fastcgi
+  * added server.statistics-url to get internal statistics from mod_status
+  * added support for conditional range-requests through If-Range
+  * added static building via scons
+  * fixed 100% cpu loops in mod_cgi ("sandy" <sjen/at/cs.stanford.edu>)
+  * fixed handling for secure-download.timeout (jamis/at/37signals.com)
+  * fixed IE bug in content-charset in the output of mod_dirlisting (sniper/at/php.net)
+  * fixed typos and language in the docs (ryan-2005/at/ryandesign.com)
+  * fixed assertion in mod_cgi on HEAD request is Content-Length (<sandy/at/meebo.com>)
+  * fixed handling if equal but duplicate If-Modified-Since request headers
+  * fixed endless loops in mod_fastcgi if backend is dead
+  * fixed Depth: 1 handling in PROPFIND requests on empty dirs
+  * fixed encoding of UTF8 encoded dirlistings (Jani Taskinen <sniper/at/iki.fi>)
+  * fixed initial bind to a unix-domain socket through server.bind
+  * fixed handling of lowercase filesystems
+  * fixed duplicate request headers cause by mod_setenv
+
+- 1.4.8 - 2005-11-23
+
+  * added auto-reconnect to ldap-server in mod_auth
+    (joerg/at/netbsd.org)
+  * changed auth.ldap-cafile to be optional
+    (joerg/at/netbsd.org)
+  * added strip_request_uri in mod_fastcgi
+  * added more X-* headers to mod_proxy
+    (Ben Grimm <bengrimm/at/gmail.com>)
+  * added 'debug' to simple-vhost to suppress the
+    (mod_simple_vhost.c.157) No such file or directory /servers/ww.lighttpd.net/pages/
+    messages by default
+  * added support to let the server listen on UNIX-socket
+  * changed default stat-cache-engine to 'simple'
+  * removed debian/ dir from source package on request by packager
+  * fixed max-age timestamps in mod_expire
+  * fixed encoding the filenames in PROPFIND in mod_webdav
+  * fixed range request handling in network_writev
+  * fixed retry on connect error in mod_fastcgi
+    (Robert G. Jakabosky <bobby/at/alphatrade.com>)
+  * fixed possible crash in mod_webdav if sqlite3 support
+    is available but not use
+  * fixed fdvent-handler init if server.max-worker was used
+    (Siddharth Vijayakrishnan <mail/at/bluefireworks.net>)
+  * fixed missing cleanup in mysql_vhost
+  * fixed assert() in "connections.c:962:
+      connection_handle_read_state: Assertion 'c->mem->used' failed."
+  * fixed 64bit issue in md5
+  * fixed crash in mod_status
+  * fixed duplicate headers in mod_proxy
+  * fixed Content-Length in HEAD request in mod_proxy
+  * fixed unsigned/signed comparisions
+  * fixed streaming in mod_cgi
+  * fixed possible overflow in password-salt handling
+    (reported on slashdot by james-web/at/and.org)
+  * fixed server-traffic-limit if connection limit is not set
+
+- 1.4.7 - 2005-11-02
+
+  * added FD_CLOEXEC to fds which are kept open for a longer time
+  * added smaller, moving mmaped windows to network_writev
+  * added madvise() to instruct the kernel the do proper read-ahead in network_writev
+  * added support for %I in mod_accesslog
+  * added better compat to Apache for ?auto in mod_status
+  * added support for userdirs without a entry in /etc/passwd in mod_userdir
+    (rob/at/inversepath.com)
+  * added startup-time selectable network-backend
+  * added location of upload-files to config as array
+  * added webdav.log-xml for logging xml-content in mod_webdav
+  * added Cache-Control: max-age to mod_expire
+  * workaround missing client-bug by assuming we received a close-notify on
+    non-keep-alive requests in SSL request
+  * disabled kerberos5 support by default to fix compilation on RHEL
+  * fixed order of library checks to fix compilation on Solaris 9
+  * fixed open file-descriptors on read-error
+  * fixed crash if /var/tmp is not writable
+
+- 1.4.6 - 2005-10-09
+
+  * fixed compilation on MacOS X and cygwin
+  * fixed compressed output if caching was disabled (seen in IE and Opera)
+  * fixed range-request option
+  * fixed mysql-vhost module (was broken in 1.4.5)
+  * fixed false positive in the detection of case-insensitive FS
+
+- 1.4.5 - 2005-10-02
+
+  * added all DeltaV methods as known methods
+  * added buffer-to-disk of request content
+  * added warning for unused variables in conditionals
+  * added global index-generators to mod_indexfile
+  * fixed caching for remote-ip conditionals with keep-alive
+  * fixed redirects with content
+  * fixed infinite loop in exec-cmd in mod_ssi
+  * fixed segfault in config handling for mod_mysql_vhost
+  * fixed segfault on FIFOs/Sockets
+  * fixed possible crash on uninit memory if If-Modified-Since was too long
+  * fixed accounting of mem-chunks
+  * fixed starving of connections on high load
+  * fixed crc errors in mod_compress on 64bit platforms
+  * fixed handling of overlapping fastcgi packets (bug added in 1.4.4)
+  * fixed logic of conditionals if a header was not set
+  * fixed a segfault in mod_rewrite if %1 references were used
+  * fixed handling of empty request URIs in HTTP requests
+
+- 1.4.4 - 2005-09-16
+  * added support for %V in mod_accesslog
+  * added a option for a FastCGI responser to send static files
+  * added md5 and blowfish hashes to htpasswd
+  * fixed METHOD in mod_accesslog of WebDAV methods
+  * fixed check for permission before files in sent
+  * fixed mod-proxy and content for non-POST requests
+  * fixed compilation of mod_cml on MacOS X
+  * fixed SSL errmsg after accept()
+  * fixed memleak in stat-cache
+  * fixed aborted connections if file was moved while in transfer
+  * fixed mem-usage for large FastCGI transfers
+
+- 1.4.3 - 2005-09-01
+
+  * added gracefull shutdown
+  * added server.max-connections
+  * fixed compilation on all BSD platforms
+  * fixed init of kqueue and /dev/poll after daemonize
+  * fixed segfault if select() is event-handler and more than FD_SETSIZE
+    fds are opened
+  * fixed compilation of mod_cml
+  * fixed bin-copy-env in mod_fastcgi
+
+- 1.4.2 - 2005-08-29
+
+  * fixed mimetype detection on uppercase extensions
+  * fixed memleak in stat-cache
+  * fixed infinite loop in mod_cgi
+  * fixed alignment crashes on sparc64 and alpha64
+  * fixed test system for gentoo ebuild
+  * fixed infinite loop in SSL
+  * fixed range request for files > 2Gb
+
+- 1.4.1 - 2005-08-22
+
+  * added a complete Class 1 complient mod_webdav
+  * fixed ssl support (especially on OpenBSD)
+  * fixed response header in body problem in mod_cgi
+  * fixed numbers before body problem
+  * fixed compilation on Solaris and FreeBSD
+  * fixed conditional options in mod_dirlisting
+  * fixed segfault in mod_dirlisting for NFS directories
+  * fixed check for docroot in change-root environments
+
+- 1.4.0 - 2005-08-17
+
+  * added nested conditionals
+  * added remote-ip to $HTTP
+  * added support for stat-cache via FAM
+  * added a read-only WebDAV module
+  * fixed cleanup in mod_proxy and mod_fastcgi
+  * fixed handling of filenames on case-insensitive filesystems
+
+- 1.3.16 - 2005-07-31
+
+  * added Date: headers to dynamic HTTP/1.0 requests
+  * added support for OPTION * HTTP/1.1
+  * added support for accesslog to syslog
+  * added support for PATH_INFO guessing if check-local is disabled in
+      mod_fastcgi
+  * added switch to disable range-requests
+  * added valid-user option for mod_auth (tigger at gentoo.org)
+  * added JavaScript based sorting to mod_status (erik)
+  * added selective TCP_CORK (Christian von Roques)
+  * break up endless loops with Status: 500
+  * fixed endless loops in mod_rewrite
+  * mapped url.rewrite and url.rewrite-final to uri.rewrite-once
+  * fixed compilation for mod_trigger_b4_dl
+  * fixed 'can't reach host' in mod_proxy
+  * error-handler-404 defaults to Status: 200 and static files work now
+
+- 1.3.15 - 2005-07-15
+
+  * added mod_cml
+  * added mod_trigger_b4_dl
+  * added encoding to mod_dirlisting
+  * added ?auto to mod_status
+  * relaxed handling of characters in URIs even more
+  * fixed detection of sendfile() on Linux 2.4.x
+  * fixed comparision of buffers for short strings
+  * server.errorfile-prefix is now conditional
+  * fixed mod_rrdtool to close STDERR
+
+- 1.3.14 - 2005-06-15
+
+  * added SCGI support via mod_scgi
+  * added hash-based and round-robin load balancing to mod_proxy
+  * fixed range requests larger than 2Gb
+  * fixed compilation on Solaris
+  * fixed endless loops in mod_fastcgi, mod_cgi and mod_proxy
+  * fixed handling of URIs for '+' and characters > 127
+
+- 1.3.13 - 2005-03-06
+
+  * added customizable directory listings
+  * fixed compile error on all BSD unixes
+  * fixed PATHINFO handling for FastCGI
+  * fixed handling of remote-close on FreeBSD and OpenSSL
+
+- 1.3.12 - 2005-03-02
+
+  * added ssl.ca-file
+  * added support for \n\n as terminator
+  * rewrote test-framework and added more tests
+  * fixed cgi.assign with empty handler
+  * fixed segfault in debug-code
+  * fixed mod_expire if modification-timestamps are used
+  * fixed segfault on duplication Host-headers
+  * fixed endless loop in mod_fastcgi
+  * fixed handling of dead fastcgi-processes
+
+- 1.3.11 - 2005-02-20
+
+  * added REMOTE_PORT and SERVER_ADDR to CGI-env
+  * relaxed handling of newlines before keep-alive requests
+  * relaxed uri-parser again
+  * fixed PHP_SELF for php
+  * fixed compilation on MacOS X
+  * fixed handling of EPIPE and ECONNRESET
+  * fixed crash in mod_auth if config-options are missing
+  * fixed handling of missing trailing / in mod_userdir
+  * fixed conditional secdownload.secret
+  * fixed REPORT ME error due to failed reconnects in mod_fastcgi
+  * fixed cmdline handling in mod_fastcgi
+
+- 1.3.10 - 2005-02-06
+
+  * added support for full commandline in spawn-fcgi
+  * fixed missing check for IP-address in mod_fastcgi
+  * fixed compile error with openssl in mod_fastcgi
+  * removed a debug-message from network-functions
+
+- 1.3.9 - 2005-02-06
+
+  * added a stricter URI parser
+  * added a check to the CGI spawner if the cgi-handler exists
+  * added documentation for SSL and mod_status
+  * added handling of startup environment to FastCGI
+  * improved performance in FastCGI in buildind the FastCGI header
+  * fixed min-procs and max-procs in FastCGI on PowerPC
+  * fixed crash in setenv.add-response-header
+  * fixed handling of nph-scripts in CGI
+  * fixed accidently sending out physical file in CGI on error
+  * fixed cygwin support
+  * fixed handling of missing files
+  * fixed HEAD requests for dynamic requests
+
+- 1.3.8 - 2005-01-30
+
+  * added traffic shaping by remote host and virtual server
+  * added auto-spawning of FastCGI process on demand
+  * added virtual host based on MySQL
+  * added mod_setenv to add envirnoment and http headers on the fly
+  * added support for syslog in mod_accesslog
+  * improved output of mod_status
+  * improved debug output in request handling
+  * fixed build problems on netbsd 1.4.x and 1.5.x
+  * fixed status.url configuration
+  * fixed handling of != and !~ in configutation
+  * fixed special cases in keep-alive handling
+  * fixed timeout handling in handling POST requests
+  * fixed mode AUTHORIZER in FastCGI
+  * fixed handling if internal redirects if no Host: is supplied
+  * fixed mod_alias + pathinfo
+  * fixed directory indexes and permissions
+  * enabled sending errorlog to syslog again
+
+- 1.3.7 - 2004-12-11
+
+  * added retries for a fastcgi connect if a php-childs
+    dies at startup
+  * update the debian directory
+  * added setgroups() to drop all group-privs
+  * added native port to windows via mingw32
+  * added server.tag = '...'
+  * added support for ${...} in mod_ssi
+  * ported all plugins to conditional support
+  * fixed multipart handling in cgi
+  * fixed kqueue event-handler
+  * fixed wrap-around in mod_status
+  * fixed crash with SSL + FastCGI
+  * fixed detection of SSL headers
+  * fixed handling of dangling SSL_shutdown
+  * fixed detection of keep-alive of Firefox
+
+- 1.3.6 - 2004-11-03
+
+  * added spawn-fcgi to the distribution
+  * added support in fastcgi module to spawn fastcgi
+    processes itself
+  * fixed logfile cycling if external logging is used
+  * fixed connection handling in fastcgi if no chunk
+    encoding is used
+  * fixed internal redirects on directories if a query
+    string is supplied
+  * fixed cgi-module for POST request above 4k
+  * fixed mod_alias and follow-symlink
+
+- 1.3.5 - 2004-10-31
+
+  * added mod_alias
+  * added mod_userdir
+  * added the exec command to the SSI handler
+  * added a switch to disable follow-symlinks
+  * added a switch to disable IPv6 at compile-time
+  * fixed compilation on FreeBSD and NetBSD 1.3.x
+  * fixed segfault in pipelining
+  * fixed a segfault in writev() handler if LFS is used
+
+- 1.3.4 - 2004-10-24
+
+  * added limiter for open files
+  * added logging of user supplied data to accesslogs
+  * added build target for OpenWRT
+  * added plain backend support for auth-digest
+  * fixed handling the external accesslog processes
+  * fixed SERVER_NAME in CGI and FastCGI
+
+- 1.3.3 - 2004-10-16
+
+  * added support for NL terminators in CGI-scripts
+  * added support for conditionals in mod_auth,
+    mod_simple_vhost and mod_evhost
+  * added a error-handler for 404 codes
+  * fixed request counter in the rrdtool module
+  * fixed log-file cycling
+  * fixed seg-fault
+
+- 1.3.2 - 2004-09-30
+
+  * fixed file-cache
+
+- 1.3.1 - 2004-09-30
+
+  * fixed file-cache
+  * fixed parsing of IPv6 adresses
+  * fixed cgi for cygwin
+  * fixed test-suite for FreeBSD and IRIX
+  * fixed handling of shrinked files
+  * fixed handling of REQUEST_URI after rewrite
+
+- 1.3.0 - 2004-09-17
+
+  * added build for MacOS X and Cygwin
+  * added handling of more than one socket
+  * added config-conditions for User-Agent and Referer
+  * added final rewrite-rules
+
+- 1.2.8 - 2004-09-11
+
+  * added a cache for mimetypes
+  * added X-Forwarded-For for mod_proxy
+  * fixed handling of comments in If-Modified-Since
+  * fixed error handling in FastCGI code
+  * fixed expire plugin for second Expire header
+
+- 1.2.7 - 2004-09-04
+
+  * added mod_rrdtool for internal statistics
+  * added xattr support
+  * added user-controlable timeouts
+  * improved documentation for many plugins
+  * fixed POST requests for mod_proxy
+  * fixed rare hang with CGI
+  * fixed seg-fault if no configfile is specified
+  * fixed rare problem in FastCGI header generation
+
+- 1.2.6 - 2004-08-26
+
+  * added apache-like accesslog definition
+  * enabled timestamp cache again
+  * improved performance in the string compare functions
+  * fixed double-free in fastcgi handler
+  * fixed error-handling in cgi handler
+
+- 1.2.5 - 2004-08-10
+
+  * added skeleton for solaris 10 port-API
+  * added compression support even if no cachedir is set
+  * added conditional configoptions
+  * fixed compilation on OpenBSD
+  * fixed kqueue support
+  * fixed pipelining bug
+  * fixed parallel build (triggered by Gentoo)
+  * updated debian postinst
+
+- 1.2.4 - 2004-07-31
+
+  * added kqueue support
+  * added server-side includes (mod_ssi)
+  * fixed large post uploads in fastcgi
+  * fixed rt-signals handling of delayed events
+
+- 1.2.3 - 2004-07-10
+
+  * added a proxy module for Java and friends
+  * added support to pass accesslog through an external programm
+  * added mimetypes for text/css and text/javascript
+  * fixed index-files for FastCGI if webserver is in chroot
+  * fixed error messages of CGI process fails to exec()
+  * fixed detection of pcre on IRIX and FreeBSD
+  * fixed timestamps in Last-Modified checks
+  * fixed 64bit builds
+  * fixed mmap-caching of large files
+  * relaxed the HTTP parser on empty headerfields
+
+- 1.2.2 - 2004-06-15
+
+  * added support for unix domain sockets in FastCGI
+  * fixed mmap caching
+  * fixed compile-time check for linux sendfile()
+  * fixed check for pcre.h on Fedora Core 2
+
+- 1.2.1 - 2004-05-30
+
+  * added experimental support for AIX send_file()
+  * added an mmap cache to the filehandle cache
+  * enabled FreeBSD sendfile support again
+  * added support for calling CGI binaries directly
+  * fixed pipelining for POST requests
+  * fixed some seg-faults if no configfile is used
+
+- 1.2.0 - 2004-05-17
+
+  * added conforming Expect: handling
+  * added a module for secure and fast downloading
+  * rewrote the event handling interface
+  * fixed array handling which might lead to 'missing header'
+  * fixed pipelining support
+  * fixed build of the localizer extension
+  * fixed cgi handling for headers which are flushed to often
+  * fixed compilation on Solaris 2.5
+
+- 1.1.9 - 2004-04-29
+
+  * added AUTHORIZER mode to the FastCGI module
+  * added 'check-local' option to disable local stat() in the FastCGI module
+  * added prefix-notation for FastCGI module
+  * added 'mod_usertrack'
+  * improved CGI/FastCGI spec conformance
+  * more code cleanup
+  * fixed HTTP/1.1 chunk headers
+  * fixed POST handling
+  * fixed SSL network handler
+  * fixed writev() network handler
+
+- 1.1.8 - 2004-04-16
+
+  * code cleanup
+  * limiting the size of the request-body and the request-header
+  * minor speed improvements
+  * tightend the HTTP-Parser again
+
+- 1.1.7 - 2004-04-12
+
+  * added REMOTE_USER to the Server->FastCGI parameters
+  * added bzip2 compression
+  * improved the error-messages from the new configfile parser
+  * fixed accesslog writing for errornous requests
+  * fixed LFS (64bit filesizes) handling
+  * fixed Content-Length for HEAD requests
+  * fixed some memory leaks in the configfile parser
+
+- 1.1.6 - 2004-04-10
+
+  * tightend the HTTP-Parser
+  * rewrote the configfile parser (based on lemon)
+  * fixed openssl support
+  * fixed mmap+write support
+  * use localtime in accesslog if possible
+
+- 1.1.5 - 2004-04-07
+
+  * added ldap backend to the auth
+  * added a mod_expire
+  * added debian packaging structure
+  * merged redhat and suse spec-file
+  * fixed eventhandler for solaris
+  * fixed 64bit fileoffsets
+  * fixed permissions of the PID-file
+
+- 1.1.4 - 2004-04-04
+
+  * added server.pid-file
+  * added support for solaris /dev/poll and solaris sendfilev()
+  * added support for writev()
+  * added PATHINFO support (again)
+  * fixed CLF logfile writing
+
+- 1.1.3 - 2004-03-25
+
+  * set default event-handler to 'poll'
+  * fixed logcycling in chroot()
+  * fixed hostname detection
+  * added syslog() as fallback for error-logging
+
+- 1.1.2 - 2004-03-22
+
+  * added a "docroot" setting for fastcgi processes
+  * performance improvements
+  * improved configure script
+  * rewrote the fastcgi config parser
+  * added a rc-script for RedHat
+  * added epoll() support for Linux 2.6.x
+
+- 1.1.1 - 2004-03-15
+
+  * added localizer module
+  * performance improvements
+  * code cleanup
+
+- 1.1.0 - 2004-03-06
+
+  * changed some configuration keys for better readability
+  * moved the virtual-host code to mod_simple_vhost
+  * added enhanced virtual host plugin from Christian Kruse
+  * added two new auth-backends (htpasswd, htdigest)
+  * fixed and improved authentification
+  * stricter parsing of the Host: field
+  * added a warning for unused configuration keys
+  * improved FastCGI documentation
+
+- 1.0.3 - 2004-02-13
+
+  * a startup script has been added (LSB compliant)
+  * HEAD requests were submitting the content like a GET request
+  * the virtual directory listing got a face-lifting and fixes
+  * request-headers are now handled case-in-sensitive as required
+    by the standard. this fixes POST requests for w3m and some Proxies.
+
+- 1.0.2 - 2004-02-07
+
+  * rearrangement of the default configfile
+  * some updates in the documentation
+  * a entry in the error-log for a 404
+  * stdout is no longer the default for the accesslog

Added: lighttpd/tags/1.4.19-5+lenny2/README
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/README	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/README	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,156 @@
+
+========
+lighttpd
+========
+
+-------------
+a light httpd
+-------------
+
+:author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:25:54 $
+:Revision: $Revision: 1.8 $
+
+:abstract:
+  lighttpd a secure, fast, compliant and very flexible web-server
+  which has been optimized for high-performance environments. It has a very
+  low memory footprint compared to other webservers and takes care of cpu-load.
+  Its advanced feature-set (FastCGI, CGI, Auth, Output-Compression,
+  URL-Rewriting and many more) make lighttpd the perfect webserver-software
+  for every server that is suffering load problems.
+
+the naming
+----------
+
+lighttpd is a __httpd__ which is
+
+- fast as __light__ning and
+- __light__ when it comes to memory consumption and system requirements
+
+Features
+--------
+
+Network
+```````
+
+- IPv4, IPv6
+
+Protocols
+`````````
+
+- HTTP/1.0 (http://www.ietf.org/rfc/rfc1945.txt)
+- HTTP/1.1 (http://www.ietf.org/rfc/rfc2616.txt)
+- HTTPS (provided by openssl)
+- CGI/1.1 (http://CGI-Spec.Golux.Com/)
+- FastCGI (http://www.fastcgi.com/devkit/doc/fcgi-spec.html)
+
+Advanced Features
+`````````````````
+
+- load-balanced FastCGI
+  (one webserver distributes requests to multiple PHP-servers via FastCGI)
+- custom error pages (for Response-Code 400-599)
+- virtual hosts
+- directory listings
+- streaming CGI and FastCGI
+- URL-Rewriting
+- HTTP-Redirection
+- output-compression with transparent caching
+
+FastCGI-Support
+```````````````
+
+- parses the Response-header and completes the HTTP-header accordingly
+- Keep-Alive handling based on Content-Length header
+
+PHP-Support
+```````````
+
+- same speed as or faster than apache + mod_php4
+- handles various PHP bugs in the FastCGI SAPI
+- includes a utility to spawn FastCGI processes (necessary for PHP 4.3.x)
+
+Security features
+`````````````````
+
+- chroot(), set UID, set GID
+- protecting docroot
+
+HTTP/1.1 features
+`````````````````
+
+- Ranges (start-end, start-, -end, multiple ranges)
+- HTTP/1.0 Keep-Alive + HTTP/1.1 persistent Connections
+- methods: GET, HEAD, POST
+- Last-Modified + If-Modified handling
+- sends Content-Length if possible
+- sends Transfer-Encoding: chunk, if Content-Length is not possible
+- sends Content-Type
+- on-the-fly output compression (deflate, gzip)
+- authentication: basic and digest
+  (http://www.ietf.org/rfc/rfc2617.txt)
+
+HTTP/1.1 compliance
+```````````````````
+
+- Sends 206 for Range Requests
+- Sends 304 for If-Modified Requests
+- Sends 400 for missing Host on HTTP/1.1 requests
+- Sends 400 for broken Request-Line
+- Sends 411 for missing Content-Length on POST requests
+- Sends 416 for "out-of-range" on Range: Header
+- Sends 501 for request-method != (GET|POST|HEAD)
+- Sends 505 for protocol != HTTP/1.0 or HTTP/1.1
+- Sends Date: on every requests
+
+Intended Audience
+-----------------
+
+- Ad-Server Front-Ends ("Banner-Schleuder")
+  - delivering small files rapidly
+- php-servers under high load
+  (load-balancing the php-request over multiple PHP-servers)
+
+Works with
+----------
+
+It has been tested to work with
+
+- IE 6.0
+- Mozilla 1.x
+- Konqueror 3.1
+  (for Keep-Alive/Persistent Connections, Accept-Encoding for PHP + gzip)
+- wget
+  (for Resuming)
+- acrobat plugin
+  (for multiple ranges)
+
+
+Works on
+--------
+
+lighttpd has been verified to compile and work on
+
+- Linux
+- FreeBSD
+- NetBSD
+- Solaris 8 + 9
+- SGI IRIX 6.5
+
+missing for HTTP/1.1 compliance
+-------------------------------
+- parsing chunked POST request
+
+-----------------
+Starting lighttpd
+-----------------
+
+As daemon in the background: ::
+
+  $ lighttpd -f <configfile>
+
+or without detaching from the console: ::
+
+  $ lighttpd -D -f <configfile>
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/SConstruct
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/SConstruct	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/SConstruct	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,277 @@
+import os
+import sys
+import re
+import string
+from stat import *
+
+package = 'lighttpd'
+version = '1.4.19'
+
+def checkCHeaders(autoconf, hdrs):
+	p = re.compile('[^A-Z0-9]')
+	for hdr in hdrs:
+		if not hdr:
+			continue
+		_hdr = Split(hdr)
+ 		if autoconf.CheckCHeader(_hdr):
+ 			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_' + p.sub('_', _hdr[-1].upper()) ])
+
+def checkFuncs(autoconf, funcs):
+	p = re.compile('[^A-Z0-9]')
+	for func in funcs:
+		if autoconf.CheckFunc(func):
+			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_' + p.sub('_', func.upper()) ])
+
+def checkTypes(autoconf, types):
+	p = re.compile('[^A-Z0-9]')
+	for type in types:
+		if autoconf.CheckType(type, '#include <sys/types.h>'):
+			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_' + p.sub('_', type.upper()) ])
+
+def checkProgram(env, withname, progname):
+	withname = 'with_' + withname
+	binpath = None
+
+	if env[withname] != 1:
+		binpath = env[withname]
+	else:
+		prog = env.Detect(progname)
+		if prog:
+			binpath = env.WhereIs(prog)
+
+	if binpath:
+		mode = os.stat(binpath)[ST_MODE]
+		if S_ISDIR(mode):
+			print >> sys.stderr, "* error: path `%s' is a directory" % (binpath)
+			env.Exit(-1)
+		if not S_ISREG(mode):
+			print >> sys.stderr, "* error: path `%s' is not a file or not exists" % (binpath)
+			env.Exit(-1)
+
+	if not binpath:
+		print >> sys.stderr, "* error: can't find program `%s'" % (progname)
+		env.Exit(-1)
+
+	return binpath
+
+def checkStructMember(context):
+	struct_member = """
+#include <time.h>
+int main() {
+	struct tm a;
+	a.tm_gmtoff = 0;
+	return 0;
+}
+"""
+	context.Message('Checking for tm_gmtoff in struct tm...')
+	result = context.TryLink(struct_member, '.c')
+	context.Result(result)
+
+	return result
+
+
+BuildDir('build', 'src', duplicate = 0)
+
+opts = Options('config.py')
+opts.AddOptions(
+	('prefix', 'prefix', '/usr/local'),
+	('bindir', 'binary directory', '${prefix}/bin'),
+	('sbindir', 'binary directory', '${prefix}/sbin'),
+	('libdir', 'library directory', '${prefix}/lib'),
+	PackageOption('with_mysql', 'enable mysql support', 'no'),
+	PackageOption('with_xml', 'enable xml support', 'no'),
+	PackageOption('with_pcre', 'enable pcre support', 'yes'),
+	PathOption('CC', 'path to the c-compiler', None),
+	BoolOption('build_dynamic', 'enable dynamic build', 'yes'),
+	BoolOption('build_static', 'enable static build', 'no'),
+	BoolOption('build_fullstatic', 'enable fullstatic build', 'no'),
+	BoolOption('with_sqlite3', 'enable sqlite3 support', 'no'),
+	BoolOption('with_memcache', 'enable memcache support', 'no'),
+	BoolOption('with_fam', 'enable FAM/gamin support', 'no'),
+	BoolOption('with_openssl', 'enable memcache support', 'no'),
+	BoolOption('with_gzip', 'enable gzip compression', 'no'),
+	BoolOption('with_bzip2', 'enable bzip2 compression', 'no'),
+	BoolOption('with_lua', 'enable lua support for mod_cml', 'no'),
+	BoolOption('with_ldap', 'enable ldap auth support', 'no'))
+
+env = Environment(
+	env = os.environ,
+	options = opts,
+	CPPPATH = Split('#build')
+)
+
+env.Help(opts.GenerateHelpText(env))
+
+if env.subst('${CC}') is not '':
+	env['CC'] = env.subst('${CC}')
+
+env['package'] = package
+env['version'] = version
+if env['CC'] == 'gcc':
+	## we need x-open 6 and bsd 4.3 features
+	env.Append(CCFLAGS = Split('-Wall -O2 -g -W -pedantic -Wunused -Wshadow -std=gnu99'))
+
+# cache configure checks
+if 1:
+	autoconf = Configure(env, custom_tests = {'CheckStructMember': checkStructMember })
+	autoconf.headerfile = "foo.h"
+	checkCHeaders(autoconf, string.split("""
+			arpa/inet.h
+			fcntl.h
+			netinet/in.h
+			sys/types.h netinet/in.h
+			stdlib.h
+			string.h
+			sys/socket.h
+			sys/types.h sys/socket.h
+		 	sys/time.h
+			unistd.h
+			sys/sendfile.h
+			sys/uio.h
+			sys/types.h sys/uio.h
+			getopt.h
+			sys/epoll.h
+			sys/select.h
+			sys/types.h sys/select.h
+			poll.h
+			sys/poll.h
+			sys/devpoll.h
+			sys/filio.h
+			sys/mman.h
+			sys/types.h sys/mman.h
+			sys/event.h
+			sys/types.h sys/event.h
+			sys/port.h
+			winsock2.h
+			pwd.h
+			sys/syslimits.h
+			sys/resource.h
+			sys/time.h sys/types.h sys/resource.h
+			sys/un.h
+			sys/types.h sys/un.h
+			syslog.h
+			stdint.h
+			inttypes.h
+			sys/prctl.h
+			sys/wait.h""", "\n"))
+
+	checkFuncs(autoconf, Split('fork stat lstat strftime dup2 getcwd inet_ntoa inet_ntop memset mmap munmap strchr \
+			strdup strerror strstr strtol sendfile  getopt socket \
+			gethostbyname poll sigtimedwait epoll_ctl getrlimit chroot \
+			getuid select signal pathconf madvise prctl\
+			writev sigaction sendfile64 send_file kqueue port_create localtime_r posix_fadvise'))
+
+	checkTypes(autoconf, Split('pid_t size_t off_t'))
+
+	autoconf.env.Append( LIBSQLITE3 = '', LIBXML2 = '', LIBMYSQL = '', LIBZ = '',
+		LIBBZ2 = '', LIBCRYPT = '', LIBMEMCACHE = '', LIBFCGI = '', LIBPCRE = '',
+		LIBLDAP = '', LIBLBER = '', LIBLUA = '', LIBLUALIB = '', LIBDL = '')
+
+	if env['with_fam']:
+		if autoconf.CheckLibWithHeader('fam', 'fam.h', 'C'):
+			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_FAM_H', '-DHAVE_LIBFAM' ], LIBS = 'fam')
+			checkFuncs(autoconf, ['FAMNoExists']);
+
+
+	if autoconf.CheckLibWithHeader('crypt', 'crypt.h', 'C'):
+		autoconf.env.Append(CPPFLAGS = [ '-DHAVE_CRYPT_H', '-DHAVE_LIBCRYPT' ], LIBCRYPT = 'crypt')
+
+	if autoconf.CheckLibWithHeader('uuid', 'uuid/uuid.h', 'C'):
+		autoconf.env.Append(CPPFLAGS = [ '-DHAVE_UUID_UUID_H', '-DHAVE_LIBUUID' ], LIBUUID = 'uuid')
+
+	if env['with_openssl']:
+		if autoconf.CheckLibWithHeader('ssl', 'openssl/ssl.h', 'C'):
+			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_OPENSSL_SSL_H', '-DHAVE_LIBSSL'] , LIBS = [ 'ssl', 'crypto' ])
+
+	if env['with_gzip']:
+		if autoconf.CheckLibWithHeader('z', 'zlib.h', 'C'):
+			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_ZLIB_H', '-DHAVE_LIBZ' ], LIBZ = 'z')
+
+	if env['with_ldap']:
+		if autoconf.CheckLibWithHeader('ldap', 'ldap.h', 'C'):
+			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LDAP_H', '-DHAVE_LIBLDAP' ], LIBLDAP = 'ldap')
+		if autoconf.CheckLibWithHeader('lber', 'lber.h', 'C'):
+			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_LBER_H', '-DHAVE_LIBLBER' ], LIBLBER = 'lber')
+
+	if env['with_bzip2']:
+		if autoconf.CheckLibWithHeader('bz2', 'bzlib.h', 'C'):
+			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_BZLIB_H', '-DHAVE_LIBBZ2' ], LIBBZ2 = 'bz2')
+
+	if env['with_memcache']:
+		if autoconf.CheckLibWithHeader('memcache', 'memcache.h', 'C'):
+			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_MEMCACHE_H', '-DHAVE_LIBMEMCACHE' ], LIBMEMCACHE = 'memcache')
+
+	if env['with_sqlite3']:
+		if autoconf.CheckLibWithHeader('sqlite3', 'sqlite3.h', 'C'):
+			autoconf.env.Append(CPPFLAGS = [ '-DHAVE_SQLITE3_H', '-DHAVE_LIBSQLITE3' ], LIBSQLITE3 = 'sqlite3')
+
+	ol = env['LIBS']
+	if autoconf.CheckLibWithHeader('fcgi', 'fastcgi.h', 'C'):
+		autoconf.env.Append(LIBFCGI = 'fcgi')
+	env['LIBS'] = ol
+
+	ol = env['LIBS']
+	if autoconf.CheckLibWithHeader('dl', 'dlfcn.h', 'C'):
+		autoconf.env.Append(LIBDL = 'dl')
+	env['LIBS'] = ol
+
+	if autoconf.CheckType('socklen_t', '#include <unistd.h>\n#include <sys/socket.h>\n#include <sys/types.h>'):
+		autoconf.env.Append(CPPFLAGS = [ '-DHAVE_SOCKLEN_T' ])
+
+	if autoconf.CheckType('struct sockaddr_storage', '#include <sys/socket.h>\n'):
+		autoconf.env.Append(CPPFLAGS = [ '-DHAVE_STRUCT_SOCKADDR_STORAGE' ])
+
+	if autoconf.CheckStructMember():
+		autoconf.env.Append(CPPFLAGS = [ '-DHAVE_STRUCT_TM_GMTOFF' ])
+
+	env = autoconf.Finish()
+
+	if env['with_lua']:
+		oldlibs = env['LIBS']
+		env.ParseConfig("pkg-config 'lua >= 5.0' --cflags --libs")
+		lualibs = env['LIBS'][len(oldlibs):]
+		env.Append(LIBLUA = lualibs)
+		env.Append(CPPFLAGS = [ '-DHAVE_LUA_H' ])
+		env['LIBS'] = oldlibs
+
+
+if env['with_pcre']:
+	pcre_config = checkProgram(env, 'pcre', 'pcre-config')
+	env.ParseConfig(pcre_config + ' --cflags --libs')
+	env.Append(CPPFLAGS = [ '-DHAVE_PCRE_H', '-DHAVE_LIBPCRE' ], LIBPCRE = 'pcre')
+
+if env['with_xml']:
+	xml2_config = checkProgram(env, 'xml', 'xml2-config')
+	oldlib = env['LIBS']
+	env['LIBS'] = []
+	env.ParseConfig(xml2_config + ' --cflags --libs')
+	env.Append(CPPFLAGS = [ '-DHAVE_LIBXML_H', '-DHAVE_LIBXML2' ], LIBXML2 = env['LIBS'])
+	env['LIBS'] = oldlib
+
+if env['with_mysql']:
+	mysql_config = checkProgram(env, 'mysql', 'mysql_config')
+	oldlib = env['LIBS']
+	env['LIBS'] = []
+	env.ParseConfig(mysql_config + ' --cflags --libs')
+	env.Append(CPPFLAGS = [ '-DHAVE_MYSQL_H', '-DHAVE_LIBMYSQL' ], LIBMYSQL = 'mysqlclient')
+	env['LIBS'] = oldlib
+
+if re.compile("cygwin|mingw").search(env['PLATFORM']):
+	env.Append(COMMON_LIB = 'bin')
+elif re.compile("darwin|aix").search(env['PLATFORM']):
+	env.Append(COMMON_LIB = 'lib')
+else:
+	env.Append(COMMON_LIB = False)
+
+versions = string.split(version, '.')
+version_id = int(versions[0]) << 16 | int(versions[1]) << 8 | int(versions[2])
+env.Append(CPPFLAGS = [
+		'-DLIGHTTPD_VERSION_ID=' + str(version_id),
+		'-DPACKAGE_NAME=\\"' + package + '\\"',
+		'-DPACKAGE_VERSION=\\"' + version + '\\"',
+		'-DLIBRARY_DIR="\\"${libdir}\\""',
+		'-D_FILE_OFFSET_BITS=64', '-D_LARGEFILE_SOURCE', '-D_LARGE_FILES'
+		] )
+
+SConscript( 'src/SConscript', 'env', build_dir = 'build', duplicate = 0)
+SConscript( 'tests/SConscript', 'env' )

Added: lighttpd/tags/1.4.19-5+lenny2/aclocal.m4
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/aclocal.m4	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/aclocal.m4	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,7485 @@
+# generated automatically by aclocal 1.10 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_if(m4_PACKAGE_VERSION, [2.61],,
+[m4_fatal([this file was generated for autoconf 2.61.
+You have another version of autoconf.  If you want to use that,
+you should regenerate the build system entirely.], [63])])
+
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+
+# serial 48 AC_PROG_LIBTOOL
+
+
+# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
+# -----------------------------------------------------------
+# If this macro is not defined by Autoconf, define it here.
+m4_ifdef([AC_PROVIDE_IFELSE],
+         [],
+         [m4_define([AC_PROVIDE_IFELSE],
+	         [m4_ifdef([AC_PROVIDE_$1],
+		           [$2], [$3])])])
+
+
+# AC_PROG_LIBTOOL
+# ---------------
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
+dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
+dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
+  AC_PROVIDE_IFELSE([AC_PROG_CXX],
+    [AC_LIBTOOL_CXX],
+    [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
+  ])])
+dnl And a similar setup for Fortran 77 support
+  AC_PROVIDE_IFELSE([AC_PROG_F77],
+    [AC_LIBTOOL_F77],
+    [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
+])])
+
+dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
+dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
+dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
+  AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+    [AC_LIBTOOL_GCJ],
+    [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+      [AC_LIBTOOL_GCJ],
+      [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
+	[AC_LIBTOOL_GCJ],
+      [ifdef([AC_PROG_GCJ],
+	     [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+       ifdef([A][M_PROG_GCJ],
+	     [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
+       ifdef([LT_AC_PROG_GCJ],
+	     [define([LT_AC_PROG_GCJ],
+		defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
+])])# AC_PROG_LIBTOOL
+
+
+# _AC_PROG_LIBTOOL
+# ----------------
+AC_DEFUN([_AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
+AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])# _AC_PROG_LIBTOOL
+
+
+# AC_LIBTOOL_SETUP
+# ----------------
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.50)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+AC_LIBTOOL_SYS_MAX_CMD_LEN
+AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+AC_LIBTOOL_OBJDIR
+
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+_LT_AC_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e 1s/^X//'
+[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
+
+# Same as above, but do not quote variable references.
+[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+AC_CHECK_TOOL(AR, ar, false)
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    AC_PATH_MAGIC
+  fi
+  ;;
+esac
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE([libtool-lock],
+    [AC_HELP_STRING([--disable-libtool-lock],
+	[avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+AC_ARG_WITH([pic],
+    [AC_HELP_STRING([--with-pic],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+AC_LIBTOOL_LANG_C_CONFIG
+_LT_AC_TAGCONFIG
+])# AC_LIBTOOL_SETUP
+
+
+# _LT_AC_SYS_COMPILER
+# -------------------
+AC_DEFUN([_LT_AC_SYS_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_AC_SYS_COMPILER
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+AC_DEFUN([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+AC_DEFUN([_LT_COMPILER_BOILERPLATE],
+[ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+AC_DEFUN([_LT_LINKER_BOILERPLATE],
+[ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+])# _LT_LINKER_BOILERPLATE
+
+
+# _LT_AC_SYS_LIBPATH_AIX
+# ----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
+[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_AC_SYS_LIBPATH_AIX
+
+
+# _LT_AC_SHELL_INIT(ARG)
+# ----------------------
+AC_DEFUN([_LT_AC_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+	 [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_AC_SHELL_INIT
+
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[_LT_AC_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+[$]*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string=`eval $cmd`) 2>/dev/null &&
+       echo_test_string=`eval $cmd` &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    IFS="$lt_save_ifs"
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "[$]0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+])])# _LT_AC_PROG_ECHO_BACKSLASH
+
+
+# _LT_AC_LOCK
+# -----------
+AC_DEFUN([_LT_AC_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+    [AC_HELP_STRING([--disable-libtool-lock],
+	[avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *ELF-32*)
+      HPUX_IA64_MODE="32"
+      ;;
+    *ELF-64*)
+      HPUX_IA64_MODE="64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+   if test "$lt_cv_prog_gnu_ld" = yes; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -melf32bsmip"
+      ;;
+    *N32*)
+      LD="${LD-ld} -melf32bmipn32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -melf64bmip"
+      ;;
+    esac
+   else
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+   fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *32-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_i386"
+          ;;
+        ppc64-*linux*|powerpc64-*linux*)
+          LD="${LD-ld} -m elf32ppclinux"
+          ;;
+        s390x-*linux*)
+          LD="${LD-ld} -m elf_s390"
+          ;;
+        sparc64-*linux*)
+          LD="${LD-ld} -m elf32_sparc"
+          ;;
+      esac
+      ;;
+    *64-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        ppc*-*linux*|powerpc*-*linux*)
+          LD="${LD-ld} -m elf64ppc"
+          ;;
+        s390*-*linux*)
+          LD="${LD-ld} -m elf64_s390"
+          ;;
+        sparc*-*linux*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)    LD="${LD-ld} -64" ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+  ])
+esac
+
+need_locks="$enable_libtool_lock"
+
+])# _LT_AC_LOCK
+
+
+# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
+[AC_REQUIRE([LT_AC_PROG_SED])
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $rm conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    ifelse([$5], , :, [$5])
+else
+    ifelse([$6], , :, [$6])
+fi
+])# AC_LIBTOOL_COMPILER_OPTION
+
+
+# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                          [ACTION-SUCCESS], [ACTION-FAILURE])
+# ------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
+[AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    ifelse([$4], , :, [$4])
+else
+    ifelse([$5], , :, [$5])
+fi
+])# AC_LIBTOOL_LINKER_OPTION
+
+
+# AC_LIBTOOL_SYS_MAX_CMD_LEN
+# --------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
+[# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ 	]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    # If test is not a shell built-in, we'll probably end up computing a
+    # maximum length that is only half of the actual maximum length, but
+    # we can't tell.
+    SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+    while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+	       = "XX$teststring") >/dev/null 2>&1 &&
+	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
+	    lt_cv_sys_max_cmd_len=$new_result &&
+	    test $i != 17 # 1/2 MB should be enough
+    do
+      i=`expr $i + 1`
+      teststring=$teststring$teststring
+    done
+    teststring=
+    # Add a significant safety factor because C++ compilers can tack on massive
+    # amounts of additional arguments before passing them to the linker.
+    # It appears as though 1/2 is a usable value.
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+])# AC_LIBTOOL_SYS_MAX_CMD_LEN
+
+
+# _LT_AC_CHECK_DLFCN
+# ------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)dnl
+])# _LT_AC_CHECK_DLFCN
+
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ---------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+    exit (status);
+}]
+EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+
+# AC_LIBTOOL_DLOPEN_SELF
+# ----------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+   ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+    	  lt_cv_dlopen_self_static, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+
+# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
+# ---------------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler
+AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+])
+])# AC_LIBTOOL_PROG_CC_C_O
+
+
+# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
+# -----------------------------------------
+# Check to see if we can do hard links to lock some files if needed
+AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
+[AC_REQUIRE([_LT_AC_LOCK])dnl
+
+hard_links="nottested"
+if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
+
+
+# AC_LIBTOOL_OBJDIR
+# -----------------
+AC_DEFUN([AC_LIBTOOL_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+])# AC_LIBTOOL_OBJDIR
+
+
+# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
+# ----------------------------------------------
+# Check hardcoding attributes.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_AC_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
+   test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
+   test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_AC_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_AC_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
+
+
+# AC_LIBTOOL_SYS_LIB_STRIP
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
+[striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         AC_MSG_RESULT([yes])
+       else
+  AC_MSG_RESULT([no])
+fi
+       ;;
+   *)
+  AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+])# AC_LIBTOOL_SYS_LIB_STRIP
+
+
+# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
+[AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  freebsd*) # from 4.6 on
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix3*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+    shlibpath_overrides_runpath=no
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    shlibpath_overrides_runpath=yes
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
+
+
+# _LT_AC_TAGCONFIG
+# ----------------
+AC_DEFUN([_LT_AC_TAGCONFIG],
+[AC_ARG_WITH([tags],
+    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
+        [include additional configurations @<:@automatic@:>@])],
+    [tagnames="$withval"])
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+  if test ! -f "${ofile}"; then
+    AC_MSG_WARN([output file `$ofile' does not exist])
+  fi
+
+  if test -z "$LTCC"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+    if test -z "$LTCC"; then
+      AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
+    else
+      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
+    fi
+  fi
+  if test -z "$LTCFLAGS"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
+  fi
+
+  # Extract list of available tagged configurations in $ofile.
+  # Note that this assumes the entire list is on one line.
+  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+  for tagname in $tagnames; do
+    IFS="$lt_save_ifs"
+    # Check whether tagname contains only valid characters
+    case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
+    "") ;;
+    *)  AC_MSG_ERROR([invalid tag name: $tagname])
+	;;
+    esac
+
+    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+    then
+      AC_MSG_ERROR([tag name \"$tagname\" already exists])
+    fi
+
+    # Update the list of available tags.
+    if test -n "$tagname"; then
+      echo appending configuration tag \"$tagname\" to $ofile
+
+      case $tagname in
+      CXX)
+	if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+	    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+	    (test "X$CXX" != "Xg++"))) ; then
+	  AC_LIBTOOL_LANG_CXX_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      F77)
+	if test -n "$F77" && test "X$F77" != "Xno"; then
+	  AC_LIBTOOL_LANG_F77_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      GCJ)
+	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+	  AC_LIBTOOL_LANG_GCJ_CONFIG
+	else
+	  tagname=""
+	fi
+	;;
+
+      RC)
+	AC_LIBTOOL_LANG_RC_CONFIG
+	;;
+
+      *)
+	AC_MSG_ERROR([Unsupported tag name: $tagname])
+	;;
+      esac
+
+      # Append the new tag name to the list of available tags.
+      if test -n "$tagname" ; then
+      available_tags="$available_tags $tagname"
+    fi
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+  else
+    rm -f "${ofile}T"
+    AC_MSG_ERROR([unable to update list of available tagged configurations.])
+  fi
+fi
+])# _LT_AC_TAGCONFIG
+
+
+# AC_LIBTOOL_DLOPEN
+# -----------------
+# enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN],
+ [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_DLOPEN
+
+
+# AC_LIBTOOL_WIN32_DLL
+# --------------------
+# declare package support for building win32 DLLs
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
+])# AC_LIBTOOL_WIN32_DLL
+
+
+# AC_ENABLE_SHARED([DEFAULT])
+# ---------------------------
+# implement the --enable-shared flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([shared],
+    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
+])# AC_ENABLE_SHARED
+
+
+# AC_DISABLE_SHARED
+# -----------------
+# set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)
+])# AC_DISABLE_SHARED
+
+
+# AC_ENABLE_STATIC([DEFAULT])
+# ---------------------------
+# implement the --enable-static flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([static],
+    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]AC_ENABLE_STATIC_DEFAULT)
+])# AC_ENABLE_STATIC
+
+
+# AC_DISABLE_STATIC
+# -----------------
+# set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)
+])# AC_DISABLE_STATIC
+
+
+# AC_ENABLE_FAST_INSTALL([DEFAULT])
+# ---------------------------------
+# implement the --enable-fast-install flag
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE([fast-install],
+    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
+])# AC_ENABLE_FAST_INSTALL
+
+
+# AC_DISABLE_FAST_INSTALL
+# -----------------------
+# set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)
+])# AC_DISABLE_FAST_INSTALL
+
+
+# AC_LIBTOOL_PICMODE([MODE])
+# --------------------------
+# implement the --with-pic flag
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)
+])# AC_LIBTOOL_PICMODE
+
+
+# AC_PROG_EGREP
+# -------------
+# This is predefined starting with Autoconf 2.54, so this conditional
+# definition can be removed once we require Autoconf 2.54 or later.
+m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
+[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
+   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi])
+ EGREP=$ac_cv_prog_egrep
+ AC_SUBST([EGREP])
+])])
+
+
+# AC_PATH_TOOL_PREFIX
+# -------------------
+# find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="ifelse([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+])# AC_PATH_TOOL_PREFIX
+
+
+# AC_PATH_MAGIC
+# -------------
+# find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# AC_PATH_MAGIC
+
+
+# AC_PROG_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH([gnu-ld],
+    [AC_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])
+AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])# AC_PROG_LD
+
+
+# AC_PROG_LD_GNU
+# --------------
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# AC_PROG_LD_GNU
+
+
+# AC_PROG_LD_RELOAD_FLAG
+# ----------------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+])# AC_PROG_LD_RELOAD_FLAG
+
+
+# AC_DEPLIBS_CHECK_METHOD
+# -----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | kfreebsd*-gnu | dragonfly*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix3*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+nto-qnx*)
+  lt_cv_deplibs_check_method=unknown
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+])# AC_DEPLIBS_CHECK_METHOD
+
+
+# AC_PROG_NM
+# ----------
+# find the pathname to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then 
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+])# AC_PROG_NM
+
+
+# AC_CHECK_LIBM
+# -------------
+# check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+])# AC_CHECK_LIBM
+
+
+# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl convenience library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-convenience to the configure arguments.  Note that
+# AC_CONFIG_SUBDIRS is not called here.  If DIRECTORY is not provided,
+# it is assumed to be `libltdl'.  LIBLTDL will be prefixed with
+# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
+# (note the single quotes!).  If your package is not flat and you're not
+# using automake, define top_builddir and top_srcdir appropriately in
+# the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  case $enable_ltdl_convenience in
+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+  "") enable_ltdl_convenience=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+  esac
+  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  # For backwards non-gettext consistent compatibility...
+  INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_CONVENIENCE
+
+
+# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
+# -----------------------------------
+# sets LIBLTDL to the link flags for the libltdl installable library and
+# LTDLINCL to the include flags for the libltdl header and adds
+# --enable-ltdl-install to the configure arguments.  Note that
+# AC_CONFIG_SUBDIRS is not called here.  If DIRECTORY is not provided,
+# and an installed libltdl is not found, it is assumed to be `libltdl'.
+# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
+# '${top_srcdir}/' (note the single quotes!).  If your package is not
+# flat and you're not using automake, define top_builddir and top_srcdir
+# appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  AC_CHECK_LIB(ltdl, lt_dlinit,
+  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+  [if test x"$enable_ltdl_install" = xno; then
+     AC_MSG_WARN([libltdl not installed, but installation disabled])
+   else
+     enable_ltdl_install=yes
+   fi
+  ])
+  if test x"$enable_ltdl_install" = x"yes"; then
+    ac_configure_args="$ac_configure_args --enable-ltdl-install"
+    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  else
+    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+    LIBLTDL="-lltdl"
+    LTDLINCL=
+  fi
+  # For backwards non-gettext consistent compatibility...
+  INCLTDL="$LTDLINCL"
+])# AC_LIBLTDL_INSTALLABLE
+
+
+# AC_LIBTOOL_CXX
+# --------------
+# enable support for C++ libraries
+AC_DEFUN([AC_LIBTOOL_CXX],
+[AC_REQUIRE([_LT_AC_LANG_CXX])
+])# AC_LIBTOOL_CXX
+
+
+# _LT_AC_LANG_CXX
+# ---------------
+AC_DEFUN([_LT_AC_LANG_CXX],
+[AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
+])# _LT_AC_LANG_CXX
+
+# _LT_AC_PROG_CXXCPP
+# ------------------
+AC_DEFUN([_LT_AC_PROG_CXXCPP],
+[
+AC_REQUIRE([AC_PROG_CXX])
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+fi
+])# _LT_AC_PROG_CXXCPP
+
+# AC_LIBTOOL_F77
+# --------------
+# enable support for Fortran 77 libraries
+AC_DEFUN([AC_LIBTOOL_F77],
+[AC_REQUIRE([_LT_AC_LANG_F77])
+])# AC_LIBTOOL_F77
+
+
+# _LT_AC_LANG_F77
+# ---------------
+AC_DEFUN([_LT_AC_LANG_F77],
+[AC_REQUIRE([AC_PROG_F77])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
+])# _LT_AC_LANG_F77
+
+
+# AC_LIBTOOL_GCJ
+# --------------
+# enable support for GCJ libraries
+AC_DEFUN([AC_LIBTOOL_GCJ],
+[AC_REQUIRE([_LT_AC_LANG_GCJ])
+])# AC_LIBTOOL_GCJ
+
+
+# _LT_AC_LANG_GCJ
+# ---------------
+AC_DEFUN([_LT_AC_LANG_GCJ],
+[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
+    [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
+      [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
+	 [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
+	   [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
+])# _LT_AC_LANG_GCJ
+
+
+# AC_LIBTOOL_RC
+# -------------
+# enable support for Windows resource files
+AC_DEFUN([AC_LIBTOOL_RC],
+[AC_REQUIRE([LT_AC_PROG_RC])
+_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
+])# AC_LIBTOOL_RC
+
+
+# AC_LIBTOOL_LANG_C_CONFIG
+# ------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
+AC_DEFUN([_LT_AC_LANG_C_CONFIG],
+[lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+AC_LIBTOOL_SYS_LIB_STRIP
+AC_LIBTOOL_DLOPEN_SELF
+
+# Report which library types will actually be built
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case $host_os in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+    ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_C_CONFIG
+
+
+# AC_LIBTOOL_LANG_CXX_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
+AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
+[AC_LANG_PUSH(C++)
+AC_REQUIRE([AC_PROG_CXX])
+AC_REQUIRE([_LT_AC_PROG_CXXCPP])
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Dependencies to place before and after the object being linked:
+_LT_AC_TAGVAR(predep_objects, $1)=
+_LT_AC_TAGVAR(postdep_objects, $1)=
+_LT_AC_TAGVAR(predeps, $1)=
+_LT_AC_TAGVAR(postdeps, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+  $as_unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+  lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+  $as_unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+else
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+fi
+
+if test "$GXX" = yes; then
+  # Set up default GNU C++ configuration
+
+  AC_PROG_LD
+
+  # Check if GNU C++ uses GNU ld as the underlying linker, since the
+  # archiving commands below assume that GNU ld is being used.
+  if test "$with_gnu_ld" = yes; then
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+    #     investigate it a little bit more. (MM)
+    wlarc='${wl}'
+
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+	grep 'no-whole-archive' > /dev/null; then
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    with_gnu_ld=no
+    wlarc=
+
+    # A generic and very simple default shared library creation
+    # command for GNU C++ for the case where it uses the native
+    # linker, instead of GNU ld.  If possible, this setting should
+    # overridden to take advantage of the native linker features on
+    # the platform it is being used on.
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+  fi
+
+  # Commands to make compiler produce verbose output that lists
+  # what "hidden" libraries, object files and flags are used when
+  # linking a shared library.
+  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+  GXX=no
+  with_gnu_ld=no
+  wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+case $host_os in
+  aix3*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  case $ld_flag in
+	  *-brtl*)
+	    aix_use_runtimelinking=yes
+	    break
+	    ;;
+	  esac
+	done
+	;;
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    _LT_AC_TAGVAR(archive_cmds, $1)=''
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+    if test "$GXX" = yes; then
+      case $host_os in aix4.[[012]]|aix4.[[012]].*)
+      # We only want to do this on AIX 4.2 and lower, the check
+      # below for broken collect2 doesn't work under 4.3+
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	else
+	  # We have old collect2
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+	fi
+	;;
+      esac
+      shared_flag='-shared'
+      if test "$aix_use_runtimelinking" = yes; then
+	shared_flag="$shared_flag "'${wl}-G'
+      fi
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	shared_flag='-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall does not export symbols beginning with
+    # underscore (_), so it is better to generate a list of symbols to export.
+    _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+      # Determine the default libpath from the value encoded in an empty executable.
+      _LT_AC_SYS_LIBPATH_AIX
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+     else
+      if test "$host_cpu" = ia64; then
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+      else
+	# Determine the default libpath from the value encoded in an empty executable.
+	_LT_AC_SYS_LIBPATH_AIX
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	_LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	# Exported symbols can be pulled into shared objects from archives
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+	# This is similar to how AIX traditionally builds its shared libraries.
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+      fi
+    fi
+    ;;
+
+  beos*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+      # support --undefined.  This deserves some investigation.  FIXME
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+    ;;
+
+  chorus*)
+    case $cc_basename in
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+    # as there is no search path for DLLs.
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+    _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+    _LT_AC_TAGVAR(always_export_symbols, $1)=no
+    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      # If the export-symbols file already is a .def file (1st line
+      # is EXPORTS), use it as is; otherwise, prepend...
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname.def;
+      else
+	echo EXPORTS > $output_objdir/$soname.def;
+	cat $export_symbols >> $output_objdir/$soname.def;
+      fi~
+      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+    else
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    fi
+  ;;
+      darwin* | rhapsody*)
+        case $host_os in
+        rhapsody* | darwin1.[[012]])
+         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+         ;;
+       *) # Darwin 1.3 on
+         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+         else
+           case ${MACOSX_DEPLOYMENT_TARGET} in
+             10.[[012]])
+               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+               ;;
+             10.*)
+               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+               ;;
+           esac
+         fi
+         ;;
+        esac
+      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+    if test "$GXX" = yes ; then
+      lt_int_apple_cc_single_mod=no
+      output_verbose_link_cmd='echo'
+      if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
+       lt_int_apple_cc_single_mod=yes
+      fi
+      if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      else
+          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+        fi
+        _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+        # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+          if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          else
+            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          fi
+            _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      else
+      case $cc_basename in
+        xlc*)
+         output_verbose_link_cmd='echo'
+          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+          _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          ;;
+       *)
+         _LT_AC_TAGVAR(ld_shlibs, $1)=no
+          ;;
+      esac
+      fi
+        ;;
+
+  dgux*)
+    case $cc_basename in
+      ec++*)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      ghcx*)
+	# Green Hills C++ Compiler
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  freebsd[[12]]*)
+    # C++ shared libraries reported to be fairly broken before switch to ELF
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  freebsd-elf*)
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    ;;
+  freebsd* | kfreebsd*-gnu | dragonfly*)
+    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+    # conventions
+    _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+    ;;
+  gnu*)
+    ;;
+  hpux9*)
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				# but as the default
+				# location of the library.
+
+    case $cc_basename in
+    CC*)
+      # FIXME: insert proper C++ library support
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    aCC*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      #
+      # There doesn't appear to be a way to prevent this compiler from
+      # explicitly linking system object files so we need to strip them
+      # from the output so that they don't get included in the library
+      # dependencies.
+      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+      ;;
+    *)
+      if test "$GXX" = yes; then
+        _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+        # FIXME: insert proper C++ library support
+        _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+    ;;
+  hpux10*|hpux11*)
+    if test $with_gnu_ld = no; then
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+      case $host_cpu in
+      hppa*64*|ia64*)
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+        ;;
+      *)
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        ;;
+      esac
+    fi
+    case $host_cpu in
+    hppa*64*|ia64*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+    *)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    esac
+
+    case $cc_basename in
+      CC*)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      aCC*)
+	case $host_cpu in
+	hppa*64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	esac
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test $with_gnu_ld = no; then
+	    case $host_cpu in
+	    hppa*64*)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    ia64*)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    *)
+	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    esac
+	  fi
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  interix3*)
+    _LT_AC_TAGVAR(hardcode_direct, $1)=no
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+    # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+    # Instead, shared libraries are loaded at an image base (0x10000000 by
+    # default) and relocated if they conflict, which is a slow very memory
+    # consuming and fragmenting process.  To avoid this, we pick a random,
+    # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+    # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+    ;;
+  irix5* | irix6*)
+    case $cc_basename in
+      CC*)
+	# SGI C++
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	# Archives containing C++ object files must be created using
+	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test "$with_gnu_ld" = no; then
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	  else
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+	  fi
+	fi
+	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+	;;
+    esac
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+    ;;
+  linux*)
+    case $cc_basename in
+      KCC*)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	;;
+      icpc*)
+	# Intel C++
+	with_gnu_ld=yes
+	# version 8.0 and above of icpc choke on multiply defined symbols
+	# if we add $predep_objects and $postdep_objects, however 7.1 and
+	# earlier do not add the objects themselves.
+	case `$CC -V 2>&1` in
+	*"Version 7."*)
+  	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+  	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  ;;
+	*)  # Version 8.0 or newer
+	  tmp_idyn=
+	  case $host_cpu in
+	    ia64*) tmp_idyn=' -i_dynamic';;
+	  esac
+  	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  ;;
+	esac
+	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	;;
+      pgCC*)
+        # Portland Group C++ compiler
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+  	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+        ;;
+      cxx*)
+	# Compaq C++
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	runpath_var=LD_RUN_PATH
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+    esac
+    ;;
+  lynxos*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  m88k*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  mvs*)
+    case $cc_basename in
+      cxx*)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+      wlarc=
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+    fi
+    # Workaround some broken pre-1.5 toolchains
+    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+    ;;
+  openbsd2*)
+    # C++ shared libraries are fairly broken
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  openbsd*)
+    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    fi
+    output_verbose_link_cmd='echo'
+    ;;
+  osf3*)
+    case $cc_basename in
+      KCC*)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+
+	;;
+      RCC*)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      cxx*)
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  osf4* | osf5*)
+    case $cc_basename in
+      KCC*)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	_LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Archives containing C++ object files must be created using
+	# the KAI C++ compiler.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
+	;;
+      RCC*)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      cxx*)
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	  echo "-hidden">> $lib.exp~
+	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry ${output_objdir}/so_locations -o $lib~
+	  $rm $lib.exp'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	 _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+    esac
+    ;;
+  psos*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  sunos4*)
+    case $cc_basename in
+      CC*)
+	# Sun C++ 4.x
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      lcc*)
+	# Lucid
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  solaris*)
+    case $cc_basename in
+      CC*)
+	# Sun C++ 4.2, 5.x and Centerline C++
+        _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
+	_LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	$CC -G${allow_undefined_flag}  ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	case $host_os in
+	  solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	  *)
+	    # The C++ compiler is used as linker so we must use $wl
+	    # flag to pass the commands to the underlying system
+	    # linker. We must also pass each convience library through
+	    # to the system linker between allextract/defaultextract.
+	    # The C++ compiler will combine linker options so we
+	    # cannot just pass the convience library names through
+	    # without $wl.
+	    # Supported since Solaris 2.6 (maybe 2.5.1?)
+	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
+	    ;;
+	esac
+	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+	output_verbose_link_cmd='echo'
+
+	# Archives containing C++ object files must be created using
+	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	;;
+      gcx*)
+	# Green Hills C++ Compiler
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	# The C++ compiler must be used to create the archive.
+	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	;;
+      *)
+	# GNU C++ compiler with Solaris linker
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+	  if $CC --version | grep -v '^2\.7' > /dev/null; then
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  else
+	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	    # platform.
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  fi
+
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+	fi
+	;;
+    esac
+    ;;
+  sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+    _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+    runpath_var='LD_RUN_PATH'
+
+    case $cc_basename in
+      CC*)
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      *)
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+    esac
+    ;;
+  sysv5* | sco3.2v5* | sco5v6*)
+    # Note: We can NOT use -z defs as we might desire, because we do not
+    # link with -lc, and that would cause any symbols used from libc to
+    # always be unresolved, which means just about no library would
+    # ever link correctly.  If we're not using GNU ld we use -z text
+    # though, which does catch some bad symbols but isn't as heavy-handed
+    # as -z defs.
+    # For security reasons, it is highly recommended that you always
+    # use absolute paths for naming shared libraries, and exclude the
+    # DT_RUNPATH tag from executables and libraries.  But doing so
+    # requires that you compile everything twice, which is a pain.
+    # So that behaviour is only enabled if SCOABSPATH is set to a
+    # non-empty value in the environment.  Most likely only useful for
+    # creating official distributions of packages.
+    # This is a hack until libtool officially supports absolute path
+    # names for shared libraries.
+    _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+    _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+    runpath_var='LD_RUN_PATH'
+
+    case $cc_basename in
+      CC*)
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      *)
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+    esac
+    ;;
+  tandem*)
+    case $cc_basename in
+      NCC*)
+	# NonStop-UX NCC 3.20
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	;;
+    esac
+    ;;
+  vxworks*)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+  *)
+    # FIXME: insert proper C++ library support
+    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+    ;;
+esac
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_AC_TAGVAR(GCC, $1)="$GXX"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_POSTDEP_PREDEP($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+])# AC_LIBTOOL_LANG_CXX_CONFIG
+
+# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
+# ------------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
+int a;
+void foo (void) { a = 0; }
+EOF
+],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+EOF
+],[$1],[F77],[cat > conftest.$ac_ext <<EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+EOF
+],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  # The `*' in the case matches for architectures that use `case' in
+  # $output_verbose_cmd can trigger glob expansion during the loop
+  # eval without this substitution.
+  output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
+
+  for p in `eval $output_verbose_link_cmd`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" \
+	  || test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+	   else
+	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
+	   _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
+	 else
+	   _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
+	   _LT_AC_TAGVAR(predep_objects, $1)="$p"
+	 else
+	   _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
+	   _LT_AC_TAGVAR(postdep_objects, $1)="$p"
+	 else
+	   _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$rm -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+ifelse([$1],[CXX],
+[case $host_os in
+interix3*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_AC_TAGVAR(predep_objects,$1)=
+  _LT_AC_TAGVAR(postdep_objects,$1)=
+  _LT_AC_TAGVAR(postdeps,$1)=
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun'
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_AC_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+])# AC_LIBTOOL_POSTDEP_PREDEP
+
+# AC_LIBTOOL_LANG_F77_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
+AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
+[AC_REQUIRE([AC_PROG_F77])
+AC_LANG_PUSH(Fortran 77)
+
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_AC_TAGVAR(allow_undefined_flag, $1)=
+_LT_AC_TAGVAR(always_export_symbols, $1)=no
+_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_direct, $1)=no
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+_LT_AC_TAGVAR(hardcode_automatic, $1)=no
+_LT_AC_TAGVAR(module_cmds, $1)=
+_LT_AC_TAGVAR(module_expsym_cmds, $1)=
+_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_AC_TAGVAR(no_undefined_flag, $1)=
+_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="      program t\n      end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case $host_os in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+_LT_AC_TAGVAR(GCC, $1)="$G77"
+_LT_AC_TAGVAR(LD, $1)="$LD"
+
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_POP
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_F77_CONFIG
+
+
+# AC_LIBTOOL_LANG_GCJ_CONFIG
+# --------------------------
+# Ensure that the configuration vars for the C compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
+AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
+AC_LIBTOOL_PROG_COMPILER_PIC($1)
+AC_LIBTOOL_PROG_CC_C_O($1)
+AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
+AC_LIBTOOL_PROG_LD_SHLIBS($1)
+AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
+AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_GCJ_CONFIG
+
+
+# AC_LIBTOOL_LANG_RC_CONFIG
+# -------------------------
+# Ensure that the configuration vars for the Windows resource compiler are
+# suitably defined.  Those variables are subsequently used by
+# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
+AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
+AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
+[AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_AC_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_AC_SYS_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+_LT_AC_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+AC_LIBTOOL_CONFIG($1)
+
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# AC_LIBTOOL_LANG_RC_CONFIG
+
+
+# AC_LIBTOOL_CONFIG([TAGNAME])
+# ----------------------------
+# If TAGNAME is not passed, then create an initial libtool script
+# with a default configuration from the untagged config vars.  Otherwise
+# add code to config.status for appending the configuration named by
+# TAGNAME from the matching tagged config vars.
+AC_DEFUN([AC_LIBTOOL_CONFIG],
+[# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    _LT_AC_TAGVAR(compiler, $1) \
+    _LT_AC_TAGVAR(CC, $1) \
+    _LT_AC_TAGVAR(LD, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
+    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
+    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
+    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
+    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
+    _LT_AC_TAGVAR(old_archive_cmds, $1) \
+    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
+    _LT_AC_TAGVAR(predep_objects, $1) \
+    _LT_AC_TAGVAR(postdep_objects, $1) \
+    _LT_AC_TAGVAR(predeps, $1) \
+    _LT_AC_TAGVAR(postdeps, $1) \
+    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
+    _LT_AC_TAGVAR(archive_cmds, $1) \
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
+    _LT_AC_TAGVAR(postinstall_cmds, $1) \
+    _LT_AC_TAGVAR(postuninstall_cmds, $1) \
+    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
+    _LT_AC_TAGVAR(allow_undefined_flag, $1) \
+    _LT_AC_TAGVAR(no_undefined_flag, $1) \
+    _LT_AC_TAGVAR(export_symbols_cmds, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
+    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
+    _LT_AC_TAGVAR(hardcode_automatic, $1) \
+    _LT_AC_TAGVAR(module_cmds, $1) \
+    _LT_AC_TAGVAR(module_expsym_cmds, $1) \
+    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
+    _LT_AC_TAGVAR(exclude_expsyms, $1) \
+    _LT_AC_TAGVAR(include_expsyms, $1); do
+
+    case $var in
+    _LT_AC_TAGVAR(old_archive_cmds, $1) | \
+    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
+    _LT_AC_TAGVAR(archive_cmds, $1) | \
+    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
+    _LT_AC_TAGVAR(module_cmds, $1) | \
+    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
+    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
+    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\[$]0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
+    ;;
+  esac
+
+ifelse([$1], [],
+  [cfgfile="${ofile}T"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  $rm -f "$cfgfile"
+  AC_MSG_NOTICE([creating $ofile])],
+  [cfgfile="$ofile"])
+
+  cat <<__EOF__ >> "$cfgfile"
+ifelse([$1], [],
+[#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e 1s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG],
+[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
+# A language-specific compiler.
+CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
+
+# Is the compiler the GNU C compiler?
+with_gcc=$_LT_AC_TAGVAR(GCC, $1)
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
+archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
+module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
+
+# Symbols that must always be exported.
+include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
+
+ifelse([$1],[],
+[# ### END LIBTOOL CONFIG],
+[# ### END LIBTOOL TAG CONFIG: $tagname])
+
+__EOF__
+
+ifelse([$1],[], [
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" || \
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+])
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+])# AC_LIBTOOL_CONFIG
+
+
+# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
+[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+
+_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
+
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+linux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDGIRSTW]]'
+    lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+    lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if grep ' nm_test_var$' "$nlist" >/dev/null; then
+	if grep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+
+# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
+# ---------------------------------------
+AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
+[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+ ifelse([$1],[CXX],[
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix3*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix4* | aix5*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+       darwin*)
+         # PIC is the default on this platform
+         # Common symbols not allowed in MH_DYLIB files
+         case $cc_basename in
+           xlc*)
+           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           ;;
+         esac
+       ;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | kfreebsd*-gnu | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux*)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  icpc* | ecpc*)
+	    # Intel C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  pgCC*)
+	    # Portland Group C++ compiler.
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    interix3*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+      darwin*)
+        # PIC is the default on this platform
+        # Common symbols not allowed in MH_DYLIB files
+       case $cc_basename in
+         xlc*)
+         _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
+         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+       esac
+       ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    newsos6)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    linux*)
+      case $cc_basename in
+      icc* | ecc*)
+	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
+    _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
+    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
+AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
+])
+
+
+# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
+# ------------------------------------
+# See if the linker supports building shared libraries.
+AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
+[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+ifelse([$1],[CXX],[
+  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix4* | aix5*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+],[
+  runpath_var=
+  _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_AC_TAGVAR(archive_cmds, $1)=
+  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
+  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_AC_TAGVAR(hardcode_automatic, $1)=no
+  _LT_AC_TAGVAR(module_cmds, $1)=
+  _LT_AC_TAGVAR(module_expsym_cmds, $1)=
+  _LT_AC_TAGVAR(always_export_symbols, $1)=no
+  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_AC_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+  # Just being paranoid about ensuring that cc_basename is set.
+  _LT_CC_BASENAME([$compiler])
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_AC_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>/dev/null` in
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(always_export_symbols, $1)=no
+      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix3*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    linux*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	tmp_addflag=
+	case $cc_basename,$host_cpu in
+	pgcc*)				# Portland Group C compiler
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	esac
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+	if test $supports_anon_versioning = yes; then
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
+  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+  $echo "local: *; };" >> $output_objdir/$libname.ver~
+	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	fi
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) 
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+	  else
+	    _LT_AC_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_AC_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_AC_TAGVAR(archive_cmds, $1)=''
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  else
+  	  # We have old collect2
+  	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+  	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+  	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       _LT_AC_SYS_LIBPATH_AIX
+       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 _LT_AC_SYS_LIBPATH_AIX
+	 _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+	  # Exported symbols can be pulled into shared objects from archives
+	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      # see comment about different semantics on the GNU ld section
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    bsdi[[45]]*)
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      case $host_os in
+        rhapsody* | darwin1.[[012]])
+         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
+         ;;
+       *) # Darwin 1.3 on
+         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+         else
+           case ${MACOSX_DEPLOYMENT_TARGET} in
+             10.[[012]])
+               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+               ;;
+             10.*)
+               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
+               ;;
+           esac
+         fi
+         ;;
+      esac
+      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_AC_TAGVAR(hardcode_direct, $1)=no
+      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+    if test "$GCC" = yes ; then
+    	output_verbose_link_cmd='echo'
+        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      case $cc_basename in
+        xlc*)
+         output_verbose_link_cmd='echo'
+         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+         _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          ;;
+       *)
+         _LT_AC_TAGVAR(ld_shlibs, $1)=no
+          ;;
+      esac
+    fi
+      ;;
+
+    dgux*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu | dragonfly*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	_LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	_LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	*)
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    openbsd*)
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	   _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	   ;;
+	 *)
+	   _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	wlarc=''
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+ 	# The compiler driver will combine linker options so we
+ 	# cannot just pass the convience library names through
+ 	# without $wl, iff we do not link with $LD.
+ 	# Luckily, gcc supports the same syntax we need for Sun Studio.
+ 	# Supported since Solaris 2.6 (maybe 2.5.1?)
+ 	case $wlarc in
+ 	'')
+ 	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
+ 	*)
+ 	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ 	esac ;;
+      esac
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
+      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_AC_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*)
+      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_AC_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+  fi
+])
+AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
+test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_AC_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
+	pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
+        _LT_AC_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+        then
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+])# AC_LIBTOOL_PROG_LD_SHLIBS
+
+
+# _LT_AC_FILE_LTDLL_C
+# -------------------
+# Be careful that the start marker always follows a newline.
+AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+])# _LT_AC_FILE_LTDLL_C
+
+
+# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
+# ---------------------------------
+AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
+
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+
+AC_DEFUN([LT_AC_PROG_GCJ],
+[AC_CHECK_TOOL(GCJ, gcj, no)
+  test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+  AC_SUBST(GCJFLAGS)
+])
+
+AC_DEFUN([LT_AC_PROG_RC],
+[AC_CHECK_TOOL(RC, windres, no)
+])
+
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+# LT_AC_PROG_SED
+# --------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+AC_DEFUN([LT_AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_MSG_RESULT([$SED])
+])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# 
+# Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
+#
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		PKG_CONFIG=""
+	fi
+		
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$PKG_CONFIG"; then
+    if test -n "$$1"; then
+        pkg_cv_[]$1="$$1"
+    else
+        PKG_CHECK_EXISTS([$3],
+                         [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+			 [pkg_failed=yes])
+    fi
+else
+	pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
+        else 
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+		[$4])
+elif test $pkg_failed = untried; then
+	ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.])],
+		[$4])
+else
+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.10], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10])dnl
+_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 12
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+	      		     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                  [_AM_DEPENDENCIES(OBJC)],
+                  [define([AC_PROG_OBJC],
+                          defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode is disabled by default
+  AC_ARG_ENABLE(maintainer-mode,
+[  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer],
+      USE_MAINTAINER_MODE=$enableval,
+      USE_MAINTAINER_MODE=no)
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+          [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+AC_DEFUN([AM_C_PROTOTYPES],
+[AC_REQUIRE([AC_C_PROTOTYPES])
+if test "$ac_cv_prog_cc_stdc" != no; then
+  U= ANSI2KNR=
+else
+  U=_ ANSI2KNR=./ansi2knr
+fi
+# Ensure some checks needed by ansi2knr itself.
+AC_REQUIRE([AC_HEADER_STDC])
+AC_CHECK_HEADERS([string.h])
+AC_SUBST([U])dnl
+AC_SUBST([ANSI2KNR])dnl
+_AM_SUBST_NOTMAKE([ANSI2KNR])dnl
+])
+
+AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+

Added: lighttpd/tags/1.4.19-5+lenny2/autogen.sh
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/autogen.sh	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/autogen.sh	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,27 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+LIBTOOLIZE=${LIBTOOLIZE:-libtoolize}
+LIBTOOLIZE_FLAGS="--copy --force"
+ACLOCAL=${ACLOCAL:-aclocal}
+AUTOHEADER=${AUTOHEADER:-autoheader}
+AUTOMAKE=${AUTOMAKE:-automake}
+AUTOMAKE_FLAGS="--add-missing --copy"
+AUTOCONF=${AUTOCONF:-autoconf}
+
+ARGV0=$0
+
+set -e
+
+
+run() {
+	echo "$ARGV0: running \`$@'"
+	$@
+}
+
+run $LIBTOOLIZE $LIBTOOLIZE_FLAGS
+run $ACLOCAL $ACLOCAL_FLAGS
+run $AUTOHEADER
+run $AUTOMAKE $AUTOMAKE_FLAGS
+run $AUTOCONF
+echo "Now type './configure ...' and 'make' to compile."


Property changes on: lighttpd/tags/1.4.19-5+lenny2/autogen.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/compile
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/compile	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/compile	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,142 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2005-05-14.22
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey at cygnus.com>.
+#
+# 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 2, 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+esac
+
+ofile=
+cfile=
+eat=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# configure might choose to run compile as `compile cc -o foo foo.c'.
+	# So we strip `-o arg' only if arg is an object.
+	eat=1
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no `-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # `.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:


Property changes on: lighttpd/tags/1.4.19-5+lenny2/compile
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/config.guess
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/config.guess	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/config.guess	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1510 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-07-02'
+
+# This file 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner <per at bothner.com>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "${UNAME_MACHINE}" in
+    i?86)
+	test -z "$VENDOR" && VENDOR=pc
+	;;
+    *)
+	test -z "$VENDOR" && VENDOR=unknown
+	;;
+esac
+test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit ;;
+    *:OpenBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+	exit ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit ;;
+    *:SolidBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+	exit ;;
+    macppc:MirBSD:*:*)
+	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7; exit ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    eval $set_cc_for_build
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
+	echo unknown-hitachi-hiuxwe2
+	exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit ;;
+    *:FreeBSD:*:*)
+	case ${UNAME_MACHINE} in
+	    pc98)
+		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    amd64)
+		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	    *)
+		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+	esac
+	exit ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit ;;
+    i*:windows32*:*)
+    	# uname -m includes "-pc" on this system.
+    	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit ;;
+    x86:Interix*:[3456]*)
+	echo i586-pc-interix${UNAME_RELEASE}
+	exit ;;
+    EM64T:Interix*:[3456]*)
+	echo x86_64-unknown-interix${UNAME_RELEASE}
+	exit ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    avr32*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux-gnu
+	exit ;;
+    frv:Linux:*:*)
+    	echo frv-${VENDOR}-linux-gnu
+	exit ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; }
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^CPU/{
+		s: ::g
+		p
+	    }'`"
+	test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-gnu"; exit; }
+	;;
+    or32:Linux:*:*)
+	echo or32-${VENDOR}-linux-gnu
+	exit ;;
+    ppc:Linux:*:*)
+	echo powerpc-${VENDOR}-linux-gnu
+	exit ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-${VENDOR}-linux-gnu
+	exit ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu${LIBC}
+	exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-${VENDOR}-linux-gnu ;;
+	  PA8*) echo hppa2.0-${VENDOR}-linux-gnu ;;
+	  *)    echo hppa-${VENDOR}-linux-gnu ;;
+	esac
+	exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-${VENDOR}-linux-gnu
+	exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-${VENDOR}-linux-gnu
+	exit ;;
+    vax:Linux:*:*)
+	echo ${UNAME_MACHINE}-dec-linux-gnu
+	exit ;;
+    x86_64:Linux:*:*)
+	echo x86_64-${VENDOR}-linux-gnu
+	exit ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-${VENDOR}-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-${VENDOR}-linux-gnuaout"
+		exit ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-${VENDOR}-linux-gnucoff"
+		exit ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-${VENDOR}-linux-gnuoldld"
+		exit ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+	    /^LIBC/{
+		s: ::g
+		p
+	    }'`"
+	test x"${LIBC}" != x && {
+		echo "${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}"
+		exit
+	}
+	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit ;;
+    i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit ;;
+    i*86:*:5:[678]*)
+    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit ;;
+    *:*VMS:*:*)
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
+    i*86:rdos:*:*)
+	echo ${UNAME_MACHINE}-pc-rdos
+	exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit ;;
+    c34*)
+	echo c34-convex-bsd
+	exit ;;
+    c38*)
+	echo c38-convex-bsd
+	exit ;;
+    c4*)
+	echo c4-convex-bsd
+	exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:


Property changes on: lighttpd/tags/1.4.19-5+lenny2/config.guess
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/config.h.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/config.h.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/config.h.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,460 @@
+/* config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define to 1 if you have the <arpa/inet.h> header file. */
+#undef HAVE_ARPA_INET_H
+
+/* Define to 1 if you have the <attr/attributes.h> header file. */
+#undef HAVE_ATTR_ATTRIBUTES_H
+
+/* Define to 1 if you have the <bzlib.h> header file. */
+#undef HAVE_BZLIB_H
+
+/* Define to 1 if you have the `chroot' function. */
+#undef HAVE_CHROOT
+
+/* Define to 1 if you have the <crypt.h> header file. */
+#undef HAVE_CRYPT_H
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the `dup2' function. */
+#undef HAVE_DUP2
+
+/* Define to 1 if you have the `epoll_ctl' function. */
+#undef HAVE_EPOLL_CTL
+
+/* Define to 1 if you have the <errmsg.h> header file. */
+#undef HAVE_ERRMSG_H
+
+/* Define to 1 if you have the `FAMNoExists' function. */
+#undef HAVE_FAMNOEXISTS
+
+/* fam.h */
+#undef HAVE_FAM_H
+
+/* Define to 1 if you have the <fastcgi/fastcgi.h> header file. */
+#undef HAVE_FASTCGI_FASTCGI_H
+
+/* Define to 1 if you have the <fastcgi.h> header file. */
+#undef HAVE_FASTCGI_H
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* libgdbm */
+#undef HAVE_GDBM
+
+/* Define to 1 if you have the <gdbm.h> header file. */
+#undef HAVE_GDBM_H
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `gethostbyname' function. */
+#undef HAVE_GETHOSTBYNAME
+
+/* Define to 1 if you have the `getopt' function. */
+#undef HAVE_GETOPT
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#undef HAVE_GETOPT_H
+
+/* Define to 1 if you have the `getrlimit' function. */
+#undef HAVE_GETRLIMIT
+
+/* Define to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define to 1 if you have the `inet_ntoa' function. */
+#undef HAVE_INET_NTOA
+
+/* Define to 1 if you have the `inet_ntop' function. */
+#undef HAVE_INET_NTOP
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Whether to enable IPv6 support */
+#undef HAVE_IPV6
+
+/* Define to 1 if you have the `kqueue' function. */
+#undef HAVE_KQUEUE
+
+/* Define to 1 if you have the <lber.h> header file. */
+#undef HAVE_LBER_H
+
+/* Define to 1 if you have the <ldap.h> header file. */
+#undef HAVE_LDAP_H
+
+/* libbz2 */
+#undef HAVE_LIBBZ2
+
+/* libcrypt */
+#undef HAVE_LIBCRYPT
+
+/* libdl */
+#undef HAVE_LIBDL
+
+/* libfam */
+#undef HAVE_LIBFAM
+
+/* liblber */
+#undef HAVE_LIBLBER
+
+/* libldap */
+#undef HAVE_LIBLDAP
+
+/* libpcre */
+#undef HAVE_LIBPCRE
+
+/* Have libssl */
+#undef HAVE_LIBSSL
+
+/* libxml2 */
+#undef HAVE_LIBXML2
+
+/* libxml.h */
+#undef HAVE_LIBXML_H
+
+/* libz */
+#undef HAVE_LIBZ
+
+/* Define to 1 if you have the `localtime_r' function. */
+#undef HAVE_LOCALTIME_R
+
+/* Define to 1 if you have the `lstat' function. */
+#undef HAVE_LSTAT
+
+/* liblua */
+#undef HAVE_LUA
+
+/* lua.h */
+#undef HAVE_LUA_H
+
+/* Define to 1 if you have the `madvise' function. */
+#undef HAVE_MADVISE
+
+/* libmemcache */
+#undef HAVE_MEMCACHE
+
+/* memcache.h */
+#undef HAVE_MEMCACHE_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `memset' function. */
+#undef HAVE_MEMSET
+
+/* Define to 1 if you have the `mmap' function. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* mysql support */
+#undef HAVE_MYSQL
+
+/* Define to 1 if you have the <mysql.h> header file. */
+#undef HAVE_MYSQL_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the <openssl/ssl.h> header file. */
+#undef HAVE_OPENSSL_SSL_H
+
+/* Define to 1 if you have the `pathconf' function. */
+#undef HAVE_PATHCONF
+
+/* Define to 1 if you have the <pcre.h> header file. */
+#undef HAVE_PCRE_H
+
+/* Define to 1 if you have the `poll' function. */
+#undef HAVE_POLL
+
+/* Define to 1 if you have the <poll.h> header file. */
+#undef HAVE_POLL_H
+
+/* Define to 1 if you have the `port_create' function. */
+#undef HAVE_PORT_CREATE
+
+/* Define to 1 if you have the `posix_fadvise' function. */
+#undef HAVE_POSIX_FADVISE
+
+/* Define to 1 if you have the `posix_madvise' function. */
+#undef HAVE_POSIX_MADVISE
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
+/* Define to 1 if you have the `select' function. */
+#undef HAVE_SELECT
+
+/* Define to 1 if you have the `sendfile' function. */
+#undef HAVE_SENDFILE
+
+/* Define to 1 if you have the `sendfile64' function. */
+#undef HAVE_SENDFILE64
+
+/* solaris sendfilev */
+#undef HAVE_SENDFILEV
+
+/* broken sendfile */
+#undef HAVE_SENDFILE_BROKEN
+
+/* Define to 1 if you have the `send_file' function. */
+#undef HAVE_SEND_FILE
+
+/* Define to 1 if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* Define to 1 if you have the `signal' function. */
+#undef HAVE_SIGNAL
+
+/* Define to 1 if you have the `sigtimedwait' function. */
+#undef HAVE_SIGTIMEDWAIT
+
+/* Define to 1 if you have the `socket' function. */
+#undef HAVE_SOCKET
+
+/* Define to 1 if the system has the type `socklen_t'. */
+#undef HAVE_SOCKLEN_T
+
+/* libsqlite3 */
+#undef HAVE_SQLITE3
+
+/* sqlite3.h */
+#undef HAVE_SQLITE3_H
+
+/* Define to 1 if `stat' has the bug that it succeeds when given the
+   zero-length file name argument. */
+#undef HAVE_STAT_EMPTY_STRING_BUG
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strchr' function. */
+#undef HAVE_STRCHR
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the `strftime' function. */
+#undef HAVE_STRFTIME
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strstr' function. */
+#undef HAVE_STRSTR
+
+/* Define to 1 if you have the `strtol' function. */
+#undef HAVE_STRTOL
+
+/* Define to 1 if the system has the type `struct sockaddr_storage'. */
+#undef HAVE_STRUCT_SOCKADDR_STORAGE
+
+/* gmtoff in struct tm */
+#undef HAVE_STRUCT_TM_GMTOFF
+
+/* Define to 1 if you have the <syslog.h> header file. */
+#undef HAVE_SYSLOG_H
+
+/* Define to 1 if you have the <sys/devpoll.h> header file. */
+#undef HAVE_SYS_DEVPOLL_H
+
+/* Define to 1 if you have the <sys/epoll.h> header file. */
+#undef HAVE_SYS_EPOLL_H
+
+/* Define to 1 if you have the <sys/event.h> header file. */
+#undef HAVE_SYS_EVENT_H
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+#undef HAVE_SYS_FILIO_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
+/* Define to 1 if you have the <sys/poll.h> header file. */
+#undef HAVE_SYS_POLL_H
+
+/* Define to 1 if you have the <sys/port.h> header file. */
+#undef HAVE_SYS_PORT_H
+
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+#undef HAVE_SYS_PRCTL_H
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#undef HAVE_SYS_RESOURCE_H
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/sendfile.h> header file. */
+#undef HAVE_SYS_SENDFILE_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/syslimits.h> header file. */
+#undef HAVE_SYS_SYSLIMITS_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/uio.h> header file. */
+#undef HAVE_SYS_UIO_H
+
+/* Define to 1 if you have the <sys/un.h> header file. */
+#undef HAVE_SYS_UN_H
+
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#undef HAVE_SYS_WAIT_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* libuuid */
+#undef HAVE_UUID
+
+/* uuid/uuid.h is available */
+#undef HAVE_UUID_H
+
+/* Define to 1 if you have the <uuid/uuid.h> header file. */
+#undef HAVE_UUID_UUID_H
+
+/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
+#undef HAVE_VALGRIND_VALGRIND_H
+
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
+
+/* Define to 1 if you have the <vfork.h> header file. */
+#undef HAVE_VFORK_H
+
+/* Define to 1 if `fork' works. */
+#undef HAVE_WORKING_FORK
+
+/* Define to 1 if `vfork' works. */
+#undef HAVE_WORKING_VFORK
+
+/* Define to 1 if you have the `writev' function. */
+#undef HAVE_WRITEV
+
+/* libattr */
+#undef HAVE_XATTR
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
+/* lighttpd-version-id */
+#undef LIGHTTPD_VERSION_ID
+
+/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
+   slash. */
+#undef LSTAT_FOLLOWS_SLASHED_SYMLINK
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if the C compiler supports function prototypes. */
+#undef PROTOTYPES
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#undef RETSIGTYPE
+
+/* The size of `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of `off_t', as computed by sizeof. */
+#undef SIZEOF_OFF_T
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to 1 if on AIX 3.
+   System headers sometimes define this.
+   We just want to avoid a redefinition error message.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Define to 1 if type `char' is unsigned and you are not using gcc.  */
+#ifndef __CHAR_UNSIGNED__
+# undef __CHAR_UNSIGNED__
+#endif
+
+/* Define like PROTOTYPES; this can be used by system headers. */
+#undef __PROTOTYPES
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `long int' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define as `fork' if `vfork' does not work. */
+#undef vfork

Added: lighttpd/tags/1.4.19-5+lenny2/config.sub
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/config.sub	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/config.sub	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1616 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation,
+#   Inc.
+
+timestamp='2006-09-20'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco6)
+		os=-sco5v6
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco5v6*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+	| maxq | mb | microblaze | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mips64vr5900 | mips64vr5900el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| mt \
+	| msp430 \
+	| nios | nios2 \
+	| ns16k | ns32k \
+	| or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| score \
+	| sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+	| spu | strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+	ms1)
+		basic_machine=mt-unknown
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* | avr32-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32c-* | m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mips64vr5900-* | mips64vr5900el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| mt-* \
+	| msp430-* \
+	| nios-* | nios2-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	ms1-*)
+		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	openrisc | openrisc-*)
+		basic_machine=or32-unknown
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pc98)
+		basic_machine=i386-pc
+		;;
+	pc98-*)
+		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rdos)
+		basic_machine=i386-pc
+		os=-rdos
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sde)
+		basic_machine=mipsisa32-sde
+		os=-elf
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -openbsd* | -solidbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+	      | -skyos* | -haiku* | -rdos* | -toppers*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+		os=-elf
+		;;
+        spu-*)
+		os=-elf
+		;;
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+        c4x-* | tic4x-*)
+        	os=-coff
+		;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-haiku)
+		os=-haiku
+		;;
+	*-ibm)
+		os=-aix
+		;;
+    	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:


Property changes on: lighttpd/tags/1.4.19-5+lenny2/config.sub
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/configure
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/configure	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/configure	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,29835 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for lighttpd 1.4.19.
+#
+# Report bugs to <jan at kneschke.de>.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  if test $as_have_required = yes && 	 (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  case $as_dir in
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+	   done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+	 # Try only shells that exist, to save several forks.
+	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		{ ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+	       as_have_required=yes
+	       if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+        done
+        export CONFIG_SHELL
+        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell autoconf at gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+	case $1 in
+        -*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string=`eval $cmd`) 2>/dev/null &&
+       echo_test_string=`eval $cmd` &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    IFS="$lt_save_ifs"
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "$0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+tagnames=${tagnames+${tagnames},}CXX
+
+tagnames=${tagnames+${tagnames},}F77
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='lighttpd'
+PACKAGE_TARNAME='lighttpd'
+PACKAGE_VERSION='1.4.19'
+PACKAGE_STRING='lighttpd 1.4.19'
+PACKAGE_BUGREPORT='jan at kneschke.de'
+
+ac_unique_file="src/server.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+target
+target_cpu
+target_vendor
+target_os
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+am__isrc
+CYGPATH_W
+PACKAGE
+VERSION
+ACLOCAL
+AUTOCONF
+AUTOMAKE
+AUTOHEADER
+MAKEINFO
+install_sh
+STRIP
+INSTALL_STRIP_PROGRAM
+mkdir_p
+AWK
+SET_MAKE
+am__leading_dot
+AMTAR
+am__tar
+am__untar
+MAINTAINER_MODE_TRUE
+MAINTAINER_MODE_FALSE
+MAINT
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+DEPDIR
+am__include
+am__quote
+AMDEP_TRUE
+AMDEP_FALSE
+AMDEPBACKSLASH
+CCDEPMODE
+am__fastdepCC_TRUE
+am__fastdepCC_FALSE
+GREP
+EGREP
+CPP
+LN_S
+NO_RDYNAMIC_TRUE
+NO_RDYNAMIC_FALSE
+U
+ANSI2KNR
+ECHO
+AR
+RANLIB
+CXX
+CXXFLAGS
+ac_ct_CXX
+CXXDEPMODE
+am__fastdepCXX_TRUE
+am__fastdepCXX_FALSE
+CXXCPP
+F77
+FFLAGS
+ac_ct_F77
+LIBTOOL
+LIBOBJS
+MYSQL_CONFIG
+MYSQL_LIBS
+MYSQL_INCLUDE
+LDAP_LIB
+LBER_LIB
+ATTR_LIB
+DL_LIB
+SSL_LIB
+PCRECONFIG
+PCRE_LIB
+Z_LIB
+BZ_LIB
+PKG_CONFIG
+FAM_CFLAGS
+FAM_LIBS
+XML_CFLAGS
+XML_LIBS
+SQLITE_CFLAGS
+SQLITE_LIBS
+UUID_LIBS
+GDBM_LIB
+MEMCACHE_LIB
+LUA_CFLAGS
+LUA_LIBS
+CRYPT_LIB
+SENDFILE_LIB
+CROSS_COMPILING_TRUE
+CROSS_COMPILING_FALSE
+CHECK_WITH_FASTCGI_TRUE
+CHECK_WITH_FASTCGI_FALSE
+LTLIBOBJS'
+ac_subst_files=''
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+CXX
+CXXFLAGS
+CCC
+CXXCPP
+F77
+FFLAGS
+PKG_CONFIG
+FAM_CFLAGS
+FAM_LIBS
+XML_CFLAGS
+XML_LIBS
+SQLITE_CFLAGS
+SQLITE_LIBS
+LUA_CFLAGS
+LUA_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)	ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures lighttpd 1.4.19 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR          info documentation [DATAROOTDIR/info]
+  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR           man documentation [DATAROOTDIR/man]
+  --docdir=DIR           documentation root [DATAROOTDIR/doc/lighttpd]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+  --target=TARGET   configure for building compilers for TARGET [HOST]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of lighttpd 1.4.19:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-maintainer-mode  enable make rules and dependencies not useful
+			  (and sometimes confusing) to the casual installer
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-static[=PKGS]  build static libraries [default=no]
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-lfs            Turn on Large File System (default)
+  --disable-ipv6          disable IPv6 support
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-tags[=TAGS]      include additional configurations [automatic]
+  --with-mysql[=PATH]     Include MySQL support. PATH is the path to
+                          'mysql_config'
+  --with-ldap             enable LDAP support
+  --with-attr             enable extended attribute support
+  --with-valgrind         enable internal support for valgrind
+  --with-openssl[=DIR]    Include openssl support (default no)
+  --with-openssl-includes=DIR
+                          OpenSSL includes
+  --with-openssl-libs=DIR OpenSSL libraries
+  --with-kerberos5        use Kerberos5 support with OpenSSL
+  --with-pcre             Enable pcre support (default yes)
+  --with-zlib             Enable zlib support for mod_compress
+  --with-bzip2            Enable bzip2 support for mod_compress
+  --with-fam              fam/gamin for reducing number of stat() calls
+  --with-webdav-props     properties in mod_webdav
+  --with-webdav-locks     locks in mod_webdav
+  --with-gdbm             gdbm storage for mod_trigger_b4_dl
+  --with-memcache         memcached storage for mod_trigger_b4_dl
+  --with-lua              lua engine for mod_cml
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  CXXCPP      C++ preprocessor
+  F77         Fortran 77 compiler command
+  FFLAGS      Fortran 77 compiler flags
+  PKG_CONFIG  path to pkg-config utility
+  FAM_CFLAGS  C compiler flags for FAM, overriding pkg-config
+  FAM_LIBS    linker flags for FAM, overriding pkg-config
+  XML_CFLAGS  C compiler flags for XML, overriding pkg-config
+  XML_LIBS    linker flags for XML, overriding pkg-config
+  SQLITE_CFLAGS
+              C compiler flags for SQLITE, overriding pkg-config
+  SQLITE_LIBS linker flags for SQLITE, overriding pkg-config
+  LUA_CFLAGS  C compiler flags for LUA, overriding pkg-config
+  LUA_LIBS    linker flags for LUA, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <jan at kneschke.de>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+lighttpd configure 1.4.19
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by lighttpd $as_me 1.4.19, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+	"$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+{ echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking target system type" >&5
+echo $ECHO_N "checking target system type... $ECHO_C" >&6; }
+if test "${ac_cv_target+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "x$target_alias" = x; then
+  ac_cv_target=$ac_cv_host
+else
+  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $target_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_target" >&5
+echo "${ECHO_T}$ac_cv_target" >&6; }
+case $ac_cv_target in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical target" >&5
+echo "$as_me: error: invalid value of canonical target" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+target=$ac_cv_target
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_target
+shift
+target_cpu=$1
+target_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+target_os=$*
+IFS=$ac_save_IFS
+case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac
+
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+test -n "$target_alias" &&
+  test "$program_prefix$program_suffix$program_transform_name" = \
+    NONENONEs,x,x, &&
+  program_prefix=${target_alias}-
+
+am__api_version='1.10'
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm -f conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+echo "${ECHO_T}$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  SET_MAKE=
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='lighttpd'
+ VERSION='1.4.19'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+{ echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=no
+fi
+
+  { echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+# Checks for programs.
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6; }
+
+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+{ echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+depcc="$CC"   am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+if test "x$CC" != xcc; then
+  { echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
+echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
+echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6; }
+fi
+set dummy $CC; ac_cc=`echo $2 |
+		      sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+   test -f conftest2.$ac_objext && { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); };
+then
+  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+  if test "x$CC" != xcc; then
+    # Test first that cc exists at all.
+    if { ac_try='cc -c conftest.$ac_ext >&5'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+      rm -f conftest2.*
+      if { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 test -f conftest2.$ac_objext && { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); };
+      then
+	# cc works too.
+	:
+      else
+	# cc exists but doesn't like -o.
+	eval ac_cv_prog_cc_${ac_cc}_c_o=no
+      fi
+    fi
+  fi
+else
+  eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define NO_MINUS_C_MINUS_O 1
+_ACEOF
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+
+
+{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
+echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; }
+if test "${lt_cv_path_SED+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+
+fi
+
+SED=$lt_cv_path_SED
+{ echo "$as_me:$LINENO: result: $SED" >&5
+echo "${ECHO_T}$SED" >&6; }
+
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_GREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+    # Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_GREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_EGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+    # Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_EGREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+
+   fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6; }
+fi
+
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  SET_MAKE=
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+
+
+
+{ echo "$as_me:$LINENO: checking for AIX" >&5
+echo $ECHO_N "checking for AIX... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef _AIX
+  yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define _ALL_SOURCE 1
+_ACEOF
+
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+rm -f conftest*
+
+
+{ echo "$as_me:$LINENO: checking for library containing strerror" >&5
+echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; }
+if test "${ac_cv_search_strerror+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strerror ();
+int
+main ()
+{
+return strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' cposix; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_search_strerror=$ac_res
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_strerror+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_strerror+set}" = set; then
+  :
+else
+  ac_cv_search_strerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5
+echo "${ECHO_T}$ac_cv_search_strerror" >&6; }
+ac_res=$ac_cv_search_strerror
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking minix/config.h usability" >&5
+echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <minix/config.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking minix/config.h presence" >&5
+echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <minix/config.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: minix/config.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_minix_config_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; }
+
+fi
+if test $ac_cv_header_minix_config_h = yes; then
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+if test "$MINIX" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_1_SOURCE 2
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _MINIX 1
+_ACEOF
+
+fi
+
+
+case $host_os in
+	*darwin*|*cygwin*|*aix*|*mingw* ) NO_RDYNAMIC=yes;;
+        * ) NO_RDYNAMIC=no;;
+esac
+ if test x$NO_RDYNAMIC = xyes; then
+  NO_RDYNAMIC_TRUE=
+  NO_RDYNAMIC_FALSE='#'
+else
+  NO_RDYNAMIC_TRUE='#'
+  NO_RDYNAMIC_FALSE=
+fi
+
+
+
+
+{ echo "$as_me:$LINENO: checking for function prototypes" >&5
+echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6; }
+if test "$ac_cv_prog_cc_c89" != no; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define PROTOTYPES 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define __PROTOTYPES 1
+_ACEOF
+
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+if test "$ac_cv_prog_cc_stdc" != no; then
+  U= ANSI2KNR=
+else
+  U=_ ANSI2KNR=./ansi2knr
+fi
+# Ensure some checks needed by ansi2knr itself.
+
+
+for ac_header in string.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=no
+fi
+
+
+
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+# Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+	IFS="$lt_save_ifs"
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; }
+if test "${lt_cv_path_NM+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+	*/dev/null* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
+echo "${ECHO_T}$lt_cv_path_NM" >&6; }
+NM="$lt_cv_path_NM"
+
+{ echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
+echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | kfreebsd*-gnu | dragonfly*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix3*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+nto-qnx*)
+  lt_cv_deplibs_check_method=unknown
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *ELF-32*)
+      HPUX_IA64_MODE="32"
+      ;;
+    *ELF-64*)
+      HPUX_IA64_MODE="64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 5672 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+   if test "$lt_cv_prog_gnu_ld" = yes; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -melf32bsmip"
+      ;;
+    *N32*)
+      LD="${LD-ld} -melf32bmipn32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -melf64bmip"
+      ;;
+    esac
+   else
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+   fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+    *32-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_i386"
+          ;;
+        ppc64-*linux*|powerpc64-*linux*)
+          LD="${LD-ld} -m elf32ppclinux"
+          ;;
+        s390x-*linux*)
+          LD="${LD-ld} -m elf_s390"
+          ;;
+        sparc64-*linux*)
+          LD="${LD-ld} -m elf32_sparc"
+          ;;
+      esac
+      ;;
+    *64-bit*)
+      case $host in
+        x86_64-*linux*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        ppc*-*linux*|powerpc*-*linux*)
+          LD="${LD-ld} -m elf64ppc"
+          ;;
+        s390*-*linux*)
+          LD="${LD-ld} -m elf64_s390"
+          ;;
+        sparc*-*linux*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  lt_cv_cc_needs_belf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	lt_cv_cc_needs_belf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)    LD="${LD-ld} -64" ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CXX" && break
+done
+
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CXX=$ac_ct_CXX
+  fi
+fi
+
+  fi
+fi
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	CXXFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+depcc="$CXX"  am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+
+
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; }
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+fi
+
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$F77"; then
+  ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+  { echo "$as_me:$LINENO: result: $F77" >&5
+echo "${ECHO_T}$F77" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$F77" && break
+  done
+fi
+if test -z "$F77"; then
+  ac_ct_F77=$F77
+  for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_F77"; then
+  ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_F77="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
+echo "${ECHO_T}$ac_ct_F77" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_F77" && break
+done
+
+  if test "x$ac_ct_F77" = x; then
+    F77=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    F77=$ac_ct_F77
+  fi
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.  (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; }
+if test "${ac_cv_f77_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+      program main
+#ifndef __GNUC__
+       choke me
+#endif
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_f77_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; }
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
+echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_f77_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  FFLAGS=-g
+cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_f77_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_f77_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_prog_f77_g=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
+echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; }
+if test "$ac_test_FFLAGS" = set; then
+  FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-g -O2"
+  else
+    FFLAGS="-g"
+  fi
+else
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-O2"
+  else
+    FFLAGS=
+  fi
+fi
+
+G77=`test $ac_compiler_gnu = yes && echo yes`
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
+
+# find the maximum length of command line arguments
+{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
+echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ 	]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    # If test is not a shell built-in, we'll probably end up computing a
+    # maximum length that is only half of the actual maximum length, but
+    # we can't tell.
+    SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+    while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
+	       = "XX$teststring") >/dev/null 2>&1 &&
+	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
+	    lt_cv_sys_max_cmd_len=$new_result &&
+	    test $i != 17 # 1/2 MB should be enough
+    do
+      i=`expr $i + 1`
+      teststring=$teststring$teststring
+    done
+    teststring=
+    # Add a significant safety factor because C++ compilers can tack on massive
+    # amounts of additional arguments before passing them to the linker.
+    # It appears as though 1/2 is a usable value.
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
+echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6; }
+fi
+
+
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
+echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+linux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDGIRSTW]'
+    lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+    lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if grep ' nm_test_var$' "$nlist" >/dev/null; then
+	if grep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_save_LIBS="$LIBS"
+	  lt_save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$lt_save_LIBS"
+	  CFLAGS="$lt_save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6; }
+else
+  { echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6; }
+fi
+
+{ echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6; }
+if test "${lt_cv_objdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
+echo "${ECHO_T}$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e 1s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
+echo "${ECHO_T}$ac_ct_AR" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$SED" && SED=sed
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+enable_dlopen=yes
+enable_win32_dll=no
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+test -z "$pic_mode" && pic_mode=default
+
+# Use C for the default configuration in the libtool script
+tagname=
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}\n'
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+
+
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+
+{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:7929: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:7933: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    interix3*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+      darwin*)
+        # PIC is the default on this platform
+        # Common symbols not allowed in MH_DYLIB files
+       case $cc_basename in
+         xlc*)
+         lt_prog_compiler_pic='-qnocommon'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+       esac
+       ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    linux*)
+      case $cc_basename in
+      icc* | ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic" >&6; }
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+
+{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_pic_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8197: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8201: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_prog_compiler_pic_works=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_static_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_prog_compiler_static_works=yes
+       fi
+     else
+       lt_prog_compiler_static_works=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works" >&6; }
+
+if test x"$lt_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8301: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:8305: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; }
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; }
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  enable_shared_with_static_runtimes=no
+  archive_cmds=
+  archive_expsym_cmds=
+  old_archive_From_new_cmds=
+  old_archive_from_expsyms_cmds=
+  export_dynamic_flag_spec=
+  whole_archive_flag_spec=
+  thread_safe_flag_spec=
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_direct=no
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  link_all_deplibs=unknown
+  hardcode_automatic=no
+  module_cmds=
+  module_expsym_cmds=
+  always_export_symbols=no
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+  # Just being paranoid about ensuring that cc_basename is set.
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>/dev/null` in
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    interix3*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    linux*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	tmp_addflag=
+	case $cc_basename,$host_cpu in
+	pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	esac
+	archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+	if test $supports_anon_versioning = yes; then
+	  archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
+  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+  $echo "local: *; };" >> $output_objdir/$libname.ver~
+	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L=yes
+  	  hardcode_libdir_flag_spec='-L$libdir'
+  	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' ${wl}-bernotok'
+	  allow_undefined_flag=' ${wl}-berok'
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec='$convenience'
+	  archive_cmds_need_lc=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+      case $host_os in
+        rhapsody* | darwin1.[012])
+         allow_undefined_flag='${wl}-undefined ${wl}suppress'
+         ;;
+       *) # Darwin 1.3 on
+         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+           allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+         else
+           case ${MACOSX_DEPLOYMENT_TARGET} in
+             10.[012])
+               allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+               ;;
+             10.*)
+               allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
+               ;;
+           esac
+         fi
+         ;;
+      esac
+      archive_cmds_need_lc=no
+      hardcode_direct=no
+      hardcode_automatic=yes
+      hardcode_shlibpath_var=unsupported
+      whole_archive_flag_spec=''
+      link_all_deplibs=yes
+    if test "$GCC" = yes ; then
+    	output_verbose_link_cmd='echo'
+        archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+      archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      case $cc_basename in
+        xlc*)
+         output_verbose_link_cmd='echo'
+         archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+         module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+         archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          ;;
+       *)
+         ld_shlibs=no
+          ;;
+      esac
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+
+	hardcode_direct=yes
+	export_dynamic_flag_spec='${wl}-E'
+
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_libdir_flag_spec_ld='+b $libdir'
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  export_dynamic_flag_spec='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      link_all_deplibs=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    openbsd*)
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z text'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	wlarc=''
+	archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+ 	# The compiler driver will combine linker options so we
+ 	# cannot just pass the convience library names through
+ 	# without $wl, iff we do not link with $LD.
+ 	# Luckily, gcc supports the same syntax we need for Sun Studio.
+ 	# Supported since Solaris 2.6 (maybe 2.5.1?)
+ 	case $wlarc in
+ 	'')
+ 	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+ 	*)
+ 	  whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ 	esac ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+  fi
+
+{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+	pic_flag=$lt_prog_compiler_pic
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc=no
+        else
+	  archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
+echo "${ECHO_T}$archive_cmds_need_lc" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; }
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  freebsd*) # from 4.6 on
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix3*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+    shlibpath_overrides_runpath=no
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    shlibpath_overrides_runpath=yes
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var" || \
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+striplib=
+old_striplib=
+{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+   darwin*)
+       if test -n "$STRIP" ; then
+         striplib="$STRIP -x"
+         { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+       else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+       ;;
+   *)
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+    ;;
+  esac
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+   ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_dl_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+   ;;
+
+  *)
+    { echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; }
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_shl_load || defined __stub___shl_load
+choke me
+#endif
+
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_func_shl_load=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6; }
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_dld_shl_load=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; }
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  { echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; }
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_dlopen || defined __stub___dlopen
+choke me
+#endif
+
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_func_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6; }
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_dl_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_svld_dlopen=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; }
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_dld_dld_link=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; }
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 10609 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 10709 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+# Report which library types will actually be built
+{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6; }
+
+{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; }
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case $host_os in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+    ;;
+esac
+{ echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6; }
+
+{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; }
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+{ echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6; }
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler \
+    CC \
+    LD \
+    lt_prog_compiler_wl \
+    lt_prog_compiler_pic \
+    lt_prog_compiler_static \
+    lt_prog_compiler_no_builtin_flag \
+    export_dynamic_flag_spec \
+    thread_safe_flag_spec \
+    whole_archive_flag_spec \
+    enable_shared_with_static_runtimes \
+    old_archive_cmds \
+    old_archive_from_new_cmds \
+    predep_objects \
+    postdep_objects \
+    predeps \
+    postdeps \
+    compiler_lib_search_path \
+    archive_cmds \
+    archive_expsym_cmds \
+    postinstall_cmds \
+    postuninstall_cmds \
+    old_archive_from_expsyms_cmds \
+    allow_undefined_flag \
+    no_undefined_flag \
+    export_symbols_cmds \
+    hardcode_libdir_flag_spec \
+    hardcode_libdir_flag_spec_ld \
+    hardcode_libdir_separator \
+    hardcode_automatic \
+    module_cmds \
+    module_expsym_cmds \
+    lt_cv_prog_compiler_c_o \
+    exclude_expsyms \
+    include_expsyms; do
+
+    case $var in
+    old_archive_cmds | \
+    old_archive_from_new_cmds | \
+    archive_cmds | \
+    archive_expsym_cmds | \
+    module_cmds | \
+    module_expsym_cmds | \
+    old_archive_from_expsyms_cmds | \
+    export_symbols_cmds | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="${ofile}T"
+  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+  $rm -f "$cfgfile"
+  { echo "$as_me:$LINENO: creating $ofile" >&5
+echo "$as_me: creating $ofile" >&6;}
+
+  cat <<__EOF__ >> "$cfgfile"
+#! $SHELL
+
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+#
+# This file is part of GNU Libtool:
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="$SED -e 1s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# The names of the tagged configurations supported by this script.
+available_tags=
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
+# A language-specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "$cfgfile"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" || \
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+# Check whether --with-tags was given.
+if test "${with_tags+set}" = set; then
+  withval=$with_tags; tagnames="$withval"
+fi
+
+
+if test -f "$ltmain" && test -n "$tagnames"; then
+  if test ! -f "${ofile}"; then
+    { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
+  fi
+
+  if test -z "$LTCC"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
+    if test -z "$LTCC"; then
+      { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
+echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
+    else
+      { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
+echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
+    fi
+  fi
+  if test -z "$LTCFLAGS"; then
+    eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
+  fi
+
+  # Extract list of available tagged configurations in $ofile.
+  # Note that this assumes the entire list is on one line.
+  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
+
+  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+  for tagname in $tagnames; do
+    IFS="$lt_save_ifs"
+    # Check whether tagname contains only valid characters
+    case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
+    "") ;;
+    *)  { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
+echo "$as_me: error: invalid tag name: $tagname" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+    esac
+
+    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
+    then
+      { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
+echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+
+    # Update the list of available tags.
+    if test -n "$tagname"; then
+      echo appending configuration tag \"$tagname\" to $ofile
+
+      case $tagname in
+      CXX)
+	if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+	    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+	    (test "X$CXX" != "Xg++"))) ; then
+	  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+
+
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_flag_spec_ld_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_LD=$LD
+lt_save_GCC=$GCC
+GCC=$GXX
+lt_save_with_gnu_ld=$with_gnu_ld
+lt_save_path_LD=$lt_cv_path_LD
+if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+else
+  $as_unset lt_cv_prog_gnu_ld
+fi
+if test -n "${lt_cv_path_LDCXX+set}"; then
+  lt_cv_path_LD=$lt_cv_path_LDCXX
+else
+  $as_unset lt_cv_path_LD
+fi
+test -z "${LDCXX+set}" || LD=$LDCXX
+CC=${CXX-"c++"}
+compiler=$CC
+compiler_CXX=$CC
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# We don't want -fno-exception wen compiling C++ code, so set the
+# no_builtin_flag separately
+if test "$GXX" = yes; then
+  lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+else
+  lt_prog_compiler_no_builtin_flag_CXX=
+fi
+
+if test "$GXX" = yes; then
+  # Set up default GNU C++ configuration
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { echo "$as_me:$LINENO: checking for ld used by $CC" >&5
+echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break
+	;;
+      *)
+	test "$with_gnu_ld" != yes && break
+	;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+  # Check if GNU C++ uses GNU ld as the underlying linker, since the
+  # archiving commands below assume that GNU ld is being used.
+  if test "$with_gnu_ld" = yes; then
+    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+    #     investigate it a little bit more. (MM)
+    wlarc='${wl}'
+
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
+	grep 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec_CXX=
+    fi
+  else
+    with_gnu_ld=no
+    wlarc=
+
+    # A generic and very simple default shared library creation
+    # command for GNU C++ for the case where it uses the native
+    # linker, instead of GNU ld.  If possible, this setting should
+    # overridden to take advantage of the native linker features on
+    # the platform it is being used on.
+    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+  fi
+
+  # Commands to make compiler produce verbose output that lists
+  # what "hidden" libraries, object files and flags are used when
+  # linking a shared library.
+  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+else
+  GXX=no
+  with_gnu_ld=no
+  wlarc=
+fi
+
+# PORTME: fill in a description of your system's C++ link characteristics
+{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+ld_shlibs_CXX=yes
+case $host_os in
+  aix3*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  case $ld_flag in
+	  *-brtl*)
+	    aix_use_runtimelinking=yes
+	    break
+	    ;;
+	  esac
+	done
+	;;
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    archive_cmds_CXX=''
+    hardcode_direct_CXX=yes
+    hardcode_libdir_separator_CXX=':'
+    link_all_deplibs_CXX=yes
+
+    if test "$GXX" = yes; then
+      case $host_os in aix4.[012]|aix4.[012].*)
+      # We only want to do this on AIX 4.2 and lower, the check
+      # below for broken collect2 doesn't work under 4.3+
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct_CXX=yes
+	else
+	  # We have old collect2
+	  hardcode_direct_CXX=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L_CXX=yes
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  hardcode_libdir_separator_CXX=
+	fi
+	;;
+      esac
+      shared_flag='-shared'
+      if test "$aix_use_runtimelinking" = yes; then
+	shared_flag="$shared_flag "'${wl}-G'
+      fi
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	shared_flag='-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall does not export symbols beginning with
+    # underscore (_), so it is better to generate a list of symbols to export.
+    always_export_symbols_CXX=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag_CXX='-berok'
+      # Determine the default libpath from the value encoded in an empty executable.
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+      hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+      archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+     else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag_CXX="-z nodefs"
+	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+      else
+	# Determine the default libpath from the value encoded in an empty executable.
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	no_undefined_flag_CXX=' ${wl}-bernotok'
+	allow_undefined_flag_CXX=' ${wl}-berok'
+	# Exported symbols can be pulled into shared objects from archives
+	whole_archive_flag_spec_CXX='$convenience'
+	archive_cmds_need_lc_CXX=yes
+	# This is similar to how AIX traditionally builds its shared libraries.
+	archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+      fi
+    fi
+    ;;
+
+  beos*)
+    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+      allow_undefined_flag_CXX=unsupported
+      # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+      # support --undefined.  This deserves some investigation.  FIXME
+      archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    else
+      ld_shlibs_CXX=no
+    fi
+    ;;
+
+  chorus*)
+    case $cc_basename in
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+    # as there is no search path for DLLs.
+    hardcode_libdir_flag_spec_CXX='-L$libdir'
+    allow_undefined_flag_CXX=unsupported
+    always_export_symbols_CXX=no
+    enable_shared_with_static_runtimes_CXX=yes
+
+    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+      archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      # If the export-symbols file already is a .def file (1st line
+      # is EXPORTS), use it as is; otherwise, prepend...
+      archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname.def;
+      else
+	echo EXPORTS > $output_objdir/$soname.def;
+	cat $export_symbols >> $output_objdir/$soname.def;
+      fi~
+      $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+    else
+      ld_shlibs_CXX=no
+    fi
+  ;;
+      darwin* | rhapsody*)
+        case $host_os in
+        rhapsody* | darwin1.[012])
+         allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress'
+         ;;
+       *) # Darwin 1.3 on
+         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+           allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+         else
+           case ${MACOSX_DEPLOYMENT_TARGET} in
+             10.[012])
+               allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+               ;;
+             10.*)
+               allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup'
+               ;;
+           esac
+         fi
+         ;;
+        esac
+      archive_cmds_need_lc_CXX=no
+      hardcode_direct_CXX=no
+      hardcode_automatic_CXX=yes
+      hardcode_shlibpath_var_CXX=unsupported
+      whole_archive_flag_spec_CXX=''
+      link_all_deplibs_CXX=yes
+
+    if test "$GXX" = yes ; then
+      lt_int_apple_cc_single_mod=no
+      output_verbose_link_cmd='echo'
+      if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
+       lt_int_apple_cc_single_mod=yes
+      fi
+      if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+       archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      else
+          archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+        fi
+        module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+        # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+          if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
+            archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          else
+            archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          fi
+            module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      else
+      case $cc_basename in
+        xlc*)
+         output_verbose_link_cmd='echo'
+          archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+          module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+          archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          ;;
+       *)
+         ld_shlibs_CXX=no
+          ;;
+      esac
+      fi
+        ;;
+
+  dgux*)
+    case $cc_basename in
+      ec++*)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      ghcx*)
+	# Green Hills C++ Compiler
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  freebsd[12]*)
+    # C++ shared libraries reported to be fairly broken before switch to ELF
+    ld_shlibs_CXX=no
+    ;;
+  freebsd-elf*)
+    archive_cmds_need_lc_CXX=no
+    ;;
+  freebsd* | kfreebsd*-gnu | dragonfly*)
+    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+    # conventions
+    ld_shlibs_CXX=yes
+    ;;
+  gnu*)
+    ;;
+  hpux9*)
+    hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator_CXX=:
+    export_dynamic_flag_spec_CXX='${wl}-E'
+    hardcode_direct_CXX=yes
+    hardcode_minus_L_CXX=yes # Not in the search PATH,
+				# but as the default
+				# location of the library.
+
+    case $cc_basename in
+    CC*)
+      # FIXME: insert proper C++ library support
+      ld_shlibs_CXX=no
+      ;;
+    aCC*)
+      archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      #
+      # There doesn't appear to be a way to prevent this compiler from
+      # explicitly linking system object files so we need to strip them
+      # from the output so that they don't get included in the library
+      # dependencies.
+      output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+      ;;
+    *)
+      if test "$GXX" = yes; then
+        archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+      fi
+      ;;
+    esac
+    ;;
+  hpux10*|hpux11*)
+    if test $with_gnu_ld = no; then
+      hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_CXX=:
+
+      case $host_cpu in
+      hppa*64*|ia64*)
+	hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
+        ;;
+      *)
+	export_dynamic_flag_spec_CXX='${wl}-E'
+        ;;
+      esac
+    fi
+    case $host_cpu in
+    hppa*64*|ia64*)
+      hardcode_direct_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      ;;
+    *)
+      hardcode_direct_CXX=yes
+      hardcode_minus_L_CXX=yes # Not in the search PATH,
+					      # but as the default
+					      # location of the library.
+      ;;
+    esac
+
+    case $cc_basename in
+      CC*)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      aCC*)
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	  ;;
+	esac
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test $with_gnu_ld = no; then
+	    case $host_cpu in
+	    hppa*64*)
+	      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    ia64*)
+	      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    *)
+	      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      ;;
+	    esac
+	  fi
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  interix3*)
+    hardcode_direct_CXX=no
+    hardcode_shlibpath_var_CXX=no
+    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+    export_dynamic_flag_spec_CXX='${wl}-E'
+    # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+    # Instead, shared libraries are loaded at an image base (0x10000000 by
+    # default) and relocated if they conflict, which is a slow very memory
+    # consuming and fragmenting process.  To avoid this, we pick a random,
+    # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+    # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+    archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+    archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+    ;;
+  irix5* | irix6*)
+    case $cc_basename in
+      CC*)
+	# SGI C++
+	archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	# Archives containing C++ object files must be created using
+	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	;;
+      *)
+	if test "$GXX" = yes; then
+	  if test "$with_gnu_ld" = no; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	  else
+	    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
+	  fi
+	fi
+	link_all_deplibs_CXX=yes
+	;;
+    esac
+    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator_CXX=:
+    ;;
+  linux*)
+    case $cc_basename in
+      KCC*)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+
+	hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	;;
+      icpc*)
+	# Intel C++
+	with_gnu_ld=yes
+	# version 8.0 and above of icpc choke on multiply defined symbols
+	# if we add $predep_objects and $postdep_objects, however 7.1 and
+	# earlier do not add the objects themselves.
+	case `$CC -V 2>&1` in
+	*"Version 7."*)
+  	  archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+  	  archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  ;;
+	*)  # Version 8.0 or newer
+	  tmp_idyn=
+	  case $host_cpu in
+	    ia64*) tmp_idyn=' -i_dynamic';;
+	  esac
+  	  archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	  archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+	  ;;
+	esac
+	archive_cmds_need_lc_CXX=no
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+	;;
+      pgCC*)
+        # Portland Group C++ compiler
+	archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+  	archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
+	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+	whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+        ;;
+      cxx*)
+	# Compaq C++
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+	runpath_var=LD_RUN_PATH
+	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+    esac
+    ;;
+  lynxos*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  m88k*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  mvs*)
+    case $cc_basename in
+      cxx*)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+      wlarc=
+      hardcode_libdir_flag_spec_CXX='-R$libdir'
+      hardcode_direct_CXX=yes
+      hardcode_shlibpath_var_CXX=no
+    fi
+    # Workaround some broken pre-1.5 toolchains
+    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+    ;;
+  openbsd2*)
+    # C++ shared libraries are fairly broken
+    ld_shlibs_CXX=no
+    ;;
+  openbsd*)
+    hardcode_direct_CXX=yes
+    hardcode_shlibpath_var_CXX=no
+    archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+      export_dynamic_flag_spec_CXX='${wl}-E'
+      whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    fi
+    output_verbose_link_cmd='echo'
+    ;;
+  osf3*)
+    case $cc_basename in
+      KCC*)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Archives containing C++ object files must be created using
+	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+
+	;;
+      RCC*)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      cxx*)
+	allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	  archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  osf4* | osf5*)
+    case $cc_basename in
+      KCC*)
+	# Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	# KCC will only create a shared library if the output file
+	# ends with ".so" (or ".sl" for HP-UX), so rename the library
+	# to its proper name (with version) after linking.
+	archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Archives containing C++ object files must be created using
+	# the KAI C++ compiler.
+	old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
+	;;
+      RCC*)
+	# Rational C++ 2.4.1
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      cxx*)
+	allow_undefined_flag_CXX=' -expect_unresolved \*'
+	archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+	  echo "-hidden">> $lib.exp~
+	  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp  `test -n "$verstring" && echo -set_version	$verstring` -update_registry ${output_objdir}/so_locations -o $lib~
+	  $rm $lib.exp'
+
+	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	hardcode_libdir_separator_CXX=:
+
+	# Commands to make compiler produce verbose output that lists
+	# what "hidden" libraries, object files and flags are used when
+	# linking a shared library.
+	#
+	# There doesn't appear to be a way to prevent this compiler from
+	# explicitly linking system object files so we need to strip them
+	# from the output so that they don't get included in the library
+	# dependencies.
+	output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
+	;;
+      *)
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
+	 archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+	  # Commands to make compiler produce verbose output that lists
+	  # what "hidden" libraries, object files and flags are used when
+	  # linking a shared library.
+	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
+
+	else
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	fi
+	;;
+    esac
+    ;;
+  psos*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  sunos4*)
+    case $cc_basename in
+      CC*)
+	# Sun C++ 4.x
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      lcc*)
+	# Lucid
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  solaris*)
+    case $cc_basename in
+      CC*)
+	# Sun C++ 4.2, 5.x and Centerline C++
+        archive_cmds_need_lc_CXX=yes
+	no_undefined_flag_CXX=' -zdefs'
+	archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	$CC -G${allow_undefined_flag}  ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	hardcode_libdir_flag_spec_CXX='-R$libdir'
+	hardcode_shlibpath_var_CXX=no
+	case $host_os in
+	  solaris2.[0-5] | solaris2.[0-5].*) ;;
+	  *)
+	    # The C++ compiler is used as linker so we must use $wl
+	    # flag to pass the commands to the underlying system
+	    # linker. We must also pass each convience library through
+	    # to the system linker between allextract/defaultextract.
+	    # The C++ compiler will combine linker options so we
+	    # cannot just pass the convience library names through
+	    # without $wl.
+	    # Supported since Solaris 2.6 (maybe 2.5.1?)
+	    whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
+	    ;;
+	esac
+	link_all_deplibs_CXX=yes
+
+	output_verbose_link_cmd='echo'
+
+	# Archives containing C++ object files must be created using
+	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	# necessary to make sure instantiated templates are included
+	# in the archive.
+	old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	;;
+      gcx*)
+	# Green Hills C++ Compiler
+	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+	# The C++ compiler must be used to create the archive.
+	old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	;;
+      *)
+	# GNU C++ compiler with Solaris linker
+	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+	  no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
+	  if $CC --version | grep -v '^2\.7' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  else
+	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
+	    # platform.
+	    archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
+	  fi
+
+	  hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
+	fi
+	;;
+    esac
+    ;;
+  sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+    no_undefined_flag_CXX='${wl}-z,text'
+    archive_cmds_need_lc_CXX=no
+    hardcode_shlibpath_var_CXX=no
+    runpath_var='LD_RUN_PATH'
+
+    case $cc_basename in
+      CC*)
+	archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      *)
+	archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+    esac
+    ;;
+  sysv5* | sco3.2v5* | sco5v6*)
+    # Note: We can NOT use -z defs as we might desire, because we do not
+    # link with -lc, and that would cause any symbols used from libc to
+    # always be unresolved, which means just about no library would
+    # ever link correctly.  If we're not using GNU ld we use -z text
+    # though, which does catch some bad symbols but isn't as heavy-handed
+    # as -z defs.
+    # For security reasons, it is highly recommended that you always
+    # use absolute paths for naming shared libraries, and exclude the
+    # DT_RUNPATH tag from executables and libraries.  But doing so
+    # requires that you compile everything twice, which is a pain.
+    # So that behaviour is only enabled if SCOABSPATH is set to a
+    # non-empty value in the environment.  Most likely only useful for
+    # creating official distributions of packages.
+    # This is a hack until libtool officially supports absolute path
+    # names for shared libraries.
+    no_undefined_flag_CXX='${wl}-z,text'
+    allow_undefined_flag_CXX='${wl}-z,nodefs'
+    archive_cmds_need_lc_CXX=no
+    hardcode_shlibpath_var_CXX=no
+    hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+    hardcode_libdir_separator_CXX=':'
+    link_all_deplibs_CXX=yes
+    export_dynamic_flag_spec_CXX='${wl}-Bexport'
+    runpath_var='LD_RUN_PATH'
+
+    case $cc_basename in
+      CC*)
+	archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      *)
+	archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+    esac
+    ;;
+  tandem*)
+    case $cc_basename in
+      NCC*)
+	# NonStop-UX NCC 3.20
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+      *)
+	# FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
+    esac
+    ;;
+  vxworks*)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+  *)
+    # FIXME: insert proper C++ library support
+    ld_shlibs_CXX=no
+    ;;
+esac
+{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+GCC_CXX="$GXX"
+LD_CXX="$LD"
+
+
+cat > conftest.$ac_ext <<EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  # The `*' in the case matches for architectures that use `case' in
+  # $output_verbose_cmd can trigger glob expansion during the loop
+  # eval without this substitution.
+  output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
+
+  for p in `eval $output_verbose_link_cmd`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" \
+	  || test $p = "-R"; then
+	 prev=$p
+	 continue
+       else
+	 prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 case $p in
+	 -L* | -R*)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX="${prev}${p}"
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       else
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX="${prev}${p}"
+	 else
+	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
+	 fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX="$p"
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX="$p"
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling CXX test program"
+fi
+
+$rm -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix3*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    postdeps_CXX='-lCstd -lCrun'
+    ;;
+  esac
+  ;;
+esac
+
+
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+
+lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
+
+{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
+
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | os2* | pw32*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    interix3*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *)
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix4* | aix5*)
+	# All AIX code is PIC.
+	if test "$host_cpu" = ia64; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+       darwin*)
+         # PIC is the default on this platform
+         # Common symbols not allowed in MH_DYLIB files
+         case $cc_basename in
+           xlc*)
+           lt_prog_compiler_pic_CXX='-qnocommon'
+           lt_prog_compiler_wl_CXX='-Wl,'
+           ;;
+         esac
+       ;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | kfreebsd*-gnu | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    if test "$host_cpu" != ia64; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux*)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  icpc* | ecpc*)
+	    # Intel C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  pgCC*)
+	    # Portland Group C++ compiler.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fpic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
+
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; }
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+
+{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_CXX=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:13045: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:13049: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6; }
+
+if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
+
+fi
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_static_works_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_static_works_CXX=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6; }
+
+if test x"$lt_prog_compiler_static_works_CXX" = xyes; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
+
+
+{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:13149: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:13153: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; }
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix4* | aix5*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX="$ltdll_cmds"
+  ;;
+  cygwin* | mingw*)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+
+{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
+echo "${ECHO_T}$ld_shlibs_CXX" >&6; }
+test "$ld_shlibs_CXX" = no && can_build_shared=no
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_CXX
+	pic_flag=$lt_prog_compiler_pic_CXX
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+        allow_undefined_flag_CXX=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_CXX=no
+        else
+	  archive_cmds_need_lc_CXX=yes
+        fi
+        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; }
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  freebsd*) # from 4.6 on
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix3*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+    shlibpath_overrides_runpath=no
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    shlibpath_overrides_runpath=yes
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" || \
+   test -n "$runpath_var_CXX" || \
+   test "X$hardcode_automatic_CXX" = "Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_CXX" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
+     test "$hardcode_minus_L_CXX" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
+echo "${ECHO_T}$hardcode_action_CXX" >&6; }
+
+if test "$hardcode_action_CXX" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_CXX \
+    CC_CXX \
+    LD_CXX \
+    lt_prog_compiler_wl_CXX \
+    lt_prog_compiler_pic_CXX \
+    lt_prog_compiler_static_CXX \
+    lt_prog_compiler_no_builtin_flag_CXX \
+    export_dynamic_flag_spec_CXX \
+    thread_safe_flag_spec_CXX \
+    whole_archive_flag_spec_CXX \
+    enable_shared_with_static_runtimes_CXX \
+    old_archive_cmds_CXX \
+    old_archive_from_new_cmds_CXX \
+    predep_objects_CXX \
+    postdep_objects_CXX \
+    predeps_CXX \
+    postdeps_CXX \
+    compiler_lib_search_path_CXX \
+    archive_cmds_CXX \
+    archive_expsym_cmds_CXX \
+    postinstall_cmds_CXX \
+    postuninstall_cmds_CXX \
+    old_archive_from_expsyms_cmds_CXX \
+    allow_undefined_flag_CXX \
+    no_undefined_flag_CXX \
+    export_symbols_cmds_CXX \
+    hardcode_libdir_flag_spec_CXX \
+    hardcode_libdir_flag_spec_ld_CXX \
+    hardcode_libdir_separator_CXX \
+    hardcode_automatic_CXX \
+    module_cmds_CXX \
+    module_expsym_cmds_CXX \
+    lt_cv_prog_compiler_c_o_CXX \
+    exclude_expsyms_CXX \
+    include_expsyms_CXX; do
+
+    case $var in
+    old_archive_cmds_CXX | \
+    old_archive_from_new_cmds_CXX | \
+    archive_cmds_CXX | \
+    archive_expsym_cmds_CXX | \
+    module_cmds_CXX | \
+    module_expsym_cmds_CXX | \
+    old_archive_from_expsyms_cmds_CXX | \
+    export_symbols_cmds_CXX | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
+# A language-specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_CXX
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_CXX
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_CXX
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_CXX
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_CXX
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_CXX
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_CXX
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_CXX"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC=$lt_save_CC
+LDCXX=$LD
+LD=$lt_save_LD
+GCC=$lt_save_GCC
+with_gnu_ldcxx=$with_gnu_ld
+with_gnu_ld=$lt_save_with_gnu_ld
+lt_cv_path_LDCXX=$lt_cv_path_LD
+lt_cv_path_LD=$lt_save_path_LD
+lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      F77)
+	if test -n "$F77" && test "X$F77" != "Xno"; then
+
+ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+
+archive_cmds_need_lc_F77=no
+allow_undefined_flag_F77=
+always_export_symbols_F77=no
+archive_expsym_cmds_F77=
+export_dynamic_flag_spec_F77=
+hardcode_direct_F77=no
+hardcode_libdir_flag_spec_F77=
+hardcode_libdir_flag_spec_ld_F77=
+hardcode_libdir_separator_F77=
+hardcode_minus_L_F77=no
+hardcode_automatic_F77=no
+module_cmds_F77=
+module_expsym_cmds_F77=
+link_all_deplibs_F77=unknown
+old_archive_cmds_F77=$old_archive_cmds
+no_undefined_flag_F77=
+whole_archive_flag_spec_F77=
+enable_shared_with_static_runtimes_F77=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+objext_F77=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="      program t\n      end\n"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${F77-"f77"}
+compiler=$CC
+compiler_F77=$CC
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6; }
+
+{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; }
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case $host_os in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+aix4* | aix5*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+esac
+{ echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6; }
+
+{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; }
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+{ echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6; }
+
+GCC_F77="$G77"
+LD_F77="$LD"
+
+lt_prog_compiler_wl_F77=
+lt_prog_compiler_pic_F77=
+lt_prog_compiler_static_F77=
+
+{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl_F77='-Wl,'
+    lt_prog_compiler_static_F77='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_F77='-fno-common'
+      ;;
+
+    interix3*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_F77=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_F77=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic_F77='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      else
+	lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+      darwin*)
+        # PIC is the default on this platform
+        # Common symbols not allowed in MH_DYLIB files
+       case $cc_basename in
+         xlc*)
+         lt_prog_compiler_pic_F77='-qnocommon'
+         lt_prog_compiler_wl_F77='-Wl,'
+         ;;
+       esac
+       ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    linux*)
+      case $cc_basename in
+      icc* | ecc*)
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-KPIC'
+	lt_prog_compiler_static_F77='-static'
+        ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-fpic'
+	lt_prog_compiler_static_F77='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl_F77='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_F77='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+	lt_prog_compiler_wl_F77='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl_F77='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_F77='-Qoption ld '
+      lt_prog_compiler_pic_F77='-PIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic_F77='-Kconform_pic'
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_can_build_shared_F77=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_F77='-pic'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_F77=no
+      ;;
+    esac
+  fi
+
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; }
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_F77"; then
+
+{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_F77=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_F77"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:14719: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:14723: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_prog_compiler_pic_works_F77=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6; }
+
+if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
+    case $lt_prog_compiler_pic_F77 in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
+     esac
+else
+    lt_prog_compiler_pic_F77=
+     lt_prog_compiler_can_build_shared_F77=no
+fi
+
+fi
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_F77=
+    ;;
+  *)
+    lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
+    ;;
+esac
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_static_works_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_static_works_F77=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_prog_compiler_static_works_F77=yes
+       fi
+     else
+       lt_prog_compiler_static_works_F77=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6; }
+
+if test x"$lt_prog_compiler_static_works_F77" = xyes; then
+    :
+else
+    lt_prog_compiler_static_F77=
+fi
+
+
+{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_F77=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:14823: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:14827: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_F77=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; }
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; }
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+
+  runpath_var=
+  allow_undefined_flag_F77=
+  enable_shared_with_static_runtimes_F77=no
+  archive_cmds_F77=
+  archive_expsym_cmds_F77=
+  old_archive_From_new_cmds_F77=
+  old_archive_from_expsyms_cmds_F77=
+  export_dynamic_flag_spec_F77=
+  whole_archive_flag_spec_F77=
+  thread_safe_flag_spec_F77=
+  hardcode_libdir_flag_spec_F77=
+  hardcode_libdir_flag_spec_ld_F77=
+  hardcode_libdir_separator_F77=
+  hardcode_direct_F77=no
+  hardcode_minus_L_F77=no
+  hardcode_shlibpath_var_F77=unsupported
+  link_all_deplibs_F77=unknown
+  hardcode_automatic_F77=no
+  module_cmds_F77=
+  module_expsym_cmds_F77=
+  always_export_symbols_F77=no
+  export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_F77=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+  # Just being paranoid about ensuring that cc_basename is set.
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_F77=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec_F77='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+	whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec_F77=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>/dev/null` in
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs_F77=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs_F77=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_F77=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=no
+      enable_shared_with_static_runtimes_F77=yes
+      export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    interix3*)
+      hardcode_direct_F77=no
+      hardcode_shlibpath_var_F77=no
+      hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec_F77='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    linux*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	tmp_addflag=
+	case $cc_basename,$host_cpu in
+	pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	esac
+	archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+	if test $supports_anon_versioning = yes; then
+	  archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
+  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+  $echo "local: *; };" >> $output_objdir/$libname.ver~
+	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	fi
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_F77=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs_F77=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+	    archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+	    archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+	  else
+	    ld_shlibs_F77=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs_F77" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec_F77=
+      export_dynamic_flag_spec_F77=
+      whole_archive_flag_spec_F77=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=yes
+      archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_F77=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_F77=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_F77=''
+      hardcode_direct_F77=yes
+      hardcode_libdir_separator_F77=':'
+      link_all_deplibs_F77=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct_F77=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct_F77=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L_F77=yes
+  	  hardcode_libdir_flag_spec_F77='-L$libdir'
+  	  hardcode_libdir_separator_F77=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_F77=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_F77='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_f77_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_F77="-z nodefs"
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_f77_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_F77=' ${wl}-bernotok'
+	  allow_undefined_flag_F77=' ${wl}-berok'
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec_F77='$convenience'
+	  archive_cmds_need_lc_F77=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs_F77=no
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec_F77=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec_F77=' '
+      allow_undefined_flag_F77=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds_F77='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes_F77=yes
+      ;;
+
+    darwin* | rhapsody*)
+      case $host_os in
+        rhapsody* | darwin1.[012])
+         allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'
+         ;;
+       *) # Darwin 1.3 on
+         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+           allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+         else
+           case ${MACOSX_DEPLOYMENT_TARGET} in
+             10.[012])
+               allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+               ;;
+             10.*)
+               allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup'
+               ;;
+           esac
+         fi
+         ;;
+      esac
+      archive_cmds_need_lc_F77=no
+      hardcode_direct_F77=no
+      hardcode_automatic_F77=yes
+      hardcode_shlibpath_var_F77=unsupported
+      whole_archive_flag_spec_F77=''
+      link_all_deplibs_F77=yes
+    if test "$GCC" = yes ; then
+    	output_verbose_link_cmd='echo'
+        archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+      archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      case $cc_basename in
+        xlc*)
+         output_verbose_link_cmd='echo'
+         archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+         module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+         archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          ;;
+       *)
+         ld_shlibs_F77=no
+          ;;
+      esac
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs_F77=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu | dragonfly*)
+      archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_direct_F77=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_F77=yes
+      export_dynamic_flag_spec_F77='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator_F77=:
+
+	hardcode_direct_F77=yes
+	export_dynamic_flag_spec_F77='${wl}-E'
+
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L_F77=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator_F77=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_libdir_flag_spec_ld_F77='+b $libdir'
+	  hardcode_direct_F77=no
+	  hardcode_shlibpath_var_F77=no
+	  ;;
+	*)
+	  hardcode_direct_F77=yes
+	  export_dynamic_flag_spec_F77='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_F77=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      link_all_deplibs_F77=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    newsos6)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    openbsd*)
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_F77='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec_F77='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      allow_undefined_flag_F77=unsupported
+      archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_F77='-rpath $libdir'
+      fi
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    solaris*)
+      no_undefined_flag_F77=' -z text'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	wlarc=''
+	archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_shlibpath_var_F77=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+ 	# The compiler driver will combine linker options so we
+ 	# cannot just pass the convience library names through
+ 	# without $wl, iff we do not link with $LD.
+ 	# Luckily, gcc supports the same syntax we need for Sun Studio.
+ 	# Supported since Solaris 2.6 (maybe 2.5.1?)
+ 	case $wlarc in
+ 	'')
+ 	  whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
+ 	*)
+ 	  whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ 	esac ;;
+      esac
+      link_all_deplibs_F77=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_F77='$CC -r -o $output$reload_objs'
+	  hardcode_direct_F77=no
+        ;;
+	motorola)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_F77=no
+      export_dynamic_flag_spec_F77='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_F77=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_F77=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+      no_undefined_flag_F77='${wl}-z,text'
+      archive_cmds_need_lc_F77=no
+      hardcode_shlibpath_var_F77=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag_F77='${wl}-z,text'
+      allow_undefined_flag_F77='${wl}-z,nodefs'
+      archive_cmds_need_lc_F77=no
+      hardcode_shlibpath_var_F77=no
+      hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator_F77=':'
+      link_all_deplibs_F77=yes
+      export_dynamic_flag_spec_F77='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    *)
+      ld_shlibs_F77=no
+      ;;
+    esac
+  fi
+
+{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
+echo "${ECHO_T}$ld_shlibs_F77" >&6; }
+test "$ld_shlibs_F77" = no && can_build_shared=no
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_F77" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_F77=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_F77 in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_F77
+	pic_flag=$lt_prog_compiler_pic_F77
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_F77
+        allow_undefined_flag_F77=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_F77=no
+        else
+	  archive_cmds_need_lc_F77=yes
+        fi
+        allow_undefined_flag_F77=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; }
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  freebsd*) # from 4.6 on
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix3*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+    shlibpath_overrides_runpath=no
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    shlibpath_overrides_runpath=yes
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
+hardcode_action_F77=
+if test -n "$hardcode_libdir_flag_spec_F77" || \
+   test -n "$runpath_var_F77" || \
+   test "X$hardcode_automatic_F77" = "Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_F77" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
+     test "$hardcode_minus_L_F77" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_F77=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_F77=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_F77=unsupported
+fi
+{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
+echo "${ECHO_T}$hardcode_action_F77" >&6; }
+
+if test "$hardcode_action_F77" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_F77 \
+    CC_F77 \
+    LD_F77 \
+    lt_prog_compiler_wl_F77 \
+    lt_prog_compiler_pic_F77 \
+    lt_prog_compiler_static_F77 \
+    lt_prog_compiler_no_builtin_flag_F77 \
+    export_dynamic_flag_spec_F77 \
+    thread_safe_flag_spec_F77 \
+    whole_archive_flag_spec_F77 \
+    enable_shared_with_static_runtimes_F77 \
+    old_archive_cmds_F77 \
+    old_archive_from_new_cmds_F77 \
+    predep_objects_F77 \
+    postdep_objects_F77 \
+    predeps_F77 \
+    postdeps_F77 \
+    compiler_lib_search_path_F77 \
+    archive_cmds_F77 \
+    archive_expsym_cmds_F77 \
+    postinstall_cmds_F77 \
+    postuninstall_cmds_F77 \
+    old_archive_from_expsyms_cmds_F77 \
+    allow_undefined_flag_F77 \
+    no_undefined_flag_F77 \
+    export_symbols_cmds_F77 \
+    hardcode_libdir_flag_spec_F77 \
+    hardcode_libdir_flag_spec_ld_F77 \
+    hardcode_libdir_separator_F77 \
+    hardcode_automatic_F77 \
+    module_cmds_F77 \
+    module_expsym_cmds_F77 \
+    lt_cv_prog_compiler_c_o_F77 \
+    exclude_expsyms_F77 \
+    include_expsyms_F77; do
+
+    case $var in
+    old_archive_cmds_F77 | \
+    old_archive_from_new_cmds_F77 | \
+    archive_cmds_F77 | \
+    archive_expsym_cmds_F77 | \
+    module_cmds_F77 | \
+    module_expsym_cmds_F77 | \
+    old_archive_from_expsyms_cmds_F77 | \
+    export_symbols_cmds_F77 | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_F77
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
+# A language-specific compiler.
+CC=$lt_compiler_F77
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_F77
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_F77
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_F77
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_F77
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_F77
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_F77
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_F77
+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_F77
+module_expsym_cmds=$lt_module_expsym_cmds_F77
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_F77
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_F77
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_F77
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_F77
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_F77
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_F77
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_F77
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_F77
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_F77
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_F77
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_F77
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_F77"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_F77
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_F77
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_F77
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_F77
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      GCJ)
+	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
+
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+objext_GCJ=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}\n"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${GCJ-"gcj"}
+compiler=$CC
+compiler_GCJ=$CC
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+archive_cmds_need_lc_GCJ=no
+
+old_archive_cmds_GCJ=$old_archive_cmds
+
+
+lt_prog_compiler_no_builtin_flag_GCJ=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
+
+
+{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:17021: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:17025: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+lt_prog_compiler_wl_GCJ=
+lt_prog_compiler_pic_GCJ=
+lt_prog_compiler_static_GCJ=
+
+{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl_GCJ='-Wl,'
+    lt_prog_compiler_static_GCJ='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
+      ;;
+
+    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_GCJ='-fno-common'
+      ;;
+
+    interix3*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_GCJ=no
+      enable_shared=no
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_GCJ=-Kconform_pic
+      fi
+      ;;
+
+    hpux*)
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_GCJ='-fPIC'
+	;;
+      esac
+      ;;
+
+    *)
+      lt_prog_compiler_pic_GCJ='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      else
+	lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+      darwin*)
+        # PIC is the default on this platform
+        # Common symbols not allowed in MH_DYLIB files
+       case $cc_basename in
+         xlc*)
+         lt_prog_compiler_pic_GCJ='-qnocommon'
+         lt_prog_compiler_wl_GCJ='-Wl,'
+         ;;
+       esac
+       ;;
+
+    mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_GCJ='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_GCJ='-non_shared'
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    linux*)
+      case $cc_basename in
+      icc* | ecc*)
+	lt_prog_compiler_wl_GCJ='-Wl,'
+	lt_prog_compiler_pic_GCJ='-KPIC'
+	lt_prog_compiler_static_GCJ='-static'
+        ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl_GCJ='-Wl,'
+	lt_prog_compiler_pic_GCJ='-fpic'
+	lt_prog_compiler_static_GCJ='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl_GCJ='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_GCJ='-non_shared'
+        ;;
+      esac
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_GCJ='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+	lt_prog_compiler_wl_GCJ='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl_GCJ='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_GCJ='-Qoption ld '
+      lt_prog_compiler_pic_GCJ='-PIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_prog_compiler_pic_GCJ='-Kconform_pic'
+	lt_prog_compiler_static_GCJ='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_pic_GCJ='-KPIC'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl_GCJ='-Wl,'
+      lt_prog_compiler_can_build_shared_GCJ=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_GCJ='-pic'
+      lt_prog_compiler_static_GCJ='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_GCJ=no
+      ;;
+    esac
+  fi
+
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; }
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_GCJ"; then
+
+{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_pic_works_GCJ=no
+  ac_outfile=conftest.$ac_objext
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:17289: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:17293: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_prog_compiler_pic_works_GCJ=yes
+     fi
+   fi
+   $rm conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6; }
+
+if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
+    case $lt_prog_compiler_pic_GCJ in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
+     esac
+else
+    lt_prog_compiler_pic_GCJ=
+     lt_prog_compiler_can_build_shared_GCJ=no
+fi
+
+fi
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_GCJ=
+    ;;
+  *)
+    lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
+    ;;
+esac
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\"
+{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
+if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_prog_compiler_static_works_GCJ=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   printf "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_prog_compiler_static_works_GCJ=yes
+       fi
+     else
+       lt_prog_compiler_static_works_GCJ=yes
+     fi
+   fi
+   $rm conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5
+echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6; }
+
+if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then
+    :
+else
+    lt_prog_compiler_static_GCJ=
+fi
+
+
+{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
+if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_prog_compiler_c_o_GCJ=no
+   $rm -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:17393: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:17397: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_GCJ=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $rm conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
+   $rm out/* && rmdir out
+   cd ..
+   rmdir conftest
+   $rm conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
+echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; }
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; }
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
+
+  runpath_var=
+  allow_undefined_flag_GCJ=
+  enable_shared_with_static_runtimes_GCJ=no
+  archive_cmds_GCJ=
+  archive_expsym_cmds_GCJ=
+  old_archive_From_new_cmds_GCJ=
+  old_archive_from_expsyms_cmds_GCJ=
+  export_dynamic_flag_spec_GCJ=
+  whole_archive_flag_spec_GCJ=
+  thread_safe_flag_spec_GCJ=
+  hardcode_libdir_flag_spec_GCJ=
+  hardcode_libdir_flag_spec_ld_GCJ=
+  hardcode_libdir_separator_GCJ=
+  hardcode_direct_GCJ=no
+  hardcode_minus_L_GCJ=no
+  hardcode_shlibpath_var_GCJ=unsupported
+  link_all_deplibs_GCJ=unknown
+  hardcode_automatic_GCJ=no
+  module_cmds_GCJ=
+  module_expsym_cmds_GCJ=
+  always_export_symbols_GCJ=no
+  export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_GCJ=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  extract_expsyms_cmds=
+  # Just being paranoid about ensuring that cc_basename is set.
+  for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+  case $host_os in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_GCJ=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
+	whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+  	whole_archive_flag_spec_GCJ=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>/dev/null` in
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+	ld_shlibs_GCJ=no
+	cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we can't use
+      # them.
+      ld_shlibs_GCJ=no
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_GCJ=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      allow_undefined_flag_GCJ=unsupported
+      always_export_symbols_GCJ=no
+      enable_shared_with_static_runtimes_GCJ=yes
+      export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file (1st line
+	# is EXPORTS), use it as is; otherwise, prepend...
+	archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+	  cp $export_symbols $output_objdir/$soname.def;
+	else
+	  echo EXPORTS > $output_objdir/$soname.def;
+	  cat $export_symbols >> $output_objdir/$soname.def;
+	fi~
+	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    interix3*)
+      hardcode_direct_GCJ=no
+      hardcode_shlibpath_var_GCJ=no
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec_GCJ='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    linux*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	tmp_addflag=
+	case $cc_basename,$host_cpu in
+	pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	esac
+	archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+	if test $supports_anon_versioning = yes; then
+	  archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
+  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+  $echo "local: *; };" >> $output_objdir/$libname.ver~
+	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+	fi
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_GCJ=no
+	cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs_GCJ=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+	    archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
+	    archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
+	  else
+	    ld_shlibs_GCJ=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_GCJ=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs_GCJ" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec_GCJ=
+      export_dynamic_flag_spec_GCJ=
+      whole_archive_flag_spec_GCJ=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_GCJ=unsupported
+      always_export_symbols_GCJ=yes
+      archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_GCJ=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_GCJ=unsupported
+      fi
+      ;;
+
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=""
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to AIX nm, but means don't demangle with GNU nm
+	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
+	  export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# need to do runtime linking.
+	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	  for ld_flag in $LDFLAGS; do
+  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+  	    aix_use_runtimelinking=yes
+  	    break
+  	  fi
+	  done
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_GCJ=''
+      hardcode_direct_GCJ=yes
+      hardcode_libdir_separator_GCJ=':'
+      link_all_deplibs_GCJ=yes
+
+      if test "$GCC" = yes; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`${CC} -print-prog-name=collect2`
+	  if test -f "$collect2name" && \
+  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
+	  then
+  	  # We have reworked collect2
+  	  hardcode_direct_GCJ=yes
+	  else
+  	  # We have old collect2
+  	  hardcode_direct_GCJ=unsupported
+  	  # It fails to find uninstalled libraries when the uninstalled
+  	  # path is not listed in the libpath.  Setting hardcode_minus_L
+  	  # to unsupported forces relinking
+  	  hardcode_minus_L_GCJ=yes
+  	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
+  	  hardcode_libdir_separator_GCJ=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag="$shared_flag "'${wl}-G'
+	fi
+      else
+	# not using gcc
+	if test "$host_cpu" = ia64; then
+  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+  	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test "$aix_use_runtimelinking" = yes; then
+	    shared_flag='${wl}-G'
+	  else
+	    shared_flag='${wl}-bM:SRE'
+	  fi
+	fi
+      fi
+
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_GCJ=yes
+      if test "$aix_use_runtimelinking" = yes; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_GCJ='-berok'
+       # Determine the default libpath from the value encoded in an empty executable.
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+       hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+	archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+       else
+	if test "$host_cpu" = ia64; then
+	  hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_GCJ="-z nodefs"
+	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an empty executable.
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`; fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+	 hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_GCJ=' ${wl}-bernotok'
+	  allow_undefined_flag_GCJ=' ${wl}-berok'
+	  # Exported symbols can be pulled into shared objects from archives
+	  whole_archive_flag_spec_GCJ='$convenience'
+	  archive_cmds_need_lc_GCJ=yes
+	  # This is similar to how AIX traditionally builds its shared libraries.
+	  archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs_GCJ=no
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec_GCJ=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec_GCJ=' '
+      allow_undefined_flag_GCJ=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_From_new_cmds_GCJ='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes_GCJ=yes
+      ;;
+
+    darwin* | rhapsody*)
+      case $host_os in
+        rhapsody* | darwin1.[012])
+         allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'
+         ;;
+       *) # Darwin 1.3 on
+         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
+           allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+         else
+           case ${MACOSX_DEPLOYMENT_TARGET} in
+             10.[012])
+               allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
+               ;;
+             10.*)
+               allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup'
+               ;;
+           esac
+         fi
+         ;;
+      esac
+      archive_cmds_need_lc_GCJ=no
+      hardcode_direct_GCJ=no
+      hardcode_automatic_GCJ=yes
+      hardcode_shlibpath_var_GCJ=unsupported
+      whole_archive_flag_spec_GCJ=''
+      link_all_deplibs_GCJ=yes
+    if test "$GCC" = yes ; then
+    	output_verbose_link_cmd='echo'
+        archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
+      module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+      archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+      module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    else
+      case $cc_basename in
+        xlc*)
+         output_verbose_link_cmd='echo'
+         archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
+         module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
+          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
+         archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
+          ;;
+       *)
+         ld_shlibs_GCJ=no
+          ;;
+      esac
+    fi
+      ;;
+
+    dgux*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs_GCJ=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | kfreebsd*-gnu | dragonfly*)
+      archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      hardcode_direct_GCJ=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_GCJ=yes
+      export_dynamic_flag_spec_GCJ='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator_GCJ=:
+
+	hardcode_direct_GCJ=yes
+	export_dynamic_flag_spec_GCJ='${wl}-E'
+
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L_GCJ=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test "$with_gnu_ld" = no; then
+	hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
+	hardcode_libdir_separator_GCJ=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
+	  hardcode_direct_GCJ=no
+	  hardcode_shlibpath_var_GCJ=no
+	  ;;
+	*)
+	  hardcode_direct_GCJ=yes
+	  export_dynamic_flag_spec_GCJ='${wl}-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_GCJ=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      link_all_deplibs_GCJ=yes
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+	archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    newsos6)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_GCJ=yes
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    openbsd*)
+      hardcode_direct_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+	archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+	hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+	export_dynamic_flag_spec_GCJ='${wl}-E'
+      else
+       case $host_os in
+	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	   archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	   hardcode_libdir_flag_spec_GCJ='-R$libdir'
+	   ;;
+	 *)
+	   archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	   hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
+	   ;;
+       esac
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_minus_L_GCJ=yes
+      allow_undefined_flag_GCJ=unsupported
+      archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+	allow_undefined_flag_GCJ=' -expect_unresolved \*'
+	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator_GCJ=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
+	archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+	hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
+      else
+	allow_undefined_flag_GCJ=' -expect_unresolved \*'
+	archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+	archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
+      fi
+      hardcode_libdir_separator_GCJ=:
+      ;;
+
+    solaris*)
+      no_undefined_flag_GCJ=' -z text'
+      if test "$GCC" = yes; then
+	wlarc='${wl}'
+	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
+      else
+	wlarc=''
+	archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+      fi
+      hardcode_libdir_flag_spec_GCJ='-R$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+ 	# The compiler driver will combine linker options so we
+ 	# cannot just pass the convience library names through
+ 	# without $wl, iff we do not link with $LD.
+ 	# Luckily, gcc supports the same syntax we need for Sun Studio.
+ 	# Supported since Solaris 2.6 (maybe 2.5.1?)
+ 	case $wlarc in
+ 	'')
+ 	  whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
+ 	*)
+ 	  whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
+ 	esac ;;
+      esac
+      link_all_deplibs_GCJ=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_direct_GCJ=yes
+      hardcode_minus_L_GCJ=yes
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_GCJ=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_GCJ='$CC -r -o $output$reload_objs'
+	  hardcode_direct_GCJ=no
+        ;;
+	motorola)
+	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_GCJ=no
+      export_dynamic_flag_spec_GCJ='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_GCJ=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_GCJ=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
+      no_undefined_flag_GCJ='${wl}-z,text'
+      archive_cmds_need_lc_GCJ=no
+      hardcode_shlibpath_var_GCJ=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag_GCJ='${wl}-z,text'
+      allow_undefined_flag_GCJ='${wl}-z,nodefs'
+      archive_cmds_need_lc_GCJ=no
+      hardcode_shlibpath_var_GCJ=no
+      hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator_GCJ=':'
+      link_all_deplibs_GCJ=yes
+      export_dynamic_flag_spec_GCJ='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+	archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_GCJ='-L$libdir'
+      hardcode_shlibpath_var_GCJ=no
+      ;;
+
+    *)
+      ld_shlibs_GCJ=no
+      ;;
+    esac
+  fi
+
+{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
+echo "${ECHO_T}$ld_shlibs_GCJ" >&6; }
+test "$ld_shlibs_GCJ" = no && can_build_shared=no
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_GCJ" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_GCJ=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds_GCJ in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
+      $rm conftest*
+      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl_GCJ
+	pic_flag=$lt_prog_compiler_pic_GCJ
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
+        allow_undefined_flag_GCJ=
+        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+        then
+	  archive_cmds_need_lc_GCJ=no
+        else
+	  archive_cmds_need_lc_GCJ=yes
+        fi
+        allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $rm conftest*
+      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
+echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; }
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+if test "$GCC" = yes; then
+  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
+  if test "$GCC" = yes; then
+    sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
+  else
+    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
+  fi
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+kfreebsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  freebsd*) # from 4.6 on
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+   hppa*64*)
+     shrext_cmds='.sl'
+     hardcode_into_libs=yes
+     dynamic_linker="$host_os dld.sl"
+     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+     soname_spec='${libname}${release}${shared_ext}$major'
+     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+     ;;
+   *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix3*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test "$lt_cv_prog_gnu_ld" = yes; then
+		version_type=linux
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+knetbsd*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='GNU ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+nto-qnx*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+	shlibpath_overrides_runpath=no
+	;;
+      *)
+	shlibpath_overrides_runpath=yes
+	;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      export_dynamic_flag_spec='${wl}-Blargedynsym'
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+    shlibpath_overrides_runpath=no
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    shlibpath_overrides_runpath=yes
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
+hardcode_action_GCJ=
+if test -n "$hardcode_libdir_flag_spec_GCJ" || \
+   test -n "$runpath_var_GCJ" || \
+   test "X$hardcode_automatic_GCJ" = "Xyes" ; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct_GCJ" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
+     test "$hardcode_minus_L_GCJ" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_GCJ=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_GCJ=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_GCJ=unsupported
+fi
+{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
+echo "${ECHO_T}$hardcode_action_GCJ" >&6; }
+
+if test "$hardcode_action_GCJ" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_GCJ \
+    CC_GCJ \
+    LD_GCJ \
+    lt_prog_compiler_wl_GCJ \
+    lt_prog_compiler_pic_GCJ \
+    lt_prog_compiler_static_GCJ \
+    lt_prog_compiler_no_builtin_flag_GCJ \
+    export_dynamic_flag_spec_GCJ \
+    thread_safe_flag_spec_GCJ \
+    whole_archive_flag_spec_GCJ \
+    enable_shared_with_static_runtimes_GCJ \
+    old_archive_cmds_GCJ \
+    old_archive_from_new_cmds_GCJ \
+    predep_objects_GCJ \
+    postdep_objects_GCJ \
+    predeps_GCJ \
+    postdeps_GCJ \
+    compiler_lib_search_path_GCJ \
+    archive_cmds_GCJ \
+    archive_expsym_cmds_GCJ \
+    postinstall_cmds_GCJ \
+    postuninstall_cmds_GCJ \
+    old_archive_from_expsyms_cmds_GCJ \
+    allow_undefined_flag_GCJ \
+    no_undefined_flag_GCJ \
+    export_symbols_cmds_GCJ \
+    hardcode_libdir_flag_spec_GCJ \
+    hardcode_libdir_flag_spec_ld_GCJ \
+    hardcode_libdir_separator_GCJ \
+    hardcode_automatic_GCJ \
+    module_cmds_GCJ \
+    module_expsym_cmds_GCJ \
+    lt_cv_prog_compiler_c_o_GCJ \
+    exclude_expsyms_GCJ \
+    include_expsyms_GCJ; do
+
+    case $var in
+    old_archive_cmds_GCJ | \
+    old_archive_from_new_cmds_GCJ | \
+    archive_cmds_GCJ | \
+    archive_expsym_cmds_GCJ | \
+    module_cmds_GCJ | \
+    module_expsym_cmds_GCJ | \
+    old_archive_from_expsyms_cmds_GCJ | \
+    export_symbols_cmds_GCJ | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_GCJ
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
+# A language-specific compiler.
+CC=$lt_compiler_GCJ
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_GCJ
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_GCJ
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_GCJ
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_GCJ
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_GCJ
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_GCJ
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_GCJ
+archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_GCJ
+module_expsym_cmds=$lt_module_expsym_cmds_GCJ
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_GCJ
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_GCJ
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_GCJ
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_GCJ
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_GCJ
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_GCJ
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_GCJ
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_GCJ
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_GCJ
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_GCJ
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_GCJ"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_GCJ
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_GCJ
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_GCJ
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_GCJ
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	else
+	  tagname=""
+	fi
+	;;
+
+      RC)
+
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+objext_RC=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$rm conftest*
+
+ac_outfile=conftest.$ac_objext
+printf "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$rm conftest*
+
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+CC=${RC-"windres"}
+compiler=$CC
+compiler_RC=$CC
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+lt_cv_prog_compiler_c_o_RC=yes
+
+# The else clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  # See if we are running on zsh, and set the options which allow our commands through
+  # without removal of \ escapes.
+  if test -n "${ZSH_VERSION+set}" ; then
+    setopt NO_GLOB_SUBST
+  fi
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
+    SED SHELL STRIP \
+    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
+    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
+    deplibs_check_method reload_flag reload_cmds need_locks \
+    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
+    lt_cv_sys_global_symbol_to_c_name_address \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    old_postinstall_cmds old_postuninstall_cmds \
+    compiler_RC \
+    CC_RC \
+    LD_RC \
+    lt_prog_compiler_wl_RC \
+    lt_prog_compiler_pic_RC \
+    lt_prog_compiler_static_RC \
+    lt_prog_compiler_no_builtin_flag_RC \
+    export_dynamic_flag_spec_RC \
+    thread_safe_flag_spec_RC \
+    whole_archive_flag_spec_RC \
+    enable_shared_with_static_runtimes_RC \
+    old_archive_cmds_RC \
+    old_archive_from_new_cmds_RC \
+    predep_objects_RC \
+    postdep_objects_RC \
+    predeps_RC \
+    postdeps_RC \
+    compiler_lib_search_path_RC \
+    archive_cmds_RC \
+    archive_expsym_cmds_RC \
+    postinstall_cmds_RC \
+    postuninstall_cmds_RC \
+    old_archive_from_expsyms_cmds_RC \
+    allow_undefined_flag_RC \
+    no_undefined_flag_RC \
+    export_symbols_cmds_RC \
+    hardcode_libdir_flag_spec_RC \
+    hardcode_libdir_flag_spec_ld_RC \
+    hardcode_libdir_separator_RC \
+    hardcode_automatic_RC \
+    module_cmds_RC \
+    module_expsym_cmds_RC \
+    lt_cv_prog_compiler_c_o_RC \
+    exclude_expsyms_RC \
+    include_expsyms_RC; do
+
+    case $var in
+    old_archive_cmds_RC | \
+    old_archive_from_new_cmds_RC | \
+    archive_cmds_RC | \
+    archive_expsym_cmds_RC | \
+    module_cmds_RC | \
+    module_expsym_cmds_RC | \
+    old_archive_from_expsyms_cmds_RC | \
+    export_symbols_cmds_RC | \
+    extract_expsyms_cmds | reload_cmds | finish_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  case $lt_echo in
+  *'\$0 --fallback-echo"')
+    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+    ;;
+  esac
+
+cfgfile="$ofile"
+
+  cat <<__EOF__ >> "$cfgfile"
+# ### BEGIN LIBTOOL TAG CONFIG: $tagname
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_RC
+
+# Whether or not to disallow shared libs when runtime libs are static
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A C compiler.
+LTCC=$lt_LTCC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_LTCFLAGS
+
+# A language-specific compiler.
+CC=$lt_compiler_RC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC_RC
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# The linker used to build libraries.
+LD=$lt_LD_RC
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$lt_STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_RC
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally ".so").
+shrext_cmds='$shrext_cmds'
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_RC
+pic_mode=$pic_mode
+
+# What is the maximum length of a command?
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_RC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds_RC
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds_RC
+archive_expsym_cmds=$lt_archive_expsym_cmds_RC
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to build a loadable module (assumed same as above if empty)
+module_cmds=$lt_module_cmds_RC
+module_expsym_cmds=$lt_module_expsym_cmds_RC
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predep_objects=$lt_predep_objects_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdep_objects=$lt_postdep_objects_RC
+
+# Dependencies to place before the objects being linked to create a
+# shared library.
+predeps=$lt_predeps_RC
+
+# Dependencies to place after the objects being linked to create a
+# shared library.
+postdeps=$lt_postdeps_RC
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_RC
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_RC
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_RC
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_RC
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
+
+# If ld is used when linking, flag to hardcode \$libdir into
+# a binary during linking. This must work even if \$libdir does
+# not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
+
+# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct_RC
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L_RC
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
+
+# Set to yes if building a shared library automatically hardcodes DIR into the library
+# and all subsequent libraries and executables linked against it.
+hardcode_automatic=$hardcode_automatic_RC
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_RC
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path_RC"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols_RC
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_RC
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_RC
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_RC
+
+# ### END LIBTOOL TAG CONFIG: $tagname
+
+__EOF__
+
+
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
+  if test -f "$ltmain_in"; then
+    test -f Makefile && make "$ltmain"
+  fi
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+	;;
+
+      *)
+	{ { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
+echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+      esac
+
+      # Append the new tag name to the list of available tags.
+      if test -n "$tagname" ; then
+      available_tags="$available_tags $tagname"
+    fi
+    fi
+  done
+  IFS="$lt_save_ifs"
+
+  # Now substitute the updated list of available tags.
+  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
+    mv "${ofile}T" "$ofile"
+    chmod +x "$ofile"
+  else
+    rm -f "${ofile}T"
+    { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
+echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Prevent multiple expansion
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+CPPFLAGS="${CPPFLAGS} -D_REENTRANT -D__EXTENSIONS__"
+
+# Checks for header files.
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6; }
+if test "${ac_cv_header_sys_wait_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/wait.h>
+#ifndef WEXITSTATUS
+# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
+#endif
+#ifndef WIFEXITED
+# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
+#endif
+
+int
+main ()
+{
+  int s;
+  wait (&s);
+  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_sys_wait_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_header_sys_wait_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5
+echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6; }
+if test $ac_cv_header_sys_wait_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SYS_WAIT_H 1
+_ACEOF
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_header in arpa/inet.h fcntl.h netinet/in.h stdlib.h string.h \
+sys/socket.h sys/time.h unistd.h sys/sendfile.h sys/uio.h \
+getopt.h sys/epoll.h sys/select.h poll.h sys/poll.h sys/devpoll.h sys/filio.h \
+sys/mman.h sys/event.h sys/port.h pwd.h sys/syslimits.h \
+sys/resource.h sys/un.h syslog.h sys/prctl.h uuid/uuid.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# Checks for typedefs, structures, and compiler characteristics.
+{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; }
+if test "${ac_cv_c_const+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_const=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_c_const=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6; }
+if test "${ac_cv_c_inline+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_inline=$ac_kw
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6; }
+
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+
+{ echo "$as_me:$LINENO: checking whether char is unsigned" >&5
+echo $ECHO_N "checking whether char is unsigned... $ECHO_C" >&6; }
+if test "${ac_cv_c_char_unsigned+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((char) -1) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_char_unsigned=no
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_c_char_unsigned=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_char_unsigned" >&5
+echo "${ECHO_T}$ac_cv_c_char_unsigned" >&6; }
+if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define __CHAR_UNSIGNED__ 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for off_t" >&5
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_off_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef off_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_off_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_off_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+echo "${ECHO_T}$ac_cv_type_off_t" >&6; }
+if test $ac_cv_type_off_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long int
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for pid_t" >&5
+echo $ECHO_N "checking for pid_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_pid_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef pid_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_pid_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_pid_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
+echo "${ECHO_T}$ac_cv_type_pid_t" >&6; }
+if test $ac_cv_type_pid_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_size_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef size_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_size_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_size_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6; }
+if test $ac_cv_type_size_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+{ echo "$as_me:$LINENO: checking for struct tm.tm_gmtoff" >&5
+echo $ECHO_N "checking for struct tm.tm_gmtoff... $ECHO_C" >&6; }
+if test "${ac_cv_member_struct_tm_tm_gmtoff+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <time.h>
+
+int
+main ()
+{
+static struct tm ac_aggr;
+if (ac_aggr.tm_gmtoff)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_member_struct_tm_tm_gmtoff=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <time.h>
+
+int
+main ()
+{
+static struct tm ac_aggr;
+if (sizeof ac_aggr.tm_gmtoff)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_member_struct_tm_tm_gmtoff=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_member_struct_tm_tm_gmtoff=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_gmtoff" >&5
+echo "${ECHO_T}$ac_cv_member_struct_tm_tm_gmtoff" >&6; }
+if test $ac_cv_member_struct_tm_tm_gmtoff = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRUCT_TM_GMTOFF 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for struct sockaddr_storage" >&5
+echo $ECHO_N "checking for struct sockaddr_storage... $ECHO_C" >&6; }
+if test "${ac_cv_type_struct_sockaddr_storage+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/socket.h>
+
+typedef struct sockaddr_storage ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_struct_sockaddr_storage=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_struct_sockaddr_storage=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_sockaddr_storage" >&5
+echo "${ECHO_T}$ac_cv_type_struct_sockaddr_storage" >&6; }
+if test $ac_cv_type_struct_sockaddr_storage = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_SOCKADDR_STORAGE 1
+_ACEOF
+
+
+fi
+
+{ echo "$as_me:$LINENO: checking for socklen_t" >&5
+echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_socklen_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/socket.h>
+
+typedef socklen_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_socklen_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_socklen_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_socklen_t" >&5
+echo "${ECHO_T}$ac_cv_type_socklen_t" >&6; }
+if test $ac_cv_type_socklen_t = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SOCKLEN_T 1
+_ACEOF
+
+
+fi
+
+
+# Checks for library functions.
+
+for ac_header in vfork.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_func in fork vfork
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+if test "x$ac_cv_func_fork" = xyes; then
+  { echo "$as_me:$LINENO: checking for working fork" >&5
+echo $ECHO_N "checking for working fork... $ECHO_C" >&6; }
+if test "${ac_cv_func_fork_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_fork_works=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+	  /* By Ruediger Kuhlmann. */
+	  return fork () < 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_fork_works=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_fork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_fork_works" >&5
+echo "${ECHO_T}$ac_cv_func_fork_works" >&6; }
+
+else
+  ac_cv_func_fork_works=$ac_cv_func_fork
+fi
+if test "x$ac_cv_func_fork_works" = xcross; then
+  case $host in
+    *-*-amigaos* | *-*-msdosdjgpp*)
+      # Override, as these systems have only a dummy fork() stub
+      ac_cv_func_fork_works=no
+      ;;
+    *)
+      ac_cv_func_fork_works=yes
+      ;;
+  esac
+  { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
+echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
+fi
+ac_cv_func_vfork_works=$ac_cv_func_vfork
+if test "x$ac_cv_func_vfork" = xyes; then
+  { echo "$as_me:$LINENO: checking for working vfork" >&5
+echo $ECHO_N "checking for working vfork... $ECHO_C" >&6; }
+if test "${ac_cv_func_vfork_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_vfork_works=cross
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Thanks to Paul Eggert for this test.  */
+$ac_includes_default
+#include <sys/wait.h>
+#ifdef HAVE_VFORK_H
+# include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+   argument registers are propagated back to the parent.  The compiler
+   is told about this with #include <vfork.h>, but some compilers
+   (e.g. gcc -O) don't grok <vfork.h>.  Test for this by using a
+   static variable whose address is put into a register that is
+   clobbered by the vfork.  */
+static void
+#ifdef __cplusplus
+sparc_address_test (int arg)
+# else
+sparc_address_test (arg) int arg;
+#endif
+{
+  static pid_t child;
+  if (!child) {
+    child = vfork ();
+    if (child < 0) {
+      perror ("vfork");
+      _exit(2);
+    }
+    if (!child) {
+      arg = getpid();
+      write(-1, "", 0);
+      _exit (arg);
+    }
+  }
+}
+
+int
+main ()
+{
+  pid_t parent = getpid ();
+  pid_t child;
+
+  sparc_address_test (0);
+
+  child = vfork ();
+
+  if (child == 0) {
+    /* Here is another test for sparc vfork register problems.  This
+       test uses lots of local variables, at least as many local
+       variables as main has allocated so far including compiler
+       temporaries.  4 locals are enough for gcc 1.40.3 on a Solaris
+       4.1.3 sparc, but we use 8 to be safe.  A buggy compiler should
+       reuse the register of parent for one of the local variables,
+       since it will think that parent can't possibly be used any more
+       in this routine.  Assigning to the local variable will thus
+       munge parent in the parent process.  */
+    pid_t
+      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+    /* Convince the compiler that p..p7 are live; otherwise, it might
+       use the same hardware register for all 8 local variables.  */
+    if (p != p1 || p != p2 || p != p3 || p != p4
+	|| p != p5 || p != p6 || p != p7)
+      _exit(1);
+
+    /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
+       from child file descriptors.  If the child closes a descriptor
+       before it execs or exits, this munges the parent's descriptor
+       as well.  Test for this by closing stdout in the child.  */
+    _exit(close(fileno(stdout)) != 0);
+  } else {
+    int status;
+    struct stat st;
+
+    while (wait(&status) != child)
+      ;
+    return (
+	 /* Was there some problem with vforking?  */
+	 child < 0
+
+	 /* Did the child fail?  (This shouldn't happen.)  */
+	 || status
+
+	 /* Did the vfork/compiler bug occur?  */
+	 || parent != getpid()
+
+	 /* Did the file descriptor bug occur?  */
+	 || fstat(fileno(stdout), &st) != 0
+	 );
+  }
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_vfork_works=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_vfork_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_vfork_works" >&5
+echo "${ECHO_T}$ac_cv_func_vfork_works" >&6; }
+
+fi;
+if test "x$ac_cv_func_fork_works" = xcross; then
+  ac_cv_func_vfork_works=$ac_cv_func_vfork
+  { echo "$as_me:$LINENO: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
+echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
+fi
+
+if test "x$ac_cv_func_vfork_works" = xyes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WORKING_VFORK 1
+_ACEOF
+
+else
+
+cat >>confdefs.h <<\_ACEOF
+#define vfork fork
+_ACEOF
+
+fi
+if test "x$ac_cv_func_fork_works" = xyes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WORKING_FORK 1
+_ACEOF
+
+fi
+
+#AC_FUNC_MMAP
+{ echo "$as_me:$LINENO: checking return type of signal handlers" >&5
+echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6; }
+if test "${ac_cv_type_signal+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <signal.h>
+
+int
+main ()
+{
+return *(signal (0, 0)) (0) == 1;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_signal=int
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_signal=void
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5
+echo "${ECHO_T}$ac_cv_type_signal" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define RETSIGTYPE $ac_cv_type_signal
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking whether lstat dereferences a symlink specified with a trailing slash" >&5
+echo $ECHO_N "checking whether lstat dereferences a symlink specified with a trailing slash... $ECHO_C" >&6; }
+if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  rm -f conftest.sym conftest.file
+echo >conftest.file
+if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+struct stat sbuf;
+     /* Linux will dereference the symlink and fail.
+	That is better in the sense that it means we will not
+	have to compile and use the lstat wrapper.  */
+     return lstat ("conftest.sym/", &sbuf) == 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_lstat_dereferences_slashed_symlink=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+else
+  # If the `ln -s' command failed, then we probably don't even
+  # have an lstat function.
+  ac_cv_func_lstat_dereferences_slashed_symlink=no
+fi
+rm -f conftest.sym conftest.file
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5
+echo "${ECHO_T}$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; }
+
+test $ac_cv_func_lstat_dereferences_slashed_symlink = yes &&
+
+cat >>confdefs.h <<_ACEOF
+#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1
+_ACEOF
+
+
+if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
+  case " $LIBOBJS " in
+  *" lstat.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS lstat.$ac_objext"
+ ;;
+esac
+
+fi
+
+{ echo "$as_me:$LINENO: checking whether stat accepts an empty string" >&5
+echo $ECHO_N "checking whether stat accepts an empty string... $ECHO_C" >&6; }
+if test "${ac_cv_func_stat_empty_string_bug+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_stat_empty_string_bug=yes
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+struct stat sbuf;
+  return stat ("", &sbuf) == 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_stat_empty_string_bug=no
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_stat_empty_string_bug=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_stat_empty_string_bug" >&5
+echo "${ECHO_T}$ac_cv_func_stat_empty_string_bug" >&6; }
+if test $ac_cv_func_stat_empty_string_bug = yes; then
+  case " $LIBOBJS " in
+  *" stat.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS stat.$ac_objext"
+ ;;
+esac
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STAT_EMPTY_STRING_BUG 1
+_ACEOF
+
+fi
+
+
+for ac_func in strftime
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  # strftime is in -lintl on SCO UNIX.
+{ echo "$as_me:$LINENO: checking for strftime in -lintl" >&5
+echo $ECHO_N "checking for strftime in -lintl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_intl_strftime+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strftime ();
+int
+main ()
+{
+return strftime ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_intl_strftime=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_intl_strftime=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_intl_strftime" >&5
+echo "${ECHO_T}$ac_cv_lib_intl_strftime" >&6; }
+if test $ac_cv_lib_intl_strftime = yes; then
+  cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRFTIME 1
+_ACEOF
+
+LIBS="-lintl $LIBS"
+fi
+
+fi
+done
+
+
+MYSQL_INCLUDE=""
+MYSQL_LIBS=""
+
+{ echo "$as_me:$LINENO: checking for MySQL support" >&5
+echo $ECHO_N "checking for MySQL support... $ECHO_C" >&6; }
+
+# Check whether --with-mysql was given.
+if test "${with_mysql+set}" = set; then
+  withval=$with_mysql; WITH_MYSQL=$withval
+else
+  WITH_MYSQL=no
+fi
+
+
+if test "$WITH_MYSQL" != "no"; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  if test "$WITH_MYSQL" = "yes"; then
+    # Extract the first word of "mysql_config", so it can be a program name with args.
+set dummy mysql_config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MYSQL_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MYSQL_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_MYSQL_CONFIG="$MYSQL_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_MYSQL_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+MYSQL_CONFIG=$ac_cv_path_MYSQL_CONFIG
+if test -n "$MYSQL_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $MYSQL_CONFIG" >&5
+echo "${ECHO_T}$MYSQL_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  else
+    MYSQL_CONFIG=$WITH_MYSQL
+  fi
+
+  if test "$MYSQL_CONFIG" = ""; then
+    { { echo "$as_me:$LINENO: error: mysql_config is not found" >&5
+echo "$as_me: error: mysql_config is not found" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  if test \! -x $MYSQL_CONFIG; then
+    { { echo "$as_me:$LINENO: error: mysql_config not exists or not executable" >&5
+echo "$as_me: error: mysql_config not exists or not executable" >&2;}
+   { (exit use --with-mysql=path-to-mysql_config); exit use --with-mysql=path-to-mysql_config; }; }
+  fi
+
+  if $MYSQL_CONFIG | grep -- '--include' > /dev/null ; then
+    MYSQL_INCLUDE="`$MYSQL_CONFIG --include | sed s/\'//g`"
+  else
+    MYSQL_INCLUDE="`$MYSQL_CONFIG --cflags | sed s/\'//g`"
+  fi
+  MYSQL_LIBS="`$MYSQL_CONFIG --libs | sed s/\'//g`"
+
+  { echo "$as_me:$LINENO: checking for MySQL includes at" >&5
+echo $ECHO_N "checking for MySQL includes at... $ECHO_C" >&6; }
+  { echo "$as_me:$LINENO: result: $MYSQL_INCLUDE" >&5
+echo "${ECHO_T}$MYSQL_INCLUDE" >&6; }
+
+  { echo "$as_me:$LINENO: checking for MySQL libraries at" >&5
+echo $ECHO_N "checking for MySQL libraries at... $ECHO_C" >&6; }
+  { echo "$as_me:$LINENO: result: $MYSQL_LIBS" >&5
+echo "${ECHO_T}$MYSQL_LIBS" >&6; }
+  old_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS $MYSQL_INCLUDE"
+
+
+for ac_header in errmsg.h mysql.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+  CPPFLAGS="$old_CPPFLAGS"
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MYSQL 1
+_ACEOF
+
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+
+{ echo "$as_me:$LINENO: checking for LDAP support" >&5
+echo $ECHO_N "checking for LDAP support... $ECHO_C" >&6; }
+
+# Check whether --with-ldap was given.
+if test "${with_ldap+set}" = set; then
+  withval=$with_ldap; WITH_LDAP=$withval
+else
+  WITH_LDAP=no
+fi
+
+{ echo "$as_me:$LINENO: result: $withval" >&5
+echo "${ECHO_T}$withval" >&6; }
+if test "$WITH_LDAP" != "no"; then
+ { echo "$as_me:$LINENO: checking for ldap_bind in -lldap" >&5
+echo $ECHO_N "checking for ldap_bind in -lldap... $ECHO_C" >&6; }
+if test "${ac_cv_lib_ldap_ldap_bind+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lldap  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ldap_bind ();
+int
+main ()
+{
+return ldap_bind ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_ldap_ldap_bind=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_ldap_ldap_bind=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ldap_ldap_bind" >&5
+echo "${ECHO_T}$ac_cv_lib_ldap_ldap_bind" >&6; }
+if test $ac_cv_lib_ldap_ldap_bind = yes; then
+
+
+for ac_header in ldap.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+    LDAP_LIB=-lldap
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBLDAP 1
+_ACEOF
+
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_LDAP_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+
+ { echo "$as_me:$LINENO: checking for ber_printf in -llber" >&5
+echo $ECHO_N "checking for ber_printf in -llber... $ECHO_C" >&6; }
+if test "${ac_cv_lib_lber_ber_printf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-llber  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char ber_printf ();
+int
+main ()
+{
+return ber_printf ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_lber_ber_printf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_lber_ber_printf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_lber_ber_printf" >&5
+echo "${ECHO_T}$ac_cv_lib_lber_ber_printf" >&6; }
+if test $ac_cv_lib_lber_ber_printf = yes; then
+
+
+for ac_header in lber.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+    LBER_LIB=-llber
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBLBER 1
+_ACEOF
+
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_LBER_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+
+fi
+
+{ echo "$as_me:$LINENO: checking for extended attributes support" >&5
+echo $ECHO_N "checking for extended attributes support... $ECHO_C" >&6; }
+
+# Check whether --with-attr was given.
+if test "${with_attr+set}" = set; then
+  withval=$with_attr; WITH_ATTR=$withval
+else
+  WITH_ATTR=no
+fi
+
+{ echo "$as_me:$LINENO: result: $withval" >&5
+echo "${ECHO_T}$withval" >&6; }
+if test "$WITH_ATTR" != "no"; then
+ { echo "$as_me:$LINENO: checking for attr_get in -lattr" >&5
+echo $ECHO_N "checking for attr_get in -lattr... $ECHO_C" >&6; }
+if test "${ac_cv_lib_attr_attr_get+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lattr  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char attr_get ();
+int
+main ()
+{
+return attr_get ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_attr_attr_get=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_attr_attr_get=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_attr_attr_get" >&5
+echo "${ECHO_T}$ac_cv_lib_attr_attr_get" >&6; }
+if test $ac_cv_lib_attr_attr_get = yes; then
+
+
+for ac_header in attr/attributes.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+		ATTR_LIB=-lattr
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_XATTR 1
+_ACEOF
+
+		cat >>confdefs.h <<\_ACEOF
+#define HAVE_ATTR_ATTRIBUTES_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+
+fi
+
+## openssl on solaris needs -lsocket -lnsl
+{ echo "$as_me:$LINENO: checking for library containing socket" >&5
+echo $ECHO_N "checking for library containing socket... $ECHO_C" >&6; }
+if test "${ac_cv_search_socket+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char socket ();
+int
+main ()
+{
+return socket ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' socket; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_search_socket=$ac_res
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_socket+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_socket+set}" = set; then
+  :
+else
+  ac_cv_search_socket=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_socket" >&5
+echo "${ECHO_T}$ac_cv_search_socket" >&6; }
+ac_res=$ac_cv_search_socket
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+{ echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5
+echo $ECHO_N "checking for library containing gethostbyname... $ECHO_C" >&6; }
+if test "${ac_cv_search_gethostbyname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' nsl socket; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_search_gethostbyname=$ac_res
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_gethostbyname+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_gethostbyname+set}" = set; then
+  :
+else
+  ac_cv_search_gethostbyname=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_search_gethostbyname" >&6; }
+ac_res=$ac_cv_search_gethostbyname
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+{ echo "$as_me:$LINENO: checking for library containing hstrerror" >&5
+echo $ECHO_N "checking for library containing hstrerror... $ECHO_C" >&6; }
+if test "${ac_cv_search_hstrerror+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char hstrerror ();
+int
+main ()
+{
+return hstrerror ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' resolv; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_search_hstrerror=$ac_res
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_hstrerror+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_hstrerror+set}" = set; then
+  :
+else
+  ac_cv_search_hstrerror=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_hstrerror" >&5
+echo "${ECHO_T}$ac_cv_search_hstrerror" >&6; }
+ac_res=$ac_cv_search_hstrerror
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+
+save_LIBS=$LIBS
+{ echo "$as_me:$LINENO: checking for library containing dlopen" >&5
+echo $ECHO_N "checking for library containing dlopen... $ECHO_C" >&6; }
+if test "${ac_cv_search_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' dl; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_search_dlopen=$ac_res
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_dlopen+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_dlopen+set}" = set; then
+  :
+else
+  ac_cv_search_dlopen=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_dlopen" >&5
+echo "${ECHO_T}$ac_cv_search_dlopen" >&6; }
+ac_res=$ac_cv_search_dlopen
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+    if test "$ac_cv_search_dlopen" != no; then
+      test "$ac_cv_search_dlopen" = "none required" || DL_LIB="$ac_cv_search_dlopen"
+    fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBDL 1
+_ACEOF
+
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+LIBS=$save_LIBS
+
+
+{ echo "$as_me:$LINENO: checking for valgrind" >&5
+echo $ECHO_N "checking for valgrind... $ECHO_C" >&6; }
+
+# Check whether --with-valgrind was given.
+if test "${with_valgrind+set}" = set; then
+  withval=$with_valgrind; WITH_VALGRIND=$withval
+else
+  WITH_VALGRIND=no
+fi
+
+{ echo "$as_me:$LINENO: result: $WITH_VALGRIND" >&5
+echo "${ECHO_T}$WITH_VALGRIND" >&6; }
+if test "$WITH_VALGRIND" != "no"; then
+
+for ac_header in valgrind/valgrind.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+fi
+
+{ echo "$as_me:$LINENO: checking for OpenSSL" >&5
+echo $ECHO_N "checking for OpenSSL... $ECHO_C" >&6; }
+
+# Check whether --with-openssl was given.
+if test "${with_openssl+set}" = set; then
+  withval=$with_openssl; WITH_OPENSSL=$withval
+else
+  WITH_OPENSSL=no
+fi
+
+
+if test "$WITH_OPENSSL" != "no"; then
+    use_openssl=yes
+    if test "$WITH_OPENSSL" != "yes"; then
+	CPPFLAGS="$CPPFLAGS -I$WITH_OPENSSL/include"
+	LDFLAGS="$LDFLAGS -L$WITH_OPENSSL/lib"
+    fi
+else
+    use_openssl=no
+fi
+{ echo "$as_me:$LINENO: result: $use_openssl" >&5
+echo "${ECHO_T}$use_openssl" >&6; }
+
+
+# Check whether --with-openssl-includes was given.
+if test "${with_openssl_includes+set}" = set; then
+  withval=$with_openssl_includes;  use_openssl=yes CPPFLAGS="$CPPFLAGS -I$withval"
+
+fi
+
+
+
+# Check whether --with-openssl-libs was given.
+if test "${with_openssl_libs+set}" = set; then
+  withval=$with_openssl_libs;  use_openssl=yes LDFLAGS="$LDFLAGS -L$withval"
+
+fi
+
+
+
+# Check whether --with-kerberos5 was given.
+if test "${with_kerberos5+set}" = set; then
+  withval=$with_kerberos5;  use_kerberos=yes
+else
+  use_kerberos=no
+
+fi
+
+
+if test "x$use_openssl" = "xyes"; then
+    if test "x$use_kerberos" != "xyes"; then
+        CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_KRB5"
+    fi
+
+
+for ac_header in openssl/ssl.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    OLDLIBS="$LIBS"
+    { echo "$as_me:$LINENO: checking for BIO_f_base64 in -lcrypto" >&5
+echo $ECHO_N "checking for BIO_f_base64 in -lcrypto... $ECHO_C" >&6; }
+if test "${ac_cv_lib_crypto_BIO_f_base64+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrypto  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char BIO_f_base64 ();
+int
+main ()
+{
+return BIO_f_base64 ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_crypto_BIO_f_base64=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_crypto_BIO_f_base64=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_BIO_f_base64" >&5
+echo "${ECHO_T}$ac_cv_lib_crypto_BIO_f_base64" >&6; }
+if test $ac_cv_lib_crypto_BIO_f_base64 = yes; then
+
+      { echo "$as_me:$LINENO: checking for SSL_new in -lssl" >&5
+echo $ECHO_N "checking for SSL_new in -lssl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_ssl_SSL_new+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lssl  -lcrypto "$DL_LIB"  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char SSL_new ();
+int
+main ()
+{
+return SSL_new ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_ssl_SSL_new=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_ssl_SSL_new=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_new" >&5
+echo "${ECHO_T}$ac_cv_lib_ssl_SSL_new" >&6; }
+if test $ac_cv_lib_ssl_SSL_new = yes; then
+   SSL_LIB="-lssl -lcrypto"
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBSSL
+_ACEOF
+
+fi
+
+
+fi
+
+    LIBS="$OLDLIBS"
+
+fi
+
+{ echo "$as_me:$LINENO: checking for perl regular expressions support" >&5
+echo $ECHO_N "checking for perl regular expressions support... $ECHO_C" >&6; }
+
+# Check whether --with-pcre was given.
+if test "${with_pcre+set}" = set; then
+  withval=$with_pcre; WITH_PCRE=$withval
+else
+  WITH_PCRE=yes
+fi
+
+{ echo "$as_me:$LINENO: result: $WITH_PCRE" >&5
+echo "${ECHO_T}$WITH_PCRE" >&6; }
+
+if test "x$cross_compiling" = xno -a "$WITH_PCRE" != "no"; then
+  # Extract the first word of "pcre-config", so it can be a program name with args.
+set dummy pcre-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PCRECONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PCRECONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PCRECONFIG="$PCRECONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PCRECONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PCRECONFIG=$ac_cv_path_PCRECONFIG
+if test -n "$PCRECONFIG"; then
+  { echo "$as_me:$LINENO: result: $PCRECONFIG" >&5
+echo "${ECHO_T}$PCRECONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+  if test x"$PCRECONFIG" != x; then
+    PCRE_LIB=`$PCRECONFIG --libs`
+    CPPFLAGS="$CPPFLAGS `$PCRECONFIG --cflags`"
+    OLDLIBS="$LIBS"
+    LIBS="$LIBS $PCRE_LIB"
+    { echo "$as_me:$LINENO: checking for pcre_compile in -lpcre" >&5
+echo $ECHO_N "checking for pcre_compile in -lpcre... $ECHO_C" >&6; }
+if test "${ac_cv_lib_pcre_pcre_compile+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcre  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pcre_compile ();
+int
+main ()
+{
+return pcre_compile ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_pcre_pcre_compile=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_pcre_pcre_compile=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_pcre_pcre_compile" >&5
+echo "${ECHO_T}$ac_cv_lib_pcre_pcre_compile" >&6; }
+if test $ac_cv_lib_pcre_pcre_compile = yes; then
+
+
+for ac_header in pcre.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBPCRE 1
+_ACEOF
+
+        cat >>confdefs.h <<\_ACEOF
+#define HAVE_PCRE_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+    LIBS="$OLDLIBS"
+  else
+     { { echo "$as_me:$LINENO: error: pcre-config not found, install the pcre-devel package and build with --without-pcre" >&5
+echo "$as_me: error: pcre-config not found, install the pcre-devel package and build with --without-pcre" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+
+
+{ echo "$as_me:$LINENO: checking for zlib support" >&5
+echo $ECHO_N "checking for zlib support... $ECHO_C" >&6; }
+
+# Check whether --with-zlib was given.
+if test "${with_zlib+set}" = set; then
+  withval=$with_zlib; WITH_ZLIB=$withval
+else
+  WITH_ZLIB=yes
+fi
+
+{ echo "$as_me:$LINENO: result: $WITH_ZLIB" >&5
+echo "${ECHO_T}$WITH_ZLIB" >&6; }
+
+if test "$WITH_ZLIB" != "no"; then
+  { echo "$as_me:$LINENO: checking for deflate in -lz" >&5
+echo $ECHO_N "checking for deflate in -lz... $ECHO_C" >&6; }
+if test "${ac_cv_lib_z_deflate+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char deflate ();
+int
+main ()
+{
+return deflate ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_z_deflate=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_z_deflate=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_z_deflate" >&5
+echo "${ECHO_T}$ac_cv_lib_z_deflate" >&6; }
+if test $ac_cv_lib_z_deflate = yes; then
+
+
+for ac_header in zlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+      Z_LIB=-lz
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBZ 1
+_ACEOF
+
+      cat >>confdefs.h <<\_ACEOF
+#define HAVE_ZLIB_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+  if test x$Z_LIB = x; then
+     { { echo "$as_me:$LINENO: error: zlib-headers and/or libs where not found, install them or build with --without-zlib" >&5
+echo "$as_me: error: zlib-headers and/or libs where not found, install them or build with --without-zlib" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+
+{ echo "$as_me:$LINENO: checking for bzip2 support" >&5
+echo $ECHO_N "checking for bzip2 support... $ECHO_C" >&6; }
+
+# Check whether --with-bzip2 was given.
+if test "${with_bzip2+set}" = set; then
+  withval=$with_bzip2; WITH_BZIP2=$withval
+else
+  WITH_BZIP2=yes
+fi
+
+{ echo "$as_me:$LINENO: result: $WITH_BZIP2" >&5
+echo "${ECHO_T}$WITH_BZIP2" >&6; }
+
+if test "$WITH_BZIP2" != "no"; then
+  { echo "$as_me:$LINENO: checking for BZ2_bzCompress in -lbz2" >&5
+echo $ECHO_N "checking for BZ2_bzCompress in -lbz2... $ECHO_C" >&6; }
+if test "${ac_cv_lib_bz2_BZ2_bzCompress+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbz2  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char BZ2_bzCompress ();
+int
+main ()
+{
+return BZ2_bzCompress ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_bz2_BZ2_bzCompress=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_bz2_BZ2_bzCompress=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_bz2_BZ2_bzCompress" >&5
+echo "${ECHO_T}$ac_cv_lib_bz2_BZ2_bzCompress" >&6; }
+if test $ac_cv_lib_bz2_BZ2_bzCompress = yes; then
+
+
+for ac_header in bzlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+      BZ_LIB=-lbz2
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBBZ2 1
+_ACEOF
+
+      cat >>confdefs.h <<\_ACEOF
+#define HAVE_BZLIB_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+  if test x$BZ_LIB = x; then
+     { { echo "$as_me:$LINENO: error: bzip2-headers and/or libs where not found, install them or build with --without-bzip2" >&5
+echo "$as_me: error: bzip2-headers and/or libs where not found, install them or build with --without-bzip2" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+
+if test -z "$PKG_CONFIG"; then
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+
+{ echo "$as_me:$LINENO: checking for FAM" >&5
+echo $ECHO_N "checking for FAM... $ECHO_C" >&6; }
+
+# Check whether --with-fam was given.
+if test "${with_fam+set}" = set; then
+  withval=$with_fam; WITH_FAM=$withval
+else
+  WITH_FAM=no
+fi
+
+{ echo "$as_me:$LINENO: result: $WITH_FAM" >&5
+echo "${ECHO_T}$WITH_FAM" >&6; }
+
+if test "$WITH_FAM" != "no"; then
+  { echo "$as_me:$LINENO: checking for FAMOpen2 in -lfam" >&5
+echo $ECHO_N "checking for FAMOpen2 in -lfam... $ECHO_C" >&6; }
+if test "${ac_cv_lib_fam_FAMOpen2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfam  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char FAMOpen2 ();
+int
+main ()
+{
+return FAMOpen2 ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_fam_FAMOpen2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_fam_FAMOpen2=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_fam_FAMOpen2" >&5
+echo "${ECHO_T}$ac_cv_lib_fam_FAMOpen2" >&6; }
+if test $ac_cv_lib_fam_FAMOpen2 = yes; then
+
+
+for ac_header in fam.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+      FAM_LIBS=-lfam
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBFAM 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FAM_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+  if test "x$FAM_LIBS" = x; then
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
+echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
+echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	else
+		{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+		PKG_CONFIG=""
+	fi
+
+fi
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for FAM" >&5
+echo $ECHO_N "checking for FAM... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$FAM_CFLAGS"; then
+        pkg_cv_FAM_CFLAGS="$FAM_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gamin >= 0.1.0\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gamin >= 0.1.0") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_FAM_CFLAGS=`$PKG_CONFIG --cflags "gamin >= 0.1.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$FAM_LIBS"; then
+        pkg_cv_FAM_LIBS="$FAM_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"gamin >= 0.1.0\"") >&5
+  ($PKG_CONFIG --exists --print-errors "gamin >= 0.1.0") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_FAM_LIBS=`$PKG_CONFIG --libs "gamin >= 0.1.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        FAM_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gamin >= 0.1.0"`
+        else
+	        FAM_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gamin >= 0.1.0"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$FAM_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (gamin >= 0.1.0) were not met:
+
+$FAM_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables FAM_CFLAGS
+and FAM_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (gamin >= 0.1.0) were not met:
+
+$FAM_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables FAM_CFLAGS
+and FAM_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables FAM_CFLAGS
+and FAM_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables FAM_CFLAGS
+and FAM_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	FAM_CFLAGS=$pkg_cv_FAM_CFLAGS
+	FAM_LIBS=$pkg_cv_FAM_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBFAM 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FAM_H 1
+_ACEOF
+
+
+fi
+  fi
+  OLD_LIBS=$LIBS
+  LIBS=$FAM_LIBS
+
+for ac_func in FAMNoExists
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+  LIBS=$OLD_LIBS
+
+  if test x$FAM_LIBS = x; then
+     { { echo "$as_me:$LINENO: error: fam/gamin-headers and/or libs where not found, install them or build with --without-fam" >&5
+echo "$as_me: error: fam/gamin-headers and/or libs where not found, install them or build with --without-fam" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+{ echo "$as_me:$LINENO: checking for properties in mod_webdav" >&5
+echo $ECHO_N "checking for properties in mod_webdav... $ECHO_C" >&6; }
+
+# Check whether --with-webdav-props was given.
+if test "${with_webdav_props+set}" = set; then
+  withval=$with_webdav_props; WITH_WEBDAV_PROPS=$withval
+else
+  WITH_WEBDAV_PROPS=no
+fi
+
+{ echo "$as_me:$LINENO: result: $WITH_WEBDAV_PROPS" >&5
+echo "${ECHO_T}$WITH_WEBDAV_PROPS" >&6; }
+
+if test "$WITH_WEBDAV_PROPS" != "no"; then
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for XML" >&5
+echo $ECHO_N "checking for XML... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XML_CFLAGS"; then
+        pkg_cv_XML_CFLAGS="$XML_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\"") >&5
+  ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_XML_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XML_LIBS"; then
+        pkg_cv_XML_LIBS="$XML_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\"") >&5
+  ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_XML_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        XML_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libxml-2.0"`
+        else
+	        XML_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libxml-2.0"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$XML_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (libxml-2.0) were not met:
+
+$XML_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables XML_CFLAGS
+and XML_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (libxml-2.0) were not met:
+
+$XML_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables XML_CFLAGS
+and XML_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables XML_CFLAGS
+and XML_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables XML_CFLAGS
+and XML_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	XML_CFLAGS=$pkg_cv_XML_CFLAGS
+	XML_LIBS=$pkg_cv_XML_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBXML2 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBXML_H 1
+_ACEOF
+
+
+fi
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for SQLITE" >&5
+echo $ECHO_N "checking for SQLITE... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$SQLITE_CFLAGS"; then
+        pkg_cv_SQLITE_CFLAGS="$SQLITE_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sqlite3\"") >&5
+  ($PKG_CONFIG --exists --print-errors "sqlite3") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_SQLITE_CFLAGS=`$PKG_CONFIG --cflags "sqlite3" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$SQLITE_LIBS"; then
+        pkg_cv_SQLITE_LIBS="$SQLITE_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"sqlite3\"") >&5
+  ($PKG_CONFIG --exists --print-errors "sqlite3") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_SQLITE_LIBS=`$PKG_CONFIG --libs "sqlite3" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        SQLITE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "sqlite3"`
+        else
+	        SQLITE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "sqlite3"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$SQLITE_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (sqlite3) were not met:
+
+$SQLITE_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables SQLITE_CFLAGS
+and SQLITE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (sqlite3) were not met:
+
+$SQLITE_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables SQLITE_CFLAGS
+and SQLITE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables SQLITE_CFLAGS
+and SQLITE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables SQLITE_CFLAGS
+and SQLITE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	SQLITE_CFLAGS=$pkg_cv_SQLITE_CFLAGS
+	SQLITE_LIBS=$pkg_cv_SQLITE_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SQLITE3 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SQLITE3_H 1
+_ACEOF
+
+
+fi
+
+ { echo "$as_me:$LINENO: checking for locks in mod_webdav" >&5
+echo $ECHO_N "checking for locks in mod_webdav... $ECHO_C" >&6; }
+
+# Check whether --with-webdav-locks was given.
+if test "${with_webdav_locks+set}" = set; then
+  withval=$with_webdav_locks; WITH_WEBDAV_LOCKS=$withval
+else
+  WITH_WEBDAV_LOCKS=no
+fi
+
+ { echo "$as_me:$LINENO: result: $WITH_WEBDAV_LOCKS" >&5
+echo "${ECHO_T}$WITH_WEBDAV_LOCKS" >&6; }
+
+ if test "$WITH_WEBDAV_LOCKS" != "no"; then
+   { echo "$as_me:$LINENO: checking for uuid_unparse in -luuid" >&5
+echo $ECHO_N "checking for uuid_unparse in -luuid... $ECHO_C" >&6; }
+if test "${ac_cv_lib_uuid_uuid_unparse+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-luuid  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char uuid_unparse ();
+int
+main ()
+{
+return uuid_unparse ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_uuid_uuid_unparse=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_uuid_uuid_unparse=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_uuid_uuid_unparse" >&5
+echo "${ECHO_T}$ac_cv_lib_uuid_uuid_unparse" >&6; }
+if test $ac_cv_lib_uuid_uuid_unparse = yes; then
+
+
+for ac_header in uuid/uuid.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+                 UUID_LIBS=-luuid
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UUID 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UUID_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+
+ fi
+fi
+
+
+{ echo "$as_me:$LINENO: checking for gdbm" >&5
+echo $ECHO_N "checking for gdbm... $ECHO_C" >&6; }
+
+# Check whether --with-gdbm was given.
+if test "${with_gdbm+set}" = set; then
+  withval=$with_gdbm; WITH_GDBM=$withval
+else
+  WITH_GDBM=no
+fi
+
+{ echo "$as_me:$LINENO: result: $WITH_GDBM" >&5
+echo "${ECHO_T}$WITH_GDBM" >&6; }
+
+if test "$WITH_GDBM" != "no"; then
+ { echo "$as_me:$LINENO: checking for gdbm_open in -lgdbm" >&5
+echo $ECHO_N "checking for gdbm_open in -lgdbm... $ECHO_C" >&6; }
+if test "${ac_cv_lib_gdbm_gdbm_open+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgdbm  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gdbm_open ();
+int
+main ()
+{
+return gdbm_open ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_gdbm_gdbm_open=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_gdbm_gdbm_open=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_gdbm_gdbm_open" >&5
+echo "${ECHO_T}$ac_cv_lib_gdbm_gdbm_open" >&6; }
+if test $ac_cv_lib_gdbm_gdbm_open = yes; then
+
+
+for ac_header in gdbm.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+                 GDBM_LIB=-lgdbm
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GDBM 1
+_ACEOF
+
+		 cat >>confdefs.h <<\_ACEOF
+#define HAVE_GDBM_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+
+fi
+
+{ echo "$as_me:$LINENO: checking for memcache" >&5
+echo $ECHO_N "checking for memcache... $ECHO_C" >&6; }
+
+# Check whether --with-memcache was given.
+if test "${with_memcache+set}" = set; then
+  withval=$with_memcache; WITH_MEMCACHE=$withval
+else
+  WITH_MEMCACHE=no
+fi
+
+{ echo "$as_me:$LINENO: result: $WITH_MEMCACHE" >&5
+echo "${ECHO_T}$WITH_MEMCACHE" >&6; }
+if test "$WITH_MEMCACHE" != "no"; then
+ { echo "$as_me:$LINENO: checking for mc_new in -lmemcache" >&5
+echo $ECHO_N "checking for mc_new in -lmemcache... $ECHO_C" >&6; }
+if test "${ac_cv_lib_memcache_mc_new+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmemcache  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char mc_new ();
+int
+main ()
+{
+return mc_new ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_memcache_mc_new=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_memcache_mc_new=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_memcache_mc_new" >&5
+echo "${ECHO_T}$ac_cv_lib_memcache_mc_new" >&6; }
+if test $ac_cv_lib_memcache_mc_new = yes; then
+
+
+for ac_header in memcache.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+                 MEMCACHE_LIB=-lmemcache
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MEMCACHE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MEMCACHE_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+fi
+
+
+fi
+
+{ echo "$as_me:$LINENO: checking if lua-support is requested" >&5
+echo $ECHO_N "checking if lua-support is requested... $ECHO_C" >&6; }
+
+# Check whether --with-lua was given.
+if test "${with_lua+set}" = set; then
+  withval=$with_lua; WITH_LUA=$withval
+else
+  WITH_LUA=no
+fi
+
+
+{ echo "$as_me:$LINENO: result: $WITH_LUA" >&5
+echo "${ECHO_T}$WITH_LUA" >&6; }
+if test "$WITH_LUA" != "no"; then
+ if test "$WITH_LUA" = "yes"; then
+  WITH_LUA=lua
+ fi
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for LUA" >&5
+echo $ECHO_N "checking for LUA... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$LUA_CFLAGS"; then
+        pkg_cv_LUA_CFLAGS="$LUA_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$WITH_LUA >= 5.1\"") >&5
+  ($PKG_CONFIG --exists --print-errors "$WITH_LUA >= 5.1") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_LUA_CFLAGS=`$PKG_CONFIG --cflags "$WITH_LUA >= 5.1" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$LUA_LIBS"; then
+        pkg_cv_LUA_LIBS="$LUA_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$WITH_LUA >= 5.1\"") >&5
+  ($PKG_CONFIG --exists --print-errors "$WITH_LUA >= 5.1") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_LUA_LIBS=`$PKG_CONFIG --libs "$WITH_LUA >= 5.1" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        LUA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$WITH_LUA >= 5.1"`
+        else
+	        LUA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$WITH_LUA >= 5.1"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$LUA_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements ($WITH_LUA >= 5.1) were not met:
+
+$LUA_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables LUA_CFLAGS
+and LUA_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements ($WITH_LUA >= 5.1) were not met:
+
+$LUA_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables LUA_CFLAGS
+and LUA_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables LUA_CFLAGS
+and LUA_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables LUA_CFLAGS
+and LUA_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	LUA_CFLAGS=$pkg_cv_LUA_CFLAGS
+	LUA_LIBS=$pkg_cv_LUA_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LUA 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LUA_H 1
+_ACEOF
+
+
+fi
+
+
+
+fi
+
+save_LIBS=$LIBS
+{ echo "$as_me:$LINENO: checking for library containing crypt" >&5
+echo $ECHO_N "checking for library containing crypt... $ECHO_C" >&6; }
+if test "${ac_cv_search_crypt+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char crypt ();
+int
+main ()
+{
+return crypt ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' crypt; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_search_crypt=$ac_res
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_crypt+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_crypt+set}" = set; then
+  :
+else
+  ac_cv_search_crypt=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_crypt" >&5
+echo "${ECHO_T}$ac_cv_search_crypt" >&6; }
+ac_res=$ac_cv_search_crypt
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+
+for ac_header in crypt.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_CRYPT_H 1
+_ACEOF
+
+
+fi
+
+done
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LIBCRYPT 1
+_ACEOF
+
+  if test "$ac_cv_search_crypt" != no; then
+    test "$ac_cv_search_crypt" = "none required" || CRYPT_LIB="$ac_cv_search_crypt"
+  fi
+
+fi
+
+LIBS=$save_LIBS
+
+
+save_LIBS=$LIBS
+{ echo "$as_me:$LINENO: checking for library containing sendfilev" >&5
+echo $ECHO_N "checking for library containing sendfilev... $ECHO_C" >&6; }
+if test "${ac_cv_search_sendfilev+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char sendfilev ();
+int
+main ()
+{
+return sendfilev ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' sendfile; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_search_sendfilev=$ac_res
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext
+  if test "${ac_cv_search_sendfilev+set}" = set; then
+  break
+fi
+done
+if test "${ac_cv_search_sendfilev+set}" = set; then
+  :
+else
+  ac_cv_search_sendfilev=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_search_sendfilev" >&5
+echo "${ECHO_T}$ac_cv_search_sendfilev" >&6; }
+ac_res=$ac_cv_search_sendfilev
+if test "$ac_res" != no; then
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+  if test "$ac_cv_search_sendfilev" != no; then
+    test "$ac_cv_search_sendfilev" = "none required" || SENDFILE_LIB="$ac_cv_search_sendfilev"
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SENDFILEV 1
+_ACEOF
+
+  fi
+
+fi
+
+LIBS=$save_LIBS
+
+
+case $host_os in
+	*mingw* ) LIBS="$LIBS -lwsock32";;
+        * ) ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in dup2 getcwd inet_ntoa inet_ntop memset mmap munmap strchr \
+		  strdup strerror strstr strtol sendfile  getopt socket lstat \
+		  gethostbyname poll sigtimedwait epoll_ctl getrlimit chroot \
+		  getuid select signal pathconf madvise posix_fadvise posix_madvise \
+		  writev sigaction sendfile64 send_file kqueue port_create localtime_r
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+{ echo "$as_me:$LINENO: checking for Large File System support" >&5
+echo $ECHO_N "checking for Large File System support... $ECHO_C" >&6; }
+# Check whether --enable-lfs was given.
+if test "${enable_lfs+set}" = set; then
+  enableval=$enable_lfs; case "${enableval}" in
+   yes) CPPFLAGS="${CPPFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES" ;;
+    no) ;;
+     *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-lfs" >&5
+echo "$as_me: error: bad value ${enableval} for --enable-lfs" >&2;}
+   { (exit 1); exit 1; }; } ;;
+  esac
+else
+  CPPFLAGS="${CPPFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES"
+	 enable_lfs=yes
+fi
+
+{ echo "$as_me:$LINENO: result: $enableval" >&5
+echo "${ECHO_T}$enableval" >&6; }
+
+{ echo "$as_me:$LINENO: checking for long" >&5
+echo $ECHO_N "checking for long... $ECHO_C" >&6; }
+if test "${ac_cv_type_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef long ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_long=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_long=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+echo "${ECHO_T}$ac_cv_type_long" >&6; }
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ echo "$as_me:$LINENO: checking size of long" >&5
+echo $ECHO_N "checking size of long... $ECHO_C" >&6; }
+if test "${ac_cv_sizeof_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo=`expr $ac_mid + 1`
+			if test $ac_lo -le $ac_mid; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_hi=`expr '(' $ac_mid ')' - 1`
+			if test $ac_mid -le $ac_hi; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef long ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') if test "$ac_cv_type_long" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_long=0
+   fi ;;
+esac
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef long ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
+    {
+      long int i = longval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+	return 1;
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+	return 1;
+      fprintf (f, "%lu\n", i);
+    }
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_long=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_long" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_long=0
+   fi
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking for off_t" >&5
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_off_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef off_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_off_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_off_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+echo "${ECHO_T}$ac_cv_type_off_t" >&6; }
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ echo "$as_me:$LINENO: checking size of off_t" >&5
+echo $ECHO_N "checking size of off_t... $ECHO_C" >&6; }
+if test "${ac_cv_sizeof_off_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef off_t ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef off_t ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo=`expr $ac_mid + 1`
+			if test $ac_lo -le $ac_mid; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef off_t ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef off_t ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_hi=`expr '(' $ac_mid ')' - 1`
+			if test $ac_mid -le $ac_hi; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef off_t ac__type_sizeof_;
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_off_t=$ac_lo;;
+'') if test "$ac_cv_type_off_t" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (off_t)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_off_t=0
+   fi ;;
+esac
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+   typedef off_t ac__type_sizeof_;
+static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); }
+static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (((long int) (sizeof (ac__type_sizeof_))) < 0)
+    {
+      long int i = longval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+	return 1;
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ((long int) (sizeof (ac__type_sizeof_))))
+	return 1;
+      fprintf (f, "%lu\n", i);
+    }
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_off_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+if test "$ac_cv_type_off_t" = yes; then
+     { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t)
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (off_t)
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+   else
+     ac_cv_sizeof_off_t=0
+   fi
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_off_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_off_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_OFF_T $ac_cv_sizeof_off_t
+_ACEOF
+
+
+
+if test "x$ac_cv_func_sendfile" = xyes; then
+	# check if sendfile works
+        { echo "$as_me:$LINENO: checking if sendfile works" >&5
+echo $ECHO_N "checking if sendfile works... $ECHO_C" >&6; }
+	if test "x$cross_compiling" = xno; then
+	if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+		    #ifdef HAVE_SYS_SENDFILE_H
+		    #include <sys/sendfile.h>
+		    #endif /* HAVE_SYS_SENDFILE_H */
+		    #include <errno.h>
+		    int main() {
+		      int o = 0;
+		      if (-1 == sendfile(-1, 0, &o, 0) && errno == ENOSYS) return -1;
+		      return 0;
+		    }
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SENDFILE_BROKEN 1
+_ACEOF
+
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+	else
+	      { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SENDFILE_BROKEN 1
+_ACEOF
+
+	fi
+fi
+
+
+# Check whether --enable-ipv6 was given.
+if test "${enable_ipv6+set}" = set; then
+  enableval=$enable_ipv6; case "${enableval}" in
+   yes) ipv6=true ;;
+    no) ipv6=false ;;
+     *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-ipv6" >&5
+echo "$as_me: error: bad value ${enableval} for --enable-ipv6" >&2;}
+   { (exit 1); exit 1; }; } ;;
+  esac
+else
+  ipv6=true
+fi
+
+
+if test x$ipv6 = xtrue; then
+  { echo "$as_me:$LINENO: checking for IPv6 support" >&5
+echo $ECHO_N "checking for IPv6 support... $ECHO_C" >&6; }
+if test "${ac_cv_ipv6_support+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+ #include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+int
+main ()
+{
+struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_ipv6_support=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_ipv6_support=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_ipv6_support" >&5
+echo "${ECHO_T}$ac_cv_ipv6_support" >&6; }
+
+  if test "$ac_cv_ipv6_support" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_IPV6 1
+_ACEOF
+
+  fi
+fi
+
+
+ if test "x$cross_compiling" = xyes; then
+  CROSS_COMPILING_TRUE=
+  CROSS_COMPILING_FALSE='#'
+else
+  CROSS_COMPILING_TRUE='#'
+  CROSS_COMPILING_FALSE=
+fi
+
+
+fastcgi_found=no
+{ echo "$as_me:$LINENO: checking for FCGI_Accept in -lfcgi" >&5
+echo $ECHO_N "checking for FCGI_Accept in -lfcgi... $ECHO_C" >&6; }
+if test "${ac_cv_lib_fcgi_FCGI_Accept+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lfcgi  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char FCGI_Accept ();
+int
+main ()
+{
+return FCGI_Accept ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_fcgi_FCGI_Accept=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_fcgi_FCGI_Accept=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_fcgi_FCGI_Accept" >&5
+echo "${ECHO_T}$ac_cv_lib_fcgi_FCGI_Accept" >&6; }
+if test $ac_cv_lib_fcgi_FCGI_Accept = yes; then
+
+
+
+for ac_header in fastcgi.h fastcgi/fastcgi.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## ------------------------------ ##
+## Report this to jan at kneschke.de ##
+## ------------------------------ ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+   fastcgi_found=yes
+
+fi
+
+done
+
+
+fi
+
+
+ if test "x$fastcgi_found" = xyes; then
+  CHECK_WITH_FASTCGI_TRUE=
+  CHECK_WITH_FASTCGI_FALSE='#'
+else
+  CHECK_WITH_FASTCGI_TRUE='#'
+  CHECK_WITH_FASTCGI_FALSE=
+fi
+
+
+
+if test "${GCC}" = "yes"; then
+       CFLAGS="${CFLAGS} -Wall -W -Wshadow -pedantic -std=gnu99"
+fi
+
+LIGHTTPD_VERSION_ID=`echo $PACKAGE_VERSION | $AWK -F '.' '{print "(" $1 " << 16 | " $2 " << 8 | " $3 ")"}'`
+
+cat >>confdefs.h <<_ACEOF
+#define LIGHTTPD_VERSION_ID $LIGHTTPD_VERSION_ID
+_ACEOF
+
+
+ac_config_files="$ac_config_files Makefile src/Makefile doc/Makefile tests/Makefile tests/docroot/Makefile tests/docroot/123/Makefile tests/docroot/www/Makefile tests/docroot/www/go/Makefile tests/docroot/www/indexfile/Makefile tests/docroot/www/expire/Makefile lighttpd.spec distribute.sh cygwin/Makefile cygwin/lighttpd.README openwrt/Makefile openwrt/control openwrt/lighttpd.mk"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${NO_RDYNAMIC_TRUE}" && test -z "${NO_RDYNAMIC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"NO_RDYNAMIC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"NO_RDYNAMIC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"CROSS_COMPILING\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"CROSS_COMPILING\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${CHECK_WITH_FASTCGI_TRUE}" && test -z "${CHECK_WITH_FASTCGI_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"CHECK_WITH_FASTCGI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"CHECK_WITH_FASTCGI\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+	case $1 in
+        -*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by lighttpd $as_me 1.4.19, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf at gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+lighttpd config.status 1.4.19
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+    "tests/docroot/Makefile") CONFIG_FILES="$CONFIG_FILES tests/docroot/Makefile" ;;
+    "tests/docroot/123/Makefile") CONFIG_FILES="$CONFIG_FILES tests/docroot/123/Makefile" ;;
+    "tests/docroot/www/Makefile") CONFIG_FILES="$CONFIG_FILES tests/docroot/www/Makefile" ;;
+    "tests/docroot/www/go/Makefile") CONFIG_FILES="$CONFIG_FILES tests/docroot/www/go/Makefile" ;;
+    "tests/docroot/www/indexfile/Makefile") CONFIG_FILES="$CONFIG_FILES tests/docroot/www/indexfile/Makefile" ;;
+    "tests/docroot/www/expire/Makefile") CONFIG_FILES="$CONFIG_FILES tests/docroot/www/expire/Makefile" ;;
+    "lighttpd.spec") CONFIG_FILES="$CONFIG_FILES lighttpd.spec" ;;
+    "distribute.sh") CONFIG_FILES="$CONFIG_FILES distribute.sh" ;;
+    "cygwin/Makefile") CONFIG_FILES="$CONFIG_FILES cygwin/Makefile" ;;
+    "cygwin/lighttpd.README") CONFIG_FILES="$CONFIG_FILES cygwin/lighttpd.README" ;;
+    "openwrt/Makefile") CONFIG_FILES="$CONFIG_FILES openwrt/Makefile" ;;
+    "openwrt/control") CONFIG_FILES="$CONFIG_FILES openwrt/control" ;;
+    "openwrt/lighttpd.mk") CONFIG_FILES="$CONFIG_FILES openwrt/lighttpd.mk" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+target!$target$ac_delim
+target_cpu!$target_cpu$ac_delim
+target_vendor!$target_vendor$ac_delim
+target_os!$target_os$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+am__isrc!$am__isrc$ac_delim
+CYGPATH_W!$CYGPATH_W$ac_delim
+PACKAGE!$PACKAGE$ac_delim
+VERSION!$VERSION$ac_delim
+ACLOCAL!$ACLOCAL$ac_delim
+AUTOCONF!$AUTOCONF$ac_delim
+AUTOMAKE!$AUTOMAKE$ac_delim
+AUTOHEADER!$AUTOHEADER$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
+install_sh!$install_sh$ac_delim
+STRIP!$STRIP$ac_delim
+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
+mkdir_p!$mkdir_p$ac_delim
+AWK!$AWK$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+am__leading_dot!$am__leading_dot$ac_delim
+AMTAR!$AMTAR$ac_delim
+am__tar!$am__tar$ac_delim
+am__untar!$am__untar$ac_delim
+MAINTAINER_MODE_TRUE!$MAINTAINER_MODE_TRUE$ac_delim
+MAINTAINER_MODE_FALSE!$MAINTAINER_MODE_FALSE$ac_delim
+MAINT!$MAINT$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+DEPDIR!$DEPDIR$ac_delim
+am__include!$am__include$ac_delim
+am__quote!$am__quote$ac_delim
+AMDEP_TRUE!$AMDEP_TRUE$ac_delim
+AMDEP_FALSE!$AMDEP_FALSE$ac_delim
+AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim
+CCDEPMODE!$CCDEPMODE$ac_delim
+am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim
+am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+CPP!$CPP$ac_delim
+LN_S!$LN_S$ac_delim
+NO_RDYNAMIC_TRUE!$NO_RDYNAMIC_TRUE$ac_delim
+NO_RDYNAMIC_FALSE!$NO_RDYNAMIC_FALSE$ac_delim
+U!$U$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+ANSI2KNR!$ANSI2KNR$ac_delim
+ECHO!$ECHO$ac_delim
+AR!$AR$ac_delim
+RANLIB!$RANLIB$ac_delim
+CXX!$CXX$ac_delim
+CXXFLAGS!$CXXFLAGS$ac_delim
+ac_ct_CXX!$ac_ct_CXX$ac_delim
+CXXDEPMODE!$CXXDEPMODE$ac_delim
+am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim
+am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim
+CXXCPP!$CXXCPP$ac_delim
+F77!$F77$ac_delim
+FFLAGS!$FFLAGS$ac_delim
+ac_ct_F77!$ac_ct_F77$ac_delim
+LIBTOOL!$LIBTOOL$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+MYSQL_CONFIG!$MYSQL_CONFIG$ac_delim
+MYSQL_LIBS!$MYSQL_LIBS$ac_delim
+MYSQL_INCLUDE!$MYSQL_INCLUDE$ac_delim
+LDAP_LIB!$LDAP_LIB$ac_delim
+LBER_LIB!$LBER_LIB$ac_delim
+ATTR_LIB!$ATTR_LIB$ac_delim
+DL_LIB!$DL_LIB$ac_delim
+SSL_LIB!$SSL_LIB$ac_delim
+PCRECONFIG!$PCRECONFIG$ac_delim
+PCRE_LIB!$PCRE_LIB$ac_delim
+Z_LIB!$Z_LIB$ac_delim
+BZ_LIB!$BZ_LIB$ac_delim
+PKG_CONFIG!$PKG_CONFIG$ac_delim
+FAM_CFLAGS!$FAM_CFLAGS$ac_delim
+FAM_LIBS!$FAM_LIBS$ac_delim
+XML_CFLAGS!$XML_CFLAGS$ac_delim
+XML_LIBS!$XML_LIBS$ac_delim
+SQLITE_CFLAGS!$SQLITE_CFLAGS$ac_delim
+SQLITE_LIBS!$SQLITE_LIBS$ac_delim
+UUID_LIBS!$UUID_LIBS$ac_delim
+GDBM_LIB!$GDBM_LIB$ac_delim
+MEMCACHE_LIB!$MEMCACHE_LIB$ac_delim
+LUA_CFLAGS!$LUA_CFLAGS$ac_delim
+LUA_LIBS!$LUA_LIBS$ac_delim
+CRYPT_LIB!$CRYPT_LIB$ac_delim
+SENDFILE_LIB!$SENDFILE_LIB$ac_delim
+CROSS_COMPILING_TRUE!$CROSS_COMPILING_TRUE$ac_delim
+CROSS_COMPILING_FALSE!$CROSS_COMPILING_FALSE$ac_delim
+CHECK_WITH_FASTCGI_TRUE!$CHECK_WITH_FASTCGI_TRUE$ac_delim
+CHECK_WITH_FASTCGI_FALSE!$CHECK_WITH_FASTCGI_FALSE$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 47; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[	 ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      ac_file_inputs="$ac_file_inputs $ac_f"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input="Generated from "`IFS=:
+	  echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+_ACEOF
+
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status.  If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless.  But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([	 #]*\\)[^	 ]*\\([	 ]*'
+ac_dB='\\)[	 (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+  sed -n '
+	t rset
+	:rset
+	s/^[	 ]*#[	 ]*define[	 ][	 ]*//
+	t ok
+	d
+	:ok
+	s/[\\&,]/\\&/g
+	s/^\('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+	s/^\('"$ac_word_re"'\)[	 ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+  ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then replace #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[	 #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is:	 sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is:	 sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be:	 sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
+do
+  # Write a here document:
+    cat >>$CONFIG_STATUS <<_ACEOF
+    # First, check the format of the line:
+    cat >"\$tmp/defines.sed" <<\\CEOF
+/^[	 ]*#[	 ]*undef[	 ][	 ]*$ac_word_re[	 ]*\$/b def
+/^[	 ]*#[	 ]*define[	 ][	 ]*$ac_word_re[(	 ]/b def
+b
+:def
+_ACEOF
+  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+  grep . conftest.tail >/dev/null || break
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines conftest.tail
+
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
+cat >>$CONFIG_STATUS <<\_ACEOF
+  if test x"$ac_file" != x-; then
+    echo "/* $configure_input  */" >"$tmp/config.h"
+    cat "$ac_result" >>"$tmp/config.h"
+    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f $ac_file
+      mv "$tmp/config.h" $ac_file
+    fi
+  else
+    echo "/* $configure_input  */"
+    cat "$ac_result"
+  fi
+  rm -f "$tmp/out12"
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $ac_file | $ac_file:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $ac_file" >`$as_dirname -- $ac_file ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X$ac_file : 'X\(//\)[^/]' \| \
+	 X$ac_file : 'X\(//\)$' \| \
+	 X$ac_file : 'X\(/\)' \| . 2>/dev/null ||
+echo X$ac_file |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
+echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then
+    dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    { as_dir=$dirpart/$fdir
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+
+  esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
+
+do_build="mod_cgi mod_fastcgi mod_extforward mod_proxy mod_evhost mod_simple_vhost mod_access mod_alias mod_setenv mod_usertrack mod_auth mod_status mod_accesslog mod_rrdtool mod_secdownload mod_expire mod_compress mod_dirlisting mod_indexfiles mod_userdir mod_webdav mod_staticfile mod_scgi mod_flv_streaming"
+
+plugins="mod_rewrite mod_redirect mod_ssi mod_trigger_b4_dl"
+features="regex-conditionals"
+if test ! "x$PCRE_LIB" = x; then
+	do_build="$do_build $plugins"
+	enable_feature="$features"
+else
+	no_build="$no_build $plugins"
+	disable_feature="$features"
+fi
+
+plugins="mod_mysql_vhost"
+if test ! "x$MYSQL_LIBS" = x; then
+	do_build="$do_build $plugins"
+else
+	no_build="$no_build $plugins"
+fi
+
+plugins="mod_cml mod_magnet"
+if test ! "x$LUA_LIBS" = x; then
+	do_build="$do_build $plugins"
+else
+	no_build="$no_build $plugins"
+fi
+
+features="storage-gdbm"
+if test ! "x$GDBM_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="storage-memcache"
+if test ! "x$MEMCACHE_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="compress-gzip compress-deflate"
+if test ! "x$Z_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="compress-bzip2"
+if test ! "x$BZ_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="auth-ldap"
+if test ! "x$LDAP_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="network-openssl"
+if test ! "x$SSL_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+# no crypt call
+features="auth-crypt"
+if test "$ac_cv_search_crypt" = no; then
+	disable_feature="$disable_feature $features"
+else
+	enable_feature="$enable_feature $features"
+fi
+
+features="network-ipv6"
+if test "$ac_cv_ipv6_support" = yes; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="large-files"
+if test "$enable_lfs" = yes; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="stat-cache-fam"
+if test ! "x$FAM_LIBS" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="webdav-properties"
+if test "x$XML_LIBS" \!= x -a "x$SQLITE_LIBS" \!= x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="webdav-locks"
+if test "x$UUID_LIBS" \!= x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+
+## output
+
+$ECHO
+$ECHO "Plugins:"
+$ECHO
+
+$ECHO "enabled: "
+for p in $do_build; do
+	$ECHO "  $p"
+done | sort
+
+$ECHO "disabled: "
+for p in $no_build; do
+	$ECHO "  $p"
+done | sort
+
+$ECHO
+$ECHO "Features:"
+$ECHO
+
+$ECHO "enabled: "
+for p in $enable_feature; do
+	$ECHO "  $p"
+done | sort
+
+$ECHO "disabled: "
+for p in $disable_feature; do
+	$ECHO "  $p"
+done | sort
+
+$ECHO


Property changes on: lighttpd/tags/1.4.19-5+lenny2/configure
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/configure.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/configure.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/configure.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,703 @@
+#                                               -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+AC_PREREQ(2.57)
+AC_INIT(lighttpd, 1.4.19, jan at kneschke.de)
+AC_CONFIG_SRCDIR([src/server.c])
+
+AC_CANONICAL_TARGET
+
+AM_INIT_AUTOMAKE
+
+AC_CONFIG_HEADER([config.h])
+
+AM_MAINTAINER_MODE
+
+# Checks for programs.
+AC_PROG_CC
+AM_PROG_CC_C_O
+AC_PROG_LD
+AC_PROG_INSTALL
+AC_PROG_AWK
+AC_PROG_CPP
+dnl AC_PROG_CXX
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+
+dnl check environment
+AC_AIX
+AC_ISC_POSIX
+AC_MINIX
+
+dnl AC_CANONICAL_HOST
+case $host_os in
+	*darwin*|*cygwin*|*aix*|*mingw* ) NO_RDYNAMIC=yes;;
+        * ) NO_RDYNAMIC=no;;
+esac
+AM_CONDITIONAL(NO_RDYNAMIC, test x$NO_RDYNAMIC = xyes)
+
+AC_EXEEXT
+
+dnl more automake stuff
+AM_C_PROTOTYPES
+
+dnl libtool
+AC_DISABLE_STATIC
+AC_ENABLE_SHARED
+
+AC_LIBTOOL_DLOPEN
+AC_PROG_LIBTOOL
+
+dnl for solaris
+CPPFLAGS="${CPPFLAGS} -D_REENTRANT -D__EXTENSIONS__"
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_HEADER_SYS_WAIT
+AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h stdlib.h string.h \
+sys/socket.h sys/time.h unistd.h sys/sendfile.h sys/uio.h \
+getopt.h sys/epoll.h sys/select.h poll.h sys/poll.h sys/devpoll.h sys/filio.h \
+sys/mman.h sys/event.h sys/port.h pwd.h sys/syslimits.h \
+sys/resource.h sys/un.h syslog.h sys/prctl.h uuid/uuid.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_C_INLINE
+AC_C_CHAR_UNSIGNED
+AC_TYPE_OFF_T
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+
+AC_CHECK_MEMBER(struct tm.tm_gmtoff,[AC_DEFINE([HAVE_STRUCT_TM_GMTOFF],[1],[gmtoff in struct tm])],,[#include <time.h>])
+AC_CHECK_TYPES(struct sockaddr_storage,,,[#include <sys/socket.h>])
+AC_CHECK_TYPES(socklen_t,,,[#include <sys/types.h>
+#include <sys/socket.h>])
+
+# Checks for library functions.
+AC_FUNC_FORK
+dnl AC_FUNC_MALLOC
+#AC_FUNC_MMAP
+dnl AC_FUNC_REALLOC
+AC_TYPE_SIGNAL
+AC_FUNC_STAT
+AC_FUNC_STRFTIME
+
+dnl Checks for database.
+MYSQL_INCLUDE=""
+MYSQL_LIBS=""
+
+AC_MSG_CHECKING(for MySQL support)
+AC_ARG_WITH(mysql,
+    AC_HELP_STRING([--with-mysql@<:@=PATH@:>@],[Include MySQL support. PATH is the path to 'mysql_config']),
+    [WITH_MYSQL=$withval],[WITH_MYSQL=no])
+
+if test "$WITH_MYSQL" != "no"; then
+  AC_MSG_RESULT(yes)
+  if test "$WITH_MYSQL" = "yes"; then
+    AC_PATH_PROG(MYSQL_CONFIG, mysql_config)
+  else
+    MYSQL_CONFIG=$WITH_MYSQL
+  fi
+
+  if test "$MYSQL_CONFIG" = ""; then
+    AC_MSG_ERROR(mysql_config is not found)
+  fi
+  if test \! -x $MYSQL_CONFIG; then
+    AC_MSG_ERROR(mysql_config not exists or not executable, use --with-mysql=path-to-mysql_config)
+  fi
+
+  if $MYSQL_CONFIG | grep -- '--include' > /dev/null ; then
+    MYSQL_INCLUDE="`$MYSQL_CONFIG --include | sed s/\'//g`"
+  else
+    MYSQL_INCLUDE="`$MYSQL_CONFIG --cflags | sed s/\'//g`"
+  fi
+  MYSQL_LIBS="`$MYSQL_CONFIG --libs | sed s/\'//g`"
+
+  AC_MSG_CHECKING(for MySQL includes at)
+  AC_MSG_RESULT($MYSQL_INCLUDE)
+
+  AC_MSG_CHECKING(for MySQL libraries at)
+  AC_MSG_RESULT($MYSQL_LIBS)
+dnl check for errmsg.h, which isn't installed by some versions of 3.21
+  old_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="$CPPFLAGS $MYSQL_INCLUDE"
+  AC_CHECK_HEADERS(errmsg.h mysql.h)
+  CPPFLAGS="$old_CPPFLAGS"
+
+  AC_DEFINE([HAVE_MYSQL], [1], [mysql support])
+else
+  AC_MSG_RESULT(no)
+fi
+
+AC_SUBST(MYSQL_LIBS)
+AC_SUBST(MYSQL_INCLUDE)
+
+dnl Check for LDAP
+AC_MSG_CHECKING(for LDAP support)
+AC_ARG_WITH(ldap, AC_HELP_STRING([--with-ldap],[enable LDAP support]),
+[WITH_LDAP=$withval], [WITH_LDAP=no])
+AC_MSG_RESULT([$withval])
+if test "$WITH_LDAP" != "no"; then
+ AC_CHECK_LIB(ldap, ldap_bind, [
+  AC_CHECK_HEADERS([ldap.h],[
+    LDAP_LIB=-lldap
+    AC_DEFINE([HAVE_LIBLDAP], [1], [libldap])
+    AC_DEFINE([HAVE_LDAP_H], [1])
+  ])
+ ])
+ AC_SUBST(LDAP_LIB)
+ AC_CHECK_LIB(lber, ber_printf, [
+  AC_CHECK_HEADERS([lber.h],[
+    LBER_LIB=-llber
+    AC_DEFINE([HAVE_LIBLBER], [1], [liblber])
+    AC_DEFINE([HAVE_LBER_H], [1])
+  ])
+ ])
+ AC_SUBST(LBER_LIB)
+fi
+
+dnl Check for xattr
+AC_MSG_CHECKING(for extended attributes support)
+AC_ARG_WITH(attr, AC_HELP_STRING([--with-attr],[enable extended attribute support]),
+[WITH_ATTR=$withval],[WITH_ATTR=no])
+AC_MSG_RESULT($withval)
+if test "$WITH_ATTR" != "no"; then
+ AC_CHECK_LIB(attr, attr_get, [
+	AC_CHECK_HEADERS([attr/attributes.h],[
+		ATTR_LIB=-lattr
+		AC_DEFINE([HAVE_XATTR], [1], [libattr])
+		AC_DEFINE([HAVE_ATTR_ATTRIBUTES_H], [1])
+	])
+ ])
+ AC_SUBST(ATTR_LIB)
+fi
+
+## openssl on solaris needs -lsocket -lnsl
+AC_SEARCH_LIBS(socket,socket)
+AC_SEARCH_LIBS(gethostbyname,nsl socket)
+AC_SEARCH_LIBS(hstrerror,resolv)
+
+save_LIBS=$LIBS
+AC_SEARCH_LIBS(dlopen,dl,[
+  AC_CHECK_HEADERS([dlfcn.h],[
+    if test "$ac_cv_search_dlopen" != no; then
+      test "$ac_cv_search_dlopen" = "none required" || DL_LIB="$ac_cv_search_dlopen"
+    fi
+
+    AC_DEFINE([HAVE_LIBDL], [1], [libdl])
+    AC_DEFINE([HAVE_DLFCN_H], [1])
+  ])
+])
+LIBS=$save_LIBS
+AC_SUBST(DL_LIB)
+
+dnl Check for valgrind
+AC_MSG_CHECKING(for valgrind)
+AC_ARG_WITH(valgrind, AC_HELP_STRING([--with-valgrind],[enable internal support for valgrind]),
+[WITH_VALGRIND=$withval],[WITH_VALGRIND=no])
+AC_MSG_RESULT([$WITH_VALGRIND])
+if test "$WITH_VALGRIND" != "no"; then
+ AC_CHECK_HEADERS([valgrind/valgrind.h])
+fi
+
+dnl Check for openssl
+AC_MSG_CHECKING(for OpenSSL)
+AC_ARG_WITH(openssl,
+    AC_HELP_STRING([--with-openssl@<:@=DIR@:>@],[Include openssl support (default no)]),
+    [WITH_OPENSSL=$withval],[WITH_OPENSSL=no])
+
+if test "$WITH_OPENSSL" != "no"; then
+    use_openssl=yes
+    if test "$WITH_OPENSSL" != "yes"; then
+	CPPFLAGS="$CPPFLAGS -I$WITH_OPENSSL/include"
+	LDFLAGS="$LDFLAGS -L$WITH_OPENSSL/lib"
+    fi
+else
+    use_openssl=no
+fi
+AC_MSG_RESULT([$use_openssl])
+
+AC_ARG_WITH(openssl-includes,
+    AC_HELP_STRING([--with-openssl-includes=DIR],[OpenSSL includes]),
+    [ use_openssl=yes CPPFLAGS="$CPPFLAGS -I$withval" ]
+)
+
+AC_ARG_WITH(openssl-libs,
+    AC_HELP_STRING([--with-openssl-libs=DIR],[OpenSSL libraries]),
+    [ use_openssl=yes LDFLAGS="$LDFLAGS -L$withval" ]
+)
+
+AC_ARG_WITH(kerberos5,
+    AC_HELP_STRING([--with-kerberos5],[use Kerberos5 support with OpenSSL]),
+    [ use_kerberos=yes ], [use_kerberos=no]
+)
+
+if test "x$use_openssl" = "xyes"; then
+    if test "x$use_kerberos" != "xyes"; then
+        CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_KRB5"
+    fi
+
+    AC_CHECK_HEADERS([openssl/ssl.h])
+    OLDLIBS="$LIBS"
+    AC_CHECK_LIB(crypto, BIO_f_base64, [
+      AC_CHECK_LIB(ssl, SSL_new, [ SSL_LIB="-lssl -lcrypto"
+				 AC_DEFINE(HAVE_LIBSSL, [], [Have libssl]) ], [], [ -lcrypto "$DL_LIB" ])
+    ], [], [])
+    LIBS="$OLDLIBS"
+    AC_SUBST(SSL_LIB)
+fi
+
+AC_MSG_CHECKING(for perl regular expressions support)
+AC_ARG_WITH(pcre, AC_HELP_STRING([--with-pcre],[Enable pcre support (default yes)]),
+    [WITH_PCRE=$withval],[WITH_PCRE=yes])
+AC_MSG_RESULT([$WITH_PCRE])
+
+if test "x$cross_compiling" = xno -a "$WITH_PCRE" != "no"; then
+  AC_PATH_PROG(PCRECONFIG, pcre-config)
+
+  if test x"$PCRECONFIG" != x; then
+    PCRE_LIB=`$PCRECONFIG --libs`
+    CPPFLAGS="$CPPFLAGS `$PCRECONFIG --cflags`"
+    OLDLIBS="$LIBS"
+    LIBS="$LIBS $PCRE_LIB"
+    AC_CHECK_LIB(pcre, pcre_compile, [
+      AC_CHECK_HEADERS([pcre.h], [
+        AC_DEFINE([HAVE_LIBPCRE], [1], [libpcre])
+        AC_DEFINE([HAVE_PCRE_H], [1])
+      ])
+    ])
+    LIBS="$OLDLIBS"
+  else
+     AC_MSG_ERROR([pcre-config not found, install the pcre-devel package and build with --without-pcre])
+  fi
+fi
+
+AC_SUBST(PCRE_LIB)
+
+AC_MSG_CHECKING(for zlib support)
+AC_ARG_WITH(zlib, AC_HELP_STRING([--with-zlib],[Enable zlib support for mod_compress]),
+    [WITH_ZLIB=$withval],[WITH_ZLIB=yes])
+AC_MSG_RESULT([$WITH_ZLIB])
+
+if test "$WITH_ZLIB" != "no"; then
+  AC_CHECK_LIB(z, deflate, [
+    AC_CHECK_HEADERS([zlib.h],[
+      Z_LIB=-lz
+      AC_DEFINE([HAVE_LIBZ], [1], [libz])
+      AC_DEFINE([HAVE_ZLIB_H], [1])
+    ])
+  ])
+  if test x$Z_LIB = x; then
+     AC_MSG_ERROR([zlib-headers and/or libs where not found, install them or build with --without-zlib])
+  fi
+fi
+AC_SUBST(Z_LIB)
+
+AC_MSG_CHECKING(for bzip2 support)
+AC_ARG_WITH(bzip2, AC_HELP_STRING([--with-bzip2],[Enable bzip2 support for mod_compress]),
+    [WITH_BZIP2=$withval],[WITH_BZIP2=yes])
+AC_MSG_RESULT([$WITH_BZIP2])
+
+if test "$WITH_BZIP2" != "no"; then
+  AC_CHECK_LIB(bz2, BZ2_bzCompress, [
+    AC_CHECK_HEADERS([bzlib.h],[
+      BZ_LIB=-lbz2
+      AC_DEFINE([HAVE_LIBBZ2], [1], [libbz2])
+      AC_DEFINE([HAVE_BZLIB_H], [1])
+    ])
+  ])
+  if test x$BZ_LIB = x; then
+     AC_MSG_ERROR([bzip2-headers and/or libs where not found, install them or build with --without-bzip2])
+  fi
+fi
+AC_SUBST(BZ_LIB)
+
+if test -z "$PKG_CONFIG"; then
+  AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+fi
+
+dnl Check for gamin
+AC_MSG_CHECKING(for FAM)
+AC_ARG_WITH(fam, AC_HELP_STRING([--with-fam],[fam/gamin for reducing number of stat() calls]),
+[WITH_FAM=$withval],[WITH_FAM=no])
+AC_MSG_RESULT([$WITH_FAM])
+
+if test "$WITH_FAM" != "no"; then
+  AC_CHECK_LIB(fam, FAMOpen2, [
+    AC_CHECK_HEADERS([fam.h],[
+      FAM_LIBS=-lfam
+      AC_DEFINE([HAVE_LIBFAM], [1], [libfam])
+      AC_DEFINE([HAVE_FAM_H], [1], [fam.h])
+    ])
+  ])
+  if test "x$FAM_LIBS" = x; then
+    PKG_CHECK_MODULES(FAM, gamin >= 0.1.0, [
+      AC_DEFINE([HAVE_LIBFAM], [1], [libfam])
+      AC_DEFINE([HAVE_FAM_H], [1], [fam.h])
+    ])
+  fi
+  OLD_LIBS=$LIBS
+  LIBS=$FAM_LIBS
+  AC_CHECK_FUNCS([FAMNoExists])
+  LIBS=$OLD_LIBS
+  
+  if test x$FAM_LIBS = x; then
+     AC_MSG_ERROR([fam/gamin-headers and/or libs where not found, install them or build with --without-fam])
+  fi
+fi
+
+AC_MSG_CHECKING(for properties in mod_webdav)
+AC_ARG_WITH(webdav-props, AC_HELP_STRING([--with-webdav-props],[properties in mod_webdav]),
+[WITH_WEBDAV_PROPS=$withval],[WITH_WEBDAV_PROPS=no])
+AC_MSG_RESULT([$WITH_WEBDAV_PROPS])
+
+if test "$WITH_WEBDAV_PROPS" != "no"; then
+ PKG_CHECK_MODULES(XML, libxml-2.0, [
+    AC_DEFINE([HAVE_LIBXML2], [1], [libxml2])
+    AC_DEFINE([HAVE_LIBXML_H], [1], [libxml.h])
+ ])
+ PKG_CHECK_MODULES(SQLITE, sqlite3, [
+    AC_DEFINE([HAVE_SQLITE3], [1], [libsqlite3])
+    AC_DEFINE([HAVE_SQLITE3_H], [1], [sqlite3.h])
+ ])
+
+ AC_MSG_CHECKING(for locks in mod_webdav)
+ AC_ARG_WITH(webdav-locks, AC_HELP_STRING([--with-webdav-locks],[locks in mod_webdav]),
+ [WITH_WEBDAV_LOCKS=$withval],[WITH_WEBDAV_LOCKS=no])
+ AC_MSG_RESULT([$WITH_WEBDAV_LOCKS])
+
+ if test "$WITH_WEBDAV_LOCKS" != "no"; then
+   AC_CHECK_LIB(uuid, uuid_unparse, [
+         AC_CHECK_HEADERS([uuid/uuid.h],[
+                 UUID_LIBS=-luuid
+                 AC_DEFINE([HAVE_UUID], [1], [libuuid])
+		 AC_DEFINE([HAVE_UUID_H], [1], [uuid/uuid.h is available])
+         ])
+ ])
+
+ fi
+fi
+AC_SUBST(UUID_LIBS)
+
+dnl Check for gdbm
+AC_MSG_CHECKING(for gdbm)
+AC_ARG_WITH(gdbm, AC_HELP_STRING([--with-gdbm],[gdbm storage for mod_trigger_b4_dl]),
+[WITH_GDBM=$withval],[WITH_GDBM=no])
+AC_MSG_RESULT([$WITH_GDBM])
+
+if test "$WITH_GDBM" != "no"; then
+ AC_CHECK_LIB(gdbm, gdbm_open, [
+         AC_CHECK_HEADERS([gdbm.h],[
+                 GDBM_LIB=-lgdbm
+                 AC_DEFINE([HAVE_GDBM], [1], [libgdbm])
+		 AC_DEFINE([HAVE_GDBM_H], [1])
+         ])
+ ])
+ AC_SUBST(GDBM_LIB)
+fi
+
+dnl Check for memcache
+AC_MSG_CHECKING(for memcache)
+AC_ARG_WITH(memcache, AC_HELP_STRING([--with-memcache],[memcached storage for mod_trigger_b4_dl]),
+[WITH_MEMCACHE=$withval],[WITH_MEMCACHE=no])
+AC_MSG_RESULT([$WITH_MEMCACHE])
+if test "$WITH_MEMCACHE" != "no"; then
+ AC_CHECK_LIB(memcache, mc_new, [
+         AC_CHECK_HEADERS([memcache.h],[
+                 MEMCACHE_LIB=-lmemcache
+                 AC_DEFINE([HAVE_MEMCACHE], [1], [libmemcache])
+		 AC_DEFINE([HAVE_MEMCACHE_H], [1], [memcache.h])
+         ])
+ ])
+ AC_SUBST(MEMCACHE_LIB)
+fi
+
+dnl Check for lua
+AC_MSG_CHECKING(if lua-support is requested)
+AC_ARG_WITH(lua, AC_HELP_STRING([--with-lua],[lua engine for mod_cml]),
+[WITH_LUA=$withval],[WITH_LUA=no])
+
+AC_MSG_RESULT($WITH_LUA)
+if test "$WITH_LUA" != "no"; then
+ if test "$WITH_LUA" = "yes"; then
+  WITH_LUA=lua
+ fi
+ PKG_CHECK_MODULES(LUA, $WITH_LUA >= 5.1, [
+   AC_DEFINE([HAVE_LUA], [1], [liblua])
+   AC_DEFINE([HAVE_LUA_H], [1], [lua.h])
+ ])
+
+ AC_SUBST(LUA_CFLAGS)
+ AC_SUBST(LUA_LIBS)
+fi
+
+save_LIBS=$LIBS
+AC_SEARCH_LIBS(crypt,crypt,[
+  AC_CHECK_HEADERS([crypt.h],[
+    AC_DEFINE([HAVE_CRYPT_H], [1])
+  ])
+
+  AC_DEFINE([HAVE_LIBCRYPT], [1], [libcrypt])
+  if test "$ac_cv_search_crypt" != no; then
+    test "$ac_cv_search_crypt" = "none required" || CRYPT_LIB="$ac_cv_search_crypt"
+  fi
+])
+LIBS=$save_LIBS
+AC_SUBST(CRYPT_LIB)
+
+save_LIBS=$LIBS
+AC_SEARCH_LIBS(sendfilev,sendfile,[
+  if test "$ac_cv_search_sendfilev" != no; then
+    test "$ac_cv_search_sendfilev" = "none required" || SENDFILE_LIB="$ac_cv_search_sendfilev"
+    AC_DEFINE([HAVE_SENDFILEV], [1], [solaris sendfilev])
+  fi
+])
+LIBS=$save_LIBS
+AC_SUBST(SENDFILE_LIB)
+
+case $host_os in
+	*mingw* ) LIBS="$LIBS -lwsock32";;
+        * ) ;;
+esac
+
+AC_CHECK_FUNCS([dup2 getcwd inet_ntoa inet_ntop memset mmap munmap strchr \
+		  strdup strerror strstr strtol sendfile  getopt socket lstat \
+		  gethostbyname poll sigtimedwait epoll_ctl getrlimit chroot \
+		  getuid select signal pathconf madvise posix_fadvise posix_madvise \
+		  writev sigaction sendfile64 send_file kqueue port_create localtime_r])
+
+AC_MSG_CHECKING(for Large File System support)
+AC_ARG_ENABLE(lfs,
+ AC_HELP_STRING([--enable-lfs],[Turn on Large File System (default)]),
+ [case "${enableval}" in
+   yes) CPPFLAGS="${CPPFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES" ;;
+    no) ;;
+     *) AC_MSG_ERROR(bad value ${enableval} for --enable-lfs) ;;
+  esac],[CPPFLAGS="${CPPFLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES"
+	 enable_lfs=yes])
+AC_MSG_RESULT($enableval)
+
+AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(off_t)
+
+if test "x$ac_cv_func_sendfile" = xyes; then
+	# check if sendfile works
+        AC_MSG_CHECKING(if sendfile works)
+	if test "x$cross_compiling" = xno; then
+	AC_TRY_RUN([
+		    #ifdef HAVE_SYS_SENDFILE_H
+		    #include <sys/sendfile.h>
+		    #endif /* HAVE_SYS_SENDFILE_H */
+		    #include <errno.h>
+		    int main() {
+		      int o = 0;
+		      if (-1 == sendfile(-1, 0, &o, 0) && errno == ENOSYS) return -1;
+		      return 0;
+		    } ],
+		    AC_MSG_RESULT(yes),
+		    [ AC_MSG_RESULT(no)
+		    AC_DEFINE([HAVE_SENDFILE_BROKEN], [1], [broken sendfile]) ] )
+	else
+	      AC_MSG_RESULT(no, cross-compiling)
+	      AC_DEFINE([HAVE_SENDFILE_BROKEN], [1], [broken sendfile])
+	fi
+fi
+
+dnl Check for IPv6 support
+
+AC_ARG_ENABLE(ipv6,
+ AC_HELP_STRING([--disable-ipv6],[disable IPv6 support]),
+ [case "${enableval}" in
+   yes) ipv6=true ;;
+    no) ipv6=false ;;
+     *) AC_MSG_ERROR(bad value ${enableval} for --enable-ipv6) ;;
+  esac],[ipv6=true])
+
+if test x$ipv6 = xtrue; then
+  AC_CACHE_CHECK([for IPv6 support], ac_cv_ipv6_support,
+  [AC_TRY_LINK([ #include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>], [struct sockaddr_in6 s; struct in6_addr t=in6addr_any; int i=AF_INET6; s; t.s6_addr[0] = 0; ],
+  [ac_cv_ipv6_support=yes], [ac_cv_ipv6_support=no])])
+
+  if test "$ac_cv_ipv6_support" = yes; then
+    AC_DEFINE(HAVE_IPV6,1,[Whether to enable IPv6 support])
+  fi
+fi
+
+
+AM_CONDITIONAL(CROSS_COMPILING, test "x$cross_compiling" = xyes)
+
+dnl check for fastcgi lib, for the tests only
+fastcgi_found=no
+AC_CHECK_LIB(fcgi, FCGI_Accept, [
+ AC_CHECK_HEADERS([fastcgi.h fastcgi/fastcgi.h],[
+   fastcgi_found=yes
+ ])
+])
+
+AM_CONDITIONAL(CHECK_WITH_FASTCGI, test "x$fastcgi_found" = xyes)
+
+
+if test "${GCC}" = "yes"; then
+       CFLAGS="${CFLAGS} -Wall -W -Wshadow -pedantic -std=gnu99"
+fi
+
+dnl build version-id
+LIGHTTPD_VERSION_ID=`echo $PACKAGE_VERSION | $AWK -F '.' '{print "(" $1 " << 16 | " $2 " << 8 | " $3 ")"}'`
+AC_DEFINE_UNQUOTED([LIGHTTPD_VERSION_ID], [$LIGHTTPD_VERSION_ID], [lighttpd-version-id])
+
+AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile tests/Makefile \
+		 tests/docroot/Makefile \
+		 tests/docroot/123/Makefile \
+		 tests/docroot/www/Makefile \
+		 tests/docroot/www/go/Makefile \
+		 tests/docroot/www/indexfile/Makefile \
+		 tests/docroot/www/expire/Makefile \
+		 lighttpd.spec distribute.sh cygwin/Makefile cygwin/lighttpd.README
+		 openwrt/Makefile openwrt/control openwrt/lighttpd.mk])
+AC_OUTPUT
+
+
+do_build="mod_cgi mod_fastcgi mod_extforward mod_proxy mod_evhost mod_simple_vhost mod_access mod_alias mod_setenv mod_usertrack mod_auth mod_status mod_accesslog mod_rrdtool mod_secdownload mod_expire mod_compress mod_dirlisting mod_indexfiles mod_userdir mod_webdav mod_staticfile mod_scgi mod_flv_streaming"
+
+plugins="mod_rewrite mod_redirect mod_ssi mod_trigger_b4_dl"
+features="regex-conditionals"
+if test ! "x$PCRE_LIB" = x; then
+	do_build="$do_build $plugins"
+	enable_feature="$features"
+else
+	no_build="$no_build $plugins"
+	disable_feature="$features"
+fi
+
+plugins="mod_mysql_vhost"
+if test ! "x$MYSQL_LIBS" = x; then
+	do_build="$do_build $plugins"
+else
+	no_build="$no_build $plugins"
+fi
+
+plugins="mod_cml mod_magnet"
+if test ! "x$LUA_LIBS" = x; then
+	do_build="$do_build $plugins"
+else
+	no_build="$no_build $plugins"
+fi
+
+features="storage-gdbm"
+if test ! "x$GDBM_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="storage-memcache"
+if test ! "x$MEMCACHE_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="compress-gzip compress-deflate"
+if test ! "x$Z_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="compress-bzip2"
+if test ! "x$BZ_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="auth-ldap"
+if test ! "x$LDAP_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="network-openssl"
+if test ! "x$SSL_LIB" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+# no crypt call
+features="auth-crypt"
+if test "$ac_cv_search_crypt" = no; then
+	disable_feature="$disable_feature $features"
+else
+	enable_feature="$enable_feature $features"
+fi
+
+features="network-ipv6"
+if test "$ac_cv_ipv6_support" = yes; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="large-files"
+if test "$enable_lfs" = yes; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="stat-cache-fam"
+if test ! "x$FAM_LIBS" = x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="webdav-properties"
+if test "x$XML_LIBS" \!= x -a "x$SQLITE_LIBS" \!= x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+features="webdav-locks"
+if test "x$UUID_LIBS" \!= x; then
+	enable_feature="$enable_feature $features"
+else
+	disable_feature="$disable_feature $features"
+fi
+
+
+## output
+
+$ECHO
+$ECHO "Plugins:"
+$ECHO
+
+$ECHO "enabled: "
+for p in $do_build; do
+	$ECHO "  $p"
+done | sort
+
+$ECHO "disabled: "
+for p in $no_build; do
+	$ECHO "  $p"
+done | sort
+
+$ECHO
+$ECHO "Features:"
+$ECHO
+
+$ECHO "enabled: "
+for p in $enable_feature; do
+	$ECHO "  $p"
+done | sort
+
+$ECHO "disabled: "
+for p in $disable_feature; do
+	$ECHO "  $p"
+done | sort
+
+$ECHO

Added: lighttpd/tags/1.4.19-5+lenny2/cygwin/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/cygwin/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/cygwin/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+EXTRA_DIST=lighttpd.README setup.hint

Added: lighttpd/tags/1.4.19-5+lenny2/cygwin/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/cygwin/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/cygwin/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,356 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = cygwin
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/lighttpd.README.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = lighttpd.README
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = lighttpd.README setup.hint
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  cygwin/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  cygwin/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+lighttpd.README: $(top_builddir)/config.status $(srcdir)/lighttpd.README.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/cygwin/lighttpd.README
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/cygwin/lighttpd.README	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/cygwin/lighttpd.README	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,114 @@
+lighttpd
+------------------------------------------
+A fast, secure and flexible webserver
+
+Runtime requirements:
+  cygwin-1.5.10 or newer
+  crypt-1.1 or newer
+  libbz2_1-1.0.2 or newer
+  libpcre0-4.5 or newer
+  openssl-0.9.7d or newer
+  zlib-1.2.1 or newer
+
+Build requirements:
+  cygwin-1.5.10 or newer
+  gcc-3.3.1-3 or newer
+  binutils-20030901-1 or newer
+  crypt
+  openssl-devel
+  openssl
+  openldap
+  openldap-devel
+  zlib
+  bzip2
+
+Canonical homepage:
+  http://jan.kneschke.de/projects/lighttpd/
+
+Canonical download:
+  http://jan.kneschke.de/projects/lighttpd/download
+
+------------------------------------
+
+Build instructions:
+  unpack lighttpd-1.4.19-<REL>-src.tar.bz2
+    if you use setup to install this src package, it will be
+	 unpacked under /usr/src automatically
+  cd /usr/src
+  ./lighttpd-1.4.19-<REL>.sh all
+
+This will create:
+  /usr/src/lighttpd-1.4.19-<REL>.tar.bz2
+  /usr/src/lighttpd-1.4.19-<REL>-src.tar.bz2
+
+Or use './lighttpd-1.4.19-<REL>.sh prep' to get a patched source directory
+
+-------------------------------------------
+
+Files included in the binary distribution:
+
+  /etc/lighttpd/lighttpd.conf.default
+  /usr/lib/cyglightcomp.dll
+  /usr/lib/lighttpd/mod_access.dll
+  /usr/lib/lighttpd/mod_accesslog.dll
+  /usr/lib/lighttpd/mod_auth.dll
+  /usr/lib/lighttpd/mod_cgi.dll
+  /usr/lib/lighttpd/mod_compress.dll
+  /usr/lib/lighttpd/mod_evhost.dll
+  /usr/lib/lighttpd/mod_expire.dll
+  /usr/lib/lighttpd/mod_fastcgi.dll
+  /usr/lib/lighttpd/mod_httptls.dll
+  /usr/lib/lighttpd/mod_maps.dll
+  /usr/lib/lighttpd/mod_proxy.dll
+  /usr/lib/lighttpd/mod_redirect.dll
+  /usr/lib/lighttpd/mod_rewrite.dll
+  /usr/lib/lighttpd/mod_rrdtool.dll
+  /usr/lib/lighttpd/mod_secdownload.dll
+  /usr/lib/lighttpd/mod_simple_vhost.dll
+  /usr/lib/lighttpd/mod_ssi.dll
+  /usr/lib/lighttpd/mod_status.dll
+  /usr/lib/lighttpd/mod_usertrack.dll
+  /usr/sbin/lighttpd.exe
+  /usr/share/doc/Cygwin/lighttpd-1.3.0.README
+  /usr/share/doc/lighttpd-1.3.0/accesslog.txt
+  /usr/share/doc/lighttpd-1.3.0/authentification.txt
+  /usr/share/doc/lighttpd-1.3.0/AUTHORS
+  /usr/share/doc/lighttpd-1.3.0/cgi.txt
+  /usr/share/doc/lighttpd-1.3.0/ChangeLog
+  /usr/share/doc/lighttpd-1.3.0/compress.txt
+  /usr/share/doc/lighttpd-1.3.0/configuration.txt
+  /usr/share/doc/lighttpd-1.3.0/COPYING
+  /usr/share/doc/lighttpd-1.3.0/fastcgi-state.txt
+  /usr/share/doc/lighttpd-1.3.0/fastcgi.txt
+  /usr/share/doc/lighttpd-1.3.0/features.txt
+  /usr/share/doc/lighttpd-1.3.0/INSTALL
+  /usr/share/doc/lighttpd-1.3.0/NEWS
+  /usr/share/doc/lighttpd-1.3.0/performance.txt
+  /usr/share/doc/lighttpd-1.3.0/plugins.txt
+  /usr/share/doc/lighttpd-1.3.0/proxy.txt
+  /usr/share/doc/lighttpd-1.3.0/README
+  /usr/share/doc/lighttpd-1.3.0/redirect.txt
+  /usr/share/doc/lighttpd-1.3.0/rewrite.txt
+  /usr/share/doc/lighttpd-1.3.0/rrdtool.txt
+  /usr/share/doc/lighttpd-1.3.0/secdownload.txt
+  /usr/share/doc/lighttpd-1.3.0/security.txt
+  /usr/share/doc/lighttpd-1.3.0/simple-vhost.txt
+  /usr/share/doc/lighttpd-1.3.0/skeleton.txt
+  /usr/share/doc/lighttpd-1.3.0/ssi.txt
+  /usr/share/doc/lighttpd-1.3.0/state.txt
+  /usr/share/man/man1/lighttpd.1.gz
+
+------------------
+
+Port Notes:
+
+----------  lighttpd-1.3.1-1 -----------
+
+Updated to 1.3.1
+
+----------  lighttpd-1.3.0-1 -----------
+Initial release
+
+Cygwin port maintained by: Jan Kneschke <jan at kneschke.de>
+Please address all questions to the Cygwin mailing list at <cygwin at cygwin.com>
+

Added: lighttpd/tags/1.4.19-5+lenny2/cygwin/lighttpd.README.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/cygwin/lighttpd.README.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/cygwin/lighttpd.README.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,114 @@
+lighttpd
+------------------------------------------
+A fast, secure and flexible webserver
+
+Runtime requirements:
+  cygwin-1.5.10 or newer
+  crypt-1.1 or newer
+  libbz2_1-1.0.2 or newer
+  libpcre0-4.5 or newer
+  openssl-0.9.7d or newer
+  zlib-1.2.1 or newer
+
+Build requirements:
+  cygwin-1.5.10 or newer
+  gcc-3.3.1-3 or newer
+  binutils-20030901-1 or newer
+  crypt
+  openssl-devel
+  openssl
+  openldap
+  openldap-devel
+  zlib
+  bzip2
+
+Canonical homepage:
+  http://jan.kneschke.de/projects/lighttpd/
+
+Canonical download:
+  http://jan.kneschke.de/projects/lighttpd/download
+
+------------------------------------
+
+Build instructions:
+  unpack lighttpd- at VERSION@-<REL>-src.tar.bz2
+    if you use setup to install this src package, it will be
+	 unpacked under /usr/src automatically
+  cd /usr/src
+  ./lighttpd- at VERSION@-<REL>.sh all
+
+This will create:
+  /usr/src/lighttpd- at VERSION@-<REL>.tar.bz2
+  /usr/src/lighttpd- at VERSION@-<REL>-src.tar.bz2
+
+Or use './lighttpd- at VERSION@-<REL>.sh prep' to get a patched source directory
+
+-------------------------------------------
+
+Files included in the binary distribution:
+
+  /etc/lighttpd/lighttpd.conf.default
+  /usr/lib/cyglightcomp.dll
+  /usr/lib/lighttpd/mod_access.dll
+  /usr/lib/lighttpd/mod_accesslog.dll
+  /usr/lib/lighttpd/mod_auth.dll
+  /usr/lib/lighttpd/mod_cgi.dll
+  /usr/lib/lighttpd/mod_compress.dll
+  /usr/lib/lighttpd/mod_evhost.dll
+  /usr/lib/lighttpd/mod_expire.dll
+  /usr/lib/lighttpd/mod_fastcgi.dll
+  /usr/lib/lighttpd/mod_httptls.dll
+  /usr/lib/lighttpd/mod_maps.dll
+  /usr/lib/lighttpd/mod_proxy.dll
+  /usr/lib/lighttpd/mod_redirect.dll
+  /usr/lib/lighttpd/mod_rewrite.dll
+  /usr/lib/lighttpd/mod_rrdtool.dll
+  /usr/lib/lighttpd/mod_secdownload.dll
+  /usr/lib/lighttpd/mod_simple_vhost.dll
+  /usr/lib/lighttpd/mod_ssi.dll
+  /usr/lib/lighttpd/mod_status.dll
+  /usr/lib/lighttpd/mod_usertrack.dll
+  /usr/sbin/lighttpd.exe
+  /usr/share/doc/Cygwin/lighttpd-1.3.0.README
+  /usr/share/doc/lighttpd-1.3.0/accesslog.txt
+  /usr/share/doc/lighttpd-1.3.0/authentification.txt
+  /usr/share/doc/lighttpd-1.3.0/AUTHORS
+  /usr/share/doc/lighttpd-1.3.0/cgi.txt
+  /usr/share/doc/lighttpd-1.3.0/ChangeLog
+  /usr/share/doc/lighttpd-1.3.0/compress.txt
+  /usr/share/doc/lighttpd-1.3.0/configuration.txt
+  /usr/share/doc/lighttpd-1.3.0/COPYING
+  /usr/share/doc/lighttpd-1.3.0/fastcgi-state.txt
+  /usr/share/doc/lighttpd-1.3.0/fastcgi.txt
+  /usr/share/doc/lighttpd-1.3.0/features.txt
+  /usr/share/doc/lighttpd-1.3.0/INSTALL
+  /usr/share/doc/lighttpd-1.3.0/NEWS
+  /usr/share/doc/lighttpd-1.3.0/performance.txt
+  /usr/share/doc/lighttpd-1.3.0/plugins.txt
+  /usr/share/doc/lighttpd-1.3.0/proxy.txt
+  /usr/share/doc/lighttpd-1.3.0/README
+  /usr/share/doc/lighttpd-1.3.0/redirect.txt
+  /usr/share/doc/lighttpd-1.3.0/rewrite.txt
+  /usr/share/doc/lighttpd-1.3.0/rrdtool.txt
+  /usr/share/doc/lighttpd-1.3.0/secdownload.txt
+  /usr/share/doc/lighttpd-1.3.0/security.txt
+  /usr/share/doc/lighttpd-1.3.0/simple-vhost.txt
+  /usr/share/doc/lighttpd-1.3.0/skeleton.txt
+  /usr/share/doc/lighttpd-1.3.0/ssi.txt
+  /usr/share/doc/lighttpd-1.3.0/state.txt
+  /usr/share/man/man1/lighttpd.1.gz
+
+------------------
+
+Port Notes:
+
+----------  lighttpd-1.3.1-1 -----------
+
+Updated to 1.3.1
+
+----------  lighttpd-1.3.0-1 -----------
+Initial release
+
+Cygwin port maintained by: Jan Kneschke <jan at kneschke.de>
+Please address all questions to the Cygwin mailing list at <cygwin at cygwin.com>
+

Added: lighttpd/tags/1.4.19-5+lenny2/cygwin/setup.hint
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/cygwin/setup.hint	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/cygwin/setup.hint	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,4 @@
+sdesc: "a light-weight and flexible webserver"
+ldesc: "lighttpd a secure, fast, compliant and very flexible web-server which has been optimized for high-performance environments. It has a very low memory footprint compared to other webservers and takes care of cpu-load. Its advanced feature-set (FastCGI, CGI, Auth, Output-Compression, URL-Rewriting and many more) make lighttpd the perfect webserver-software for every server that is suffering load problems. "
+category: Net Web
+requires: libpcre0 cygwin zlib openssl libbzip2_1 crypt

Added: lighttpd/tags/1.4.19-5+lenny2/debian/NEWS
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/NEWS	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/NEWS	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,20 @@
+lighttpd (1.4.19-1) unstable; urgency=low
+
+  Lighttpd must load mod_auth first, else some other modules may not work
+  properly (See #419176). For this reason, mod_status configuration has been
+  moved out from lighttpd.conf and put in conf-available/10-status.conf.
+
+  Also the files 10-auth.conf are automatically renamed by the lighttpd
+  package (provided that a sane environment is met) into 05-auth.conf, and
+  symlinks (if they exists) are also updated properly.
+
+  This is done to ensure that auth.conf is loaded first. If during your
+  lighttpd upgrade you read:
+
+    Not touching .../10-auth.conf because .../05-auth.conf exists !!!
+    Please read /usr/share/doc/lighttpd/NEWS.Debian
+
+  then you probably have both 10-auth.conf and 05-auth.conf, which is a bad
+  situation that you should fix.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Sun, 16 Mar 2008 10:56:22 +0100

Added: lighttpd/tags/1.4.19-5+lenny2/debian/TODO.Debian
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/TODO.Debian	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/TODO.Debian	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,7 @@
+urgent:
+* better package descriptions
+* tweak Recommends: and Suggests:
+
+not-so-urgent:
+* create a dirlisting template that slightly advertises Debian
+

Added: lighttpd/tags/1.4.19-5+lenny2/debian/changelog
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/changelog	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/changelog	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,645 @@
+lighttpd (1.4.19-5+lenny2) stable-security; urgency=high
+
+  * Non-maintainer upload by the Security Team.
+  * Fix bug that made lighttpd fail to start with the upgraded openssl
+    from DSA-2141-1. Closes: #609124
+
+ -- Stefan Fritsch <sf at debian.org>  Tue, 11 Jan 2011 08:18:54 +0100
+
+lighttpd (1.4.19-5+lenny1) stable-security; urgency=high
+
+  * Non-maintainer upload by the Security Team.
+  * Fix denial of service through slow short requests leading to
+    memory exhaustion due to bad memory handling (CVE-2010-0295). 
+
+ -- Nico Golde <nion at debian.org>  Sun, 31 Jan 2010 15:44:21 +0000
+
+lighttpd (1.4.19-5) unstable; urgency=high
+
+  * Remove the alias.url stanza from 10-cgi.conf (Closes: #499334).
+  * Add patches for lighttpd security 2008-05 to 2008-07 (no CVE yet):
+    + patches/lighttpd-1.4.x_request_header_memleak.patch
+    + patches/lighttpd-1.4.x_rewrite_redirect_decode_url.patch
+    + patches/lighttpd-1.4.x_userdir_lowercase.patch
+  * Urgency set to high for security fix.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Sat, 27 Sep 2008 12:00:47 +0200
+
+lighttpd (1.4.19-4) unstable; urgency=high
+
+  * Make debian/use-ipv6.pl executable in debian/rules, thanks to Marco d'Itri
+    for finding about this inexcusable mistake.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Mon, 12 May 2008 17:12:28 +0200
+
+lighttpd (1.4.19-3) unstable; urgency=medium
+
+  * Fix /var/cache/lighttpd/uploads permissions in postinst (Closes: 476870).
+  * Update patches/ssl-connection-errors.patch using upstream r2144, thanks to
+    upstream for noticing.
+  * cherokee and lighttpd both provide spawn-fcgi, fix that using alternatives
+    (Closes: 479501):
+    + add spawn-fcgi.lighttpd.1 shamelessly stolen from cherokee packaging
+      (thanks Gunnar).
+    + install spawn-fcgi as spawn-fcgi.lighttpd.
+    + install master alternatives on spawn-fcgi.lighttpd and
+      spawn-fcgi.lighttd.1.
+    + add Conflict against cherokee <= 0.6.1-1.
+  * Quote "dangerous" bits of conf-available/10-cgi.conf (Closes: 479276).
+
+ -- Pierre Habouzit <madcoder at debian.org>  Tue, 06 May 2008 20:01:37 +0200
+
+lighttpd (1.4.19-2) unstable; urgency=low
+
+  * Add patches/ssl-connection-errors.patch for CVE-2008-1531
+    (Closes: 475438).
+  * Test for /var/cache/lighttpd/compress in lighttpd.cron.daily to avoid
+    spurious errors for uninstalled and not purged lighttpd's
+    (Closes: 472175).
+
+  * Add handling of /var/cache/lighttpd/uploads (Closes: 408521):
+     + add it in lighttpd.dirs.
+     + add it as a server.upload-dirs in lighttpd.conf.
+     + purge it daily in lighttpd.cron.daily.
+
+  * Fix typo in lighttpd.preinst causing failure to update 05-auth symlink
+    properly (Closes: 472119).
+
+  * init.d: stopping an already stopped lighttpd, or starting an already
+    running one should not fail (Closes: 472122).
+
+  * Use $HTTP["remoteip"] =~ "127.0.0.1" in configuration snipplets so that it
+    works when ipv6 is enabled by default too (Closes: 473510).
+
+  * Use perl to detect if the host has ipv6, and generate the server.use-ipv6
+    snipplet on the fly instead of forcing it to true (Closes: 473053).
+
+ -- Pierre Habouzit <madcoder at debian.org>  Sun, 13 Apr 2008 13:20:40 +0200
+
+lighttpd (1.4.19-1~bpo40+1) etch-backports; urgency=low
+
+  * Rebuild for etch-backports.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Thu, 20 Mar 2008 00:41:49 +0100
+
+lighttpd (1.4.19-1) unstable; urgency=low
+
+  * New upstream release.
+
+  * debian/control:
+     + add Build-Depends upon quilt, remove dpatch.
+     + Bump Standards-Version to 3.7.3 (no changes required).
+     + Move Homepage pseudo-headers as real headers.
+
+  * debian/patches:
+     + migrate to quilt.
+     + remove 05_fdevent_fix.patch (merged upstream).
+     + remove 06_mod_cgi_vuln_fix.patch (merged upstream).
+     + refresh the rest of the series.
+
+  * debian/lighty-enable-mod:
+     + Reindent and remove trailing spaces.
+     + don't fail to remove a module that is already removed.
+       Patch from Michal ÄŒihaÅ™ (Closes: 448682).
+     + Allow full stops in module names (Closes: 462199).
+
+  * debian/lighttpd.conf:
+     + enable ipv6 by default (Closes: 448054).
+     + remove mod_status stanza, create conf-available/10-status.conf with it.
+
+  * debian/lighttpd.cron.daily: new file, cleanup compressed cache.
+    Thanks to Michal ÄŒihaÅ™ (Closes: 445224).
+
+  * be sure mod_auth is loaded first (Closes: 419176):
+     + add debian/lighttpd.preinst to rename 10-auth.conf into 05-auth.conf
+       automagically (when it's a sane thing to do).
+     + Document all that in NEWS.Debian.
+     + debian/lighttpd.install: add 10-status.conf and 05-auth.conf.
+
+  * debian/lighttpd.postinst:
+     + chmod'ing /var/cache/lighttpd recursively is useless and too long. Just
+       chmod the base directory, content is likely to be only created by
+       lighty anyways. (Closes: 468297).
+
+  * debian/init.d:
+     + Add $remote_fs and $network (instead of networking) to
+       Required-{Start,Stop}.
+     + Add fam to Should-{Start,Stop} (Closes: 461180).
+
+  * debian/lighttpd.links: add symlinks on lighty-* so that lighttpd-*
+    commands exists as well (Closes: 435131).
+
+ -- Pierre Habouzit <madcoder at debian.org>  Sun, 16 Mar 2008 12:01:41 +0100
+
+lighttpd (1.4.18-4) unstable; urgency=high
+
+  * The “I HATE DPATCH”-release.
+  * Add patches for real as dpatch-edit-patch is stupid enough for not doing
+    it by itself (Closes: 463368, 469307).
+
+ -- Pierre Habouzit <madcoder at debian.org>  Tue, 11 Mar 2008 10:07:35 +0100
+
+lighttpd (1.4.18-3) unstable; urgency=high
+
+  * Force use of deprecated ldap interfaces (Closes: 463368),
+    thanks to Dann Frazier (patches/ldap-deprecated.dpatch).
+  * Add sample configuration for the mod_rrdtool (Closes: 462907).
+  * add patches/06_mod_cgi_vuln_fix.dpatch to fix CVE-2008-1111
+    (Closes: 469307).
+  * Remove spurious mkdir in debian/rules (Closes: 448160).
+  * Bump urgency for RC bug fixes.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Sat, 08 Mar 2008 17:30:03 +0100
+
+lighttpd (1.4.18-2) unstable; urgency=high
+
+  * Move the aliases on /doc/ and /images/ mandated by policy at the end to
+    circumvent #445459.
+  * Add patches/05_fdevent_fix.dpatch to fix possible remote DoS
+    (Closes: 466663).
+  * bump urgency for security fix.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Wed, 27 Feb 2008 16:56:16 +0100
+
+lighttpd (1.4.18-1) unstable; urgency=low
+
+  * New upstream release, fixes CVE-2007-4727 (closes: #441787)
+  * lighttpd-angel is installed but not used yet
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Tue, 11 Sep 2007 12:45:11 +0200
+
+lighttpd (1.4.17-1) unstable; urgency=low
+
+  * New upstream release
+  * patches/05_mysql_autoreconnect.dpatch - dropped, fixed in upstream
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Tue, 04 Sep 2007 12:19:01 +0200
+
+lighttpd (1.4.16-5~bpo40+2) etch-backports; urgency=low
+
+  * Rebuild in an etch chroot *doh*.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Tue, 28 Aug 2007 11:37:38 +0200
+
+lighttpd (1.4.16-5~bpo40+1) etch-backports; urgency=low
+
+  * Rebuild for Etch backports.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Fri, 24 Aug 2007 10:12:10 +0200
+
+lighttpd (1.4.16-5) unstable; urgency=low
+
+  * debian/control: Drop conflict with gamin as it appears it was not the
+    issue. (Closes: #438058). For real this time.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Sun, 19 Aug 2007 12:22:32 +0200
+
+lighttpd (1.4.16-4) unstable; urgency=low
+
+  * debian/control: Drop conflict with gamin as it appears it was not the
+    issue. (Closes: #438058).
+  * src/mod_mysql_vhost.c: Enable mysql auto-connect mode, as it's not default
+    in mysql 5.x anymore. (Closes: #428677).
+
+ -- Pierre Habouzit <madcoder at debian.org>  Sat, 18 Aug 2007 10:27:22 +0200
+
+lighttpd (1.4.16-3) unstable; urgency=high
+
+  * Urgency set to high due to RC bug fix.
+  * debian/lighttpd.logrotate: fix stupid typo (closes: #437341).
+  * debian/control: add Conflict against gamin, to avoid #437307.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Wed, 15 Aug 2007 09:46:48 +0200
+
+lighttpd (1.4.16-2) unstable; urgency=low
+
+  * patches/04_ldap_build_filter_fix.dpatch: add patch from Peter Colberg to
+    fix first LDAP search that fails because of the filter being
+    uninitialized. (closes: #419661)
+  * Enable fam support (closes: #407820):
+     + debian/rules: add --enable-fam configure flag.
+     + debian/control: add libfam-dev to Build-Depends, and also wrap
+       build-dependencies to make diff more understandable.
+  * Enable support for kerberos (with openssl):
+     + debian/rules; add --enable-kerberos5 configure flag.
+     + debian/control: add libkrb5-dev to the Build-Depends.
+  * lighttpd.logrotate: redirect stderr to /dev/null as well to prevent
+    defunct processes (presumably due to full unread pipes/buffers)
+    (closes: #419992).
+  * debian/control: replace lighttpd dependency on perl with
+    libterm-readline-perl-perl as Readline.pm is needed for lighty-enable-mod
+    (closes: #435077).
+  * debian/control:
+     + Add myself to uploaders (closes: #401575).
+     + Drop Recommands on php5-cgi, there is absolutely no reason to have it,
+       or we would have to recommend ruby, python, lua, perl, .... and every
+       $language on earth to be fair.  (closes: #435587).
+  * debian/conf-available/10-webdav.conf: add default configuration for webdav.
+    (closes: #406641).
+  * debian/conf-enabled: remove directory, it is already installed through
+    lighttpd.dirs.
+  * lighttpd.postinst, lighttpd.postrm, init.d: be sure there is a
+    /var/run/lighttpd owned by www-data:www-data, helpful to store locks and
+    things like that.
+
+ -- Pierre Habouzit <madcoder at debian.org>  Fri, 03 Aug 2007 10:06:15 +0200
+
+lighttpd (1.4.16-1) unstable; urgency=low
+
+  * New upstream release (closes: #434546)
+  * Acknowledge NMU by Pierre Habouzit for CVE-2007-2841 (closes: #428368)
+  * Added static-file.exclude-extensions section to lighttpd.conf (closes: #408374)
+  * Fixed description of conf-available/10-fastcgi.conf (closes: #430469)
+  * Added mod_extforward to debian/lighttpd.install (closes: #434717)
+  * config.guess taken from upstream (closes: #419664)
+  * turn on compression (closes: #397514)
+  * debian/control: XS-Vcs-Svn header added
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Fri, 27 Jul 2007 10:32:51 +0200
+
+lighttpd (1.4.15-1.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * add patches/04_wrapping_headers_bugfix.dpatch to fix crash with wrapping
+    headers (Closes: 428368).
+
+ -- Pierre Habouzit <madcoder at debian.org>  Fri, 20 Jul 2007 11:04:07 +0200
+
+lighttpd (1.4.15-1) unstable; urgency=low
+
+  * New upstream release (closes: #419131)
+  * 01_mod_fastcgi_missing_cleanup.dpatch is now in upstream so it's removed from 
+    patches
+  *  04_pidfile_bugfix.dpatch is now in upstream so it's removed from patches
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Fri, 06 Apr 2007 11:24:54 +0200
+
+lighttpd (1.4.13-10) unstable; urgency=medium
+
+  * 03_ldap_leak_bugfix.dpatch added from yann at pleiades.fr.eu.org (Yann Rouillard)
+    (closes: #413917)
+  * Lowered priority of index.lighttpd.html (closes: #397492)
+  * We don't need now check md5 sum of index.html since we provide our own 
+    index.lighttpd.html (closes: #407794)
+  * 04_pidfile_bugfix.dpatch by Chris Webb <chris at arachsys.com> added - some fixes
+    with graceful restart
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Thu,  8 Mar 2007 22:18:42 +0100
+
+lighttpd (1.4.13-9) unstable; urgency=low
+
+  * debian/lighttpd.default - removed, it is not ready yet. We'll back after 
+    etch release (closes: #406021)
+  * debian/index.html.md5 - fixed path to file (full path to index.html)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Tue,  2 Jan 2007 14:24:42 +0100
+
+lighttpd (1.4.13-8) unstable; urgency=medium
+
+  * Typo fixed in debian/lighttpd.postinst (closes: #405123)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Tue,  2 Jan 2007 13:23:25 +0100
+
+lighttpd (1.4.13-7) unstable; urgency=low
+
+  [ Franz Pletz ]
+  * debian/conf-available/10-cgi.conf:
+    + match /cgi-bin/ only at the beginning of a path
+    + convert match for host == localhost to remoteip == 127.0.0.1 like in
+      lighttpd.conf; due to bugs in mod_alias, the cgi-bin, doc and images
+      aliases didn't work anymore
+  * debian/lighttpd.logrotate
+    + use reload instead of force-reload for graceful restart
+      (closes: #398169, #380080)
+  * added debian/patches/01_mod_fastcgi_missing_cleanup.dpatch
+    + source: http://trac.lighttpd.net/trac/ticket/910
+    + fixes memleak in mod_fastcgi (closes: #400167)
+  * added debian/patches/02_fastcgi_detach.dpatch
+    + disconnect stderr/stdout from the terminal (closes: #368670)
+    + point them either to errorlog or /dev/null
+  * debian/control: added myself to Uploaders
+  * Don't touch /var/www/index.html, create /var/www/index.lighttpd.html
+    instead (closes: #397492)
+    + debian/lighttpd.postinst: copy to /var/www/index.lighttpd.html
+    + debian/lighttpd.conf: add index.lighttpd.html as first index-filename
+
+  [ Krzysztof Krzyzaniak (eloy) ]
+  * Typo fixed in index.html (closes: #403620)
+
+ -- Franz Pletz <fpletz at franz-pletz.org>  Fri,  8 Dec 2006 16:15:27 +0100
+
+lighttpd (1.4.13-6) unstable; urgency=low
+
+  * debian/lighttpd.postinst: change only permission for /var/log/lighttpd/
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Mon, 4 Dec 2006 16:34:11 +0100
+
+lighttpd (1.4.13-5) unstable; urgency=low
+
+  * debian/control:
+   + perl added to dependencies (closes: #396629)
+  * debian/conf-available/10-fastcgi.conf:
+   + /usr/bin/php4-cgi changed to /usr/bin/php-cgi (closes: #397142)
+  * debian/lighttpd.postinst: fix permission of /var/log/lighttpd 
+    (closes: #398834)
+  * debian/lighty-enable-mod - fixed bug with undefined values (closes: #397493)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Thu,  9 Nov 2006 12:18:25 +0100
+
+lighttpd (1.4.13-4) unstable; urgency=low
+
+  * fixed config file for logrotote (reload action changed to force-reload)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Thu, 26 Oct 2006 11:36:13 +0200
+
+lighttpd (1.4.13-3) unstable; urgency=low
+
+  * debian/control: libxml2-dev added to Build-Depends (closes: #394882)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Tue, 24 Oct 2006 13:31:27 +0200
+
+lighttpd (1.4.13-2) unstable; urgency=medium
+
+  * Patch from Pierre Habouzit <madcoder at debian.org> to init.d applied
+    (closes: #380080)
+  * Patch from Adrian Friendli <adi at koalatux.ch> to lighttpd.conf applied
+    (closes: #392890)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Mon, 16 Oct 2006 11:14:28 +0200
+
+lighttpd (1.4.13-1) unstable; urgency=low
+
+  * New upstream release
+  * mod_webdav as separate lighttpd-mod-webdav package
+  * Compiled with --with-webdav-locks, added uuid-dev to Build-Depends
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Tue, 10 Oct 2006 10:26:54 +0200
+
+lighttpd (1.4.13~r1385-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Mon,  9 Oct 2006 10:28:32 +0200
+
+lighttpd (1.4.13~r1370-1) unstable; urgency=low
+
+  * New upstream release (closes: #390877) (closes: #389911)
+  * Compiled with --with-attr param (closes: #389712)
+  * dropped 01-lua5.1.dpatch, issue fixed by upstream 
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Thu,  5 Oct 2006 10:08:19 +0200
+
+lighttpd (1.4.12-1) unstable; urgency=low
+
+  * New upstream release
+  * fixes in debian/lighttpd.install (closes: #377802)
+  * mod_cml is deprecated from now on and it will be removed in 1.5.0
+    mod_magnet provides the same functionality and more with a
+    cleaner syntax and in a more generic form 
+  * added separate module for mod_magnet (closes: #389578)
+  * changed dependency from lua-5.0 to lua-5.1
+  * added patch patches/01-lua5.1.dpatch
+  * added pkg-config to Build-Depends
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Tue, 12 Sep 2006 19:17:41 +0200
+
+lighttpd (1.4.12~20060907-1) unstable; urgency=low
+
+  * New upstream release
+  * Removed debian/patches/01_use_bin_sh.dpatch - fixed in upstream
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Thu,  7 Sep 2006 14:50:47 +0200
+
+lighttpd (1.4.12~20060901-1) unstable; urgency=low
+
+  * New upstream release
+  * Removed debian/patches/02_ssl_fix.dpatch - it's now fixed in upstream
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Mon,  4 Sep 2006 11:07:42 +0200
+
+lighttpd (1.4.11-8) UNRELEASED; urgency=low
+
+  * debian/lighttpd.dirs:
+   + usr/lib/cgi-bin added
+  * debian/conf-available/10-cgi.conf
+   + proper configuration for localhost as well (again Bug#345554)
+  * debian/lighttpd.conf:
+   + server.bind commented out as in default configuration (closes: #380267)
+  * debian/patches/02_ssl_fix.dpatch - added fix for ssl connection with POST 
+    request (http://trac.lighttpd.net/trac/ticket/607), thanks to 
+    RISKO Gergely <risko at debian.org> (closes: #381455)
+  * debian/lighttpd.logrotate - some values changes (now rotate weekly 
+    and keep 12 logfiles)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Mon, 28 Aug 2006 13:06:25 +0200
+
+lighttpd (1.4.11-7) unstable; urgency=low
+
+  * debian/create-mime.assign.pl - catchup error when /etc/mime.types is not
+    readable (closes: #375347)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Tue, 27 Jun 2006 20:19:57 +0200
+
+lighttpd (1.4.11-6) unstable; urgency=low
+
+  * debian/control:
+   - Recommends: Changed to alternative: php4-cgi | php5-cgi (closes: #368215)
+  * include-conf-enabled.pl script changed according to patch from 
+    Tobias Gruetzmacher <tobias at portfolio16.de> (closes: #368352)
+  * debian/lighttpd.conf: removed global for local aliases (/images/, /doc/) 
+    (closes: #366801)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Tue, 23 May 2006 16:48:36 +0200
+
+lighttpd (1.4.11-5) unstable; urgency=low
+
+  * debian/init.d:
+   - --oknodo added to section "stop" to close finally #35979
+   - --retry 30 added to section "reload", to prevents problems with 
+     logrotating (closes: #366366)
+  * debian/control:
+   Standards-Version: increased to 3.7.2 without additional changes
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Wed, 10 May 2006 14:26:04 +0200
+
+lighttpd (1.4.11-4) unstable; urgency=low
+
+  [ Krzysztof Krzyzaniak (eloy) ]
+  * debian/init.d:
+   - "exit 1" after failed actions removed (closes: #359792)
+  * debian/conf-available/10-fastcgi.conf updated (closes: #362827)
+    thanks to Joerg Rieger <a.mailinglists#lumrix.net>
+
+  [ Torsten Marek ]
+  * Change my email address to shlomme at debian.org
+  * Remove --background from the start action, since it 
+    breaks the error checking of start-stop-daemon. 
+    The behaviour described in #355865 is not reproducable
+    any more.
+  * make reload action in initscript more well-behaved
+
+ -- Torsten Marek <shlomme at debian.org>  Sun,  9 Apr 2006 15:51:51 +0200
+
+lighttpd (1.4.11-3) unstable; urgency=low
+
+  * debian/lighttpd.conf - added dir-listing.encoding = "utf-8", suggested
+    by Silvestre Zabala <silvestre(at)zabala.name> (closes: #359100)
+  * debian/lighttpd.install - fix bug with installing *.conf files
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Mon, 27 Mar 2006 09:50:55 +0200
+
+lighttpd (1.4.11-2) unstable; urgency=low
+
+  * Provide debian/conf-available/10-ssl.conf, (closes: #355868)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Fri, 24 Mar 2006 13:53:54 +0100
+
+lighttpd (1.4.11-1) unstable; urgency=low
+
+  * New upstream release (closes: #356496)
+  * init.d script - added --background to "start" (thanks goes to 
+     Marcello Nuccio <marcenuc at cicaia160.unimo.it>) (closes: #355865)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Fri, 10 Mar 2006 09:51:10 +0100
+
+lighttpd (1.4.10-6) unstable; urgency=low
+
+  * Patch from <tobias at portfolio16.de> on lighty-enable-mod
+    (closes: #355773)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Wed,  8 Mar 2006 11:17:07 +0100
+
+lighttpd (1.4.10-5) unstable; urgency=low
+
+  [ Krzysztof Krzyzaniak (eloy) ]
+  * debian/control - libmysqlclient14-dev have to be removede because is not
+    available in debian/sid
+
+  [ Torsten Marek ]
+  * debian/rules - build with support for LUA, libmemcache and GDBM
+  * debian/lighttpd.install - install mod_evasive into lighttpd package
+  * debian/control - own packages for  mod_trigger_b4_dl and mod_cml
+  * debian/control - small fixes
+  * debian/conf-available/10-ssi.conf - comment out link to web documentation 
+
+ -- Torsten Marek <shlomme at gmx.net>  Mon,  6 Mar 2006 12:07:29 +0100
+
+lighttpd (1.4.10-4) unstable; urgency=low
+
+  * bugfix release
+  * Fixed bug with 10-fastcgi.conf, (closes: #353964)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Thu, 23 Feb 2006 16:14:42 +0100
+
+lighttpd (1.4.10-3) unstable; urgency=low
+
+  * lighttpd.conf - changed configuration for /images/ & /doc/ handling
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Tue, 14 Feb 2006 09:57:15 +0100
+
+lighttpd (1.4.10-2) unstable; urgency=low
+
+  * debian/control - libmysqlclient14-dev added as alternative (will be easier for
+    backports.org)
+  * lighty-enable-mod script fixed - files with dash were skipped, thanks 
+    to Silvester Zabala for patch (closes: #352577) 
+  * install doc/lighttpd.conf as example (closes: #344961)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Mon, 13 Feb 2006 12:58:54 +0100
+
+lighttpd (1.4.10-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Wed,  8 Feb 2006 16:02:16 +0100
+
+lighttpd (1.4.9-5) unstable; urgency=low
+
+  * Properly fixed bug with overwritting index.html (closes: #349676)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Mon, 30 Jan 2006 10:17:57 +0100
+
+lighttpd (1.4.9-4) unstable; urgency=low
+
+  [ Krzysztof Krzyzaniak (eloy) ]
+  * Fixed bug with 10-userdir.conf, (closes: #349821)
+  * index.html is not replaced when md5 string desn't match (closes: #349676)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Wed, 25 Jan 2006 16:33:34 +0100
+
+lighttpd (1.4.9-3) unstable; urgency=low
+
+  [ Torsten Marek ]
+  * Added some configuration examples from upstream sample 
+    configuration
+  * Implement "reload" init.d action with graceful restart, 
+    taken from http://trac.lighttpd.net/trac/ticket/267 (Closes: #346038)
+  * ssi, auth, fastcgi, proxy and simple-vhost are now in separte 
+    config files
+  * Put path to plugin documentation into every config snippet
+  * Build against libmysqlclient15
+
+ -- Torsten Marek <shlomme at gmx.net>  Sat, 21 Jan 2006 15:16:01 +0100
+
+lighttpd (1.4.9-2) unstable; urgency=low
+
+  [ Krzysztof Krzyzaniak (eloy) ]
+  * mod_alias enabled by default - removed conf-avaiable/00-alias.conf
+  * Added handling of http://localhost/doc/ & http://localhost/images/ 
+    (closes: #348823)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Thu, 19 Jan 2006 12:39:04 +0100
+
+lighttpd (1.4.9-1) unstable; urgency=low
+
+  * New upstream release
+  * Closing bug from not uploaded release 1.4.8-5, (closes: #347737)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Mon, 16 Jan 2006 20:06:39 +0100
+
+lighttpd (1.4.8-5) unstable; urgency=low
+
+  * create /var/www directory (closes: #347737), default /var/www/index.html
+    added (based on apache2 index.html file).
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Thu, 12 Jan 2006 16:54:32 +0100
+
+lighttpd (1.4.8-4) unstable; urgency=low
+
+  * fixed permissions and directories (closes: #347565)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Wed, 11 Jan 2006 17:15:12 +0100
+
+lighttpd (1.4.8-3) unstable; urgency=low
+
+  * New configuration layout (closes: #345554) (closes: #344959),
+    read /etc/lighttpd/conf-available/README
+    - conf-available directory for all templates 
+    - conf-enabled directory for enabled modules
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Mon,  9 Jan 2006 13:49:34 +0100
+
+lighttpd (1.4.8-2) unstable; urgency=low
+
+  [ Krzysztof Krzyzaniak (eloy) ]
+  * debian/control: lsb-base dependency narrowed to (>= 3.0-3)
+  * create-mime.assign.pl set as executable (closes: #344938)
+
+ -- Krzysztof Krzyzaniak (eloy) <eloy at debian.org>  Wed, 28 Dec 2005 12:40:55 +0100
+
+lighttpd (1.4.8-1) unstable; urgency=low
+
+  * New upstream version (closes: #304271)
+  * Does not rely on $SHELL to execute external commands
+
+ -- Torsten Marek <shlomme at gmx.net>  Sat, 26 Nov 2005 11:48:51 +0100
+
+lighttpd (1.4.7-1) unstable; urgency=low
+
+  * New upstream version, Initial debian version
+  * Better debian/rules file
+  * Split mysql vhost module into separate package
+  * Create separate package for documentation
+  * Create a better init script
+
+ -- Torsten Marek <shlomme at gmx.net>  Sat,  5 Nov 2005 18:56:53 +0100

Added: lighttpd/tags/1.4.19-5+lenny2/debian/compat
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/compat	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/compat	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+5

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/05-auth.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/05-auth.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/05-auth.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,28 @@
+## Authentication for lighttpd
+##
+## Documentation: /usr/share/doc/lighttpd-doc/authentication.txt.gz
+##                http://www.lighttpd.net/documentation/authentication.html
+
+server.modules                += ( "mod_auth" )
+
+# auth.backend                 = "plain"
+# auth.backend.plain.userfile  = "lighttpd.user"
+# auth.backend.plain.groupfile = "lighttpd.group"
+
+# auth.backend.ldap.hostname   = "localhost"
+# auth.backend.ldap.base-dn    = "dc=my-domain,dc=com"
+# auth.backend.ldap.filter     = "(uid=$)"
+
+# auth.require                 = ( "/server-status" => 
+#                                ( 
+#				  "method"  => "digest",
+#				  "realm"   => "download archiv",
+#				  "require" => "group=www|user=jan|host=192.168.2.10"
+#				),
+#				"/server-info" => 
+#                                ( 
+#				  "method"  => "digest",
+#				  "realm"   => "download archiv",
+#				  "require" => "group=www|user=jan|host=192.168.2.10"
+#				)
+#                              )

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-cgi.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-cgi.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-cgi.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,27 @@
+## CGI programs allow you to enhance the functionality of the server in a very
+## straight and simple way..
+##
+## Documentation: /usr/share/doc/lighttpd-doc/cgi.txt
+##                http://www.lighttpd.net/documentation/cgi.html
+
+server.modules  += ( "mod_cgi" )
+
+$HTTP["remoteip"] =~ "127.0.0.1" {
+	alias.url += ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )
+	$HTTP["url"] =~ "^/cgi-bin/" {
+		cgi.assign = ( "" => "" )
+	}
+}
+
+$HTTP["url"] =~ "^/cgi-bin/" {
+	cgi.assign = ( "" => "" )
+}
+
+## Warning this represents a security risk, as it allow to execute any file
+## with a .pl/.php/.py even outside of /usr/lib/cgi-bin.
+#
+#cgi.assign      = (
+#	".pl"  => "/usr/bin/perl",
+#	".php" => "/usr/bin/php-cgi",
+#	".py"  => "/usr/bin/python",
+#)

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-cml.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-cml.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-cml.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,22 @@
+## CML is a Meta language to describe the dependencies of a page
+## at one side and building a page from its fragments on the 
+## other side using LUA.
+##
+## Documentation: /usr/share/doc/lighttpd-doc/cml.txt
+##                http://www.lighttpd.net/documentation/cml.html
+
+server.modules += ( "mod_cml" )
+
+## the extension for file with cache information. With .cml,
+## the cache info file for index.html is index.cml
+cml.extension = ".cml"
+
+index-file.names += ( "index" + cml.extension )
+
+## the memcached used by mod_cml
+# cml.memcache-hosts = ( "127.0.0.1:11211" )
+
+## a cml file that is executed for each request
+# cml.power-magnet = "/var/www/power-magnet.cml"
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-fastcgi.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-fastcgi.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-fastcgi.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,26 @@
+## FastCGI programs have the same functionality as CGI programs,
+## but are considerably faster through lower interpreter startup
+## time and socketed communication
+##
+## Documentation: /usr/share/doc/lighttpd-doc/fastcgi.txt.gz
+##                http://www.lighttpd.net/documentation/fastcgi.html
+
+server.modules   += ( "mod_fastcgi" )
+
+## Start an FastCGI server for php (needs the php5-cgi package)
+fastcgi.server    = ( ".php" => 
+	((
+		"bin-path" => "/usr/bin/php-cgi",
+		"socket" => "/tmp/php.socket",
+		"max-procs" => 2,
+		"idle-timeout" => 20,
+		"bin-environment" => ( 
+			"PHP_FCGI_CHILDREN" => "4",
+			"PHP_FCGI_MAX_REQUESTS" => "10000"
+		),
+		"bin-copy-environment" => (
+			"PATH", "SHELL", "USER"
+		),
+		"broken-scriptfilename" => "enable"
+	))
+)

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-magnet.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-magnet.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-magnet.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,8 @@
+## CML is a Meta language to describe the dependencies of a page
+## at one side and building a page from its fragments on the 
+## other side using LUA.
+##
+## Documentation: /usr/share/doc/lighttpd-doc/magnet.txt.gz
+##               http://trac.lighttpd.net/trac/wiki/Docs%3AModMagnet
+
+server.modules += ( "mod_magnet" )

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-proxy.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-proxy.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-proxy.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,28 @@
+## Let lighttpd act as a proxy server for special file types, hosts etc
+##
+## Documentation: /usr/share/doc/lighttpd-doc/proxy.txt
+##                http://www.lighttpd.net/documentation/proxy.html
+
+server.modules   += ( "mod_proxy" )
+
+## Balance algorithm, possible values are: "hash", "round-robin" or "fair" (default)
+# proxy.balance     = "hash" 
+
+
+## Redirect all queries to files ending with ".php" to 192.168.0.101:80 
+#proxy.server     = ( ".php" =>
+#                     ( 
+#                       ( "host" => "192.168.0.101",
+#                         "port" => 80
+#                       )
+#                     )
+#                    )
+
+## Redirect all connections on www.example.com to 10.0.0.1{0,1,2,3}
+#$HTTP["host"] == "www.example.com" {
+#  proxy.balance = "hash"
+#  proxy.server  = ( "" => ( ( "host" => "10.0.0.10" ),
+#                            ( "host" => "10.0.0.11" ),
+#                            ( "host" => "10.0.0.12" ),
+#                            ( "host" => "10.0.0.13" ) ) )
+#}

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-rrdtool.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-rrdtool.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-rrdtool.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,13 @@
+## RRDtool monitors the traffic and load on Lighttpd
+##
+## Documentation: /usr/share/doc/lighttpd-doc/rrdtool.txt
+##                http://www.lighttpd.net/documentation/rrdtool.html
+
+server.modules += ( "mod_rrdtool" )
+
+## path to the rrdtool binary
+rrdtool.binary   = "/usr/bin/rrdtool"
+
+## file to store the rrd database, will be created by lighttpd
+rrdtool.db-name   = "/var/www/lighttpd.rrd"
+

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-simple-vhost.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-simple-vhost.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-simple-vhost.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,14 @@
+## Simple name-based virtual hosting
+##
+## Documentation: /usr/share/doc/lighttpd-doc/simple-vhost.txt
+##                http://www.lighttpd.net/documentation/simple-vhost.html
+
+server.modules += ( "mod_simple_vhost" )
+
+## The document root of a virtual host isdocument-root =
+##   simple-vhost.server-root + $HTTP["host"] + simple-vhost.document-root
+simple-vhost.server-root         = "/var/www"
+simple-vhost.document-root       = "/html/"
+
+## the default host if no host is sent
+simple-vhost.default-host        = "www.example.com"

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-ssi.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-ssi.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-ssi.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,10 @@
+## Server-Side Include implements simple preprocessing of
+## HTML files compatible to Apache SSI.
+##
+## Documentation: /usr/share/doc/lighttpd-doc/ssi.txt
+##                http://www.lighttpd.net/documentation/ssi.html
+
+server.modules += ( "mod_ssi" )
+
+## The extension of the files which should be preprocessed (mostly .shtml)
+ssi.extension   = ( ".shtml" )

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-ssl.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-ssl.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-ssl.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,10 @@
+## lighttpd support for SSLv2 and SSLv3
+## 
+## Documentation: /usr/share/doc/lighttpd-doc/ssl.txt
+##	http://www.lighttpd.net/documentation/ssl.html 
+
+#### SSL engine
+$SERVER["socket"] == "0.0.0.0:443" {
+                  ssl.engine                  = "enable"
+                  ssl.pemfile                 = "/etc/lighttpd/server.pem"
+}

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-status.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-status.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-status.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,19 @@
+## mod_status generates the status overview of the webserver.
+##
+## Documentation: /usr/share/doc/lighttpd-doc/status.txt
+##      http://trac.lighttpd.net/trac/wiki/Docs%3AModStatus
+
+server.modules += ( "mod_status" )
+
+## relative URL which is used to retrieve the status-page
+status.status-url = "/server-status"
+
+## relative URL for the config page which displays the loaded modules
+# status.config-url = "/server-config"
+
+## relative URL for a plain-text page containing the internal statistics
+# status.statistics-url = "/server-statistics"
+
+## add JavaScript which allows client-side sorting for the connection overview
+## default: enable
+# status.enable-sort = "disable"

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-trigger-b4-dl.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-trigger-b4-dl.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-trigger-b4-dl.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,23 @@
+## A module to prevent deep-linking from other sites.
+## 
+## Documentation: /usr/share/doc/lighttpd-doc/trigger-b4-dl.html
+##                http://www.lighttpd.net/documentation/trigger-b4-dl.txt
+
+server.modules += ( "mod_trigger_b4_dl" )
+
+## guarded download URL, direct access is denied
+#trigger-before-download.download-url = "^/download/"
+
+## trigger URL to allow downloads from <download-url>
+#trigger-before-download.trigger-url = "^/trigger/"
+
+## if access to a file is denied, the user is redirected to this URL
+#trigger-before-download.deny-url = "/var/www/deny.html"
+
+## access to granted for <timeout> seconds after the trigger
+#trigger-before-download.trigger-timeout = 10
+
+## storage of trigger information. If both destinations are provided,
+## the GDBM file takes precedence.
+#trigger-before-download.gdbm-filename = "/var/www/data/trigger.db"
+#trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" )

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-userdir.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-userdir.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-userdir.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,14 @@
+## The userdir module provides a simple way to link user-based directories into
+## the global namespace of the webserver.
+##
+## Documentation: /usr/share/doc/lighttpd-doc/userdir.txt
+##                http://www.lighttpd.net/documentation/userdir.html
+
+server.modules      += ( "mod_userdir" )
+
+## the subdirectory of a user's home dir which should be accessible
+## under http://$host/~$user
+userdir.path         = "public_html"
+
+## The users whose home directories should not be accessible
+userdir.exclude-user = ( "root", "postmaster" )

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-webdav.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-webdav.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/10-webdav.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,13 @@
+## WebDAV stands for Web-based Distributed Authoring and Versioning.  
+## The term also refers to the set of extensions to the HTTP protocol that
+## the group defined which allows users to collaboratively edit and manage
+## files on remote web servers.
+##
+## Documentation: /usr/share/doc/lighttpd-doc/webdav.txt
+##                http://trac.lighttpd.net/trac/wiki/Docs%3AModWebDAV
+
+server.modules += ( "mod_webdav" )
+
+## The full path to the file you would like to use as your db file.  This
+## is required for webdav props and locks.
+webdav.sqlite-db-name = "/var/run/lighttpd/lighttpd.webdav_lock.db"

Added: lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/README
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/README	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/conf-available/README	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,22 @@
+ligghttpd Configuration under Debian GNU/Linux
+==============================================
+
+Files and Directories in /etc/lighttpd:
+---------------------------------------
+
+lighttpd.conf:
+	 main configuration file
+
+conf-available/
+	This directory contains a series of .conf files. These files contain
+        configuration directives necessary to load and run webserver modules.
+	If you want to create your own files they names should be
+        build as nn-name.conf where "nn" is two digit number (number
+	is used to find order for loading files)
+
+conf-enabled/	  
+	To actually enable a module for lighttpd, it is necessary to create a 
+        symlink in this directory to the .conf file in conf-available/.
+
+Enabling and disabling modules could be done by provided
+/usr/sbin/lighty-enable-mod and /usr/sbin/lighty-disable-mod scripts. 

Added: lighttpd/tags/1.4.19-5+lenny2/debian/control
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/control	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/control	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,104 @@
+Source: lighttpd
+Section: web
+Priority: optional
+Maintainer: Debian lighttpd maintainers <pkg-lighttpd-maintainers at lists.alioth.debian.org>
+Uploaders: Krzysztof Krzyzaniak (eloy) <eloy at debian.org>,
+ Torsten Marek <shlomme at debian.org>, Franz Pletz <fpletz at franz-pletz.org>,
+ Pierre Habouzit <madcoder at debian.org>
+Homepage: http://www.lighttpd.net
+Build-Depends: debhelper (>= 5.0.0), cdbs, mime-support, libssl-dev,
+ zlib1g-dev, libbz2-dev, libattr1-dev, libpcre3-dev, libmysqlclient15-dev,
+ libfam-dev, libldap2-dev, libfcgi-dev, libgdbm-dev, libmemcache-dev,
+ liblua5.1-0-dev, quilt, patchutils, pkg-config, uuid-dev, libsqlite3-dev,
+ libxml2-dev, libkrb5-dev, perl
+XS-Vcs-Svn: svn://svn.debian.org/pkg-lighttpd/lighttpd/trunk
+Standards-Version: 3.7.3
+
+Package: lighttpd
+Homepage: http://www.lighttpd.net
+Architecture: any
+Depends: ${shlibs:Depends}, lsb-base (>= 3.0-3), mime-support, libterm-readline-perl-perl
+Provides: httpd, httpd-cgi
+Suggests: openssl, rrdtool, apache2-utils
+Conflicts: cherokee (<= 0.6.1-1)
+Description:  A fast webserver with minimal memory footprint
+ lighttpd is a small webserver and fast webserver developed with
+ security in mind and a lot of features.
+ It has support for
+   * CGI, FastCGI and SSI
+   * virtual hosts
+   * URL rewriting
+   * authentication (plain files, htpasswd, ldap)
+   * transparent content compression
+   * conditional configuration
+ and configuration is straight-forward and easy.
+
+Package: lighttpd-doc
+Homepage: http://www.lighttpd.net
+Architecture: all
+Section: doc
+Suggests: lighttpd
+Description: Documentation for lighttpd
+ This package contains all documentation files for lighttpd.
+
+Package: lighttpd-mod-mysql-vhost
+Homepage: http://www.lighttpd.net
+Architecture: any
+Depends: lighttpd (= ${binary:Version}), ${shlibs:Depends}
+Description: MySQL-based virtual host configuration for lighttpd
+ This package contains the myqsl_vhost module for lighttpd. With
+ this module, it is possible to write the configuration for virtual
+ hosts into a MySQL table instead of including it in the lighttpd
+ configuration file.
+
+Package: lighttpd-mod-trigger-b4-dl
+Homepage: http://www.lighttpd.net
+Architecture: any
+Depends: lighttpd (= ${binary:Version}), ${shlibs:Depends}
+Replaces: lighttpd (<< 1.4.10-5)
+Recommends: memcached
+Description: Anti-deep-linking module for lighttpd
+ The trigger-b4-dl module for lighttpd can prevent deep linking
+ from other sites by requiring users to visit a trigger URL to
+ be able to download certain files.
+
+Package: lighttpd-mod-cml
+Homepage: http://www.lighttpd.net
+Architecture: any
+Depends: lighttpd (= ${binary:Version}), ${shlibs:Depends}
+Recommends: memcached
+Description: Cache meta language module for lighttpd
+ With the cache meta language, it is possible to describe to the
+ dependencies of a cached file to its source files/scripts. For the 
+ cache files, the scripting language LUA is used.
+ .
+ THIS MODULE IS OBSOLETED AND WILL BE REMOVED IN LIGHTTPD 1.5.
+ USE mod_magnet INSTEAD.
+
+Package: lighttpd-mod-magnet
+Homepage: http://www.lighttpd.net
+Architecture: any
+Depends: lighttpd (= ${binary:Version}), ${shlibs:Depends}
+Description: Control the request handling module for lighttpd
+ mod_magnet can attract a request in several stages in the request-handling.
+ either at the same level as mod_rewrite, before any parsing of the URL is done
+ or at a later stage, when the doc-root is known and the physical-path is 
+ already setup
+
+Package: lighttpd-mod-webdav
+Homepage: http://www.lighttpd.net
+Architecture: any
+Depends: lighttpd (= ${binary:Version}), ${shlibs:Depends}
+Description: WebDAV module for lighttpd
+ The WebDAV module is a very minimalistic implementation of RFC 2518. 
+ Minimalistic means that not all operations are implemented yet.
+ .
+ Currently supports:
+  GET
+  POST
+  HEAD
+  PROPFIND
+  OPTIONS
+  MKCOL
+  DELETE
+  PUT

Added: lighttpd/tags/1.4.19-5+lenny2/debian/copyright
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/copyright	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/copyright	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,70 @@
+This package was debianized by Vincent Wagelaar <vincent at ricardis.tudelft.nl> on
+Wed, 24 Mar 2004 08:20:58 +0100.
+
+It was downloaded from http://www.incremental.de/products/lighttpd/download/
+
+Upstream Author: Jan Kneschke <jan at kneschke.de>
+
+Copyright:
+
+Copyright (c) 2004, Jan Kneschke, incremental
+ All rights reserved.
+
+You are free to distribute this software under the terms of the BSD License.
+On Debian systems, the complete text of the BSD License can be found in
+/usr/share/common-licenses/BSD.
+
+src/fastcgi.h
+Copyright (c) 1995-1996 Open Market, Inc
+
+This FastCGI application library source and object code (the
+"Software") and its documentation (the "Documentation") are
+copyrighted by Open Market, Inc ("Open Market").  The following terms
+apply to all files associated with the Software and Documentation
+unless explicitly disclaimed in individual files.
+
+Open Market permits you to use, copy, modify, distribute, and license
+this Software and the Documentation for any purpose, provided that
+existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions.  No written
+agreement, license, or royalty fee is required for any of the
+authorized uses.  Modifications to this Software and Documentation may
+be copyrighted by their authors and need not follow the licensing
+terms described here.  If modifications to this Software and
+Documentation have new licensing terms, the new terms must be clearly
+indicated on the first page of each file where they apply.
+
+OPEN MARKET MAKES NO EXPRESS OR IMPLIED WARRANTY WITH RESPECT TO THE
+SOFTWARE OR THE DOCUMENTATION, INCLUDING WITHOUT LIMITATION ANY
+WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  IN
+NO EVENT SHALL OPEN MARKET BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY
+DAMAGES ARISING FROM OR RELATING TO THIS SOFTWARE OR THE
+DOCUMENTATION, INCLUDING, WITHOUT LIMITATION, ANY INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES OR SIMILAR DAMAGES, INCLUDING LOST PROFITS OR
+LOST DATA, EVEN IF OPEN MARKET HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.  THE SOFTWARE AND DOCUMENTATION ARE PROVIDED "AS IS".
+OPEN MARKET HAS NO LIABILITY IN CONTRACT, TORT, NEGLIGENCE OR
+OTHERWISE ARISING OUT OF THIS SOFTWARE OR THE DOCUMENTATION.
+
+
+src/md5.h, src/md5.c
+Copyright (c) 1991-2, RSA Data Security , Inc.
+ All rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.

Added: lighttpd/tags/1.4.19-5+lenny2/debian/create-mime.assign.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/create-mime.assign.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/create-mime.assign.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,20 @@
+#!/usr/bin/perl -w
+use strict;
+open MIMETYPES, "/etc/mime.types" or exit;
+print "mimetype.assign = (\n";
+my %extensions;
+while(<MIMETYPES>) {
+  chomp;
+  s/\#.*//;
+  next if /^\w*$/;
+  if(/^([a-z0-9\/+-.]+)\s+((?:[a-z0-9.+-]+[ ]?)+)$/) {
+    foreach(split / /, $2) {
+      # mime.types can have same extension for different
+      # mime types
+      next if $extensions{$_};
+      $extensions{$_} = 1;
+      print "\".$_\" => \"$1\",\n";
+    }
+  }
+}
+print ")\n";

Added: lighttpd/tags/1.4.19-5+lenny2/debian/include-conf-enabled.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/include-conf-enabled.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/include-conf-enabled.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,15 @@
+#!/usr/bin/perl -wl
+
+use strict;
+use File::Glob ':glob';
+
+my $confdir = "/etc/lighttpd/";
+my $enabled = "conf-enabled/*.conf";
+
+chdir($confdir);
+my @files = bsd_glob($enabled);
+
+for my $file (@files)
+{
+	print "include \"$file\"";
+}

Added: lighttpd/tags/1.4.19-5+lenny2/debian/index.html
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/index.html	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/index.html	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>Welcome page</title>
+<style type="text/css" media="screen">
+body { background: #e7e7e7; font-family: Verdana, sans-serif; font-size: 11pt; }
+#page { background: #ffffff; margin: 50px; border: 2px solid #c0c0c0; padding: 10px; }
+#header { background: #4b6983; border: 2px solid #7590ae; text-align: center; padding: 10px; color: #ffffff; }
+#header h1 { color: #ffffff; }
+#body { padding: 10px; }
+span.tt { font-family: monospace; }
+span.bold { font-weight: bold; }
+a:link { text-decoration: none; font-weight: bold; color: #C00; background: #ffc; }
+a:visited { text-decoration: none; font-weight: bold; color: #999; background: #ffc; }
+a:active { text-decoration: none; font-weight: bold; color: #F00; background: #FC0; }
+a:hover { text-decoration: none; color: #C00; background: #FC0; }
+</style>
+</head>
+<body>
+<div id="page">
+ <div id="header">
+ <h1> Placeholder page </h1>
+  The owner of this web site has not put up any web pages yet. Please come back later.
+ </div>
+ <div id="body">
+  <h2>You should replace this page with your own web pages as soon as possible.</h2>
+  Unless you changed its configuration, your new server is configured as follows:
+  <ul>
+   <li>Configuration files can be found in <span class="tt">/etc/lighttpd</span>. Please read  <span class="tt">/etc/lighttpd/conf-available/README</span> file.</li>
+   <li>The DocumentRoot, which is the directory under which all your HTML files should exist, is set to <span class="tt">/var/www</span>.</li>
+   <li>CGI scripts are looked for in <span class="tt">/usr/lib/cgi-bin</span>, which is where Debian packages will place their scripts. You can enable cgi module by using command <span class="bold tt">"lighty-enable-mod cgi"</span>.</li>
+   <li>Log files are placed in <span class="tt">/var/log/lighttpd</span>, and will be rotated weekly. The frequency of rotation can be easily changed by editing <span class="tt">/etc/logrotate.d/lighttpd</span>.</li>
+   <li>The default directory index is <span class="tt">index.html</span>, meaning that requests for a directory <span class="tt">/foo/bar/</span> will give the contents of the file /var/www/foo/bar/index.html if it exists (assuming that <span class="tt">/var/www</span> is your DocumentRoot).</li>
+   <li>You can enable user directories by using command <span class="bold tt">"lighty-enable-mod userdir"</span></li>
+  </ul>
+  <h2>About this page</h2>
+  <p>
+   This is a placeholder page installed by the Debian release of the <a href="http://packages.debian.org/lighttpd">Lighttpd server package.</a>
+  </p>
+  <p>
+   This computer has installed the Debian GNU/Linux operating system, but it has nothing to do with the Debian Project. Please do not contact the Debian Project about it.
+  </p>
+  <p>
+   If you find a bug in this Lighttpd package, or in Lighttpd itself, please file a bug report on it. Instructions on doing this, and the list of known bugs of this package, can be found in the 
+   <a href="http://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=lighttpd">Debian Bug Tracking System.</a>
+  </p>
+  <p>
+    <a href="http://validator.w3.org/check?uri=referer"><img
+        src="http://www.w3.org/Icons/valid-xhtml10"
+        alt="Valid XHTML 1.0 Transitional" height="31" width="88" border="0" /></a>
+  </p>  
+ </div>
+</div>
+<!-- s:853e9a42efca88ae0dd1a83aeb215047 -->
+</body>
+</html>

Added: lighttpd/tags/1.4.19-5+lenny2/debian/init.d
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/init.d	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/init.d	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,83 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides:          lighttpd
+# Required-Start:    $remote_fs $network
+# Required-Stop:     $remote_fs $network
+# Should-Start:      fam
+# Should-Stop:       fam
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Start the lighttpd web server.
+### END INIT INFO
+
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/lighttpd
+NAME=lighttpd
+DESC="web server"
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
+
+DAEMON_OPTS="-f /etc/lighttpd/lighttpd.conf"
+
+test -x $DAEMON || exit 0
+
+set -e
+
+# be sure there is a /var/run/lighttpd, even with tmpfs
+mkdir -p /var/run/lighttpd > /dev/null 2> /dev/null
+chown www-data:www-data /var/run/lighttpd
+chmod 0750 /var/run/lighttpd
+
+. /lib/lsb/init-functions
+
+case "$1" in
+    start)
+        log_daemon_msg "Starting $DESC" $NAME
+        if ! start-stop-daemon --start --quiet --oknodo \
+            --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
+        then
+            log_end_msg 1
+        else
+            log_end_msg 0
+        fi
+        ;;
+    stop)
+        log_daemon_msg "Stopping $DESC" $NAME
+        if start-stop-daemon --quiet --stop --oknodo --retry 30 --oknodo \
+            --pidfile $PIDFILE --exec $DAEMON
+        then
+            rm -f $PIDFILE
+            log_end_msg 0
+        else
+            log_end_msg 1
+        fi
+        ;;
+    reload)
+        log_daemon_msg "Reloading $DESC configuration" $NAME
+        if start-stop-daemon --stop --signal 2 --oknodo --retry 30 --oknodo \
+            --quiet --pidfile $PIDFILE --exec $DAEMON
+        then
+            if start-stop-daemon --start --quiet  \
+                --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS ; then
+                log_end_msg 0
+            else
+                log_end_msg 1
+            fi
+        else
+            log_end_msg 1
+        fi
+        ;;
+    restart|force-reload)
+        $0 stop
+        test -r  $PIDFILE && while pidof lighttpd | \
+            grep -q `cat $PIDFILE 2>/dev/null` 2>/dev/null ; do sleep 1; done
+        $0 start
+        ;;
+    *)
+        echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
+        exit 1
+        ;;
+esac
+
+exit 0

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-doc.install
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-doc.install	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-doc.install	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+doc/*.txt usr/share/doc/lighttpd-doc

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-cml.install
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-cml.install	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-cml.install	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,2 @@
+debian/tmp/usr/lib/lighttpd/mod_cml.so
+debian/conf-available/10-cml.conf etc/lighttpd/conf-available

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-magnet.install
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-magnet.install	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-magnet.install	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,2 @@
+debian/tmp/usr/lib/lighttpd/mod_magnet.so
+debian/conf-available/10-magnet.conf etc/lighttpd/conf-available

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-mysql-vhost.install
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-mysql-vhost.install	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-mysql-vhost.install	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+debian/tmp/usr/lib/lighttpd/mod_mysql_vhost.so

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-trigger-b4-dl.install
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-trigger-b4-dl.install	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-trigger-b4-dl.install	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,2 @@
+debian/tmp/usr/lib/lighttpd/mod_trigger_b4_dl.so
+debian/conf-available/10-trigger-b4-dl.conf etc/lighttpd/conf-available

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-webdav.install
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-webdav.install	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd-mod-webdav.install	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,2 @@
+debian/tmp/usr/lib/lighttpd/mod_webdav.so
+debian/conf-available/10-webdav.conf        /etc/lighttpd/conf-available

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,167 @@
+# Debian lighttpd configuration file
+#
+
+############ Options you really have to take care of ####################
+
+## modules to load
+# mod_access, mod_accesslog and mod_alias are loaded by default
+# all other module should only be loaded if neccesary
+# - saves some time
+# - saves memory
+
+server.modules              = (
+            "mod_access",
+            "mod_alias",
+            "mod_accesslog",
+            "mod_compress",
+#           "mod_rewrite",
+#           "mod_redirect",
+#           "mod_evhost",
+#           "mod_usertrack",
+#           "mod_rrdtool",
+#           "mod_webdav",
+#           "mod_expire",
+#           "mod_flv_streaming",
+#           "mod_evasive"
+)
+
+## a static document-root, for virtual-hosting take look at the
+## server.virtual-* options
+server.document-root       = "/var/www/"
+
+## where to upload files to, purged daily.
+server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
+
+## where to send error-messages to
+server.errorlog            = "/var/log/lighttpd/error.log"
+
+## files to check for if .../ is requested
+index-file.names           = ( "index.php", "index.html",
+                               "index.htm", "default.htm",
+                               "index.lighttpd.html" )
+
+
+## Use the "Content-Type" extended attribute to obtain mime type if possible
+# mimetype.use-xattr = "enable"
+
+#### accesslog module
+accesslog.filename         = "/var/log/lighttpd/access.log"
+
+## deny access the file-extensions
+#
+# ~    is for backupfiles from vi, emacs, joe, ...
+# .inc is often used for code includes which should in general not be part
+#      of the document-root
+url.access-deny            = ( "~", ".inc" )
+
+##
+# which extensions should not be handle via static-file transfer
+#
+# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
+static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
+
+
+######### Options that are good to be but not neccesary to be changed #######
+
+## Use ipv6 only if available.
+include_shell "/usr/share/lighttpd/use-ipv6.pl"
+
+## bind to port (default: 80)
+# server.port               = 81
+
+## bind to localhost only (default: all interfaces)
+## server.bind                = "localhost"
+
+## error-handler for status 404
+#server.error-handler-404  = "/error-handler.html"
+#server.error-handler-404  = "/error-handler.php"
+
+## to help the rc.scripts
+server.pid-file            = "/var/run/lighttpd.pid"
+
+##
+## Format: <errorfile-prefix><status>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix    = "/var/www/"
+
+## virtual directory listings
+dir-listing.encoding        = "utf-8"
+server.dir-listing          = "enable"
+
+## send unhandled HTTP-header headers to error-log
+#debug.dump-unknown-headers  = "enable"
+
+### only root can use these options
+#
+# chroot() to directory (default: no chroot() )
+#server.chroot            = "/"
+
+## change uid to <uid> (default: don't care)
+server.username            = "www-data"
+
+## change uid to <uid> (default: don't care)
+server.groupname           = "www-data"
+
+#### compress module
+compress.cache-dir          = "/var/cache/lighttpd/compress/"
+compress.filetype           = ("text/plain", "text/html", "application/x-javascript", "text/css")
+
+
+#### url handling modules (rewrite, redirect, access)
+# url.rewrite                 = ( "^/$"             => "/server-status" )
+# url.redirect                = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
+
+#
+# define a pattern for the host url finding
+# %% => % sign
+# %0 => domain name + tld
+# %1 => tld
+# %2 => domain name without tld
+# %3 => subdomain 1 name
+# %4 => subdomain 2 name
+#
+# evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"
+
+#### expire module
+# expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#### rrdtool
+# rrdtool.binary = "/usr/bin/rrdtool"
+# rrdtool.db-name = "/var/www/lighttpd.rrd"
+
+#### variable usage:
+## variable name without "." is auto prefixed by "var." and becomes "var.bar"
+#bar = 1
+#var.mystring = "foo"
+
+## integer add
+#bar += 1
+## string concat, with integer cast as string, result: "www.foo1.com"
+#server.name = "www." + mystring + var.bar + ".com"
+## array merge
+#index-file.names = (foo + ".php") + index-file.names
+#index-file.names += (foo + ".php")
+
+
+#### external configuration files
+## mimetype mapping
+include_shell "/usr/share/lighttpd/create-mime.assign.pl"
+
+## load enabled configuration files,
+## read /etc/lighttpd/conf-available/README first
+include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
+
+#### handle Debian Policy Manual, Section 11.5. urls
+## by default allow them only from localhost
+## (This must come last due to #445459)
+## Note: =~ "127.0.0.1" works with ipv6 enabled, whereas == "127.0.0.1" doesn't
+$HTTP["remoteip"] =~ "127.0.0.1" {
+	alias.url += (
+		"/doc/" => "/usr/share/doc/",
+		"/images/" => "/usr/share/images/"
+	)
+	$HTTP["url"] =~ "^/doc/|^/images/" {
+		dir-listing.activate = "enable"
+	}
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.cron.daily
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.cron.daily	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.cron.daily	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,10 @@
+#!/bin/sh
+# Cleanup lighttpd compress cache
+
+cache=/var/cache/lighttpd
+if test -d "$cache/compress"; then
+    su -s /bin/sh -c "find $cache/compress -type f -atime +30 -print0 | xargs -0 -r rm" www-data
+fi
+if test -d "$cache/uploads"; then
+    su -s /bin/sh -c "find $cache/uploads -type f -atime +1 -print0 | xargs -0 -r rm" www-data
+fi

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.dirs
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.dirs	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.dirs	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,8 @@
+var/www
+var/log/lighttpd
+var/cache/lighttpd/compress
+var/cache/lighttpd/uploads
+etc/lighttpd/conf-available
+etc/lighttpd/conf-enabled
+usr/sbin
+usr/lib/cgi-bin

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.examples
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.examples	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.examples	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+doc/lighttpd.conf

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.install
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.install	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.install	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,47 @@
+debian/tmp/usr/bin/*
+debian/tmp/usr/sbin/*
+debian/tmp/usr/share/man/*
+debian/tmp/usr/lib/lighttpd/mod_access.so
+debian/tmp/usr/lib/lighttpd/mod_accesslog.so
+debian/tmp/usr/lib/lighttpd/mod_alias.so
+debian/tmp/usr/lib/lighttpd/mod_auth.so
+debian/tmp/usr/lib/lighttpd/mod_cgi.so
+debian/tmp/usr/lib/lighttpd/mod_compress.so
+debian/tmp/usr/lib/lighttpd/mod_dirlisting.so
+debian/tmp/usr/lib/lighttpd/mod_evasive.so
+debian/tmp/usr/lib/lighttpd/mod_evhost.so
+debian/tmp/usr/lib/lighttpd/mod_expire.so
+debian/tmp/usr/lib/lighttpd/mod_extforward.so
+debian/tmp/usr/lib/lighttpd/mod_fastcgi.so
+debian/tmp/usr/lib/lighttpd/mod_flv_streaming.so
+debian/tmp/usr/lib/lighttpd/mod_indexfile.so
+debian/tmp/usr/lib/lighttpd/mod_proxy.so
+debian/tmp/usr/lib/lighttpd/mod_redirect.so
+debian/tmp/usr/lib/lighttpd/mod_rewrite.so
+debian/tmp/usr/lib/lighttpd/mod_rrdtool.so
+debian/tmp/usr/lib/lighttpd/mod_scgi.so
+debian/tmp/usr/lib/lighttpd/mod_secdownload.so
+debian/tmp/usr/lib/lighttpd/mod_setenv.so
+debian/tmp/usr/lib/lighttpd/mod_simple_vhost.so
+debian/tmp/usr/lib/lighttpd/mod_ssi.so
+debian/tmp/usr/lib/lighttpd/mod_staticfile.so
+debian/tmp/usr/lib/lighttpd/mod_status.so
+debian/tmp/usr/lib/lighttpd/mod_userdir.so
+debian/tmp/usr/lib/lighttpd/mod_usertrack.so
+debian/lighttpd.conf                        /etc/lighttpd
+debian/conf-available/05-auth.conf          /etc/lighttpd/conf-available
+debian/conf-available/10-status.conf        /etc/lighttpd/conf-available
+debian/conf-available/10-cgi.conf           /etc/lighttpd/conf-available
+debian/conf-available/10-fastcgi.conf       /etc/lighttpd/conf-available
+debian/conf-available/10-proxy.conf         /etc/lighttpd/conf-available
+debian/conf-available/10-rrdtool.conf       /etc/lighttpd/conf-available
+debian/conf-available/10-simple-vhost.conf  /etc/lighttpd/conf-available
+debian/conf-available/10-ssi.conf           /etc/lighttpd/conf-available
+debian/conf-available/10-ssl.conf           /etc/lighttpd/conf-available
+debian/conf-available/10-userdir.conf       /etc/lighttpd/conf-available
+debian/conf-available/README                /etc/lighttpd/conf-available
+debian/create-mime.assign.pl                /usr/share/lighttpd/
+debian/include-conf-enabled.pl              /usr/share/lighttpd/
+debian/use-ipv6.pl                          /usr/share/lighttpd/
+debian/lighty-enable-mod                    /usr/sbin/
+debian/index.html                           /usr/share/lighttpd/

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.links
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.links	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.links	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,6 @@
+usr/sbin/lighty-enable-mod usr/sbin/lighty-disable-mod
+usr/sbin/lighty-enable-mod usr/sbin/lighttpd-enable-mod
+usr/sbin/lighty-enable-mod usr/sbin/lighttpd-disable-mod
+usr/share/man/man1/lighty-enable-mod.1.gz usr/share/man/man1/lighty-disable-mod.1.gz
+usr/share/man/man1/lighty-enable-mod.1.gz usr/share/man/man1/lighttpd-disable-mod.1.gz
+usr/share/man/man1/lighty-enable-mod.1.gz usr/share/man/man1/lighttpd-enable-mod.1.gz

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.logrotate
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.logrotate	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.logrotate	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,18 @@
+/var/log/lighttpd/*.log {
+        weekly
+        missingok
+	copytruncate
+        rotate 12
+        compress
+        notifempty
+        sharedscripts
+        postrotate
+           if [ -f /var/run/lighttpd.pid ]; then \
+             if [ -x /usr/sbin/invoke-rc.d ]; then \
+                invoke-rc.d lighttpd reload > /dev/null 2>&1; \
+             else \
+                /etc/init.d/lighttpd reload > /dev/null 2>&1; \
+             fi; \
+           fi;
+        endscript
+}

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.manpages
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.manpages	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.manpages	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,2 @@
+debian/lighty-enable-mod.1
+debian/spawn-fcgi.lighttpd.1

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.postinst
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.postinst	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.postinst	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,24 @@
+#! /bin/sh -e
+# postinst script for lighttpd
+
+if [ "$1" = "configure" ]; then
+   	if [ ! -r /var/www/index.lighttpd.html ];
+   	then
+   		cp /usr/share/lighttpd/index.html /var/www/index.lighttpd.html
+	fi
+        mkdir -p /var/run/lighttpd > /dev/null 2> /dev/null
+	chown www-data:www-data /var/log/lighttpd /var/run/lighttpd
+        chown www-data:www-data /var/cache/lighttpd /var/cache/lighttpd/compress /var/cache/lighttpd/uploads
+	chmod 0750 /var/log/lighttpd /var/run/lighttpd
+
+fi
+
+update-alternatives \
+    --install /usr/bin/spawn-fcgi \
+        spawn-fcgi /usr/bin/spawn-fcgi.lighttpd 20 \
+    --slave /usr/share/man/man1/spawn-fcgi.1.gz \
+        spawn-fcgi.1.gz /usr/share/man/man1/spawn-fcgi.lighttpd.1.gz
+
+#DEBHELPER#
+
+exit 0

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.postrm
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.postrm	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.postrm	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,10 @@
+#!/bin/sh -e
+# postrm script for lighttpd
+
+if [ "$1" = "purge" ]; then
+    rm -rf /var/log/lighttpd /var/run/lighttpd /var/cache/lighttpd
+fi
+
+#DEBHELPER#
+
+exit 0

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.preinst
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.preinst	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.preinst	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,35 @@
+#! /bin/sh -e
+# preinst script for lighttpd
+
+CA=/etc/lighttpd/conf-available
+CE=/etc/lighttpd/conf-enabled
+
+if test -f "$CA/10-auth.conf"; then
+    if test -f "$CA/05-auth.conf"; then
+        echo 1>&2 "Not touching conf-available/10-auth.conf because conf-available/05-auth.conf exists !!!"
+        echo 1>&2 "Please read /usr/share/doc/lighttpd/NEWS.Debian"
+    else
+        echo "Renaming conf-available/10-auth.conf into conf-available/05-auth.conf"
+        mv "$CA/10-auth.conf" "$CA/05-auth.conf"
+    fi
+fi
+
+if test -f "$CE/10-auth.conf"; then
+    if test -f "$CE/05-auth.conf"; then
+        echo 1>&2 "Not touching conf-enabled/10-auth.conf because conf-enabled/05-auth.conf exists !!!"
+        echo 1>&2 "Please read /usr/share/doc/lighttpd/NEWS.Debian"
+    else
+        if test -h "$CE/10-auth.conf" && test "$(readlink -m "$CE/10-auth.conf")" = "$CA/10-auth.conf"; then
+            echo "Updating conf-enabled symlink to 05-auth.conf accordingly"
+            ln -s -f "../conf-available/05-auth.conf" "$CE/05-auth.conf"
+        fi
+        if test -f "$CE/10-auth.conf"; then
+            echo "Renaming conf-enabled/10-auth.conf into conf-enabled/05-auth.conf"
+            mv "$CE/10-auth.conf" "$CE/05-auth.conf"
+        fi
+    fi
+fi
+
+#DEBHELPER#
+
+exit 0

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.prerm
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.prerm	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighttpd.prerm	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,9 @@
+#!/bin/sh -e
+
+if test "$1" != "upgrade"; then
+    update-alternatives --remove spawn-fcgi /usr/bin/spawn-fcgi.lighttpd
+fi
+
+#DEBHELPER#
+
+exit 0

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighty-enable-mod
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighty-enable-mod	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighty-enable-mod	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,114 @@
+#!/usr/bin/perl -w
+#
+#	Copyright (c) 2006 Krzysztof Krzyzaniak
+#
+#	Contains changes from:
+#		- Tobias Gruetzmacher <tobias at portfolio16.de>
+#
+#	You may distribute under the terms of either the GNU General Public
+#	License[1] or the Artistic License[2].
+#
+#	[1] http://www.gnu.org/licenses/gpl.html
+#	[2] http://www.perl.com/pub/a/language/misc/Artistic.html
+#
+
+use strict;
+use Term::ReadLine;
+use File::Basename;
+use File::Glob ':glob';
+use File::stat;
+
+#--- some initializations
+my $confdir = "/etc/lighttpd/";
+my %available = ();
+my %enabled = ();
+my @todo = ();
+
+my %moduledeps = ();
+
+my $enabling = 1;
+
+
+#--- first check if we enabling or disabling
+if ($0 =~ /disable-mod$/) {
+	#--- disabling mode
+	$enabling = 0;
+}
+
+#--- list of available modules
+my @files = bsd_glob($confdir.'conf-available/*.conf');
+print "Available modules: ";
+foreach my $file (@files) {
+	if (basename($file) =~ /^\d+\-([\w\-\.]+)\.conf$/) {
+		$available{$1} = $file;
+		print qq{$1 };
+	}
+}
+print "\n";
+
+#--- list of already enabled modules
+ at files = bsd_glob($confdir.'conf-enabled/*.conf');
+print "Already enabled modules: ";
+foreach my $file (@files) {
+	if (basename($file) =~ /^\d+\-([\w\-\.]+)\.conf$/) {
+		$enabled{$1} = $file;
+		print qq{$1 };
+	}
+}
+print "\n";
+
+unless (defined($ARGV[0])) {
+	my $prompt =  $enabling ? 'Enable module: ' : 'Disable module: ';
+	my $term = new Term::ReadLine $prompt;
+	my $OUT = $term->OUT || \*STDOUT;
+	my $var = lc($term->readline($prompt));
+	@todo = split(/ /, $var);
+}
+else {
+	@todo = @ARGV;
+}
+
+
+#--- activate (link) or deactivate (remove) module
+foreach my $do (@todo) {
+
+
+	if ($enabling) {
+		next unless defined($available{$do});
+		my $target = sprintf("%s/conf-enabled/%s", $confdir,basename($available{$do}));
+		print qq{Enabling $do: };
+
+		my $st = stat($target);
+		unless ( -f $target ) {
+			if (symlink($available{$do}, $target)) {
+				print "ok\n";
+			}
+			else {
+				print "failure: $!\n";
+			}
+		}
+		else {
+			print "already enabled\n";
+		}
+
+		#--- check dependencies
+		for my $module (@{$moduledeps{$do}})
+		{
+			unless ( -f $target && -l $target )
+			{
+				print qq{Module $do depends on module $module which is not activated.\n};
+			}
+		}
+	}
+	else {
+		if (defined($enabled{$do})) {
+			print qq{Disabling $do\n};
+			my $target = sprintf("%s/conf-enabled/%s", $confdir,basename($enabled{$do}));
+			unlink($target);
+		} else {
+			print qq{Already disabled $do\n};
+		}
+	}
+}
+
+print "Run /etc/init.d/lighttpd force-reload to enable changes\n";

Added: lighttpd/tags/1.4.19-5+lenny2/debian/lighty-enable-mod.1
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/lighty-enable-mod.1	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/lighty-enable-mod.1	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,17 @@
+.TH LIGHTYENABLEMOD 1 2006-01-11
+.SH NAME
+lighty-enable-mod, lighty-disable-mod \- enable or disable configuration in lighttpd server
+.SH SYNOPSIS
+lighty-enable-mod [module]
+lighty-disable-mod [module]
+.SH DESCRIPTION
+This manual page documents briefly the lighty-enable-mod and
+lighty-disable-mod commands.
+
+lighty-enable-mod and lighty-disable-mod are programs that enable
+(and respectively disable) the specified configuration file within
+lighttpd configuration.
+.SH SEE ALSO
+lighttpd(1)
+.SH AUTHOR
+eloy at debian.org

Added: lighttpd/tags/1.4.19-5+lenny2/debian/patches/fastcgi_detach.patch
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/patches/fastcgi_detach.patch	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/patches/fastcgi_detach.patch	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,29 @@
+Author: <fpletz at franz-pletz.org>
+
+--- pkg.orig/src/mod_fastcgi.c
++++ pkg/src/mod_fastcgi.c
+@@ -937,6 +937,24 @@
+ 				close(fcgi_fd);
+ 			}
+ 
++			close(STDERR_FILENO);
++			if(srv->errorlog_mode == ERRORLOG_FILE)
++				dup2(srv->errorlog_fd, STDERR_FILENO);
++			else {
++				int fd = open("/dev/null", O_RDWR);
++				dup2(fd, STDERR_FILENO);
++				close(fd);
++			}
++
++			close(STDOUT_FILENO);
++			if(srv->errorlog_mode == ERRORLOG_FILE)
++				dup2(srv->errorlog_fd, STDOUT_FILENO);
++			else {
++				int fd = open("/dev/null", O_RDWR);
++				dup2(fd, STDOUT_FILENO);
++				close(fd);
++			}
++
+ 			/* we don't need the client socket */
+ 			for (i = 3; i < 256; i++) {
+ 				close(i);

Added: lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap-deprecated.patch
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap-deprecated.patch	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap-deprecated.patch	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,12 @@
+Author: Pierre Habouzit <madcoder at debian.org>
+
+--- pkg.orig/src/http_auth.h
++++ pkg/src/http_auth.h
+@@ -6,6 +6,7 @@
+ 
+ #if defined(HAVE_LDAP_H) && defined(HAVE_LBER_H) && defined(HAVE_LIBLDAP) && defined(HAVE_LIBLBER)
+ # define USE_LDAP
++# define LDAP_DEPRECATED 1
+ # include <ldap.h>
+ #endif
+ 

Added: lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap_build_filter_fix.patch
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap_build_filter_fix.patch	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap_build_filter_fix.patch	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,17 @@
+Author: Peter Colberg <peterco at gmx.net>
+
+--- pkg.orig/src/http_auth.c
++++ pkg/src/http_auth.c
+@@ -748,6 +748,12 @@
+ 		    LDAP_SUCCESS != (ret = ldap_search_s(p->conf.ldap->ldap, p->conf.auth_ldap_basedn->ptr, LDAP_SCOPE_SUBTREE, p->ldap_filter->ptr, attrs, 0, &lm))) {
+ 			if (auth_ldap_init(srv, &p->conf) != HANDLER_GO_ON)
+ 				return -1;
++
++			/* build filter */
++			buffer_copy_string_buffer(p->ldap_filter, p->conf.ldap->ldap_filter_pre);
++			buffer_append_string_buffer(p->ldap_filter, username);
++			buffer_append_string_buffer(p->ldap_filter, p->conf.ldap->ldap_filter_post);
++
+ 			if (LDAP_SUCCESS != (ret = ldap_search_s(p->conf.ldap->ldap, p->conf.auth_ldap_basedn->ptr, LDAP_SCOPE_SUBTREE, p->ldap_filter->ptr, attrs, 0, &lm))) {
+ 
+ 			log_error_write(srv, __FILE__, __LINE__, "sssb",

Added: lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap_leak_bugfix.patch
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap_leak_bugfix.patch	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/patches/ldap_leak_bugfix.patch	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,178 @@
+Author: yann at pleiades.fr.eu.org
+
+--- pkg.orig/src/http_auth.c
++++ pkg/src/http_auth.c
+@@ -738,17 +738,17 @@
+ 			return -1;
+ 
+ 		/* build filter */
+-		buffer_copy_string_buffer(p->ldap_filter, p->conf.ldap_filter_pre);
++		buffer_copy_string_buffer(p->ldap_filter, p->conf.ldap->ldap_filter_pre);
+ 		buffer_append_string_buffer(p->ldap_filter, username);
+-		buffer_append_string_buffer(p->ldap_filter, p->conf.ldap_filter_post);
++		buffer_append_string_buffer(p->ldap_filter, p->conf.ldap->ldap_filter_post);
+ 
+ 
+ 		/* 2. */
+-		if (p->conf.ldap == NULL ||
+-		    LDAP_SUCCESS != (ret = ldap_search_s(p->conf.ldap, p->conf.auth_ldap_basedn->ptr, LDAP_SCOPE_SUBTREE, p->ldap_filter->ptr, attrs, 0, &lm))) {
++		if (p->conf.ldap->ldap == NULL ||
++		    LDAP_SUCCESS != (ret = ldap_search_s(p->conf.ldap->ldap, p->conf.auth_ldap_basedn->ptr, LDAP_SCOPE_SUBTREE, p->ldap_filter->ptr, attrs, 0, &lm))) {
+ 			if (auth_ldap_init(srv, &p->conf) != HANDLER_GO_ON)
+ 				return -1;
+-			if (LDAP_SUCCESS != (ret = ldap_search_s(p->conf.ldap, p->conf.auth_ldap_basedn->ptr, LDAP_SCOPE_SUBTREE, p->ldap_filter->ptr, attrs, 0, &lm))) {
++			if (LDAP_SUCCESS != (ret = ldap_search_s(p->conf.ldap->ldap, p->conf.auth_ldap_basedn->ptr, LDAP_SCOPE_SUBTREE, p->ldap_filter->ptr, attrs, 0, &lm))) {
+ 
+ 			log_error_write(srv, __FILE__, __LINE__, "sssb",
+ 					"ldap:", ldap_err2string(ret), "filter:", p->ldap_filter);
+@@ -757,7 +757,7 @@
+ 			}
+ 		}
+ 
+-		if (NULL == (first = ldap_first_entry(p->conf.ldap, lm))) {
++		if (NULL == (first = ldap_first_entry(p->conf.ldap->ldap, lm))) {
+ 			log_error_write(srv, __FILE__, __LINE__, "s", "ldap ...");
+ 
+ 			ldap_msgfree(lm);
+@@ -765,7 +765,7 @@
+ 			return -1;
+ 		}
+ 
+-		if (NULL == (dn = ldap_get_dn(p->conf.ldap, first))) {
++		if (NULL == (dn = ldap_get_dn(p->conf.ldap->ldap, first))) {
+ 			log_error_write(srv, __FILE__, __LINE__, "s", "ldap ...");
+ 
+ 			ldap_msgfree(lm);
+--- pkg.orig/src/http_auth.h
++++ pkg/src/http_auth.h
+@@ -17,6 +17,15 @@
+ 	AUTH_BACKEND_HTDIGEST
+ } auth_backend_t;
+ 
++#ifdef USE_LDAP
++typedef struct {
++	LDAP *ldap;
++
++	buffer *ldap_filter_pre;
++	buffer *ldap_filter_post;
++} ldap_plugin_config;
++#endif
++
+ typedef struct {
+ 	/* auth */
+ 	array  *auth_require;
+@@ -44,13 +53,12 @@
+ 	auth_backend_t auth_backend;
+ 
+ #ifdef USE_LDAP
+-	LDAP *ldap;
+-
+-	buffer *ldap_filter_pre;
+-	buffer *ldap_filter_post;
++	ldap_plugin_config *ldap;
+ #endif
+ } mod_auth_plugin_config;
+ 
++
++
+ typedef struct {
+ 	PLUGIN_DATA;
+ 	buffer *tmp_buf;
+--- pkg.orig/src/mod_auth.c
++++ pkg/src/mod_auth.c
+@@ -77,10 +77,11 @@
+ 			buffer_free(s->auth_ldap_cafile);
+ 
+ #ifdef USE_LDAP
+-			buffer_free(s->ldap_filter_pre);
+-			buffer_free(s->ldap_filter_post);
++			buffer_free(s->ldap->ldap_filter_pre);
++			buffer_free(s->ldap->ldap_filter_post);
+ 
+-			if (s->ldap) ldap_unbind_s(s->ldap);
++			if (s->ldap->ldap) ldap_unbind_s(s->ldap->ldap);
++			free (s->ldap);
+ #endif
+ 
+ 			free(s);
+@@ -116,8 +117,6 @@
+ 	PATCH(auth_ldap_allow_empty_pw);
+ #ifdef USE_LDAP
+ 	PATCH(ldap);
+-	PATCH(ldap_filter_pre);
+-	PATCH(ldap_filter_post);
+ #endif
+ 
+ 	/* skip the first, the global context */
+@@ -150,8 +149,6 @@
+ 				PATCH(auth_ldap_hostname);
+ #ifdef USE_LDAP
+ 				PATCH(ldap);
+-				PATCH(ldap_filter_pre);
+-				PATCH(ldap_filter_post);
+ #endif
+ 			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.base-dn"))) {
+ 				PATCH(auth_ldap_basedn);
+@@ -349,9 +346,10 @@
+ 		s->auth_require = array_init();
+ 
+ #ifdef USE_LDAP
+-		s->ldap_filter_pre = buffer_init();
+-		s->ldap_filter_post = buffer_init();
+-		s->ldap = NULL;
++		s->ldap = malloc (sizeof(ldap_plugin_config));
++		s->ldap->ldap_filter_pre = buffer_init();
++		s->ldap->ldap_filter_post = buffer_init();
++		s->ldap->ldap = NULL;
+ #endif
+ 
+ 		cv[0].destination = s->auth_backend_conf;
+@@ -539,19 +537,19 @@
+ 					return HANDLER_ERROR;
+ 				}
+ 
+-				buffer_copy_string_len(s->ldap_filter_pre, s->auth_ldap_filter->ptr, dollar - s->auth_ldap_filter->ptr);
+-				buffer_copy_string(s->ldap_filter_post, dollar+1);
++				buffer_copy_string_len(s->ldap->ldap_filter_pre, s->auth_ldap_filter->ptr, dollar - s->auth_ldap_filter->ptr);
++				buffer_copy_string(s->ldap->ldap_filter_post, dollar+1);
+ 			}
+ 
+ 			if (s->auth_ldap_hostname->used) {
+-				if (NULL == (s->ldap = ldap_init(s->auth_ldap_hostname->ptr, LDAP_PORT))) {
++				if (NULL == (s->ldap->ldap = ldap_init(s->auth_ldap_hostname->ptr, LDAP_PORT))) {
+ 					log_error_write(srv, __FILE__, __LINE__, "ss", "ldap ...", strerror(errno));
+ 
+ 					return HANDLER_ERROR;
+ 				}
+ 
+ 				ret = LDAP_VERSION3;
+-				if (LDAP_OPT_SUCCESS != (ret = ldap_set_option(s->ldap, LDAP_OPT_PROTOCOL_VERSION, &ret))) {
++				if (LDAP_OPT_SUCCESS != (ret = ldap_set_option(s->ldap->ldap, LDAP_OPT_PROTOCOL_VERSION, &ret))) {
+ 					log_error_write(srv, __FILE__, __LINE__, "ss", "ldap:", ldap_err2string(ret));
+ 
+ 					return HANDLER_ERROR;
+@@ -570,7 +568,7 @@
+ 						}
+ 					}
+ 
+-					if (LDAP_OPT_SUCCESS != (ret = ldap_start_tls_s(s->ldap, NULL,  NULL))) {
++					if (LDAP_OPT_SUCCESS != (ret = ldap_start_tls_s(s->ldap->ldap, NULL,  NULL))) {
+ 						log_error_write(srv, __FILE__, __LINE__, "ss", "ldap startTLS failed:", ldap_err2string(ret));
+ 
+ 						return HANDLER_ERROR;
+@@ -580,13 +578,13 @@
+ 
+ 				/* 1. */
+ 				if (s->auth_ldap_binddn->used) {
+-					if (LDAP_SUCCESS != (ret = ldap_simple_bind_s(s->ldap, s->auth_ldap_binddn->ptr, s->auth_ldap_bindpw->ptr))) {
++					if (LDAP_SUCCESS != (ret = ldap_simple_bind_s(s->ldap->ldap, s->auth_ldap_binddn->ptr, s->auth_ldap_bindpw->ptr))) {
+ 						log_error_write(srv, __FILE__, __LINE__, "ss", "ldap:", ldap_err2string(ret));
+ 
+ 						return HANDLER_ERROR;
+ 					}
+ 				} else {
+-					if (LDAP_SUCCESS != (ret = ldap_simple_bind_s(s->ldap, NULL, NULL))) {
++					if (LDAP_SUCCESS != (ret = ldap_simple_bind_s(s->ldap->ldap, NULL, NULL))) {
+ 						log_error_write(srv, __FILE__, __LINE__, "ss", "ldap:", ldap_err2string(ret));
+ 
+ 						return HANDLER_ERROR;

Added: lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_request_header_memleak.patch
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_request_header_memleak.patch	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_request_header_memleak.patch	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,50 @@
+--- src/request.c.orig
++++ src/request.c
+@@ -825,6 +825,7 @@
+ 												"request-header:\n",
+ 												con->request.request);
+ 									}
++									array_insert_unique(con->request.headers, (data_unset *)ds);
+ 									return 0;
+ 								}
+ 
+@@ -874,6 +875,7 @@
+ 												"request-header:\n",
+ 												con->request.request);
+ 									}
++									array_insert_unique(con->request.headers, (data_unset *)ds);
+ 									return 0;
+ 								}
+ 							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("Expect")))) {
+@@ -911,6 +913,7 @@
+ 												"request-header:\n",
+ 												con->request.request);
+ 									}
++									array_insert_unique(con->request.headers, (data_unset *)ds);
+ 									return 0;
+ 								}
+ 							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("If-Modified-Since")))) {
+@@ -936,6 +939,7 @@
+ 												"request-header:\n",
+ 												con->request.request);
+ 									}
++									array_insert_unique(con->request.headers, (data_unset *)ds);
+ 									return 0;
+ 								}
+ 							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("If-None-Match")))) {
+@@ -953,6 +957,7 @@
+ 												"request-header:\n",
+ 												con->request.request);
+ 									}
++									array_insert_unique(con->request.headers, (data_unset *)ds);
+ 									return 0;
+ 								}
+ 							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("Range")))) {
+@@ -976,6 +981,7 @@
+ 												"request-header:\n",
+ 												con->request.request);
+ 									}
++									array_insert_unique(con->request.headers, (data_unset *)ds);
+ 									return 0;
+ 								}
+ 							}

Added: lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_rewrite_redirect_decode_url.patch
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_rewrite_redirect_decode_url.patch	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_rewrite_redirect_decode_url.patch	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,122 @@
+--- src/mod_rewrite.c.orig
++++ src/mod_rewrite.c
+@@ -350,7 +350,11 @@
+ 
+ 	if (!p->conf.rewrite) return HANDLER_GO_ON;
+ 
+-	buffer_copy_string_buffer(p->match_buf, con->request.uri);
++	buffer_copy_string_buffer(p->match_buf, con->uri.path);
++	if (con->uri.query->used > 0) {
++		buffer_append_string_len(p->match_buf, CONST_STR_LEN("?"));
++		buffer_append_string_buffer(p->match_buf, con->uri.query);
++	}
+ 
+ 	for (i = 0; i < p->conf.rewrite->used; i++) {
+ 		pcre *match;
+--- src/response.c.orig
++++ src/response.c
+@@ -224,27 +224,6 @@
+ 		}
+ 
+ 
+-		/**
+-		 *
+-		 * call plugins
+-		 *
+-		 * - based on the raw URL
+-		 *
+-		 */
+-
+-		switch(r = plugins_call_handle_uri_raw(srv, con)) {
+-		case HANDLER_GO_ON:
+-			break;
+-		case HANDLER_FINISHED:
+-		case HANDLER_COMEBACK:
+-		case HANDLER_WAIT_FOR_EVENT:
+-		case HANDLER_ERROR:
+-			return r;
+-		default:
+-			log_error_write(srv, __FILE__, __LINE__, "sd", "handle_uri_raw: unknown return value", r);
+-			break;
+-		}
+-
+ 		/* build filename
+ 		 *
+ 		 * - decode url-encodings  (e.g. %20 -> ' ')
+@@ -252,7 +231,6 @@
+ 		 */
+ 
+ 
+-
+ 		if (con->request.http_method == HTTP_METHOD_OPTIONS &&
+ 		    con->uri.path_raw->ptr[0] == '*' && con->uri.path_raw->ptr[1] == '\0') {
+ 			/* OPTIONS * ... */
+@@ -268,6 +246,28 @@
+ 			log_error_write(srv, __FILE__, __LINE__,  "sb", "URI-path     : ", con->uri.path);
+ 		}
+ 
++
++		/**
++		 *
++		 * call plugins
++		 *
++		 * - based on the raw URL
++		 *
++		 */
++
++		switch(r = plugins_call_handle_uri_raw(srv, con)) {
++		case HANDLER_GO_ON:
++			break;
++		case HANDLER_FINISHED:
++		case HANDLER_COMEBACK:
++		case HANDLER_WAIT_FOR_EVENT:
++		case HANDLER_ERROR:
++			return r;
++		default:
++			log_error_write(srv, __FILE__, __LINE__, "sd", "handle_uri_raw: unknown return value", r);
++			break;
++		}
++
+ 		/**
+ 		 *
+ 		 * call plugins
+--- tests/mod-rewrite.t.orig
++++ tests/mod-rewrite.t
+@@ -8,7 +8,7 @@
+ 
+ use strict;
+ use IO::Socket;
+-use Test::More tests => 5;
++use Test::More tests => 4;
+ use LightyTest;
+ 
+ my $tf = LightyTest->new();
+@@ -44,5 +44,13 @@
+ 	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'bar&a=b' } ];
+ 	ok($tf->handle_http($t) == 0, 'valid request');
+ 
++	$t->{REQUEST}  = ( <<EOF
++GET %2Frewrite/f%6Fo?a=b HTTP/1.0
++Host: www.example.org
++EOF
++ );
++	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'a=b' } ];
++	ok($tf->handle_http($t) == 0, 'valid request with url encoded characters');
++
+ 	ok($tf->stop_proc == 0, "Stopping lighttpd");
+ }
+--- src/mod_redirect.c.orig
++++ src/mod_redirect.c
+@@ -178,7 +178,11 @@
+ 
+ 	mod_redirect_patch_connection(srv, con, p);
+ 
+-	buffer_copy_string_buffer(p->match_buf, con->request.uri);
++	buffer_copy_string_buffer(p->match_buf, con->uri.path);
++	if (con->uri.query->used > 0) {
++		buffer_append_string_len(p->match_buf, CONST_STR_LEN("?"));
++		buffer_append_string_buffer(p->match_buf, con->uri.query);
++	}
+ 
+ 	for (i = 0; i < p->conf.redirect->used; i++) {
+ 		pcre *match;

Added: lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_userdir_lowercase.patch
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_userdir_lowercase.patch	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/patches/lighttpd-1.4.x_userdir_lowercase.patch	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,38 @@
+--- src/mod_userdir.c.orig
++++ src/mod_userdir.c
+@@ -262,6 +262,9 @@
+ 				return HANDLER_GO_ON;
+ 			}
+ 		}
++		if (con->conf.force_lowercase_filenames) {
++			buffer_to_lower(p->username);
++		}
+ 
+ 		buffer_copy_string_buffer(p->temp_path, p->conf.basepath);
+ 		BUFFER_APPEND_SLASH(p->temp_path);
+@@ -284,8 +287,24 @@
+ 		}
+ 	}
+ 
++	/* the physical rel_path is basically the same as uri.path;
++	 * but it is converted to lowercase in case of force_lowercase_filenames and some special handling
++	 * for trailing '.', ' ' and '/' on windows
++	 * we assume that no docroot/physical handler changed this
++	 * (docroot should only set the docroot/server name, phyiscal should only change the phyiscal.path;
++	 *  the exception mod_secure_download doesn't work with userdir anyway)
++	 */
+ 	BUFFER_APPEND_SLASH(p->temp_path);
+-	buffer_append_string(p->temp_path, rel_url + 1); /* skip the / */
++	/* if no second '/' is found, we assume that it was stripped from the uri.path for the special handling
++	 * on windows.
++	 * we do not care about the trailing slash here on windows, as we already ensured it is a directory
++	 *
++	 * TODO: what to do with trailing dots in usernames on windows? they may result in the same directory
++	 *       as a username without them.
++	 */
++	if (NULL != (rel_url = strchr(con->physical.rel_path->ptr + 2, '/'))) {
++		buffer_append_string(p->temp_path, rel_url + 1); /* skip the / */
++	}
+ 	buffer_copy_string_buffer(con->physical.path, p->temp_path);
+ 
+ 	buffer_reset(p->temp_path);

Added: lighttpd/tags/1.4.19-5+lenny2/debian/patches/series
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/patches/series	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/patches/series	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,9 @@
+fastcgi_detach.patch
+ldap_leak_bugfix.patch
+ldap_build_filter_fix.patch
+ldap-deprecated.patch
+ssl-connection-errors.patch
+lighttpd-1.4.x_request_header_memleak.patch -p0
+lighttpd-1.4.x_userdir_lowercase.patch -p0
+lighttpd-1.4.x_rewrite_redirect_decode_url.patch -p0
+ssl-retval-fix.patch

Added: lighttpd/tags/1.4.19-5+lenny2/debian/patches/ssl-connection-errors.patch
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/patches/ssl-connection-errors.patch	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/patches/ssl-connection-errors.patch	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,100 @@
+diff -r ade3eead0e8d -r 82c24356bcd0 NEWS
+--- a/NEWS	Fri Mar 28 16:30:14 2008 +0100
++++ b/NEWS	Fri Mar 28 17:45:28 2008 +0100
+@@ -8,6 +8,7 @@
+   * added support for If-Range: <date> (#1346)
+   * added support for matching $HTTP["scheme"] in configs
+   * fixed initgroups() called after chroot (#1384)
++  * Fix #285 again: read error after SSL_shutdown (thx marton.illes at balabit.com) and clear the error queue before some other calls
+   * fixed case-sensitive check for Auth-Method (#1456)
+   * execute fcgi app without /bin/sh if used as argument to spawn-fcgi (#1428)
+   * fixed a bug that made /-prefixed extensions being handled also when
+diff -r ade3eead0e8d -r 82c24356bcd0 src/connections.c
+--- a/src/connections.c	Fri Mar 28 16:30:14 2008 +0100
++++ b/src/connections.c	Fri Mar 28 17:45:28 2008 +0100
+@@ -199,6 +199,7 @@
+ 
+ 	/* don't resize the buffer if we were in SSL_ERROR_WANT_* */
+ 
++	ERR_clear_error();
+ 	do {
+ 		if (!con->ssl_error_want_reuse_buffer) {
+ 			b = buffer_init();
+@@ -1668,21 +1669,51 @@
+ 			}
+ #ifdef USE_OPENSSL
+ 			if (srv_sock->is_ssl) {
+-				int ret;
++				int ret, ssl_r;
++				unsigned long err;
++				ERR_clear_error();
+ 				switch ((ret = SSL_shutdown(con->ssl))) {
+ 				case 1:
+ 					/* ok */
+ 					break;
+ 				case 0:
+-					SSL_shutdown(con->ssl);
+-					break;
++					ERR_clear_error();
++					if (-1 != (ret = SSL_shutdown(con->ssl))) break;
++
++					/* fall through */
+ 				default:
+-					log_error_write(srv, __FILE__, __LINE__, "sds", "SSL:",
+-							SSL_get_error(con->ssl, ret),
+-							ERR_error_string(ERR_get_error(), NULL));
+-					return -1;
++
++					switch ((ssl_r = SSL_get_error(con->ssl, ret))) {
++					case SSL_ERROR_WANT_WRITE:
++					case SSL_ERROR_WANT_READ:
++						break;
++					case SSL_ERROR_SYSCALL:
++						/* perhaps we have error waiting in our error-queue */
++						if (0 != (err = ERR_get_error())) {
++							do {
++								log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:",
++										ssl_r, ret,
++										ERR_error_string(err, NULL));
++							} while((err = ERR_get_error()));
++						} else {
++							log_error_write(srv, __FILE__, __LINE__, "sddds", "SSL (error):",
++									ssl_r, ret, errno,
++									strerror(errno));
++						}
++	
++						break;
++					default:
++						while((err = ERR_get_error())) {
++							log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:",
++									ssl_r, ret,
++									ERR_error_string(err, NULL));
++						}
++	
++						break;
++					}
+ 				}
+ 			}
++			ERR_clear_error();
+ #endif
+ 
+ 			switch(con->mode) {
+diff -r ade3eead0e8d -r 82c24356bcd0 src/network_openssl.c
+--- a/src/network_openssl.c	Fri Mar 28 16:30:14 2008 +0100
++++ b/src/network_openssl.c	Fri Mar 28 17:45:28 2008 +0100
+@@ -85,6 +85,7 @@
+ 			 *
+ 			 */
+ 
++			ERR_clear_error();
+ 			if ((r = SSL_write(ssl, offset, toSend)) <= 0) {
+ 				unsigned long err;
+ 
+@@ -187,6 +188,7 @@
+ 
+ 				close(ifd);
+ 
++				ERR_clear_error();
+ 				if ((r = SSL_write(ssl, s, toSend)) <= 0) {
+ 					unsigned long err;
+ 

Added: lighttpd/tags/1.4.19-5+lenny2/debian/patches/ssl-retval-fix.patch
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/patches/ssl-retval-fix.patch	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/patches/ssl-retval-fix.patch	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,12 @@
+diff -purN orig/src/network.c lighttpd-1.4.25/src/network.c
+--- orig/src/network.c	2010-01-28 10:43:33.829209750 -0500
++++ lighttpd-1.4.25/src/network.c	2010-01-28 10:44:22.639208732 -0500
+@@ -525,7 +525,7 @@ int network_init(server *srv) {
+ 
+ 		if (!s->ssl_use_sslv2) {
+ 			/* disable SSLv2 */
+-			if (SSL_OP_NO_SSLv2 != SSL_CTX_set_options(s->ssl_ctx, SSL_OP_NO_SSLv2)) {
++			if (!(SSL_OP_NO_SSLv2 & SSL_CTX_set_options(s->ssl_ctx, SSL_OP_NO_SSLv2))) {
+ 				log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
+ 						ERR_error_string(ERR_get_error(), NULL));
+ 				return -1;

Added: lighttpd/tags/1.4.19-5+lenny2/debian/rules
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/rules	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/rules	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,23 @@
+#!/usr/bin/make -f
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/autotools.mk
+include /usr/share/cdbs/1/rules/patchsys-quilt.mk
+
+DEB_CONFIGURE_EXTRA_FLAGS += --libdir=/usr/lib/lighttpd --with-openssl \
+			     --with-kerberos5 --with-pcre --with-bz2   \
+			     --with-ldap --with-mysql --with-memcache  \
+			     --with-lua=lua5.1 --with-gdbm --with-attr \
+			     --with-webdav-locks --with-webdav-props   \
+			     --with-fam
+
+configure/lighttpd::
+	chmod a+x debian/create-mime.assign.pl
+	chmod a+x debian/include-conf-enabled.pl
+	chmod a+x debian/lighty-enable-mod
+	chmod a+x debian/use-ipv6.pl
+
+binary-post-install/lighttpd::
+	rm -f debian/lighttpd/usr/share/man/man1/spawn-fcgi.1*
+	mv debian/lighttpd/usr/bin/spawn-fcgi \
+	    debian/lighttpd/usr/bin/spawn-fcgi.lighttpd

Added: lighttpd/tags/1.4.19-5+lenny2/debian/spawn-fcgi.lighttpd.1
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/spawn-fcgi.lighttpd.1	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/spawn-fcgi.lighttpd.1	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,57 @@
+.TH spawn-fcgi 1
+.SH NAME
+spawn-fcgi - Spawns FastCGI processes
+.SH SYNOPSIS
+.B spawn-fcgi
+\-f <fcgiapp> \-a <addr> \-p port
+.
+.B spawn-fcgi
+\-s <path>
+.SH DESCRIPTION
+\fIspawn-fcgi\fP is used to spawn remote FastCGI processes.
+.SH OPTIONS
+\fIspawn-fcgi\fP accepts the following options:
+.TP 8
+.B  \-h
+General usage instructions
+.TP 8
+.B  \-f <fcgiapp>
+Filename of the FastCGI application to spawn
+.TP 8
+.B  \-a <addr>
+IP address to bind to (for TCP/IP-based IPC)
+.TP 8
+.B  \-p <port>
+TCP port to bind to (for TCP/IP-based IPC)
+.TP 8
+.B  \-s <path>
+Path to the Unix-domain socket to bind to (for Unix sockets-based IPC)
+.TP 8
+.B  \-C <children>
+(PHP only) Number of children to spawn. Defaults to 5.
+.TP 8
+.B  \-F <children>
+Number of children to fork. Defaults to 1.
+.TP 8
+.B  \-P <path>
+Name of the PID file for spawned processes
+.TP 8
+.B  \-n
+No forking should take place (for daemontools)
+.TP 8
+.B  \-v
+Shows version information and exits
+.TP 8
+.B  \-c <dir>
+Chroot to specified directory (can only be invoked by root)
+.TP 8
+.B  \-u
+User ID to change to (can only be invoked by root)
+.TP 8
+.B  \-g
+Group ID to change to (can only be invoked by root)
+.PP
+This program is a part of the Lighttpd web server, \&\fIlighttpd\fR\|(1)
+.SH AUTHOR
+This manual page was written by Gunnar Wolf <gwolf at debian.org>, for
+the Debian GNU/linux system (but may be used by others).

Added: lighttpd/tags/1.4.19-5+lenny2/debian/use-ipv6.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/use-ipv6.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/use-ipv6.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,8 @@
+#! /usr/bin/perl -w
+
+use Socket;
+my $sock;
+
+if (socket($sock, AF_INET6, SOCK_STREAM, 0)) {
+    print "server.use-ipv6 = \"enable\"\n";
+}

Added: lighttpd/tags/1.4.19-5+lenny2/debian/watch
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/debian/watch	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/debian/watch	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,2 @@
+version=3
+http://www.lighttpd.net/download/lighttpd-(.*)\.tar\.gz

Added: lighttpd/tags/1.4.19-5+lenny2/depcomp
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/depcomp	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/depcomp	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,584 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2006-10-15.18
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006 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 2, 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+  stat=$?
+
+  if test -f "$tmpdepfile"; then :
+  else
+    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+    tmpdepfile="$stripped.u"
+  fi
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    outname="$stripped.o"
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  echo "	" >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:


Property changes on: lighttpd/tags/1.4.19-5+lenny2/depcomp
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/distribute.sh.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/distribute.sh.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/distribute.sh.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,85 @@
+#!/bin/sh
+PACKAGE=@PACKAGE_TARNAME@
+VERSION=@VERSION@
+NAME=@PACKAGE_TARNAME at -@VERSION@
+
+DISTDIR="/home/jan/wwwroot/servers/www.lighttpd.net/pages/download/"
+RPMS="/home/jan/rpmbuild/RPMS/i386/${NAME}-1.i386.rpm \
+	/home/jan/rpmbuild/SRPMS/${NAME}-1.src.rpm"
+FILES="${RPMS}	${NAME}.tar.gz \
+	NEWS.html \
+	ChangeLog \
+	release-news.${VERSION}.txt \
+	${NAME}.tar.gz.sig"
+DLURL="http://www.lighttpd.net/download"
+pack=0
+echo $1
+case "$1" in
+	--pack) pack=1;;
+esac
+
+echo ${nopack}
+
+if test x${pack} = x1; then
+	make distcheck && rpmbuild -ta --nodeps ${NAME}.tar.gz
+	gpg --detach-sign ${NAME}.tar.gz
+	rpm --addsign ${RPMS}
+fi
+
+MD5RPM=`md5sum /home/jan/rpmbuild/RPMS/i386/${NAME}-1.i386.rpm| cut -b 1-32`
+MD5SRPM=`md5sum /home/jan/rpmbuild/SRPMS/${NAME}-1.src.rpm| cut -b 1-32`
+MD5TGZ=`md5sum ${NAME}.tar.gz| cut -b 1-32`
+DATE=`date +'%Y-%m-%d %H:%M'`
+NEWS=`cat NEWS | sed "/^- ${VERSION}/,/^-/p;d" | sed "/^- /d;/^$/d"`
+DLNAME="${DLURL}/${NAME}"
+
+cat > release-news.${VERSION}-mail.txt <<EOF
+${PACKAGE} ${VERSION} - ${DATE}
+
+Changes
+-------
+${NEWS}
+
+Download
+- ${NAME}-1.i386.rpm [built on Fedora Core 4]
+  ${DLNAME}-1.i386.rpm
+  MD5: ${MD5RPM}
+- ${NAME}-1.src.rpm
+  ${DLNAME}-1.src.rpm
+  MD5: ${MD5SRPM}
+- ${NAME}.tar.gz
+  ${DLNAME}.tar.gz
+  MD5: ${MD5TGZ}
+  Signature: ${DLNAME}.tar.gz.sig
+
+EOF
+
+cat > release-news.${VERSION}.txt <<EOF
+${PACKAGE} ${VERSION} - ${DATE}
+
+Changes
+-------
+${NEWS}
+
+Checksums
+- ${NAME}-1.i386.rpm [built on Fedora Core 4]
+  MD5: ${MD5RPM}
+- ${NAME}-1.src.rpm
+  MD5: ${MD5SRPM}
+- ${NAME}.tar.gz
+  MD5: ${MD5TGZ}
+
+EOF
+
+rst2html NEWS > NEWS.html
+
+for i in ${DISTDIR}; do
+	cp -u ${FILES} $i
+done
+
+curdir=`pwd`
+cd ~/wwwroot/servers/www.lighttpd.net/
+make put
+cd ${curdir}
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,104 @@
+dist_man1_MANS=lighttpd.1 spawn-fcgi.1
+
+
+DOCS=accesslog.txt \
+authentication.txt \
+cgi.txt \
+compress.txt \
+configuration.txt \
+extforward.txt \
+fastcgi-state.txt \
+fastcgi.txt \
+features.txt \
+performance.txt \
+plugins.txt \
+proxy.txt \
+redirect.txt \
+rewrite.txt \
+secdownload.txt \
+security.txt \
+simple-vhost.txt \
+skeleton.txt \
+ssi.txt \
+ssl.txt \
+state.txt \
+rrdtool.txt \
+alias.txt \
+userdir.txt \
+mysqlvhost.txt \
+access.txt \
+traffic-shaping.txt \
+setenv.txt \
+status.txt \
+scgi.txt \
+cml.txt \
+trigger_b4_dl.txt \
+webdav.txt \
+expire.txt \
+dirlisting.txt \
+evhost.txt \
+magnet.txt
+
+HTMLDOCS=accesslog.html \
+	 authentication.html \
+	 cgi.html \
+	 compress.html \
+	 configuration.html \
+	 extforward.html \
+	 fastcgi-state.html \
+	 fastcgi.html \
+	 features.html \
+	 performance.html \
+	 plugins.html \
+	 proxy.html \
+	 redirect.html \
+	 rewrite.html \
+	 secdownload.html \
+	 security.html \
+	 simple-vhost.html \
+	 skeleton.html \
+	 ssi.html \
+	 ssl.html \
+	 state.html \
+	 rrdtool.html \
+	 alias.html \
+	 userdir.html \
+	 mysqlvhost.html \
+	 access.html \
+	 traffic-shaping.html \
+	 setenv.html \
+	 status.html \
+	 scgi.html \
+	 cml.html \
+	 trigger_b4_dl.html \
+	 webdav.html \
+	 expire.html \
+	 dirlisting.html \
+	 evhost.html \
+	 magnet.html
+
+EXTRA_DIST=lighttpd.conf lighttpd.user \
+	rc.lighttpd rc.lighttpd.redhat sysconfig.lighttpd \
+	rrdtool-graph.sh \
+	state.dot fastcgi-state.dot \
+	spawn-php.sh \
+	newstyle.css \
+	oldstyle.css \
+	$(DOCS)
+
+%.html: %.txt
+	rst2html $^ > $@
+
+
+html: $(HTMLDOCS)
+
+#%.ps.gz: %.ps
+#	gzip $^
+
+#%.ps: %.dot
+#	dot -Tps -o $@ $^
+
+clean-local:
+	rm -f *.html
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,506 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = doc
+DIST_COMMON = $(dist_man1_MANS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(dist_man1_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+dist_man1_MANS = lighttpd.1 spawn-fcgi.1
+DOCS = accesslog.txt \
+authentication.txt \
+cgi.txt \
+compress.txt \
+configuration.txt \
+extforward.txt \
+fastcgi-state.txt \
+fastcgi.txt \
+features.txt \
+performance.txt \
+plugins.txt \
+proxy.txt \
+redirect.txt \
+rewrite.txt \
+secdownload.txt \
+security.txt \
+simple-vhost.txt \
+skeleton.txt \
+ssi.txt \
+ssl.txt \
+state.txt \
+rrdtool.txt \
+alias.txt \
+userdir.txt \
+mysqlvhost.txt \
+access.txt \
+traffic-shaping.txt \
+setenv.txt \
+status.txt \
+scgi.txt \
+cml.txt \
+trigger_b4_dl.txt \
+webdav.txt \
+expire.txt \
+dirlisting.txt \
+evhost.txt \
+magnet.txt
+
+HTMLDOCS = accesslog.html \
+	 authentication.html \
+	 cgi.html \
+	 compress.html \
+	 configuration.html \
+	 extforward.html \
+	 fastcgi-state.html \
+	 fastcgi.html \
+	 features.html \
+	 performance.html \
+	 plugins.html \
+	 proxy.html \
+	 redirect.html \
+	 rewrite.html \
+	 secdownload.html \
+	 security.html \
+	 simple-vhost.html \
+	 skeleton.html \
+	 ssi.html \
+	 ssl.html \
+	 state.html \
+	 rrdtool.html \
+	 alias.html \
+	 userdir.html \
+	 mysqlvhost.html \
+	 access.html \
+	 traffic-shaping.html \
+	 setenv.html \
+	 status.html \
+	 scgi.html \
+	 cml.html \
+	 trigger_b4_dl.html \
+	 webdav.html \
+	 expire.html \
+	 dirlisting.html \
+	 evhost.html \
+	 magnet.html
+
+EXTRA_DIST = lighttpd.conf lighttpd.user \
+	rc.lighttpd rc.lighttpd.redhat sysconfig.lighttpd \
+	rrdtool-graph.sh \
+	state.dot fastcgi-state.dot \
+	spawn-php.sh \
+	newstyle.css \
+	oldstyle.css \
+	$(DOCS)
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-man1: $(man1_MANS) $(man_MANS)
+	@$(NORMAL_INSTALL)
+	test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.1*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+	  else file=$$i; fi; \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    1*) ;; \
+	    *) ext='1' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+	done
+uninstall-man1:
+	@$(NORMAL_UNINSTALL)
+	@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+	for i in $$l2; do \
+	  case "$$i" in \
+	    *.1*) list="$$list $$i" ;; \
+	  esac; \
+	done; \
+	for i in $$list; do \
+	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+	  case "$$ext" in \
+	    1*) ;; \
+	    *) ext='1' ;; \
+	  esac; \
+	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
+	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+	  echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+	  rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+	done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(man1dir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	clean-local distclean distclean-generic distclean-libtool \
+	distdir dvi dvi-am html html-am info info-am install \
+	install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-man1 install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am uninstall uninstall-am uninstall-man uninstall-man1
+
+
+%.html: %.txt
+	rst2html $^ > $@
+
+html: $(HTMLDOCS)
+
+#%.ps.gz: %.ps
+#	gzip $^
+
+#%.ps: %.dot
+#	dot -Tps -o $@ $^
+
+clean-local:
+	rm -f *.html
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/doc/access.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/access.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/access.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,41 @@
+======
+Access
+======
+
+------------------
+Module: mod_access
+------------------
+
+:Author: Allan Wind
+:Date: $Date: 2005/01/30 11:34:32 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  The access module is used to deny access to files with given trailing path names.
+
+.. meta::
+  :keywords: lighttpd, trailing path access control
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+The access module is used to deny access to files with given trailing path names.
+
+Options
+=======
+
+url.access-deny
+  Denies access to all files with any of given trailing path names.
+
+  Default: empty
+
+  Example: ::
+
+    url.access-deny = ( "~", ".inc")
+
+  will deny access to all files ended with a diacritical mark (~) or .inc
+  such as example~ or example.inc.  A trailing diacritical mark is often
+  used by editors for backup files.  And the .inc extension is often used
+  for include files with code.

Added: lighttpd/tags/1.4.19-5+lenny2/doc/accesslog.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/accesslog.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/accesslog.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,126 @@
+=========
+Accesslog
+=========
+
+---------------------
+Module: mod_accesslog
+---------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  The accesslog module ...
+
+.. meta::
+  :keywords: lighttpd, accesslog, CLF
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+CLF like by default, flexible like apache
+
+Options
+=======
+
+accesslog.use-syslog
+  send the accesslog to syslog
+
+  Default: disabled
+
+accesslog.filename
+  name of the file where the accesslog should be written too if syslog
+  is not used.
+
+  if the name starts with a '|' the rest of the name is taken
+  as the name of a process which will be spawn and will get the
+  output
+
+  e.g.: ::
+
+    accesslog.filename = "/var/log/lighttpd.log"
+
+    $HTTP["host"] == "mail.example.org" {
+      accesslog.filename = "|/usr/bin/cronolog"
+    }
+
+  Default: disabled
+
+accesslog.format
+  the format of the logfile
+
+  ====== ================================
+  Option Description
+  ====== ================================
+  %%     a percent sign
+  %h     name or address of remote-host
+  %l     ident name (not supported)
+  %u     authenticated user
+  %t     timestamp for the request-start
+  %r     request-line
+  %s     status code
+  %b     bytes sent for the body
+  %i     HTTP-header field
+  %a     remote address
+  %A     local address
+  %B     same as %b
+  %C     cookie field (not supported)
+  %D     time used in ms (not supported)
+  %e     environment (not supported)
+  %f     phyiscal filename
+  %H     request protocol (HTTP/1.0, ...)
+  %m     request method (GET, POST, ...)
+  %n     (not supported)
+  %o     `response header`_
+  %p     server port
+  %P     (not supported)
+  %q     query string
+  %T     time used in seconds
+  %U     request URL
+  %v     server-name
+  %V     (not supported)
+  %X     connection status
+  %I     bytes incomming
+  %O     bytes outgoing
+  ====== ================================
+
+  If %s is written %>s or %<s the < and the > are ignored. They are support
+  for compat with apache.
+
+  %i and %o expect the name of the field which should be written in curly brackets.
+
+  e.g.: ::
+
+    accesslog.format = "%h %l %u %t \"%r\" %b %>s \"%{User-Agent}i\" \"%{Referer}i\""
+
+  Default: CLF compatible output
+
+Response Header
+---------------
+
+The accesslog module provides a special way to log content from the
+application in a accesslog file. It can be used to log the session id into a
+logfile.
+
+If you want to log it into the accesslog just specify the field-name within
+a %{...}o like ::
+
+  accesslog.format = "%h %l %u %t \"%r\" %b %>s \"%{User-Agent}i\" \"%{Referer}i\" \"%{X-LIGHTTPD-SID}o\""
+
+The prefix ``X-LIGHTTPD-`` is special as every response header starting with
+this prefix is assumed to be special for lighttpd and won't be sent out
+to the client.
+
+An example the use this functionality is provided below: ::
+
+  <?php
+
+  session_start();
+
+  header("X-LIGHTTPD-SID: ".session_id());
+
+  ?>
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/alias.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/alias.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/alias.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,36 @@
+=====
+Alias
+=====
+
+-----------------
+Module: mod_alias
+-----------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/29 09:43:49 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  The alias module ...
+
+.. meta::
+  :keywords: lighttpd, alias
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+The alias module is used to specify a special document-root for a given url-subset.
+
+Options
+=======
+
+alias.url
+  rewrites the document-root for a URL-subset
+
+  Default: empty
+
+  Example: ::
+
+    alias.url = ( "/cgi-bin/" => "/var/www/servers/www.example.org/cgi-bin/" )

Added: lighttpd/tags/1.4.19-5+lenny2/doc/authentication.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/authentication.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/authentication.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,207 @@
+====================
+Using Authentication
+====================
+
+----------------
+Module: mod_auth
+----------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2006-10-04 15:26:23 +0200 (Wed, 04 Oct 2006) $
+:Revision: $Revision: 1371 $
+
+:abstract:
+  The auth module provides ...
+
+.. meta::
+  :keywords: lighttpd, authentication
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+Supported Methods
+-----------------
+
+lighttpd supportes both authentication method described by
+RFC 2617:
+
+basic
+`````
+
+The Basic method transfers the username and the password in
+cleartext over the network (base64 encoded) and might result
+in security problems if not used in conjunction with a crypted
+channel between client and server.
+
+digest
+``````
+
+The Digest method only transfers a hashed value over the
+network which performs a lot of work to harden the
+authentication process in insecure networks.
+
+Backends
+--------
+
+Depending on the method lighttpd provides various way to store
+the credentials used for the authentication.
+
+for basic auth:
+
+- plain_
+- htpasswd_
+- htdigest_
+- ldap_
+
+for digest auth:
+
+- plain_
+- htdigest_
+
+
+plain
+`````
+
+A file which contains username and the cleartext password
+seperated by a colon. Each entry is terminated by a single
+newline.::
+
+  e.g.:
+  agent007:secret
+
+
+htpasswd
+````````
+
+A file which contains username and the crypt()'ed password
+seperated by a colon. Each entry is terminated by a single
+newline. ::
+
+  e.g.:
+  agent007:XWY5JwrAVBXsQ
+
+You can use htpasswd from the apache distribution to manage
+those files. ::
+
+  $ htpasswd lighttpd.user.htpasswd agent007
+
+
+htdigest
+````````
+
+A file which contains username, realm and the md5()'ed
+password seperated by a colon. Each entry is terminated
+by a single newline. ::
+
+  e.g.:
+  agent007:download area:8364d0044ef57b3defcfa141e8f77b65
+
+You can use htdigest from the apache distribution to manage
+those files. ::
+
+  $ htdigest lighttpd.user.htdigest 'download area' agent007
+
+Using md5sum can also generate the password-hash: ::
+
+  #!/bin/sh
+  user=$1
+  realm=$2
+  pass=$3
+
+  hash=`echo -n "$user:$realm:$pass" | md5sum | cut -b -32`
+
+  echo "$user:$realm:$hash"
+
+To use it:
+
+  $ htdigest.sh 'agent007' 'download area' 'secret'
+  agent007:download area:8364d0044ef57b3defcfa141e8f77b65
+
+
+
+ldap
+````
+
+the ldap backend is basically performing the following steps
+to authenticate a user
+
+1. connect anonymously  (at plugin init)
+2. get DN for filter = username
+3. auth against ldap server
+4. disconnect
+
+if all 4 steps are performed without any error the user is
+authenticated
+
+Configuration
+=============
+
+::
+
+  ## debugging
+  # 0 for off, 1 for 'auth-ok' messages, 2 for verbose debugging
+  auth.debug                 = 0
+
+  ## type of backend
+  # plain, htpasswd, ldap or htdigest
+  auth.backend               = "htpasswd"
+
+  # filename of the password storage for
+  # plain
+  auth.backend.plain.userfile = "lighttpd-plain.user"
+
+  ## for htpasswd
+  auth.backend.htpasswd.userfile = "lighttpd-htpasswd.user"
+
+  ## for htdigest
+  auth.backend.htdigest.userfile = "lighttpd-htdigest.user"
+
+  ## for ldap
+  # the $ in auth.backend.ldap.filter is replaced by the
+  # 'username' from the login dialog
+  auth.backend.ldap.hostname = "localhost"
+  auth.backend.ldap.base-dn  = "dc=my-domain,dc=com"
+  auth.backend.ldap.filter   = "(uid=$)"
+  # if enabled, startTLS needs a valid (base64-encoded) CA
+  # certificate
+  auth.backend.ldap.starttls   = "enable"
+  auth.backend.ldap.ca-file   = "/etc/CAcertificate.pem"
+
+  ## restrictions
+  # set restrictions:
+  #
+  # ( <left-part-of-the-url> =>
+  #   ( "method" => "digest"/"basic",
+  #     "realm" => <realm>,
+  #     "require" => "user=<username>" )
+  # )
+  #
+  # <realm> is a string to display in the dialog
+  #         presented to the user and is also used for the
+  #         digest-algorithm and has to match the realm in the
+  #         htdigest file (if used)
+  #
+
+  auth.require = ( "/download/" =>
+                   (
+		     "method"  => "digest",
+		     "realm"   => "download archiv",
+		     "require" => "user=agent007|user=agent008"
+		   ),
+		   "/server-info" =>
+                   (
+		     "method"  => "digest",
+		     "realm"   => "download archiv",
+		     "require" => "valid-user"
+		   )
+                 )
+
+Limitations
+============
+
+- The implementation of digest method is currently not
+  completely compliant with the standard as it still allows
+  a replay attack.
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/cgi.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/cgi.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/cgi.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,50 @@
+===
+CGI
+===
+
+---------------
+Module: mod_cgi
+---------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  The cgi module provides a CGI-conforming interface.
+
+.. meta::
+  :keywords: lighttpd, cgi
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+CGI programs allow you to enhance the functionality of the server in a very
+straight and simple way..
+
+Options
+=======
+
+cgi.assign
+
+  file-extensions that are handled by a CGI program
+
+  e.g.: ::
+
+    cgi.assign = ( ".pl"  => "/usr/bin/perl",
+                   ".cgi" => "/usr/bin/perl" )
+
+Examples
+========
+
+To setup a executable which doesn't need the help of a external program you
+just don't specify a handler for the extension. ::
+
+  cgi.assign = ( ".sh" => "" )
+
+If the file has no extension keep in mind that lighttpd matches not the
+extension itself but the right part of the URL: ::
+
+  cgi.assign = ( "/testfile" => "" )

Added: lighttpd/tags/1.4.19-5+lenny2/doc/cml.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/cml.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/cml.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,261 @@
+=========================
+CML (Cache Meta Language)
+=========================
+
+---------------
+Module: mod_cml
+---------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  CML is a Meta language to describe the dependencies of a page at one side and building a page from its fragments on the other side using LUA.
+
+.. meta::
+  :keywords: lighttpd, cml, lua
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+CML (Cache Meta Language) wants to solves several problems:
+
+ * dynamic content needs caching to perform
+ * checking if the content is dirty inside of the application is usually more expensive than sending out the cached data
+ * a dynamic page is usually fragmented and the fragments have different livetimes
+ * the different fragements can be cached independently
+
+Cache Decision
+--------------
+
+A simple example should show how to a content caching the very simple way in PHP.
+
+jan.kneschke.de has a very simple design:
+
+ * the layout is taken from a template in templates/jk.tmpl
+ * the menu is generated from a menu.csv file
+ * the content is coming from files on the local directory named content-1, content-2 and so on
+
+The page content is static as long non of the those tree items changes. A change in the layout
+is affecting all pages, a change of menu.csv too, a change of content-x file only affects the
+cached page itself.
+
+If we model this in PHP we get: ::
+
+  <?php
+
+  ## ... fetch all content-* files into $content
+  $cachefile = "/cache/dir/to/cached-content";
+
+  function is_cachable($content, $cachefile) {
+    if (!file_exists($cachefile)) {
+      return 0;
+    } else {
+      $cachemtime = filemtime($cachefile);
+    }
+
+    foreach($content as $k => $v) {
+      if (isset($v["file"]) &&
+          filemtime($v["file"]) > $cachemtime) {
+        return 0;
+      }
+    }
+
+    if (filemtime("/menu/menu.csv") > $cachemtime) {
+      return 0;
+    }
+    if (filemtime("/templates/jk.tmpl") > $cachemtime) {
+      return 0;
+    }
+  }
+
+  if (is_cachable(...), $cachefile) {
+    readfile($cachefile);
+    exit();
+  } else {
+    # generate content and write it to $cachefile
+  }
+  ?>
+
+Quite simple. No magic involved. If the one of the files is new than the cached
+content, the content is dirty and has to be regenerated.
+
+Now let take a look at the numbers:
+
+ * 150 req/s for a Cache-Hit
+ * 100 req/s for a Cache-Miss
+
+As you can see the increase is not as good as it could be. The main reason as the overhead
+of the PHP interpreter to start up (a byte-code cache has been used here).
+
+Moving these decisions out of the PHP script into a server module will remove the need
+to start PHP for a cache-hit.
+
+To transform this example into a CML you need 'index.cml' in the list of indexfiles
+and the following index.cml file: ::
+
+  output_contenttype = "text/html"
+
+  b = request["DOCUMENT_ROOT"]
+  cwd = request["CWD"]
+
+  output_include = { b .. "_cache.html" }
+
+  trigger_handler = "index.php"
+
+  if file_mtime(b .. "../lib/php/menu.csv") > file_mtime(cwd .. "_cache.html") or
+     file_mtime(b .. "templates/jk.tmpl")   > file_mtime(cwd .. "_cache.html") or
+     file_mtime(b .. "content.html")        > file_mtime(cwd .. "_cache.html") then
+     return CACHE_MISS
+  else
+     return CACHE_HIT
+  end
+
+Numbers again:
+
+ * 4900 req/s for Cache-Hit
+ *  100 req/s for Cache-Miss
+
+Content Assembling
+------------------
+
+Sometimes the different fragment are already generated externally. You have to cat them together: ::
+
+  <?php
+  readfile("head.html");
+  readfile("menu.html");
+  readfile("spacer.html");
+  readfile("db-content.html");
+  readfile("spacer2.html");
+  readfile("news.html");
+  readfile("footer.html");
+  ?>
+
+We we can do the same several times faster directly in the webserver.
+
+Don't forget: Webserver are built to send out static content, that is what they can do best.
+
+The index.cml for this looks like: ::
+
+  output_contenttype = "text/html"
+
+  cwd = request["CWD"]
+
+  output_include = { cwd .. "head.html",
+                     cwd .. "menu.html",
+                     cwd .. "spacer.html",
+                     cwd .. "db-content.html",
+                     cwd .. "spacer2.html",
+                     cwd .. "news.html",
+                     cwd .. "footer.html" }
+
+  return CACHE_HIT
+
+Now we get about 10000 req/s instead of 600 req/s.
+
+Power Magnet
+------------
+
+Next to all the features about Cache Decisions CML can do more. Starting
+with lighttpd 1.4.9 a power-magnet was added which attracts each request
+and allows you to manipulate the request for your needs.
+
+We want to display a maintainance page by putting a file in a specified
+place:
+
+We enable the power magnet: ::
+
+  cml.power-magnet  = "/home/www/power-magnet.cml"
+
+and create /home/www/power-magnet.cml with: ::
+
+  dr = request["DOCUMENT_ROOT"]
+
+  if file_isreg(dr .. 'maintainance.html') then
+    output_include = { 'maintainance.html' }
+    return CACHE_HIT
+  end
+
+  return CACHE_MISS
+
+For each requested file the /home/www/power-magnet.cml is executed which
+checks if maintainance.html exists in the docroot and displays it
+instead of handling the usual request.
+
+Another example, create thumbnail for requested image and serve it instead
+of sending the big image: ::
+
+  ## image-url is /album/baltic_winter_2005.jpg
+  ## no params -> 640x480 is served
+  ## /album/baltic_winter_2005.jpg/orig for full size
+  ## /album/baltic_winter_2005.jpg/thumb for thumbnail
+
+  dr = request["DOCUMENT_ROOT"]
+  sn = request["SCRIPT_NAME"]
+
+  ## to be continued :) ...
+
+  trigger_handler = '/gen_image.php'
+
+  return CACHE_MISS
+
+
+Installation
+============
+
+You need `lua <http://www.lua.org/>`_ and should install `libmemcache-1.3.x <http://people.freebsd.org/~seanc/libmemcache/>`_ and have to configure lighttpd with: ::
+
+  ./configure ... --with-lua --with-memcache
+
+To use the plugin you have to load it: ::
+
+   server.modules = ( ..., "mod_cml", ... )
+
+Options
+=======
+
+:cml.extension:
+  the file extension that is bound to the cml-module
+:cml.memcache-hosts:
+  hosts for the memcache.* functions
+:cml.memcache-namespace:
+  (not used yet)
+:cml.power-magnet:
+  a cml file that is executed for each request
+
+Language
+========
+
+The language used for CML is provided by `LUA <http://www.lua.org/>`_.
+
+Additionally to the functions provided by lua mod_cml provides: ::
+
+  tables:
+
+  request
+    - REQUEST_URI
+    - SCRIPT_NAME
+    - SCRIPT_FILENAME
+    - DOCUMENT_ROOT
+    - PATH_INFO
+    - CWD
+    - BASEURI
+
+  get
+    - parameters from the query-string
+
+  functions:
+  string md5(string)
+  number file_mtime(string)
+  string memcache_get_string(string)
+  number memcache_get_long(string)
+  boolean memcache_exists(string)
+
+
+What ever your script does, it has to return either CACHE_HIT or CACHE_MISS.
+It case a error occures check the error-log, the user will get a error 500. If you don't like
+the standard error-page use ``server.errorfile-prefix``.
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/compress.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/compress.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/compress.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,66 @@
+==================
+Output Compression
+==================
+
+--------------------
+Module: mod_compress
+--------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/29 09:43:49 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  a nice, short abstrace about the module
+
+.. meta::
+  :keywords: lighttpd, compress
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+Output compression reduces the network load and can improve the overall
+throughput of the webserver.
+
+Only static content is supported up to now.
+
+The server negotiates automaticly which compression method is used.
+Supported are gzip, deflate, bzip.
+
+Options
+=======
+
+compress.cache-dir
+  name of the directory where compressed content will be cached
+
+  e.g.: ::
+
+    compress.cache-dir = "/var/www/cache/"
+
+    # even better with virt-hosting
+    $HTTP["host"] == "docs.example.org" {
+      compress.cache-dir = "/var/www/cache/docs.example.org/"
+    }
+
+  Default: not set, compress the file for every request
+
+compress.filetype
+  mimetypes where might get compressed
+
+  e.g.: ::
+
+    compress.filetype           = ("text/plain", "text/html")
+
+  Default: not set
+
+
+Compressing Dynamic Content
+===========================
+
+To compress dynamic content with PHP please enable ::
+
+  zlib.output_compression = 1
+
+in the php.ini as PHP provides compression support by itself.

Added: lighttpd/tags/1.4.19-5+lenny2/doc/configuration.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/configuration.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/configuration.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,515 @@
+==================
+Configuration File
+==================
+
+------------
+Module: core
+------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2007-11-04 17:53:17 +0100 (Sun, 04 Nov 2007) $
+:Revision: $Revision: 2012 $
+
+:abstract:
+  the layout of the configuration file
+
+.. meta::
+  :keywords: lighttpd, configuration
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+Basic Syntax
+------------
+
+A BNF like notation: ::
+
+  option   : NAME = VALUE
+  merge    : NAME += VALUE
+  NAME     : modulename.key
+  VALUE    : ( <string> | <integer> | <boolean> | <array> | VALUE [ + VALUE ]*)
+  <string> : "text"
+  <integer>: digit*
+  <boolean>: ( "enable" | "disable" )
+  <array>  : "(" [ <string> "=>" ] <value> [, [ <string> "=>" ] <value> ]* ")"
+  INCLUDE  : "include" VALUE
+  INCLUDE_SHELL : "include_shell" STRING_VALUE
+
+Example
+-------
+
+::
+
+  # default document-root
+  server.document-root = "/var/www/example.org/pages/"
+
+  # TCP port
+  server.port = 80
+
+  # selecting modules
+  server.modules = ( "mod_access", "mod_rewrite" )
+
+  # variables, computed when config is read.
+  var.mymodule = "foo"
+  server.modules += ( "mod_" + var.mymodule )
+  # var.PID is initialised to the pid of lighttpd before config is parsed
+
+  # include, relative to dirname of main config file
+  include "mime.types.conf"
+
+  # read configuration from output of a command
+  include_shell "/usr/local/bin/confmimetype /etc/mime.types"
+
+
+Conditional Configuration
+=========================
+
+Most options can be configured conditionally by using the following syntax
+(including nesting).
+
+::
+
+  <field> <operator> <value> {
+    ...
+    <field> <operator> <value> {
+      ... nesting: match only when parent match
+    }
+  }
+  else <field> <operator> <value> {
+    ... the "else if" block
+  }
+
+where <field> is one of one of the following:
+
+$HTTP["cookie"]
+  match on cookie
+$HTTP["scheme"]
+  match on scheme
+$HTTP["host"]
+  match on host
+$HTTP["useragent"]
+  match on useragent
+$HTTP["referer"]
+  match on referer
+$HTTP["url"]
+  match on url
+$HTTP["remoteip"]
+  match on the remote IP or a remote Network
+$SERVER["socket"]
+  match on socket. Value must be on the format "ip:port" where ip is an IP
+  address and port a port number. Only equal match (==) is supported.
+  It also binds the daemon to this socket. Use this if you want to do IP/port-
+  based virtual hosts.
+
+<operator> is one of:
+
+==
+  string equal match
+!=
+  string not equal match
+=~
+  perl style regular expression match
+!~
+  perl style regular expression not match
+
+and <value> is either a quoted ("") literal string or regular expression.
+
+
+Example
+-------
+
+::
+
+  # disable directory-listings for /download/*
+  dir-listing.activate = "enable"
+  $HTTP["url"] =~ "^/download/" {
+    dir-listing.activate = "disable"
+  }
+
+  # handish virtual hosting
+  # map all domains of a top-level-domain to a single document-root
+  $HTTP["host"] =~ "(^|\.)example\.org$" {
+    server.document-root = "/var/www/htdocs/example.org/pages/"
+  }
+
+  # multiple sockets
+  $SERVER["socket"] == "127.0.0.1:81" {
+    server.document-root = "..."
+  }
+
+  $SERVER["socket"] == "127.0.0.1:443" {
+    ssl.pemfile = "/var/www/certs/localhost.pem"
+    ssl.engine = "enable"
+
+    server.document-root = "/var/www/htdocs/secure.example.org/pages/"
+  }
+
+  # deny access for all googlebot
+  $HTTP["useragent"] =~ "Google" {
+    url.access-deny = ( "" )
+  }
+
+  # deny access for all image stealers
+  $HTTP["referer"] !~ "^($|http://www\.example\.org)" {
+    url.access-deny = ( ".jpg", ".jpeg", ".png" )
+  }
+
+  # deny the access to www.example.org to all user which
+  # are not in the 10.0.0.0/8 network
+  $HTTP["host"] == "www.example.org" {
+    $HTTP["remoteip"] != "10.0.0.0/8" {
+     url.access-deny = ( "" )
+    }
+  }
+
+Using variables
+===============
+
+You can set your own variables in the configuration to simplify your config.
+::
+
+  var.basedir = "/home/www/servers/"
+  $HTTP["host"] == "www.example.org" {
+     server.name = "www.example.org"
+     include "incl-base.conf"
+  }
+
+  in incl-base.conf:
+  server.document-root = basedir + server.name + "/pages/"
+  accesslog.filename   = basedir + server.name + "/logs/access.log"
+
+You can also use environement variables or the default variables var.PID and
+var.CWD: ::
+
+  var.basedir = env.LIGHTTPDBASE
+
+  $HTTP["host"] == "www.example.org" {
+     server.name = "www.example.org"
+     include "incl-base.conf"
+     include "incl-fastcgi.conf"
+  }
+
+  in incl-fastcgi.conf:
+  fastcgi.server = ( ... => ((
+     "socket" => basedir + server.name + "/tmp/fastcgi-" + PID + ".sock"
+  )) )
+
+Or like the lighttpd script for rails does:
+
+  var.basedir = var.CWD
+
+  server.document-root = basedir + "/public/"
+
+Global context
+==============
+
+::
+
+  global {
+    ...
+  }
+
+You don't need it in the main configuration file. But you might have
+difficulty setting server wide configuration inside a included-file from
+conditionals.
+
+Example
+-------
+
+::
+
+  in lighttpd.conf:
+  server.modules = ()
+  $HTTP["host"] == "www.example.org" {
+    include "incl-php.conf"
+  }
+
+  in incl-php.conf:
+  global {
+    server.modules += ("mod_fastcgi")
+    static-file.exclude-extensions += (".php")
+  }
+  fastcgi.server = "..."
+
+Options
+=======
+
+server module
+-------------
+
+main sections
+`````````````
+
+server.document-root
+  document-root of the webserver
+
+  This variable has the specified as it will be used for all requests
+  without a Host: header and for all with a know hostname which you
+  might have specified with one of the above conditionals.
+
+  Default: no default, required
+
+server.bind
+  IP address, hostname or absolute path to the unix-domain socket the server
+  listen on.
+
+  Default: bind to all interfaces
+
+  Example: ::
+
+    server.bind = "127.0.0.1"
+    server.bind = "www.example.org"
+    server.bind = "/tmp/lighttpd.socket"
+
+server.port
+  tcp-port to bind the server to
+
+.. note:: port belows 1024 require root-permissions
+
+  Default: 80 (443 if ssl is enabled)
+
+server.use-ipv6
+  bind to the IPv6 socket
+
+server.tag
+  set the string returned by the Server: response header
+
+  Default: lighttpd <current-version>
+
+server.errorlog
+  pathname of the error-log
+
+  Default: either STDERR or ``server.errorlog-use-syslog``
+
+server.errorlog-use-syslog
+  send errorlog to syslog
+
+  Default: disabled
+
+server.chroot
+  root-directory of the server
+
+  NOTE: requires root-permissions
+
+server.username
+  username used to run the server
+
+  NOTE: requires root-permissions
+
+server.groupname
+  groupname used to run the server
+
+  NOTE: requires root-permissions
+
+server.follow-symlink
+  allow to follow-symlinks
+
+  Default: enabled
+
+index-file.names
+  list of files to search for if a directory is requested
+  e.g.: ::
+
+    index-file.names          = ( "index.php", "index.html",
+                                  "index.htm", "default.htm" )
+
+  if a name starts with slash this file will be used a index generator
+  for all directories.
+
+server.modules
+  modules to load
+
+.. note:: the order of the modules is important.
+
+  The modules are executed in the order as they are specified. Loading
+  mod_auth AFTER mod_fastcgi might disable authentication for fastcgi
+  backends (if check-local is disabled).
+
+  As auth should be done first, move it before all executing modules (like
+  proxy, fastcgi, scgi and cgi).
+
+  rewrites, redirects and access should be first, followed by auth and
+  the docroot plugins.
+
+  Afterwards the external handlers like fastcgi, cgi, scgi and proxy and
+  at the bottom the post-processing plugins like mod_accesslog.
+
+  e.g.: ::
+
+    server.modules          = ( "mod_rewrite",
+                                "mod_redirect",
+				"mod_alias",
+			        "mod_access",
+				"mod_auth",
+                                "mod_status",
+				"mod_simple_vhost",
+				"mod_evhost",
+				"mod_userdir",
+				"mod_secdownload",
+				"mod_fastcgi",
+				"mod_proxy",
+				"mod_cgi",
+                                "mod_ssi",
+				"mod_compress",
+                                "mod_usertrack",
+				"mod_expire",
+ 				"mod_rrdtool",
+				"mod_accesslog" )
+
+  Starting with lighttpd 1.4.0 three default modules are loaded automaticly:
+
+  - mod_indexfile
+  - mod_dirlisting
+  - mod_staticfile
+
+server.event-handler
+  set the event handler
+
+  Default: "poll"
+
+server.pid-file
+  set the name of the .pid-file where the PID of the server should be placed.
+  This option is used in combination with a start-script and the daemon mode
+
+  Default: not set
+
+server.max-request-size
+  maximum size in kbytes of the request (header + body). Only applies to POST
+  requests.
+
+  Default: 2097152 (2GB)
+
+server.max-worker
+  number of worker processes to spawn. This is usually only needed on servers
+  which are fairly loaded and the network handler calls delay often (e.g. new
+  requests are not handled instantaneously).
+
+  Default: 0
+
+server.name
+  name of the server/virtual server
+
+  Default: hostname
+
+server.max-keep-alive-requests
+  maximum number of request within a keep-alive session before the server
+  terminates the connection
+
+  Default: 128
+
+server.max-keep-alive-idle
+  maximum number of seconds until a idling keep-alive connection is droped
+
+  Default: 30
+
+server.max-read-idle
+  maximum number of seconds until a waiting, non keep-alive read times out
+  and closes the connection
+
+  Default: 60
+
+server.max-write-idle
+  maximum number of seconds until a waiting write call times out and closes
+  the connection
+
+  Default: 360
+
+server.error-handler-404
+  uri to call if the requested file results in a 404
+
+  Default: not set
+
+  Example: ::
+
+    server.error-handler-404 = "/error-404.php"
+
+server.protocol-http11
+  defines if HTTP/1.1 is allowed or not.
+
+  Default: enabled
+
+server.range-requests
+  defines if range requests are allowed or not.
+
+  Default: enabled
+
+
+SSL engine
+``````````
+
+ssl.pemfile
+  path to the PEM file for SSL support
+
+debugging
+`````````
+
+debug.dump-unknown-headers
+  enables listing of internally unhandled HTTP-headers
+
+  e.g. ::
+
+    debug.dump-unknown-headers = "enable"
+
+mimetypes
+`````````
+
+mimetype.assign
+  list of known mimetype mappings
+  NOTE: if no mapping is given "application/octet-stream" is used
+
+  e.g.: ::
+
+    mimetype.assign   = ( ".png"  => "image/png",
+                          ".jpg"  => "image/jpeg",
+                          ".jpeg" => "image/jpeg",
+			  ".html" => "text/html",
+  			  ".txt"  => "text/plain" )
+
+  The list is compared top down and the first match is taken. This is
+  important if you have matches like: ::
+
+                          ".tar.gz" => "application/x-tgz",
+			  ".gz" => "application/x-gzip",
+
+  If you want to set another default mimetype use: ::
+
+                          ...,
+                          "" => "text/plain" )
+
+  as the last entry in the list.
+
+mimetype.use-xattr
+  If available, use the XFS-style extended attribute interface to
+  retrieve the "Content-Type" attribute on each file, and use that as the
+  mime type. If it's not defined or not available, fall back to the
+  mimetype.assign assignment.
+
+  e.g.: ::
+
+    mimetype.use-xattr = "enable"
+
+    on shell use:
+
+    $ attr -s Content-Type -V image/svg svgfile.svg
+
+    or
+
+    $ attr -s Content-Type -V text/html indexfile
+
+
+debugging
+`````````
+
+debug.log-request-header
+  default: disabled
+
+debug.log-response-header
+  default: disabled
+
+debug.log-file-not-found
+  default: disabled
+
+debug.log-request-handling
+  default: disabled

Added: lighttpd/tags/1.4.19-5+lenny2/doc/dirlisting.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/dirlisting.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/dirlisting.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,82 @@
+==================
+Directory Listings
+==================
+
+----------------------
+Module: mod_dirlisting
+----------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  mod_dirlisting generates HTML based directory listings with full CSS
+  control
+
+.. meta::
+  :keywords: lighttpd, directory listings, dirlisting
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+mod_dirlisting is one of the modules which is loaded by default and don't have to
+be specified on server.modules to work.
+
+A directory listing is generated if a directory is requested and no index-file
+was found in that directory.
+
+To enable directory listings globally: ::
+
+  dir-listing.activate = "enable"
+
+If you need it only for a directory, use conditionals: ::
+
+  $HTTP["url"] =~ "^/download($|/)" {
+    dir-listing.activate = "enable"
+  }
+
+You can also use a external generator for directory listings if you use
+mod_indexfile. ::
+
+  index-file.names = ( "/dir-generator.php" )
+
+If a directory is requested the dir-generator.php is called instead which can
+take the REQUEST_URI to see which directory was requested.
+
+For large folders this is highly recommend.
+
+Options
+=======
+
+dir-listing.activate
+  enables virtual directory listings if a directory is requested no
+  index-file was found
+
+  Default: disabled
+
+dir-listing.hide-dotfiles
+  if enabled, does not list hidden files in directory listings generated
+  by the dir-listing option.
+
+  Default: enabled
+
+dir-listing.external-css
+  path to an external css stylesheet for the directory listing
+
+dir-listing.exclude
+  list of regular expressions.  Files that match any of the specified regular
+  expressions will be excluded from directory listings.
+
+dir-listing.encoding
+  set a encoding for the generated directory listing
+
+  If you file-system is not using ASCII you have to set the encoding of
+  the filenames as they are put into the HTML listing AS IS (with XML
+  encoding)
+
+  Example: ::
+
+    dir-listing.encoding = "utf-8"

Added: lighttpd/tags/1.4.19-5+lenny2/doc/evhost.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/evhost.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/evhost.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,45 @@
+========================
+Enhanced Virtual-Hosting
+========================
+
+------------------
+Module: mod_evhost
+------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/29 09:43:49 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  virtual hosting
+
+.. meta::
+  :keywords: lighttpd, virtual hosting
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+mod_evhost builds the document-root based on a pattern which contains
+wildcards. Those wildcards can represent parts if the submitted hostname
+
+
+::
+
+  %% => % sign
+  %0 => domain name + tld
+  %1 => tld
+  %2 => domain name without tld
+  %3 => subdomain 1 name
+  %4 => subdomain 2 name
+
+  evhost.path-pattern = "/home/www/servers/%3/pages/"
+
+Options
+=======
+
+evhost.path-pattern
+  pattern with wildcards to be replace to build a documentroot
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/expire.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/expire.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/expire.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,42 @@
+===============================================
+Controlling the Expiration of Content in Caches
+===============================================
+
+------------------
+Module: mod_expire
+------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  mod_expire controls the setting of the the Expire Response header
+
+.. meta::
+  :keywords: lighttpd, expire
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+mod_expire controls the Expire header in the Response Header of HTTP/1.0
+messages. It is usefull to set it for static files which should be cached
+aggressivly like images, stylesheets or similar.
+
+Options
+=======
+
+expire.url
+  assignes a expiration to all files below the specified path. The
+  specification of the time is made up of: ::
+
+    <access|modification> <number> <years|months|days|hours|minutes|seconds>
+
+  following the syntax used by mod_expire in Apache 1.3.x and later.
+
+  Example: ::
+
+    expire.url = ( "/images/" => "access 1 hour" )
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/extforward.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/extforward.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/extforward.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,96 @@
+==============
+mod_extforward
+==============
+
+.. contents::
+
+Overview
+========
+
+Comman Kang <comman.kang at gmail.com> sent me: ::
+
+  Hello jan.
+
+       I've made something rough but similar to mod_extract_forwarded for
+  Apache.  This module will extract the client's "real" ip from
+  X-Forwarded-For header which is added by squid or other proxies. It might be
+  useful for servers behind reverse proxy servers.
+
+       However, this module is causing segfault with mod_ssl or
+  $HTTP{''socket"} directive,  crashing in config_check_cond while patching
+  connection ,  I do not understand architecture of the lighttpd well, does it
+  need to call patch_connection in either handle_request_done and
+  connection_reset ?
+
+Lionel Elie Mamane <lionel at mamane.lu> improved the patch: ::
+
+    I've taken lighttpd-1.4.10-mod_extforward.c from the wiki and I've
+  extended it. Here is the result.
+
+  Major changes:
+
+   - IPv6 support
+
+   - Fixed at least one segfault with SERVER['socket']
+
+   - Arrange things so that a url.access-deny under scope of a
+     HTTP['remoteip'] condition works well :)
+
+  I've commented the code in some places, mostly where I wasn't sure
+  what was going on, or I didn't see what the original author meant to
+  do.
+
+Options
+=======
+
+extforward.forwarder
+  Sets trust level of proxy IP's.
+
+  Default: empty
+
+  Example: ::
+    
+    extforward.forwarder = ("10.0.0.232" => "trust")
+
+  will translate ip addresses coming from 10.0.0.232 to real ip addresses extracted from X-Forwarded-For: HTTP request header.
+
+Note
+=======
+
+The effect of this module is variable on $HTTP["remotip"] directives and other module's remote ip dependent actions.
+Things done by modules before we change the remoteip or after we reset it will match on the proxy's IP.
+Things done in between these two moments will match on the real client's IP.
+The moment things are done by a module depends on in which hook it does things and within the same hook
+on whether they are before/after us in the module loading order
+(order in the server.modules directive in the config file).
+
+Tested behaviours:
+
+  mod_access: Will match on the real client.
+
+  mod_accesslog:
+   In order to see the "real" ip address in access log ,
+   you'll have to load mod_extforward after mod_accesslog.
+   like this: ::
+
+    server.modules  = (
+       .....
+       mod_accesslog,
+       mod_extforward
+    )
+
+Samples
+=======
+
+Trust proxy 10.0.0.232 and 10.0.0.232 ::
+
+  extforward.forwarder = (
+     "10.0.0.232" => "trust",
+     "10.0.0.233" => "trust",
+  )
+
+Trust all proxies  (NOT RECOMMENDED!) ::
+
+  extforward.forwarder = ( "all" => "trust")
+
+Note that "all" has precedence over specific entries, so "all except" setups will not work.

Added: lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi-state.dot
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi-state.dot	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi-state.dot	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,6 @@
+digraph fcgistate {
+  init -> connect -> prepwrite -> write -> read -> close
+  write -> write
+  read -> read
+  connect -> connect
+}

Added: lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi-state.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi-state.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi-state.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,51 @@
+=================
+FastCGI Internals
+=================
+
+---------------
+Module: fastcgi
+---------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/01 07:01:29 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  This is a short summary of the state-engine which is driving the FastCGI
+  module. It describes the basic concepts and the way the different parts
+  of the module are connected.
+
+.. meta::
+  :keywords: lighttpd, state-engine, fastcgi
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+States
+------
+
+The state-engine is currently made of 6 states which are walk-through on
+the way each connection.
+
+:init:
+  prepare fastcgi-connection
+:connect:
+  waiting for a connection
+:prepwrite:
+  build the fastcgi-request
+:write:
+  write the fastcgi-request to the network
+:read:
+  read fastcgi-response from network and push it to the write-queue
+:close:
+  terminate the connection
+
+.. image:: fastcgi-state.png
+
+Delays
+------
+
+connect, write and read may need to wait for an fdevent. That's the reason
+for the loop in the state-diagram.

Added: lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/fastcgi.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,606 @@
+=====================
+the FastCGI Interface
+=====================
+
+-------------------
+Module: mod_fastcgi
+-------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.3 $
+
+:abstract:
+  The FastCGI interface is the fastest and most secure way
+  to interface external process-handlers like Perl, PHP and
+  your self-written applications.
+
+.. meta::
+  :keywords: lighttpd, FastCGI
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+lighttpd provides an interface to a external programs that
+support the FastCGI interface. The FastCGI Interface is
+defined by http://www.fastcgi.com/ and is a
+platform-independent and server independent interface between
+a web-application and a webserver.
+
+This means that FastCGI programs that run with the Apache
+Webserver will run seamlessly with lighttpd and vice versa.
+
+
+FastCGI
+-------
+
+FastCGI is removes a lot of the limitations of CGI programs.
+CGI programs have the problem that they have to be restarted
+by the webserver for every request which leads to really bad
+performance values.
+
+FastCGI removes this limitation by keeping the process running
+and handling the requests by this always running process. This
+removes the time used for the fork() and the overall startup
+and cleanup time which is necessary to create and destroy a
+process.
+
+While CGI programs communicate to the server over pipes,
+FastCGI processes use Unix-Domain-Sockets or TCP/IP to talk
+with the webserver. This gives you the second advantage over
+simple CGI programs: FastCGI don't have to run on the Webserver
+itself but everywhere in the network.
+
+lighttpd takes it a little bit further by providing a internal
+FastCGI load-balancer which can be used to balance the load
+over multiple FastCGI Servers. In contrast to other solutions
+only the FastCGI process has to be on the cluster and not the
+whole webserver. That gives the FastCGI process more resources
+than a e.g. load-balancer+apache+mod_php solution.
+
+If you compare FastCGI against a apache+mod_php solution you
+should note that FastCGI provides additional security as the
+FastCGI process can be run under different permissions that
+the webserver and can also live a chroot which might be
+different than the one the webserver is running in.
+
+Options
+=======
+
+lighttpd provides the FastCGI support via the fastcgi-module
+(mod_fastcgi) which provides 2 options in the config-file:
+
+fastcgi.debug
+  a value between 0 and 65535 to set the debug-level in the
+  FastCGI module. Currently only 0 and 1 are used. Use 1 to
+  enable some debug output, 0 to disable it.
+
+fastcgi.map-extensions
+  map multiple extensions to the same fastcgi server
+
+  Example: ::
+
+    fastcgi.map-extensions = ( ".php3" => ".php" )
+
+fastcgi.server
+  tell the module where to send FastCGI requests to. Every
+  file-extension can have it own handler. Load-Balancing is
+  done by specifying multiple handles for the same extension.
+
+  structure of fastcgi.server section: ::
+
+    ( <extension> =>
+      (
+        ( "host" => <string> ,
+          "port" => <integer> ,
+	  "socket" => <string>,       # either socket
+	                              # or host+port
+	  "bin-path" => <string>,     # OPTIONAL
+	  "bin-environment" => <array>, # OPTIONAL
+	  "bin-copy-environment" => <array>, # OPTIONAL
+          "mode" => <string>,         # OPTIONAL
+          "docroot" => <string> ,     # OPTIONAL if "mode"
+	                              # is not "authorizer"
+          "check-local" => <string>,  # OPTIONAL
+	  "min-procs" => <integer>,   # OPTIONAL
+	  "max-procs" => <integer>,   # OPTIONAL
+	  "max-load-per-proc" => <integer>, # OPTIONAL
+	  "idle-timeout" => <integer>, # OPTIONAL
+	  "broken-scriptfilename" => <boolean>, # OPTIONAL
+          "disable-time" => <integer>, # optional
+          "allow-x-send-file" => <boolean> # optional
+	),
+        ( "host" => ...
+        )
+      )
+    )
+
+  :<extension>: is the file-extension or prefix
+                (if started with "/")
+  :"host":      is hostname/ip of the FastCGI process
+  :"port":      is tcp-port on the "host" used by the FastCGI
+                process
+  :"bin-path":  path to the local FastCGI binary which should be
+                started if no local FastCGI is running
+  :"socket":    path to the unix-domain socket
+  :"mode":      is the FastCGI protocol mode.
+                Default is "responder", also "authorizer"
+		mode is implemented.
+  :"docroot":   is optional and is the docroot on the remote
+                host for default "responder" mode. For
+		"authorizer" mode it is MANDATORY and it points
+		to docroot for authorized requests. For security
+		reasons it is recommended to keep this docroot
+                outside of server.document-root tree.
+  :"check-local": is optional and may be "enable" (default) or
+                "disable". If enabled the server first check
+		for a file in local server.document-root tree
+		and return 404 (Not Found) if no such file.
+                If disabled, the server forward request to
+		FastCGI interface without this check.
+  :"broken-scriptfilename": breaks SCRIPT_FILENAME in a wat that
+                PHP can extract PATH_INFO from it (default: disabled)
+  :"disable-time": time to wait before a disabled backend is checked
+                again
+  :"allow-x-send-file": controls if X-LIGHTTPD-send-file headers
+                are allowed
+
+  If bin-path is set:
+
+  :"min-procs": sets the minium processes to start
+  :"max-procs": the upper limit of the processess to start
+  :"max-load-per-proc": maximum number of waiting processes on
+                average per process before a new process is
+                spawned
+  :"idle-timeout": number of seconds before a unused process
+                gets terminated
+  :"bin-environment": put an entry into the environment of
+                the started process
+  :"bin-copy-environement": clean up the environment and copy
+                only the specified entries into the fresh
+                environment of the spawn process
+
+
+Examples
+--------
+
+  Multiple extensions for the same host ::
+
+    fastcgi.server = ( ".php" =>
+      (( "host" => "127.0.0.1",
+         "port" => 1026,
+	 "bin-path" => "/usr/local/bin/php"
+      )),
+      ".php4" =>
+      (( "host" => "127.0.0.1",
+	 "port" => 1026
+      ))
+    )
+
+  Example with prefix: ::
+
+    fastcgi.server = ( "/remote_scripts/" =>
+      (( "host" => "192.168.0.3",
+	 "port" => 9000,
+         "check-local" => "disable",
+         "docroot" => "/" # remote server may use
+	                  # it's own docroot
+      ))
+    )
+
+  The request `http://my.host.com/remote_scripts/test.cgi` will
+  be forwarded to fastcgi server at 192.168.0.3 and the value
+  "/remote_scripts/test.cgi" will be used for the SCRIPT_NAME
+  variable. Remote server may prepend it with its own
+  document root. The handling of index files is also the
+  resposibility of remote server for this case.
+
+  In the case that the prefix is not terminated with a slash
+  the prefix will be handled as file and /test.cgi would become
+  a PATH_INFO instead of part of SCRIPT_NAME.
+
+
+  Example for "authorizer" mode: ::
+
+    fastcgi.server = ( "/remote_scripts/" =>
+      (( "host" => "10.0.0.2",
+	 "port" => 9000,
+         "docroot" => "/path_to_private_docs",
+         "mode" => "authorizer"
+      ))
+    )
+
+  Note that if "docroot" is specified then its value will be
+  used in DOCUMENT_ROOT and SCRIPT_FILENAME variables passed
+  to FastCGI server.
+
+Load-Balancing
+==============
+
+The FastCGI plugin provides automaticly a load-balancing between
+multiple FastCGI servers. ::
+
+  fastcgi.server = ( ".php" =>
+     (( "host" => "10.0.0.2", "port" => 1030 ),
+      ( "host" => "10.0.0.3", "port" => 1030 ))
+    )
+
+
+To understand how the load-balancing works you can enable the
+fastcgi.debug option and will get a similar output as here: ::
+
+  proc: 127.0.0.1 1031  1 1 1 31454
+  proc: 127.0.0.1 1028  1 1 1 31442
+  proc: 127.0.0.1 1030  1 1 1 31449
+  proc: 127.0.0.1 1029  1 1 2 31447
+  proc: 127.0.0.1 1026  1 1 2 31438
+  got proc: 34 31454
+  release proc: 40 31438
+  proc: 127.0.0.1 1026  1 1 1 31438
+  proc: 127.0.0.1 1028  1 1 1 31442
+  proc: 127.0.0.1 1030  1 1 1 31449
+  proc: 127.0.0.1 1031  1 1 2 31454
+  proc: 127.0.0.1 1029  1 1 2 31447
+
+Even if this for multiple FastCGI children on the local machine
+the following explaination is valid for remote connections too.
+
+The output shows:
+
+- IP, port, unix-socket (is empty here)
+- is-local, state (0 - unset, 1 - running, ... )
+- active connections (load)
+- PID
+
+As you can see the list is always sorted by the load field.
+
+Whenever a new connection is requested, the first entry (the one
+with the lowest load) is selected, the load is increased (got proc: ...)
+and the list is sorted again.
+
+If a FastCGI request is done or the connection is dropped, the load on the
+FastCGI proc decreases and the list is sorted again (release proc: ...)
+
+This behaviour is very light-weight in code and still very efficient
+as it keeps the fastcgi-servers equally loaded even if they have different
+CPUs.
+
+Adaptive Process Spawning
+=========================
+
+.. note:: This feature is disabled in 1.3.14 again. min-procs is
+          ignored in that release
+
+Starting with 1.3.8 lighttpd can spawn processes on demand if
+a bin-path is specified and the FastCGI process runs locally.
+
+If you want to have a least one FastCGI process running and
+more of the number of requests increases you can use min-procs
+and max-procs.
+
+A new process is spawned as soon as the average number of
+requests waiting to be handle by a single process increases the
+max-load-per-proc setting.
+
+The idle-timeout specifies how long a fastcgi-process should wait
+for a new request before it kills itself.
+
+Example
+-------
+::
+
+  fastcgi.server = ( ".php" =>
+    (( "socket" => "/tmp/php.socket",
+       "bin-path" => "/usr/local/bin/php",
+       "min-procs" => 1,
+       "max-procs" => 32,
+       "max-load-per-proc" => 4,
+       "idle-timeout" => 20
+    ))
+   )
+
+Disabling Adaptive Spawning
+---------------------------
+
+Adaptive Spawning is a quite new feature and it might misbehave
+for your setup. There are several ways to control how the spawing
+is done:
+
+1. ``"max-load-per-proc" => 1``
+   if that works for you, great.
+
+2. If not set ``min-procs == max-procs``.
+
+3. For PHP you can also use: ::
+
+     $ PHP_FCGI_CHILDREN=384 ./lighttpd -f ./lighttpd.conf
+
+     fastcgi.server = ( ".php" =>
+  	(( "socket" => "/tmp/php.socket",
+           "bin-path" => "/usr/local/bin/php",
+           "min-procs" => 1,
+	   "max-procs" => 1,
+           "max-load-per-proc" => 4,
+           "idle-timeout" => 20
+        ))
+      )
+
+   It will create one socket and let's PHP create the 384 processes itself.
+
+4. If you don't want lighttpd to manage the fastcgi processes, remove the
+   bin-path and use spawn-fcgi to spawn them itself.
+
+
+FastCGI and Programming Languages
+=================================
+
+Preparing PHP as a FastCGI program
+----------------------------------
+
+One of the most important application that has a FastCGI
+interface is php which can be downloaded from
+http://www.php.net/ . You have to recompile the php from
+source to enable the FastCGI interface as it is normally
+not enabled by default in the distributions.
+
+If you already have a working installation of PHP on a
+webserver execute a small script which just contains ::
+
+  <?php phpinfo(); ?>
+
+and search for the line in that contains the configure call.
+You can use it as the base for the compilation.
+
+You have to remove all occurences of `--with-apxs`, `--with-apxs2`
+and the like which would build PHP with Apache support.  Add the
+next three switches to compile PHP with FastCGI support::
+
+  $ ./configure \
+    --enable-fastcgi \
+    --enable-force-cgi-redirect \
+    ...
+
+After compilation and installation check that your PHP
+binary contains FastCGI support by calling: ::
+
+  $ php -v
+  PHP 4.3.3RC2-dev (cgi-fcgi) (built: Oct 19 2003 23:19:17)
+
+The important part is the (cgi-fcgi).
+
+
+Starting a FastCGI-PHP
+----------------------
+
+Starting with version 1.3.6 lighttpd can spawn the FastCGI
+processes locally itself if necessary: ::
+
+  fastcgi.server = ( ".php" =>
+    (( "socket" => "/tmp/php-fastcgi.socket",
+       "bin-path" => "/usr/local/bin/php"
+    ))
+  )
+
+PHP provides 2 special environment variables which control the number of
+spawned workes under the control of a single watching process
+(PHP_FCGI_CHILDREN) and the number of requests what a single worker
+handles before it kills itself. ::
+
+  fastcgi.server = ( ".php" =>
+     (( "socket" => "/tmp/php-fastcgi.socket",
+        "bin-path" => "/usr/local/bin/php",
+        "bin-environment" => (
+          "PHP_FCGI_CHILDREN" => "16",
+          "PHP_FCGI_MAX_REQUESTS" => "10000"
+        )
+     ))
+   )
+
+To increase the security of the started process you should only pass
+the necessary environment variables to the FastCGI process. ::
+
+  fastcgi.server = ( ".php" =>
+     (( "socket" => "/tmp/php-fastcgi.socket",
+        "bin-path" => "/usr/local/bin/php",
+        "bin-environment" => (
+           "PHP_FCGI_CHILDREN" => "16",
+           "PHP_FCGI_MAX_REQUESTS" => "10000" ),
+        "bin-copy-environment" => (
+	   "PATH", "SHELL", "USER" )
+     ))
+   )
+
+Configuring PHP
+---------------
+
+If you want to use PATH_INFO and PHP_SELF in you PHP scripts you have to
+configure php and lighttpd. The php.ini needs the option: ::
+
+  cgi.fix_pathinfo = 1
+
+and the option ``broken-scriptfilename`` in your fastcgi.server config: ::
+
+  fastcgi.server = ( ".php" =>
+     (( "socket" => "/tmp/php-fastcgi.socket",
+        "bin-path" => "/usr/local/bin/php",
+        "bin-environment" => (
+          "PHP_FCGI_CHILDREN" => "16",
+          "PHP_FCGI_MAX_REQUESTS" => "10000" ),
+        "bin-copy-environment" => (
+          "PATH", "SHELL", "USER" ),
+        "broken-scriptfilename" => "enable"
+     ))
+   )
+
+Why this ? the ``cgi.fix_pathinfo = 0`` would give you a working ``PATH_INFO``
+but no ``PHP_SELF``. If you enable it, it turns around. To fix the
+``PATH_INFO`` `--enable-discard-path` needs a SCRIPT_FILENAME which is against the CGI spec, a
+broken-scriptfilename. With ``cgi.fix_pathinfo = 1`` in php.ini and
+``broken-scriptfilename => "enable"`` you get both.
+
+
+External Spawning
+-----------------
+
+Spawning FastCGI processes directly in the webserver has some
+disadvantages like
+
+- FastCGI process can only run locally
+- has the same permissions as the webserver
+- has the same base-dir as the webserver
+
+As soon as you are using a seperate FastCGI Server to
+take off some load from the webserver you have to control
+the FastCGI process by a external program like spawn-fcgi.
+
+spawn-fcgi is used to start a FastCGI process in its own
+environment and set the user-id, group-id and change to
+another root-directory (chroot).
+
+For convenience a wrapper script should be used which takes
+care of all the necessary option. Such a script in included
+in the lighttpd distribution and is call spawn-php.sh.
+
+The script has a set of config variables you should take
+a look at: ::
+
+  ## ABSOLUTE path to the spawn-fcgi binary
+  SPAWNFCGI="/usr/local/sbin/spawn-fcgi"
+
+  ## ABSOLUTE path to the PHP binary
+  FCGIPROGRAM="/usr/local/bin/php"
+
+  ## bind to tcp-port on localhost
+  FCGIPORT="1026"
+
+  ## bind to unix domain socket
+  # FCGISOCKET="/tmp/php.sock"
+
+  ## number of PHP childs to spawn
+  PHP_FCGI_CHILDREN=10
+
+  ## number of request server by a single php-process until
+  ## is will be restarted
+  PHP_FCGI_MAX_REQUESTS=1000
+
+  ## IP adresses where PHP should access server connections
+  ## from
+  FCGI_WEB_SERVER_ADDRS="127.0.0.1,192.168.0.1"
+
+  # allowed environment variables sperated by spaces
+  ALLOWED_ENV="ORACLE_HOME PATH USER"
+
+  ## if this script is run as root switch to the following user
+  USERID=wwwrun
+  GROUPID=wwwrun
+
+If you have set the variables to values that fit to your
+setup you can start it by calling: ::
+
+  $ spawn-php.sh
+  spawn-fcgi.c.136: child spawned successfully: PID: 6925
+
+If you get "child spawned successfully: PID:" the php
+processes could be started successfully. You should see them
+in your processlist: ::
+
+  $ ps ax | grep php
+  6925 ?        S      0:00 /usr/local/bin/php
+  6928 ?        S      0:00 /usr/local/bin/php
+  ...
+
+The number of processes should be PHP_FCGI_CHILDREN + 1.
+Here the process 6925 is the master of the slaves which
+handle the work in parallel. Number of parallel workers can
+be set by PHP_FCGI_CHILDREN. A worker dies automaticly of
+handling PHP_FCGI_MAX_REQUESTS requests as PHP might have
+memory leaks.
+
+If you start the script as user root php processes will be
+running as the user USERID and group GROUPID to drop the
+root permissions. Otherwise the php processes will run as
+the user you started script as.
+
+As the script might be started from a unknown stage or even
+directly from the command-line it cleans the environment
+before starting the processes. ALLOWED_ENV contains all
+the external environement variables that should be available
+to the php-process.
+
+
+Perl
+----
+
+For Perl you have to install the FCGI module from CPAN.
+
+Skeleton for remote authorizer
+==============================
+
+The basic functionality of authorizer is as follows (see
+http://www.fastcgi.com/devkit/doc/fcgi-spec.html, 6.3 for
+details). ::
+
+  #include <fcgi_stdio.h>
+  #include <stdlib.h>
+  #include <unistd.h>
+  int main () {
+    char* p;
+
+    while (FCGI_Accept() >= 0) {
+      /* wait for fastcgi authorizer request */
+
+      printf("Content-type: text/html\r\n");
+
+      if ((p = getenv("QUERY_STRING")) == NULL) ||
+           <QUERY_STRING is unauthorized>)
+           printf("Status: 403 Forbidden\r\n\r\n");
+
+      else printf("\r\n");
+        /* default Status is 200 - allow access */
+    }
+
+    return 0;
+  }
+
+It is possible to use any other variables provided by
+FastCGI interface for authorization check. Here is only an
+example.
+
+
+Troubleshooting
+===============
+
+fastcgi.debug should be enabled for troubleshooting.
+
+If you get: ::
+
+  (fcgi.c.274) connect delayed:  8
+  (fcgi.c.289) connect succeeded:  8
+  (fcgi.c.745) unexpected end-of-file (perhaps the fastcgi
+     process died):  8
+
+the fastcgi process accepted the connection but closed it
+right away. This happens if FCGI_WEB_SERVER_ADDRS doesn't
+include the host where you are connection from.
+
+If you get ::
+
+  (fcgi.c.274) connect delayed:  7
+  (fcgi.c.1107) error: unexpected close of fastcgi connection
+     for /peterp/seite1.php (no fastcgi process on host/port ?)
+  (fcgi.c.1015) emergency exit: fastcgi: connection-fd: 5
+     fcgi-fd: 7
+
+the fastcgi process is not running on the host/port you are
+connection to. Check your configuration.
+
+If you get ::
+
+  (fcgi.c.274) connect delayed:  7
+  (fcgi.c.289) connect succeeded:  7
+
+everything is fine. The connect() call just was delayed a
+little bit and is completly normal.
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/features.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/features.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/features.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,116 @@
+===============
+progress report
+===============
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  This document tries to track the requested features and
+  the release when they have been implemented.
+
+.. meta::
+  :keywords: lighttpd, features
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+The document was inspired by a mail from David Phillips:
+
+http://marc.theaimsgroup.com/?l=thttpd&m=108051453226692&w=2
+
+It is used to see what is still missing and what is already done. ::
+
+  zell at zell.best.vwh.net writes:
+  > Now that the author has made the source code available, I am
+  > considering installing and testing the latest version.  From a
+  > quick glance, it seems to support most/all of the features of
+  > Premium thttpd and Zeus.
+
+  If you think it compares to Zeus, then you've obviously never used Zeus.
+
+  lighttpd is currently the only non-blocking open source web server to
+  support FastCGI responders and that's worthwhile.
+
+  The documentation is lacking.  Comments in the configuration file do not
+  make up for a complete manual.
+
+Constantly improving. ::
+
+  The configuration syntax is overly complex, like Apache.  There is no .htaccess
+  support.
+
+.htaccess support is not planed yet. ::
+
+  There is only one server.  You cannot have a separate configuration for each
+  virtual server.  This would seem to be especially problematic when doing
+  SSL.
+
+Works since 1.3.0. ::
+
+  There is no SSI support.  Zeus has full recursive SSI support.  Output from
+  a FastCGI program can get run through the SSI interpreter.  SSI can also do
+  virtual includes recursively.
+
+SSI works since 1.2.4. ::
+
+  Request logging is not configurable.  Zeus supports fully configurable
+  access logging, plus a binary version of CLF that save space.
+
+1.2.6 adds Apache-like logfile config. ::
+
+  Access control only allows authentication via username and password.  There
+  is no way to allow or deny based in IP address.
+
+planed for 1.3.x ::
+
+  The request rewriting appears to only allow regex substitutions.  Zeus has a
+  simple, yet powerful, request rewrite language.
+
+
+
+  There is no support for FastCGI authorizers.  These are very useful for high
+  traffic sites that require complex authentication schemes or that store
+  authorization information in a central database.
+
+since 1.1.9. ::
+
+  There is no bandwidth throttling support.  Zeus does bandwidth throttling
+  correctly (i.e. unlike past versions of thttpd) and can throttle on a
+  per-subserver (thttpd-style virtual hosts) basis.
+
+since 1.3.8. ::
+
+  There is no ISAPI support.  ISAPI is an elegant, open API that allows
+  modification of web server behavior.  While it isn't strictly necessary for
+  an open source web server, it nice to have a documented, consistent API,
+  rather than having to manually patch the server.
+
+If someone requests it it might be implemented. ::
+
+  There is no web based interface.  Zeus has a complete web based interface
+  for everything, including a powerful feature of configuring multiple virtual
+  servers at once.
+
+That is something that should be a special feature of Zeus. :) ::
+
+  There is no support for mapping certain URLs to specific filesystem paths.
+
+since 1.2.6 ::
+
+  There is no referring checking.  This is incredibly important to prevent
+  hotlinking of bandwidth intensive media types (images, movies, etc.).
+
+we have something better: mod_secdownload. And if someone wants referer
+checking we have a condition in the config for it since 1.2.9 ::
+
+  Zeus has a lot of features that lighttpd doesn't have, but I only mentioned
+  the ones I care about and use.
+
+  --
+  David Phillips <david at acz.org>
+  http://david.acz.org/
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.1
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.1	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.1	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,18 @@
+.TH LIGHTTPD 1 2003-12-21
+.SH NAME
+lighttpd - a fast, secure and flexible webserver
+.SH SYNOPSIS
+lighttpd -D -f <configfile>
+.SH DESCRIPTION
+.SH FILES
+/etc/lighttpd/lighttpd.conf
+.SH CONFORMING TO
+HTTP/1.0
+HTTP/1.0
+HTTP-Authentification - Basic, Digest
+FastCGI
+CGI/1.1
+.SH SEE ALSO
+spawn-fcgi(1)
+.SH AUTHOR
+jan at kneschke.de

Added: lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,326 @@
+# lighttpd configuration file
+#
+# use it as a base for lighttpd 1.0.0 and above
+#
+# $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $
+
+############ Options you really have to take care of ####################
+
+## modules to load
+# at least mod_access and mod_accesslog should be loaded
+# all other module should only be loaded if really neccesary
+# - saves some time
+# - saves memory
+server.modules              = (
+#                               "mod_rewrite",
+#                               "mod_redirect",
+#                               "mod_alias",
+                                "mod_access",
+#                               "mod_cml",
+#                               "mod_trigger_b4_dl",
+#                               "mod_auth",
+#                               "mod_status",
+#                               "mod_setenv",
+#                               "mod_fastcgi",
+#                               "mod_proxy",
+#                               "mod_simple_vhost",
+#                               "mod_evhost",
+#                               "mod_userdir",
+#                               "mod_cgi",
+#                               "mod_compress",
+#                               "mod_ssi",
+#                               "mod_usertrack",
+#                               "mod_expire",
+#                               "mod_secdownload",
+#                               "mod_rrdtool",
+                                "mod_accesslog" )
+
+## a static document-root, for virtual-hosting take look at the
+## server.virtual-* options
+server.document-root        = "/srv/www/htdocs/"
+
+## where to send error-messages to
+server.errorlog             = "/var/log/lighttpd/error.log"
+
+# files to check for if .../ is requested
+index-file.names            = ( "index.php", "index.html",
+                                "index.htm", "default.htm" )
+
+## set the event-handler (read the performance section in the manual)
+# server.event-handler = "freebsd-kqueue" # needed on OS X
+
+# mimetype mapping
+mimetype.assign             = (
+  ".pdf"          =>      "application/pdf",
+  ".sig"          =>      "application/pgp-signature",
+  ".spl"          =>      "application/futuresplash",
+  ".class"        =>      "application/octet-stream",
+  ".ps"           =>      "application/postscript",
+  ".torrent"      =>      "application/x-bittorrent",
+  ".dvi"          =>      "application/x-dvi",
+  ".gz"           =>      "application/x-gzip",
+  ".pac"          =>      "application/x-ns-proxy-autoconfig",
+  ".swf"          =>      "application/x-shockwave-flash",
+  ".tar.gz"       =>      "application/x-tgz",
+  ".tgz"          =>      "application/x-tgz",
+  ".tar"          =>      "application/x-tar",
+  ".zip"          =>      "application/zip",
+  ".mp3"          =>      "audio/mpeg",
+  ".m3u"          =>      "audio/x-mpegurl",
+  ".wma"          =>      "audio/x-ms-wma",
+  ".wax"          =>      "audio/x-ms-wax",
+  ".ogg"          =>      "application/ogg",
+  ".wav"          =>      "audio/x-wav",
+  ".gif"          =>      "image/gif",
+  ".jar"          =>      "application/x-java-archive",
+  ".jpg"          =>      "image/jpeg",
+  ".jpeg"         =>      "image/jpeg",
+  ".png"          =>      "image/png",
+  ".xbm"          =>      "image/x-xbitmap",
+  ".xpm"          =>      "image/x-xpixmap",
+  ".xwd"          =>      "image/x-xwindowdump",
+  ".css"          =>      "text/css",
+  ".html"         =>      "text/html",
+  ".htm"          =>      "text/html",
+  ".js"           =>      "text/javascript",
+  ".asc"          =>      "text/plain",
+  ".c"            =>      "text/plain",
+  ".cpp"          =>      "text/plain",
+  ".log"          =>      "text/plain",
+  ".conf"         =>      "text/plain",
+  ".text"         =>      "text/plain",
+  ".txt"          =>      "text/plain",
+  ".dtd"          =>      "text/xml",
+  ".xml"          =>      "text/xml",
+  ".mpeg"         =>      "video/mpeg",
+  ".mpg"          =>      "video/mpeg",
+  ".mov"          =>      "video/quicktime",
+  ".qt"           =>      "video/quicktime",
+  ".avi"          =>      "video/x-msvideo",
+  ".asf"          =>      "video/x-ms-asf",
+  ".asx"          =>      "video/x-ms-asf",
+  ".wmv"          =>      "video/x-ms-wmv",
+  ".bz2"          =>      "application/x-bzip",
+  ".tbz"          =>      "application/x-bzip-compressed-tar",
+  ".tar.bz2"      =>      "application/x-bzip-compressed-tar",
+  # default mime type
+  ""              =>      "application/octet-stream",
+ )
+
+# Use the "Content-Type" extended attribute to obtain mime type if possible
+#mimetype.use-xattr        = "enable"
+
+
+## send a different Server: header
+## be nice and keep it at lighttpd
+# server.tag                 = "lighttpd"
+
+#### accesslog module
+accesslog.filename          = "/var/log/lighttpd/access.log"
+
+## deny access the file-extensions
+#
+# ~    is for backupfiles from vi, emacs, joe, ...
+# .inc is often used for code includes which should in general not be part
+#      of the document-root
+url.access-deny             = ( "~", ".inc" )
+
+$HTTP["url"] =~ "\.pdf$" {
+  server.range-requests = "disable"
+}
+
+##
+# which extensions should not be handle via static-file transfer
+#
+# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
+static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
+
+######### Options that are good to be but not neccesary to be changed #######
+
+## bind to port (default: 80)
+#server.port                = 81
+
+## bind to localhost (default: all interfaces)
+#server.bind                = "127.0.0.1"
+
+## error-handler for status 404
+#server.error-handler-404   = "/error-handler.html"
+#server.error-handler-404   = "/error-handler.php"
+
+## to help the rc.scripts
+#server.pid-file            = "/var/run/lighttpd.pid"
+
+
+###### virtual hosts
+##
+##  If you want name-based virtual hosting add the next three settings and load
+##  mod_simple_vhost
+##
+## document-root =
+##   virtual-server-root + virtual-server-default-host + virtual-server-docroot
+## or
+##   virtual-server-root + http-host + virtual-server-docroot
+##
+#simple-vhost.server-root   = "/srv/www/vhosts/"
+#simple-vhost.default-host  = "www.example.org"
+#simple-vhost.document-root = "/htdocs/"
+
+
+##
+## Format: <errorfile-prefix><status-code>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix    = "/usr/share/lighttpd/errors/status-"
+#server.errorfile-prefix    = "/srv/www/errors/status-"
+
+## virtual directory listings
+#dir-listing.activate       = "enable"
+
+## enable debugging
+#debug.log-request-header   = "enable"
+#debug.log-response-header  = "enable"
+#debug.log-request-handling = "enable"
+#debug.log-file-not-found   = "enable"
+
+### only root can use these options
+#
+# chroot() to directory (default: no chroot() )
+#server.chroot              = "/"
+
+## change uid to <uid> (default: don't care)
+#server.username            = "wwwrun"
+
+## change uid to <uid> (default: don't care)
+#server.groupname           = "wwwrun"
+
+#### compress module
+#compress.cache-dir         = "/var/cache/lighttpd/compress/"
+#compress.filetype          = ("text/plain", "text/html")
+
+#### proxy module
+## read proxy.txt for more info
+#proxy.server               = ( ".php" =>
+#                               ( "localhost" =>
+#                                 (
+#                                   "host" => "192.168.0.101",
+#                                   "port" => 80
+#                                 )
+#                               )
+#                             )
+
+#### fastcgi module
+## read fastcgi.txt for more info
+## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini
+#fastcgi.server             = ( ".php" =>
+#                               ( "localhost" =>
+#                                 (
+#                                   "socket" => "/var/run/lighttpd/php-fastcgi.socket",
+#                                   "bin-path" => "/usr/local/bin/php-cgi"
+#                                 )
+#                               )
+#                            )
+
+#### CGI module
+#cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
+#                               ".cgi" => "/usr/bin/perl" )
+#
+
+#### SSL engine
+#ssl.engine                 = "enable"
+#ssl.pemfile                = "/etc/ssl/private/lighttpd.pem"
+
+#### status module
+#status.status-url          = "/server-status"
+#status.config-url          = "/server-config"
+
+#### auth module
+## read authentication.txt for more info
+#auth.backend               = "plain"
+#auth.backend.plain.userfile = "lighttpd.user"
+#auth.backend.plain.groupfile = "lighttpd.group"
+
+#auth.backend.ldap.hostname = "localhost"
+#auth.backend.ldap.base-dn  = "dc=my-domain,dc=com"
+#auth.backend.ldap.filter   = "(uid=$)"
+
+#auth.require               = ( "/server-status" =>
+#                               (
+#                                 "method"  => "digest",
+#                                 "realm"   => "download archiv",
+#                                 "require" => "user=jan"
+#                               ),
+#                               "/server-config" =>
+#                               (
+#                                 "method"  => "digest",
+#                                 "realm"   => "download archiv",
+#                                 "require" => "valid-user"
+#                               )
+#                             )
+
+#### url handling modules (rewrite, redirect, access)
+#url.rewrite                = ( "^/$"             => "/server-status" )
+#url.redirect               = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
+#### both rewrite/redirect support back reference to regex conditional using %n
+#$HTTP["host"] =~ "^www\.(.*)" {
+#  url.redirect            = ( "^/(.*)" => "http://%1/$1" )
+#}
+
+#
+# define a pattern for the host url finding
+# %% => % sign
+# %0 => domain name + tld
+# %1 => tld
+# %2 => domain name without tld
+# %3 => subdomain 1 name
+# %4 => subdomain 2 name
+#
+#evhost.path-pattern        = "/srv/www/vhosts/%3/htdocs/"
+
+#### expire module
+#expire.url                 = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#### ssi
+#ssi.extension              = ( ".shtml" )
+
+#### rrdtool
+#rrdtool.binary             = "/usr/bin/rrdtool"
+#rrdtool.db-name            = "/var/lib/lighttpd/lighttpd.rrd"
+
+#### setenv
+#setenv.add-request-header  = ( "TRAV_ENV" => "mysql://user@host/db" )
+#setenv.add-response-header = ( "X-Secret-Message" => "42" )
+
+## for mod_trigger_b4_dl
+# trigger-before-download.gdbm-filename = "/var/lib/lighttpd/trigger.db"
+# trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" )
+# trigger-before-download.trigger-url = "^/trigger/"
+# trigger-before-download.download-url = "^/download/"
+# trigger-before-download.deny-url = "http://127.0.0.1/index.html"
+# trigger-before-download.trigger-timeout = 10
+
+## for mod_cml
+## don't forget to add index.cml to server.indexfiles
+# cml.extension               = ".cml"
+# cml.memcache-hosts          = ( "127.0.0.1:11211" )
+
+#### variable usage:
+## variable name without "." is auto prefixed by "var." and becomes "var.bar"
+#bar = 1
+#var.mystring = "foo"
+
+## integer add
+#bar += 1
+## string concat, with integer cast as string, result: "www.foo1.com"
+#server.name = "www." + mystring + var.bar + ".com"
+## array merge
+#index-file.names = (foo + ".php") + index-file.names
+#index-file.names += (foo + ".php")
+
+#### include
+#include /etc/lighttpd/lighttpd-inc.conf
+## same as above if you run: "lighttpd -f /etc/lighttpd/lighttpd.conf"
+#include "lighttpd-inc.conf"
+
+#### include_shell
+#include_shell "echo var.a=1"
+## the above is same as:
+#var.a=1

Added: lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.user
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.user	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/lighttpd.user	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+dummy:test123

Added: lighttpd/tags/1.4.19-5+lenny2/doc/magnet.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/magnet.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/magnet.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,429 @@
+{{{
+#!rst
+==============
+a power-magnet
+==============
+
+------------------
+Module: mod_magnet
+------------------
+
+
+
+.. contents:: Table of Contents
+
+Requirements
+============
+
+:Version: lighttpd 1.4.12 or higher
+:Packages: lua >= 5.1
+
+Overview
+========
+
+mod_magnet is a module to control the request handling in lighty. 
+
+.. note::
+
+  Keep in mind that the magnet is executed in the core of lighty. EVERY long-running operation is blocking 
+  ALL connections in the server. You are warned. For time-consuming or blocking scripts use mod_fastcgi and friends.
+
+For performance reasons mod_magnet caches the compiled script. For each script-run the script itself is checked for 
+freshness and recompile if neccesary.
+
+
+Installation
+============
+
+mod_magnet needs a lighty which is compiled with the lua-support ( --with-lua). Lua 5.1 or higher are required by
+the module. Use "--with-lua=lua5.1" to install on Debian and friends. ::
+
+  server.modules = ( ..., "mod_magnet", ... )
+
+Options
+=======
+
+mod_magnet can attract a request in several stages in the request-handling. 
+
+* either at the same level as mod_rewrite, before any parsing of the URL is done
+* or at a later stage, when the doc-root is known and the physical-path is already setup
+
+It depends on the purpose of the script which stage you want to intercept. Usually you want to use
+the 2nd stage where the physical-path which relates to your request is known. At this level you
+can run checks against lighty.env["physical.path"].
+
+::
+
+  magnet.attract-raw-url-to = ( ... )
+  magnet.attract-physical-path-to = ( ... )
+
+You can define multiple scripts when separated by a semicolon. The scripts are executed in the specified 
+order. If one of them a returning a status-code, the following scripts will not be executed.
+
+Tables
+======
+
+Most of the interaction between between mod_magnet and lighty is done through tables. Tables in lua are hashes (Perl), dictionaries (Java), arrays (PHP), ...
+
+Request-Environment
+-------------------
+
+Lighttpd has its internal variables which are exported as read/write to the magnet. 
+
+If "http://example.org/search.php?q=lighty" is requested this results in a request like ::
+
+  GET /search.php?q=lighty HTTP/1.1
+  Host: example.org
+
+When you are using ``attract-raw-url-to`` you can access the following variables:
+
+* parts of the request-line
+
+ * lighty.env["request.uri"] = "/search.php?q=lighty"
+
+* HTTP request-headers
+
+  * lighty.request["Host"] = "example.org"
+
+Later in the request-handling, the URL is splitted, cleaned up and turned into a physical path name:
+
+* parts of the URI
+
+ * lighty.env["uri.path"] = "/search.php"
+ * lighty.env["uri.path-raw"] = "/search.php"
+ * lighty.env["uri.scheme"] = "http"
+ * lighty.env["uri.authority"] = "example.org"
+ * lighty.env["uri.query"] = "q=lighty"
+
+* filenames, pathnames
+
+ * lighty.env["physical.path"] = "/my-docroot/search.php"
+ * lighty.env["physical.rel-path"] = "/search.php"
+ * lighty.env["physical.doc-root"] = "/my-docroot"
+
+All of them are readable, not all of the are writable (or don't have an effect if you write to them). 
+
+As a start, you might want to use those variables for writing: ::
+
+  -- 1. simple rewriting is done via the request.uri
+  lighty.env["request.uri"] = ... 
+  return lighty.RESTART_REQUEST
+
+  -- 2. changing the physical-path
+  lighty.env["physical.path"] = ...
+
+  -- 3. changing the query-string
+  lighty.env["uri.query"] = ...
+
+Response Headers
+----------------
+
+If you want to set a response header for your request, you can add a field to the lighty.header[] table: ::
+
+  lighty.header["Content-Type"] = "text/html"
+
+Sending Content
+===============
+
+You can generate your own content and send it out to the clients. ::
+
+  lighty.content = { "<pre>", { filename = "/etc/passwd" }, "</pre>" }
+  lighty.header["Content-Type"] = "text/html"
+
+  return 200
+
+The lighty.content[] table is executed when the script is finished. The elements of the array are processed left to right and the elements can either be a string or a table. Strings are included AS IS into the output of the request.
+
+* Strings
+
+  * are included as is
+
+* Tables
+
+  * filename = "<absolute-path>" is required
+  * offset = <number> [default: 0]
+  * length = <number> [default: size of the file - offset]
+
+Internally lighty will use the sendfile() call to send out the static files at full speed.
+
+Status Codes
+============
+
+You might have seen it already in other examples: In case you are handling the request completly in the magnet you
+can return your own status-codes. Examples are: Redirected, Input Validation, ... ::
+
+  if (lighty.env["uri.scheme"] == "http") then
+    lighty.header["Location"] = "https://" .. lighty.env["uri.authority"] .. lighty.env["request.uri"]
+    return 302
+  end
+
+You every number above and equal to 100 is taken as final status code and finishes the request. No other modules are 
+executed after this return.
+
+A special return-code is lighty.RESTART_REQUEST (currently equal to 99) which is usually used in combination with 
+changing the request.uri in a rewrite. It restarts the splitting of the request-uri again.
+
+If you return nothing (or nil) the request-handling just continues.
+
+Debugging
+=========
+
+To easy debugging we overloaded the print()-function in lua and redirect the output of print() to the error-log. ::
+
+  print("Host: " .. lighty.request["Host"])
+  print("Request-URI: " .. lighty.env["request.uri"])
+
+
+Examples
+========
+
+Sending text-files as HTML
+--------------------------
+
+This is a bit simplistic, but it illustrates the idea: Take a text-file and cover it in a <pre> tag.
+
+Config-file ::
+
+  magnet.attract-physical-path-to = server.docroot + "/readme.lua"
+
+readme.lua ::
+
+  lighty.content = { "<pre>", { filename = "/README" }, "</pre>" }
+  lighty.header["Content-Type"] = "text/html"
+  
+  return 200
+
+Maintainance pages
+------------------
+
+Your side might be on maintainance from time to time. Instead of shutting down the server confusing all
+users, you can just send a maintainance page.
+
+Config-file ::
+
+  magnet.attract-physical-path-to = server.docroot + "/maintainance.lua"
+
+maintainance.lua ::
+
+  require "lfs"
+
+  if (nil == lfs.attributes(lighty.env["physical.doc-root"] .. "/maintainance.html")) then
+    lighty.content = ( lighty.env["physical.doc-root"] .. "/maintainance.html" )
+
+    lighty.header["Content-Type"] = "text/html"
+
+    return 200
+  end
+
+mod_flv_streaming
+-----------------
+
+Config-file ::
+
+  magnet.attract-physical-path-to = server.docroot + "/flv-streaming.lua"
+
+flv-streaming.lua::
+
+  if (lighty.env["uri.query"]) then
+    -- split the query-string
+    get = {}
+    for k, v in string.gmatch(lighty.env["uri.query"], "(%w+)=(%w+)") do
+      get[k] = v
+    end
+
+    if (get["start"]) then
+      -- missing: check if start is numeric and positive
+
+      -- send te FLV header + a seek into the file
+      lighty.content = { "FLV\x1\x1\0\0\0\x9\0\0\0\x9", 
+         { filename = lighty.env["physical.path"], offset = get["start"] } }
+      lighty.header["Content-Type"] = "video/x-flv"
+
+      return 200
+    end
+  end
+
+  
+selecting a random file from a directory
+----------------------------------------
+
+Say, you want to send a random file (ad-content) from a directory. 
+
+To simplify the code and to improve the performance we define:
+
+* all images have the same format (e.g. image/png)
+* all images use increasing numbers starting from 1
+* a special index-file names the highest number
+
+Config ::
+
+  server.modules += ( "mod_magnet" )
+  magnet.attract-physical-path-to = "random.lua"
+
+random.lua ::
+
+  dir = lighty.env["physical.path"]
+
+  f = assert(io.open(dir .. "/index", "r"))
+  maxndx = f:read("*all")
+  f:close()
+
+  ndx = math.random(maxndx)
+
+  lighty.content = { { filename = dir .. "/" .. ndx }}
+  lighty.header["Content-Type"] = "image/png"
+
+  return 200
+
+denying illegal character sequences in the URL
+----------------------------------------------
+
+Instead of implementing mod_security, you might just want to apply filters on the content
+and deny special sequences that look like SQL injection. 
+
+A common injection is using UNION to extend a query with another SELECT query.
+
+::
+
+  if (string.find(lighty.env["request.uri"], "UNION%s")) then
+    return 400
+  end
+
+Traffic Quotas
+--------------
+
+If you only allow your virtual hosts a certain amount for traffic each month and want to 
+disable them if the traffic is reached, perhaps this helps: ::
+
+  host_blacklist = { ["www.example.org"] = 0 }
+
+  if (host_blacklist[lighty.request["Host"]]) then
+    return 404
+  end
+
+Just add the hosts you want to blacklist into the blacklist table in the shown way.
+
+Complex rewrites
+----------------
+
+If you want to implement caching on your document-root and only want to regenerate 
+content if the requested file doesn't exist, you can attract the physical.path: ::
+
+  magnet.attract-physical-path-to = ( server.document-root + "/rewrite.lua" )
+
+rewrite.lua ::
+
+  require "lfs"
+
+  attr = lfs.attributes(lighty.env["physical.path"])
+
+  if (not attr) then
+    -- we couldn't stat() the file for some reason
+    -- let the backend generate it
+
+    lighty.env["uri.path"] = "/dispatch.fcgi"
+    lighty.env["physical.rel-path"] = lighty.env["uri.path"]
+    lighty.env["physical.path"] = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]
+  fi
+
+luafilesystem
++++++++++++++
+
+We are requiring the lua-module 'lfs' (http://www.keplerproject.org/luafilesystem/). 
+
+I had to compile lfs myself for lua-5.1 which required a minor patch as compat-5.1 is not needed::
+
+  $ wget http://luaforge.net/frs/download.php/1487/luafilesystem-1.2.tar.gz
+  $ wget http://www.lighttpd.net/download/luafilesystem-1.2-lua51.diff
+  $ gzip -cd luafilesystem-1.2.tar.gz | tar xf -
+  $ cd luafilesystem-1.2
+  $ patch -ls -p1 < ../luafilesystem-1.2-lua51.diff
+  $ make install
+
+It will install lfs.so into /usr/lib/lua/5.1/ which is where lua expects the extensions on my system.
+
+SuSE and Gentoo are known to have their own lfs packages and don't require a compile.
+
+Usertracking
+------------
+
+... or how to store data globally in the script-context:
+
+Each script has its own script-context. When the script is started it only contains the lua-functions
+and the special lighty.* name-space. If you want to save data between script runs, you can use the global-script
+context:
+
+::
+
+  if (nil == _G["usertrack"]) then
+    _G["usertrack"] = {}
+  end
+  if (nil == _G["usertrack"][lighty.request["Cookie"]]) then
+    _G["usertrack"][lighty.request["Cookie"]]
+  else 
+    _G["usertrack"][lighty.request["Cookie"]] = _G["usertrack"][lighty.request["Cookie"]] + 1
+  end
+
+  print _G["usertrack"][lighty.request["Cookie"]]
+
+The global-context is per script. If you update the script without restarting the server, the context will still be maintained.
+
+Counters
+--------
+
+mod_status support a global statistics page and mod_magnet allows to add and update values in the status page:
+
+Config ::
+
+  status.statistics-url = "/server-counters"
+  magnet.attract-raw-url-to = server.docroot + "/counter.lua"
+
+counter.lua ::
+
+  lighty.status["core.connections"] = lighty.status["core.connections"] + 1
+
+Result::
+
+  core.connections: 7
+  fastcgi.backend.php-foo.0.connected: 0
+  fastcgi.backend.php-foo.0.died: 0
+  fastcgi.backend.php-foo.0.disabled: 0
+  fastcgi.backend.php-foo.0.load: 0
+  fastcgi.backend.php-foo.0.overloaded: 0
+  fastcgi.backend.php-foo.1.connected: 0
+  fastcgi.backend.php-foo.1.died: 0
+  fastcgi.backend.php-foo.1.disabled: 0
+  fastcgi.backend.php-foo.1.load: 0
+  fastcgi.backend.php-foo.1.overloaded: 0
+  fastcgi.backend.php-foo.load: 0
+
+Porting mod_cml scripts
+-----------------------
+
+mod_cml got replaced by mod_magnet.
+
+A CACHE_HIT in mod_cml::
+ 
+  output_include = { "file1", "file2" } 
+
+  return CACHE_HIT
+
+becomes::
+
+  content = { { filename = "/path/to/file1" }, { filename = "/path/to/file2"} }
+
+  return 200
+
+while a CACHE_MISS like (CML) ::
+
+  trigger_handler = "/index.php"
+
+  return CACHE_MISS
+
+becomes (magnet) ::
+
+  lighty.env["request.uri"] = "/index.php"
+
+  return lighty.RESTART_REQUEST
+
+}}}
\ No newline at end of file

Added: lighttpd/tags/1.4.19-5+lenny2/doc/mysqlvhost.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/mysqlvhost.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/mysqlvhost.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,58 @@
+====================
+MySQL-based vhosting
+====================
+
+-----------------------
+Module: mod_mysql_vhost
+-----------------------
+
+:Author: ada at riksnet.se
+:Date: $Date: 2004/08/29 09:43:49 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  This module provides virtual hosts (vhosts) based on a MySQL table
+
+.. meta::
+  :keywords: lighttpd, mysql, vhost
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+With MySQL-based vhosting you can store the path to a given host's
+document root in a MySQL database.
+
+.. note:: Keep in mind that only one vhost module should be active at a time.
+          Don't mix mod_simple_vhost with mod_mysql_vhost.
+
+Options
+=======
+
+Example: ::
+
+  mysql-vhost.db             = "lighttpd"
+  mysql-vhost.user           = "lighttpd"
+  mysql-vhost.pass           = "secret"
+  mysql-vhost.sock           = "/var/mysql.lighttpd.sock"
+  mysql-vhost.sql            = "SELECT docroot FROM domains WHERE domain='?'"
+
+
+MySQL setup: ::
+
+  GRANT SELECT ON lighttpd.* TO lighttpd at localhost IDENTIFIED BY 'secret';
+
+  CREATE DATABASE lighttpd;
+
+  USE lighttpd;
+
+  CREATE TABLE domains (
+    domain varchar(64) not null primary key,
+    docroot varchar(128) not null
+  );
+
+  INSERT INTO domains VALUES ('host.dom.ain','/http/host.dom.ain/');
+
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/newstyle.css
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/newstyle.css	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/newstyle.css	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,49 @@
+body {
+	background-color: #F5F5F5;
+}
+a, a:active {
+	text-decoration: none;
+	color: blue;
+}
+a:visited {
+	color: #48468F;
+}
+a:hover, a:focus {
+	text-decoration: underline;
+	color: red;
+}
+h2 {
+	margin-bottom: 12px;
+}
+table {
+	margin-left: 12px;
+}
+th, td {
+	font-family: "Courier New", Courier, monospace;
+	font-size: 10pt;
+	text-align: left;
+}
+th {
+	font-weight: bold;
+	padding-right: 14px;
+	padding-bottom: 3px;
+}
+td {
+	padding-right: 14px;
+}
+td.s, th.s {
+	text-align: right;
+}
+div.list {
+	background-color: white;
+	border-top: 1px solid #646464;
+	border-bottom: 1px solid #646464;
+	padding-top: 10px;
+	padding-bottom: 14px;
+}
+div.foot {
+	font-family: "Courier New", Courier, monospace;
+	font-size: 10pt;
+	color: #787878;
+	padding-top: 4px;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/doc/oldstyle.css
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/oldstyle.css	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/oldstyle.css	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,25 @@
+table {
+	border: 1px solid black;
+	padding: 1px;
+}
+th {
+	background-color: black;
+	border: 1px solid white;
+	color: white;
+	padding-right: 2px;
+	padding-left: 2px;
+}
+td {
+	background-color: #f0f0f0;
+	border: 1px solid white;
+	padding-right: 2px;
+	padding-left: 2px;
+}
+td.s {
+	background-color: #f0f0f0;
+	text-align: right;
+	padding-left: 14px;
+}
+div.foot {
+	margin-top: 4px;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/doc/performance.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/performance.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/performance.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,239 @@
+========================
+Performance Improvements
+========================
+
+------------
+Module: core
+------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.3 $
+
+:abstract:
+  handling performance issues in lighttpd
+
+.. meta::
+  :keywords: lighttpd, performance
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+Performance Issues
+------------------
+
+lighttpd is optimized into varying directions. The most important direction is
+performance. The operation system has two major facilities to help lighttpd
+a deliver its best performance.
+
+HTTP Keep-Alive
+---------------
+
+Disabling keep-alive might help your server if you suffer from a large
+number of open file descriptors.
+
+The defaults for the server are: ::
+
+  server.max-keep-alive-requests = 128
+  server.max-keep-alive-idle = 30
+  server.max-read-idle = 60
+  server.max-write-idle = 360
+
+handling 128 keep-alive requests in a row on a single connection, waiting 30 seconds
+before an unused keep-alive connection gets dropped by lighttpd.
+
+If you handle several connections at once under a high load (let's assume 500 connections
+in parallel for 24h) you might run into the out-of-fd problem described below. ::
+
+  server.max-keep-alive-requests = 4
+  server.max-keep-alive-idle = 4
+
+would release the connections earlier and would free file descriptors without a
+detrimental performance loss.
+
+Disabling keep-alive completely is the last resort if you are still short on file descriptors: ::
+
+  server.max-keep-alive-requests = 0
+
+Event Handlers
+--------------
+
+The first one is the Event Handler which takes care of notifying the server
+that one of the connections is ready to send or receive. As you can see,
+every OS has at least the select() call which has some limitations.
+
+============ ========== ===============
+OS           Method     Config Value
+============ ========== ===============
+all          select     select
+Unix         poll       poll
+Linux 2.4+   rt-signals linux-rtsig
+Linux 2.6+   epoll      linux-sysepoll
+Solaris      /dev/poll  solaris-devpoll
+FreeBSD, ... kqueue     freebsd-kqueue
+============ ========== ===============
+
+
+For more information on this topic take a look at http://www.kegel.com/c10k.html
+
+Configuration
+`````````````
+
+The event handler can be set by specifying the 'Config Value' from above
+in the ``server.event-handler`` variable
+
+e.g.: ::
+
+  server.event-handler = "linux-sysepoll"
+
+Network Handlers
+----------------
+
+The basic network interface for all platforms at the syscalls read() and
+write(). Every modern OS provides its own syscall to help network servers
+transfer files as fast as possible.
+
+If you want to send out a file from the webserver, it doesn't make any sense
+to copy the file into the webserver just to write() it back into a socket
+in the next step.
+
+sendfile() minimizes the work in the application and pushes a file directly
+into the network card (ideally).
+
+lighttpd supports all major platform-specific calls:
+
+========== ==========
+OS         Method
+========== ==========
+all        write
+Unix       writev
+Linux 2.4+ sendfile
+Linux 2.6+ sendfile64
+Solaris    sendfilev
+FreeBSD    sendfile
+========== ==========
+
+The best backend is selected at compile time. In case you want to use
+another backend set: ::
+
+  server.network-backend = "writev"
+
+You can find more information about network backend in:
+
+  http://blog.lighttpd.net/articles/2005/11/11/optimizing-lighty-for-high-concurrent-large-file-downloads
+
+
+Max Connections
+---------------
+
+As lighttpd is a single-threaded server, its main resource limit is the
+number of file descriptors, which is set to 1024 by default (on most systems).
+
+If you are running a high-traffic site you might want to increase this limit
+by setting ::
+
+  server.max-fds = 2048
+
+This only works if lighttpd is started as root.
+
+Out-of-fd condition
+-------------------
+
+Since file descriptors are used for TCP/IP sockets, files and directories,
+a simple request for a PHP page might result in using 3 file descriptors:
+
+1. the TCP/IP socket to the client
+2. the TCP/IP and Unix domain socket to the FastCGI process
+3. the filehandle to the file in the document root to check if it exists
+
+If lighttpd runs out of file descriptors, it will stop accepting new
+connections for awhile to use the existing file descriptors to handle the
+currently-running requests.
+
+If more than 90% of the file descriptors are used then the handling of new
+connections is disabled. If it drops below 80% again new connections will
+be accepted again.
+
+Under some circumstances you will see ::
+
+  ... accept() failed: Too many open files
+
+in the error log. This tells you there were too many new requests at once
+and lighttpd could not disable the incoming connections soon enough. The
+connection was dropped and the client received an error message like 'connection
+failed'. This is very rare and might only occur in test setups.
+
+Increasing the ``server.max-fds`` limit will reduce the probability of this
+problem.
+
+stat() cache
+============
+
+A stat(2) can be expensive; caching it saves time and context switches.
+
+Instead of using stat() every time to check for the existence of a file
+you can stat() it once and monitor the directory the file is in for
+modifications. As long as the directory doesn't change, the files in it
+must all still be the same.
+
+With the help of FAM or gamin you can use kernel events to assure that
+your stat cache is up to date. ::
+
+  server.stat-cache-engine = "fam"   # either fam, simple or disabled
+
+
+Platform-Specific Notes
+=======================
+
+Linux
+-----
+
+For Linux 2.4.x you should think about compiling lighttpd with the option
+``--disable-lfs`` to disable the support for files larger than 2GB. lighttpd will
+fall back to the ``writev() + mmap()`` network calls which is ok, but not as
+fast as possible but support files larger than 2GB.
+
+Disabling the TCP options reduces the overhead of each TCP packet and might
+help to get the last few percent of performance out of the server. Be aware that
+disabling these options most likely decreases performance for high-latency and lossy
+links.
+
+- net.ipv4.tcp_sack = 0
+- net.ipv4.tcp_timestamps = 0
+
+Increasing the TCP send and receive buffers will increase the performance a
+lot if (and only if) you have a lot of large files to send.
+
+- net.ipv4.tcp_wmem = 4096 65536 524288
+- net.core.wmem_max = 1048576
+
+If you have a lot of large file uploads, increasing the receive buffers will help.
+
+- net.ipv4.tcp_rmem = 4096 87380 524288
+- net.core.rmem_max = 1048576
+
+Keep in mind that every TCP connection uses the configured amount of memory for socket
+buffers. If you've got many connections this can quickly drain the available memory.
+
+See http://www.acc.umu.se/~maswan/linux-netperf.txt for more information on these parameters.
+
+FreeBSD
+-------
+
+On FreeBSD you might gain some performance by enabling accept filters. Just
+compile your kernel with: ::
+
+  options   ACCEPT_FILTER_HTTP
+
+For more ideas about tuning FreeBSD read: tuning(7)
+
+Reducing the recvspace should always be ok if the server only handles HTTP
+requests without large uploads. Increasing the sendspace would reduce the
+system load if you have a lot of large files to be sent, but keep in mind that
+you have to provide the memory in the kernel for each connection. 1024 * 64KB
+would mean 64MB of kernel RAM. Keep this in mind.
+
+- net.inet.tcp.recvspace = 4096
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/plugins.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/plugins.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/plugins.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,260 @@
+================
+Plugin Interface
+================
+
+------------
+Module: core
+------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/01 07:01:29 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  The plugin interface is an integral part of lighttpd which
+  provides a flexible way to add specific functionality to lighttpd.
+
+.. meta::
+  :keywords: lighttpd, plugins
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+Plugins allow you to enhance the functionality of lighttpd without
+changing the core of the webserver. They can be loaded at startup time
+and can change virtually any aspect of the behaviour of the webserver.
+
+Plugin Entry Points
+-------------------
+
+lighttpd has 16 hooks which are used in different states of the
+execution of the request:
+
+Serverwide hooks
+````````````````
+
+:init_:
+  called when the plugin is loaded
+:cleanup_:
+  called when the plugin is unloaded
+:set_defaults_:
+  called when the configuration has to be processed
+:handle_trigger_:
+  called once a second
+:handle_sighup_:
+  called when the server received a SIGHUP
+
+Connectionwide hooks
+````````````````````
+
+Most of these hooks are called in ``http_response_prepare()`` after some
+fields in the connection structure are set.
+
+:handle_uri_raw_:
+  called after uri.path_raw, uri.authority and uri.scheme are set
+:handle_uri_clean_:
+  called after uri.path (a clean URI without .. and %20) is set
+:handle_docroot_:
+  called at the end of the logical path handle to get a docroot
+:handle_subrequest_start_:
+  called if the physical path is set up and checked
+:handle_subrequest_:
+  called at the end of ``http_response_prepare()``
+:handle_physical_path_:
+  called after the physical path is created and no other handler is
+  found for this request
+:handle_request_done_:
+  called when the request is done
+:handle_connection_close_:
+  called if the connection has to be closed
+:handle_joblist_:
+  called after the connection_state_engine is left again and plugin
+  internal handles have to be called
+:connection_reset_:
+  called if the connection structure has to be cleaned up
+
+
+Plugin Interface
+----------------
+
+\*_plugin_init
+``````````````
+
+Every plugin has a uniquely-named function which is called after the
+plugin is loaded. It is used to set up the ``plugin`` structure with
+some useful data:
+
+- name of the plugin ``name``
+- all hooks
+
+The field ``data`` and ``lib`` should not be touched in the init function.
+``lib`` is the library handler from dlopen and ``data`` will be the storage
+of the internal plugin data.
+
+:returns:
+  0 (not handled)
+
+init
+````
+
+The first real call of a plugin function is the init hook which is used
+to set up the internal plugin data. The internal plugin is assigned the
+``data`` field mentioned in the \*_plugin_init description.
+
+:returns:
+  a pointer to the internal plugin data.
+
+cleanup
+```````
+
+The cleanup hook is called just before the plugin is unloaded. It is meant
+to free all buffers allocated in ``init`` or somewhere else in the plugin
+which are still not freed and to close all handles which were opened and
+are not closed yet.
+
+:returns:
+  HANDLER_GO_ON if ok (not handled)
+
+set_defaults
+````````````
+
+set_defaults is your entry point into the configfile parsing. It should
+pass a list of options to ``config_insert_values`` and check if
+the plugin configuration is valid. If it is not valid yet, it should
+set useful defaults or return with HANDLER_ERROR and an error message.
+
+:returns:
+  HANDLER_GO_ON if ok
+
+  HANDLER_ERROR will terminate lighttpd
+
+connection_reset
+````````````````
+
+called at the end of each request
+
+:returns:
+  HANDLER_GO_ON if ok
+
+  HANDLER_ERROR on error
+
+handle_trigger
+``````````````
+
+called once a second
+
+:returns:
+  HANDLER_GO_ON if ok
+
+  HANDLER_ERROR on error
+
+handle_sighup
+`````````````
+
+called if a SIGHUP is received (cycling logfiles, ...)
+
+:returns:
+  HANDLER_GO_ON if ok
+
+  HANDLER_ERROR on error
+
+handle_uri_raw
+``````````````
+
+called after uri_raw is set
+
+:returns:
+  HANDLER_GO_ON if ok
+  HANDLER_FINISHED if the final output is prepared
+
+  HANDLER_ERROR on error
+
+handle_uri_clean
+````````````````
+
+called after uri.path is set
+
+:returns:
+  HANDLER_GO_ON if ok
+  HANDLER_FINISHED if the final output is prepared
+
+  HANDLER_ERROR on error
+
+handle_docroot
+``````````````
+
+called when a docroot is needed
+
+:returns:
+  HANDLER_GO_ON if ok
+  HANDLER_FINISHED if the final output is prepared
+
+  HANDLER_ERROR on error
+
+handle_subrequest_start
+```````````````````````
+
+called after physical.path is set
+
+:returns:
+  HANDLER_GO_ON if ok
+  HANDLER_FINISHED if the final output is prepared
+
+  HANDLER_ERROR on error
+
+handle_subrequest
+`````````````````
+
+called if subrequest_start requested a COMEBACK or a WAIT_FOR_EVENT
+
+:returns:
+  HANDLER_GO_ON if ok
+  HANDLER_FINISHED if the final output is prepared
+
+  HANDLER_ERROR on error
+
+handle_physical_path
+````````````````````
+
+called after physical.path is set
+
+:returns:
+  HANDLER_GO_ON if ok
+  HANDLER_FINISHED if the final output is prepared
+
+  HANDLER_ERROR on error
+
+
+handle_request_done
+```````````````````
+
+called at the end of the request (logging, statistics, ...)
+
+:returns:
+  HANDLER_GO_ON if ok
+
+  HANDLER_ERROR on error
+
+handle_connection_close
+```````````````````````
+
+called if the connection is terminated
+
+:returns:
+  HANDLER_GO_ON if ok
+
+  HANDLER_ERROR on error
+
+handle_joblist
+``````````````
+
+called if the state of the connection has changed
+
+:returns:
+  HANDLER_GO_ON if ok
+
+  HANDLER_ERROR on error
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/proxy.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/proxy.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/proxy.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,104 @@
+===================
+the Proxy Interface
+===================
+
+-----------------
+Module: mod_proxy
+-----------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/01 07:01:29 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  The proxy module a simplest way to connect lighttpd to
+  java servers which have a HTTP-interface.
+
+.. meta::
+  :keywords: lighttpd, Proxy
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+...
+
+Options
+=======
+
+lighttpd provides the Proxy support via the proxy-module
+(mod_proxy) which provides 2 options in the config-file:
+
+:proxy.debug:
+  a value between 0 and 65535 to set the debug-level in the
+  Proxy module. Currently only 0 and 1 are used. Use 1 to
+  enable some debug output, 0 to disable it.
+
+:proxy.balance:
+  might be one of 'hash', 'round-robin' or 'fair' (default).
+
+  'round-robin' choses another host for each request, 'hash'
+  is generating a hash over the request-uri and makes sure
+  that the same request URI is sent to always the same host.
+  That can increase the performance of the backend servers
+  a lot due to higher cache-locality. 'fair' is the normal
+  load-based, passive balancing.
+
+:proxy.server:
+  tell the module where to send Proxy requests to. Every
+  file-extension can have its own handler. Load-Balancing is
+  done by specifying multiple handles for the same extension.
+
+  structure of proxy.server section: ::
+
+    ( <extension> =>
+      (
+        ( "host" => <string> ,
+          "port" => <integer> ),
+        ( "host" => <string> ,
+          "port" => <integer> )
+      ),
+      <extension> => ...
+    )
+
+  :<extension>: is the file-extension or prefix (if started with "/")
+                might empty to match all requests
+  :"host":      is ip of the proxy server
+  :"port":      is tcp-port on the "host" used by the proxy
+                server (default: 80)
+
+  e.g.: ::
+
+    proxy.server = ( ".jsp" =>
+  		       ( (
+		           "host" => "10.0.0.242",
+		           "port" => 81
+		         ) )
+		     )
+
+Example:
+========
+
+Using lighttpd + mod_proxy in front of 8 Squids which handle the
+caching of dynamic content for you. All requests for the host
+www.example.org should be forwarded to the proxy. All proxies
+listen on port 80 for requests. ::
+
+  $HTTP["host"] == "www.example.org" {
+    proxy.balance = "hash"
+    proxy.server  = ( "" => ( ( "host" => "10.0.0.10" ),
+                              ( "host" => "10.0.0.11" ),
+                              ( "host" => "10.0.0.12" ),
+                              ( "host" => "10.0.0.13" ),
+                              ( "host" => "10.0.0.14" ),
+                              ( "host" => "10.0.0.15" ),
+                              ( "host" => "10.0.0.16" ),
+                              ( "host" => "10.0.0.17" ) ) )
+  }
+
+If one of the hosts goes down the all requests for this one server are
+moved equally to the other servers. If you want to know more about
+the algorithm used here google for 'Microsoft CARP'.
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/rc.lighttpd
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/rc.lighttpd	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/rc.lighttpd	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,155 @@
+#! /bin/sh
+# Copyright (c) 1995-2002 SuSE Linux AG, Nuernberg, Germany.
+# All rights reserved.
+#
+# Author: Kurt Garloff <feedback at suse.de>
+#
+# /etc/init.d/FOO
+#
+#   and symbolic its link
+#
+# /(usr/)sbin/rcFOO
+#
+# LSB compliant service control script; see http://www.linuxbase.org/spec/
+#
+# System startup script for some example service or daemon FOO (template)
+#
+### BEGIN INIT INFO
+# Provides: FOO
+# Required-Start: $remote_fs $syslog
+# Required-Stop:  $remote_fs $syslog
+# Default-Start:  3 5
+# Default-Stop:   0 1 2 6
+# Description:    Start FOO to allow XY and provide YZ
+#	continued on second line by '#<TAB>'
+### END INIT INFO
+#
+# Note on Required-Start: It does specify the init script ordering,
+# not real dependencies. Depencies have to be handled by admin
+# resp. the configuration tools (s)he uses.
+
+# Source SuSE config (if still necessary, most info has been moved)
+test -r /etc/rc.config && . /etc/rc.config
+
+# Check for missing binaries (stale symlinks should not happen)
+LIGHTTPD_BIN=/usr/sbin/lighttpd
+test -x $LIGHTTPD_BIN || exit 5
+
+# Check for existence of needed config file and read it
+LIGHTTPD_CONFIG=/etc/sysconfig/lighttpd
+test -r $LIGHTTPD_CONFIG || exit 6
+. $LIGHTTPD_CONFIG
+
+# Shell functions sourced from /etc/rc.status:
+#      rc_check         check and set local and overall rc status
+#      rc_status        check and set local and overall rc status
+#      rc_status -v     ditto but be verbose in local rc status
+#      rc_status -v -r  ditto and clear the local rc status
+#      rc_failed        set local and overall rc status to failed
+#      rc_failed <num>  set local and overall rc status to <num><num>
+#      rc_reset         clear local rc status (overall remains)
+#      rc_exit          exit appropriate to overall rc status
+#      rc_active	checks whether a service is activated by symlinks
+. /etc/rc.status
+
+# First reset status of this service
+rc_reset
+
+# Return values acc. to LSB for all commands but status:
+# 0 - success
+# 1 - generic or unspecified error
+# 2 - invalid or excess argument(s)
+# 3 - unimplemented feature (e.g. "reload")
+# 4 - insufficient privilege
+# 5 - program is not installed
+# 6 - program is not configured
+# 7 - program is not running
+#
+# Note that starting an already running service, stopping
+# or restarting a not-running service as well as the restart
+# with force-reload (in case signalling is not supported) are
+# considered a success.
+
+case "$1" in
+    start)
+	echo -n "Starting lighttpd"
+	## Start daemon with startproc(8). If this fails
+	## the echo return value is set appropriate.
+
+	# NOTE: startproc returns 0, even if service is
+	# already running to match LSB spec.
+	startproc $LIGHTTPD_BIN -f $LIGHTTPD_CONF_PATH
+
+	# Remember status and be verbose
+	rc_status -v
+	;;
+    stop)
+	echo -n "Shutting down lighttpd"
+	## Stop daemon with killproc(8) and if this fails
+	## set echo the echo return value.
+
+	killproc -TERM $LIGHTTPD_BIN
+
+	# Remember status and be verbose
+	rc_status -v
+	;;
+    try-restart)
+	## Stop the service and if this succeeds (i.e. the
+	## service was running before), start it again.
+	## Note: try-restart is not (yet) part of LSB (as of 0.7.5)
+	$0 status >/dev/null &&  $0 restart
+
+	# Remember status and be quiet
+	rc_status
+	;;
+    restart)
+	## Stop the service and regardless of whether it was
+	## running or not, start it again.
+	$0 stop
+	$0 start
+
+	# Remember status and be quiet
+	rc_status
+	;;
+    force-reload|reload)
+	## Like force-reload, but if daemon does not support
+	## signalling, do nothing (!)
+
+	# If it supports signalling:
+	echo -n "Reload service LIGHTTPD"
+	killproc -INT $LIGHTTPD_BIN
+	$0 start
+	touch /var/run/lighttpd.pid
+	rc_status -v
+
+	## Otherwise if it does not support reload:
+	#rc_failed 3
+	#rc_status -v
+	;;
+    status)
+	echo -n "Checking for service LIGHTTPD: "
+	## Check status with checkproc(8), if process is running
+	## checkproc will return with exit status 0.
+
+	# Return value is slightly different for the status command:
+	# 0 - service running
+	# 1 - service dead, but /var/run/  pid  file exists
+	# 2 - service dead, but /var/lock/ lock file exists
+	# 3 - service not running
+
+	# NOTE: checkproc returns LSB compliant status values.
+	checkproc $LIGHTTPD_BIN
+	rc_status -v
+	;;
+    probe)
+	## Optional: Probe for the necessity of a reload,
+	## print out the argument which is required for a reload.
+
+	test /etc/lighttpd/lighttpd.conf -nt /var/run/lighttpd.pid && echo reload
+	;;
+    *)
+	echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
+	exit 1
+	;;
+esac
+rc_exit


Property changes on: lighttpd/tags/1.4.19-5+lenny2/doc/rc.lighttpd
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/doc/rc.lighttpd.redhat
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/rc.lighttpd.redhat	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/rc.lighttpd.redhat	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,87 @@
+#!/bin/sh
+#
+# lighttpd     Startup script for the lighttpd server
+#
+# chkconfig: - 85 15
+# description: Lightning fast webserver with light system requirements
+#
+# processname: lighttpd
+# config: /etc/lighttpd/lighttpd.conf
+# config: /etc/sysconfig/lighttpd
+# pidfile: /var/run/lighttpd.pid
+#
+# Note: pidfile is assumed to be created
+# by lighttpd (config: server.pid-file).
+# If not, uncomment 'pidof' line.
+
+# Source function library
+. /etc/rc.d/init.d/functions
+
+if [ -f /etc/sysconfig/lighttpd ]; then
+	. /etc/sysconfig/lighttpd
+fi
+
+if [ -z "$LIGHTTPD_CONF_PATH" ]; then
+	LIGHTTPD_CONF_PATH="/etc/lighttpd/lighttpd.conf"
+fi
+
+prog="lighttpd"
+lighttpd="/usr/sbin/lighttpd"
+RETVAL=0
+
+start() {
+	echo -n $"Starting $prog: "
+	daemon $lighttpd -f $LIGHTTPD_CONF_PATH
+	RETVAL=$?
+	echo
+	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
+	return $RETVAL
+}
+
+stop() {
+	echo -n $"Stopping $prog: "
+	killproc $lighttpd
+	RETVAL=$?
+	echo
+	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
+	return $RETVAL
+}
+
+reload() {
+	echo -n $"Reloading $prog: "
+	killproc $lighttpd -HUP
+	RETVAL=$?
+	echo
+	return $RETVAL
+}
+
+case "$1" in
+	start)
+		start
+		;;
+	stop)
+		stop
+		;;
+	restart)
+		stop
+		start
+		;;
+	condrestart)
+		if [ -f /var/lock/subsys/$prog ]; then
+			stop
+			start
+		fi
+		;;
+	reload)
+		reload
+		;;
+	status)
+		status $lighttpd
+		RETVAL=$?
+		;;
+	*)
+		echo $"Usage: $0 {start|stop|restart|condrestart|reload|status}"
+		RETVAL=1
+esac
+
+exit $RETVAL


Property changes on: lighttpd/tags/1.4.19-5+lenny2/doc/rc.lighttpd.redhat
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/doc/redirect.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/redirect.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/redirect.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,41 @@
+===============
+URL Redirection
+===============
+
+--------------------
+Module: mod_redirect
+--------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/29 09:43:49 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  url redirection
+
+.. meta::
+  :keywords: lighttpd, redirect
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+...
+
+Options
+=======
+
+url.redirect
+  redirects a set of URLs externally
+
+  e.g. ::
+
+    url.redirect = ( "^/show/([0-9]+)/([0-9]+)$" => "http://www.example.org/show.php?isdn=$1&page$2",
+                     "^/get/([0-9]+)/([0-9]+)$"  => "http://www.example.org/get.php?isdn=$1&page$2" )
+
+    # make a external redirect
+    # from any www.host (with www.) to the host (without www.)
+    $HTTP["host"] =~ "^www\.(.*)" {
+      url.redirect = ( "^/(.*)" => "http://%1/$1" )
+    }

Added: lighttpd/tags/1.4.19-5+lenny2/doc/rewrite.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/rewrite.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/rewrite.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,71 @@
+============
+URL Rewrites
+============
+
+-------------------
+Module: mod_rewrite
+-------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  url rewrite
+
+.. meta::
+  :keywords: lighttpd, rewrite
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+internal redirects, url rewrite
+
+Options
+=======
+
+url.rewrite-once
+  rewrites a set of URLs interally in the webserver BEFORE they are handled.
+
+  e.g. ::
+
+    url.rewrite-once = ( "<regex>" => "<relative-uri>" )
+
+url.rewrite-repeat
+  rewrites a set of URLs interally in the webserver BEFORE they are handled
+
+  e.g. ::
+
+    url.rewrite-repeat = ( "<regex>" => "<relative-uri>" )
+
+The options ``url.rewrite`` and ``url.rewrite-final`` were mapped to ``url.rewrite-once``
+in 1.3.16.
+
+Examples
+========
+
+The regex is matching the full REQUEST_URI which is supplied by the user including
+query-string.::
+
+  url.rewrite-once = ( "^/id/([0-9]+)$" => "/index.php?id=$1",
+                       "^/link/([a-zA-Z]+)" => "/index.php?link=$1" )
+
+
+
+  # the following example, is, however just simulating vhost by rewrite
+  # * you can never change document-root by mod_rewrite
+  # use mod_*host instead to make real mass-vhost
+
+  # request:        http://any.domain.com/url/
+  # before rewrite: REQUEST_URI="/www/htdocs/url/"
+  # and DOCUMENT_ROOT="/www/htdocs/" %0="www.domain.com" $1="url/"
+  # after rewrite:  REQUEST_URI="/www/htdocs/domain.com/url/"
+  # still, you have DOCUMENT_ROOT=/www/htdocs/
+
+  server.document-root = "/www/htdocs/"
+  $HTTP["host"] =~ "^.*\.([^.]+\.com)$" {
+    url.rewrite-once = ( "^/(.*)" => "/%0/$1" )
+  }
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/rrdtool-graph.sh
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/rrdtool-graph.sh	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/rrdtool-graph.sh	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+RRDTOOL=/usr/bin/rrdtool
+OUTDIR=/var/www/servers/www.example.org/pages/rrd/
+INFILE=/var/www/lighttpd.rrd
+OUTPRE=lighttpd-traffic
+
+DISP="DEF:bin=$INFILE:InOctets:AVERAGE \
+      DEF:binmin=$INFILE:InOctets:MIN \
+      DEF:binmax=$INFILE:InOctets:MAX \
+      DEF:bout=$INFILE:OutOctets:AVERAGE \
+      DEF:boutmin=$INFILE:OutOctets:MIN \
+      DEF:boutmax=$INFILE:OutOctets:MAX \
+      LINE1:bin#0000FF:in \
+      LINE1:binmin#2222FF: \
+      STACK:binmax#2222FF: \
+      LINE1:bout#FF0000:out \
+      LINE1:boutmin#FF2222: \
+      STACK:boutmax#FF2222: \
+      -v bytes/s"
+
+$RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP
+$RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP
+$RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP
+
+OUTPRE=lighttpd-requests
+
+DISP="DEF:req=$INFILE:Requests:AVERAGE \
+      DEF:reqmin=$INFILE:Requests:MIN \
+      DEF:reqmax=$INFILE:Requests:MAX \
+      LINE1:req#0000FF:requests \
+      LINE1:reqmin#2222FF: \
+      STACK:reqmax#2222FF: \
+      -v req/s"
+
+$RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP
+$RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP
+$RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP


Property changes on: lighttpd/tags/1.4.19-5+lenny2/doc/rrdtool-graph.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/doc/rrdtool.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/rrdtool.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/rrdtool.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,111 @@
+=======
+rrdtool
+=======
+
+-------------------
+Module: mod_rrdtool
+-------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/29 09:43:49 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  mod_rrdtool is used to monitor the traffic and load on the webserver
+
+.. meta::
+  :keywords: lighttpd, skeleton
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+RRD_ is a system to store and display time-series data (i.e. network
+bandwidth, machine-room temperature, server load average).
+
+.. _RRD: http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
+
+Options
+=======
+
+rrdtool.binary
+  path to the rrdtool binary
+
+  e.g.: ::
+
+    rrdtool.binary = "/usr/bin/rrdtool"
+
+rrdtool.db-name
+  filename of the rrd-database. Make sure that <rrdtool.db-name> doesn't exist
+  before the first run, as lighttpd has to create the DB for you.
+
+  e.g.: ::
+
+    rrdtool.db-name = "/var/www/lighttpd.rrd"
+
+Generating Graphs
+=================
+
+::
+
+  #!/bin/sh
+
+  RRDTOOL=/usr/bin/rrdtool
+  OUTDIR=/var/www/servers/www.example.org/pages/rrd/
+  INFILE=/var/www/lighttpd.rrd
+  OUTPRE=lighttpd-traffic
+
+  DISP="-v bytes --title TrafficWebserver \
+          DEF:binraw=$INFILE:InOctets:AVERAGE \
+          DEF:binmaxraw=$INFILE:InOctets:MAX \
+          DEF:binminraw=$INFILE:InOctets:MIN \
+          DEF:bout=$INFILE:OutOctets:AVERAGE \
+          DEF:boutmax=$INFILE:OutOctets:MAX \
+          DEF:boutmin=$INFILE:OutOctets:MIN \
+          CDEF:bin=binraw,-1,* \
+          CDEF:binmax=binmaxraw,-1,* \
+          CDEF:binmin=binminraw,-1,* \
+          CDEF:binminmax=binmaxraw,binminraw,- \
+          CDEF:boutminmax=boutmax,boutmin,- \
+          AREA:binmin#ffffff: \
+          STACK:binmax#f00000: \
+          LINE1:binmin#a0a0a0: \
+          LINE1:binmax#a0a0a0: \
+          LINE2:bin#a0a735:incoming \
+          GPRINT:bin:MIN:%.2lf \
+          GPRINT:bin:AVERAGE:%.2lf \
+          GPRINT:bin:MAX:%.2lf \
+          AREA:boutmin#ffffff: \
+          STACK:boutminmax#00f000: \
+          LINE1:boutmin#a0a0a0: \
+          LINE1:boutmax#a0a0a0: \
+          LINE2:bout#a0a735:outgoing \
+          GPRINT:bout:MIN:%.2lf \
+          GPRINT:bout:AVERAGE:%.2lf \
+          GPRINT:bout:MAX:%.2lf \
+          "
+
+
+  $RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP
+  $RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP
+  $RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP
+
+  OUTPRE=lighttpd-requests
+
+  DISP="-v req --title RequestsperSecond -u 1 \
+          DEF:req=$INFILE:Requests:AVERAGE \
+          DEF:reqmax=$INFILE:Requests:MAX \
+          DEF:reqmin=$INFILE:Requests:MIN \
+          CDEF:reqminmax=reqmax,reqmin,- \
+          AREA:reqmin#ffffff: \
+          STACK:reqminmax#0e0e0e: \
+          LINE1:reqmin#a0a0a0: \
+          LINE1:reqmax#a0a0a0: \
+          LINE2:req#00a735:requests"
+
+
+  $RRDTOOL graph $OUTDIR/$OUTPRE-hour.png -a PNG --start -14400 $DISP
+  $RRDTOOL graph $OUTDIR/$OUTPRE-day.png -a PNG --start -86400 $DISP
+  $RRDTOOL graph $OUTDIR/$OUTPRE-month.png -a PNG --start -2592000 $DISP
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/scgi.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/scgi.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/scgi.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,33 @@
+==================
+the SCGI Interface
+==================
+
+-------------------
+Module: mod_scgi
+-------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.3 $
+
+:abstract:
+  SCGI is a fast and simplified CGI interface. It is mostly
+  used by Python + WSGI.
+
+.. meta::
+  :keywords: lighttpd, FastCGI
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+The SCGI module is heavily based on the FastCGI when it comes
+to configuration. Only the internal protocol between server
+and client has been replaced. Please check the documentation
+of the FastCGI module for more information.
+
+History
+=======
+
+Added in lighttpd 1.3.14 as it was really simple to do.

Added: lighttpd/tags/1.4.19-5+lenny2/doc/secdownload.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/secdownload.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/secdownload.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,147 @@
+===========================
+Secure and Fast Downloading
+===========================
+
+-----------------------
+Module: mod_secdownload
+-----------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/01 07:01:29 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  authenticated file requests and a countermeasure against
+  deep-linking can be achieved easily by using mod_secdownload
+
+.. meta::
+  :keywords: lighttpd, secure, fast, downloads
+
+.. contents:: Table of Contents
+
+Options
+=======
+
+::
+
+  secdownload.secret        = <string>
+  secdownload.document-root = <string>
+  secdownload.uri-prefix    = <string>  (default: /)
+  secdownload.timeout       = <short>   (default: 60 seconds)
+
+Description
+===========
+
+there are multiple ways to handle secured download mechanisms:
+
+1. use the webserver and the internal HTTP authentication
+2. use the application to authenticate and send the file
+   through the application
+
+Both ways have limitations:
+
+webserver:
+
+- ``+`` fast download
+- ``+`` no additional system load
+- ``-`` inflexible authentication handling
+
+application:
+
+- ``+`` integrated into the overall layout
+- ``+`` very flexible permission management
+- ``-`` the download occupies an application thread/process
+
+A simple way to combine the two ways could be:
+
+1. app authenticates user and checks permissions to
+   download the file.
+2. app redirects user to the file accessable by the webserver
+   for further downloading.
+3. the webserver transfers the file to the user.
+
+As the webserver doesn't know anything about the permissions
+used in the app, the resulting URL would be available to every
+user who knows the URL.
+
+mod_secdownload removes this problem by introducing a way to
+authenticate a URL for a specified time. The application has
+to generate a token and a timestamp which are checked by the
+webserver before it allows the file to be downloaded by the
+webserver.
+
+The generated URL has to have the format:
+
+<uri-prefix><token>/<timestamp-in-hex><rel-path>
+
+<token> is an MD5 of
+
+1. a secret string (user supplied)
+2. <rel-path> (starts with /)
+3. <timestamp-in-hex>
+
+
+As you can see, the token is not bound to the user at all. The
+only limiting factor is the timestamp which is used to
+invalidate the URL after a given timeout (secdownload.timeout).
+
+.. Note::
+  Be sure to choose a another secret than the one used in the
+  examples, as this is the only part of the token that is not
+  known to the user.
+
+
+
+If the user tries to fake the URL by choosing a random token,
+status 403 'Forbidden' will be sent out.
+
+If the timeout is reached, status 408 'Request Timeout' will be
+sent. (This does not really conform to the standard, but should
+do the trick).
+
+If token and timeout are valid, the <rel-path> is appended to
+the configured (secdownload.document-root) and passed to the
+normal internal file transfer functionality. This might lead to
+status 200 or 404.
+
+Example
+=======
+
+Application
+-----------
+
+Your application has to generate the correct URLs. The following sample
+code for PHP should be easily adaptable to any other language: ::
+
+  <?php
+
+  $secret = "verysecret";
+  $uri_prefix = "/dl/";
+
+  # filename
+  $f = "/secret-file.txt";
+
+  # current timestamp
+  $t = time();
+
+  $t_hex = sprintf("%08x", $t);
+  $m = md5($secret.$f.$t_hex);
+
+  # generate link
+  printf('<a href="%s%s/%s%s">%s</a>',
+         $uri_prefix, $m, $t_hex, $f, $f);
+  ?>
+
+Webserver
+---------
+
+The server has to be configured in the same way. The URI prefix and
+secret have to match: ::
+
+  server.modules = ( ..., "mod_secdownload", ... )
+
+  secdownload.secret          = "verysecret"
+  secdownload.document-root   = "/home/www/servers/download-area/"
+  secdownload.uri-prefix      = "/dl/"
+  secdownload.timeout         = 120
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/security.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/security.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/security.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,60 @@
+=================
+Security Features
+=================
+
+------------
+Module: core
+------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/29 09:44:53 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  lighttpd was developed with security in mind ...
+
+.. meta::
+  :keywords: lighttpd, security
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+Limiting POST requests
+----------------------
+
+
+
+::
+
+   server.max-request-size = <kbyte>
+
+System Security
+---------------
+
+Running daemons as root with full privileges is a bad idea in general.
+lighttpd runs best without any extra privileges and runs perfectly in chroot.
+
+Change Root
+```````````
+
+server.chroot = "..."
+
+Drop root privileges
+````````````````````
+
+server.username = "..."
+server.groupname = "..."
+
+FastCGI
+```````
+
+fastcgi + chroot
+
+Permissions
+```````````
+
+::
+
+  $ useradd wwwrun ...

Added: lighttpd/tags/1.4.19-5+lenny2/doc/setenv.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/setenv.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/setenv.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,37 @@
+===========================
+Conditional Request Headers
+===========================
+
+------------------
+Module: mod_setenv
+------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  mod_setenv is used to add request
+
+.. meta::
+  :keywords: lighttpd, skeleton
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+...
+
+Options
+=======
+
+setenv.add-environment
+  adds a value to the process environment that is passed to the external applications
+
+
+setenv.add-response-header
+  adds a header to the HTTP response sent to the client
+
+setenv.add-request-header
+  adds a header to the HTTP request that was received from the client

Added: lighttpd/tags/1.4.19-5+lenny2/doc/simple-vhost.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/simple-vhost.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/simple-vhost.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,109 @@
+======================
+Simple Virtual-Hosting
+======================
+
+------------------------
+Module: mod_simple_vhost
+------------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/29 09:43:49 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  virtual hosting
+
+.. meta::
+  :keywords: lighttpd, virtual hosting
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+Simple assumption:
+
+Every virtual host is in a directory below a base directory in a path that
+is the same as the name of the vhost. Below this vhost path might be an
+extra directory which is the document root of the vhost.
+
+The document root for each vhost is built from three values:
+
+- server-root
+- hostname
+- document-root
+
+The complete document root is constructed either by ::
+
+  server-root + hostname + document-root
+
+or if this path does not exist by ::
+
+  server-root + default-host + document-root
+
+A small example should make this idea clear: ::
+
+  /var/www/
+  /var/www/logs/
+  /var/www/servers/
+  /var/www/servers/www.example.org/
+  /var/www/servers/www.example.org/lib/
+  /var/www/servers/www.example.org/pages/
+  /var/www/servers/mail.example.org/
+  /var/www/servers/mail.example.org/lib/
+  /var/www/servers/mail.example.org/pages/
+
+  simple-vhost.server-root = "/var/www/servers/"
+  simple-vhost.default-host = "www.example.org"
+  simple-vhost.document-root = "pages"
+
+You can use symbolic links to map several hostnames to the same directory.
+
+Conditionals vs. simple-vhost
+-----------------------------
+
+You have to keep in mind that conditionals and simple-vhost interfere
+with one another. ::
+
+  simple-vhost.server-root = "/var/www/servers/"
+  simple-vhost.default-host = "www.example.org"
+  simple-vhost.document-root = "pages"
+
+  $HTTP["host"] == "news.example.org" {
+    server.document-root = "/var/www/servers/news2.example.org/pages/"
+  }
+
+When ``news.example.org`` is requested, the ``server.document-root``
+will be set to ``/var/www/servers/news2.example.org/pages/``, but
+simple-vhost will overwrite it shortly afterwards.
+
+If ``/var/www/servers/news.example.org/pages/`` exists, that will be
+used. If not, ``/var/www/servers/www.example.org/pages/`` will be taken
+because it is the default.
+
+To use conditionals together with simple-vhost, you should do this: ::
+
+  $HTTP["host"] !~ "^(news\.example\.org)$" {
+    simple-vhost.server-root = "/var/www/servers/"
+    simple-vhost.default-host = "www.example.org"
+    simple-vhost.document-root = "pages"
+  }
+
+  $HTTP["host"] == "news.example.org" {
+    server.document-root = "/var/www/servers/news2.example.org/pages/"
+  }
+
+It will enable simple vhosting for all hosts other than ``news.example.org``.
+
+Options
+=======
+
+simple-vhost.server-root
+  root of the virtual host
+
+simple-vhost.default-host
+  use this hostname if the requested hostname does not have its own directory
+
+simple-vhost.document-root
+  path below the vhost directory
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/skeleton.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/skeleton.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/skeleton.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,29 @@
+===================
+headline
+===================
+
+--------------------
+Module: mod_skeleton
+--------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  a nice, short abstrace about the module
+
+.. meta::
+  :keywords: lighttpd, skeleton
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+...
+
+Options
+=======
+
+...

Added: lighttpd/tags/1.4.19-5+lenny2/doc/spawn-fcgi.1
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/spawn-fcgi.1	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/spawn-fcgi.1	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,13 @@
+.TH SPAWNFCGI 1 2003-12-21
+.SH NAME
+spawn-fcgi \- spawning FastCGI processes
+.SH SYNOPSIS
+spawn-fcgi -f <fastcgi-binary> [-p <port> | -s <socket>] [-C <num-of-php-procs>] [-c <chroot-dir>] [-u <username>] [-g <groupname>]
+spawn-fcgi -v
+spawn-fcgi -h
+.SH DESCRIPTION
+spawn-fcgi is used to spawn remote FastCGI processes.
+.SH SEE ALSO
+lighttpd(1)
+.SH AUTHOR
+jan at kneschke.de

Added: lighttpd/tags/1.4.19-5+lenny2/doc/spawn-php.sh
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/spawn-php.sh	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/spawn-php.sh	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+## ABSOLUTE path to the spawn-fcgi binary
+SPAWNFCGI="/home/weigon/projects/spawn-fcgi/src/spawn-fcgi"
+
+## ABSOLUTE path to the PHP binary
+FCGIPROGRAM="/usr/local/bin/php"
+
+## TCP port to which to bind on localhost
+FCGIPORT="1026"
+
+## number of PHP children to spawn
+PHP_FCGI_CHILDREN=10
+
+## maximum number of requests a single PHP process can serve before it is restarted
+PHP_FCGI_MAX_REQUESTS=1000
+
+## IP addresses from which PHP should access server connections
+FCGI_WEB_SERVER_ADDRS="127.0.0.1,192.168.2.10"
+
+# allowed environment variables, separated by spaces
+ALLOWED_ENV="ORACLE_HOME PATH USER"
+
+## if this script is run as root, switch to the following user
+USERID=wwwrun
+GROUPID=wwwrun
+
+
+################## no config below this line
+
+if test x$PHP_FCGI_CHILDREN = x; then
+  PHP_FCGI_CHILDREN=5
+fi
+
+export PHP_FCGI_MAX_REQUESTS
+export FCGI_WEB_SERVER_ADDRS
+
+ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"
+
+if test x$UID = x0; then
+  EX="$SPAWNFCGI -p $FCGIPORT -f $FCGIPROGRAM -u $USERID -g $GROUPID -C $PHP_FCGI_CHILDREN"
+else
+  EX="$SPAWNFCGI -p $FCGIPORT -f $FCGIPROGRAM -C $PHP_FCGI_CHILDREN"
+fi
+
+# copy the allowed environment variables
+E=
+
+for i in $ALLOWED_ENV; do
+  E="$E $i=${!i}"
+done
+
+# clean the environment and set up a new one
+env - $E $EX


Property changes on: lighttpd/tags/1.4.19-5+lenny2/doc/spawn-php.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/doc/ssi.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/ssi.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/ssi.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,76 @@
+====================
+Server-Side Includes
+====================
+
+---------------
+Module: mod_ssi
+---------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/29 09:44:53 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  The module for server-side includes provides a compatability
+  layer for NSCA/Apache SSI.
+
+.. meta::
+  :keywords: lighttpd, ssi, Server-Side Includes
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+Configuration
+-------------
+
+::
+
+  server.modules = ( ..., "mod_ssi", ... )
+  ssi.extension = ( ".shtml" )
+
+Supported Options
+-----------------
+
+- ``<!--#echo var="..." -->``
+- ``<!--#include (file="..."\|virtual="...") -->``
+- ``<!--#flastmod (file="..."\|virtual="...") -->``
+- ``<!--#fsize (file="..."\|virtual="...") -->``
+- ``<!--#config timefmt="..." sizefmt="(bytes|abbrev)" -->``
+- ``<!--#printenv -->``
+- ``<!--#set var="..." value="..." -->``
+- ``<!--#if expr="..." -->``
+- ``<!--#elif expr="..." -->``
+- ``<!--#else -->``
+- ``<!--#endif -->``
+
+Expression Handling
+-------------------
+
+Every ''expr'' is interpreted:
+
+- logical: AND, OR, !
+- compare: =, <, <=, >, =>, !=
+- precedence: (, )
+- quoted strings: 'string with a dollar: $FOO'
+- variable substitution: $REMOTE_ADDR
+- unquoted strings: string
+
+Flow Control
+------------
+
+if, elif, else and endif can only be used to insert content under special
+conditions.
+
+Unsupported Features
+--------------------
+
+The original SSI module from NCSA and Apache provided some more options
+which are not supported by this module for various reasons:
+
+- exec
+- nested virtual
+- config.errmsg
+- echo.encoding
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/ssl.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/ssl.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/ssl.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,62 @@
+===========
+Secure HTTP
+===========
+
+------------
+Module: core
+------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/29 09:44:53 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  How to set up SSL in lighttpd
+
+.. meta::
+  :keywords: lighttpd, ssl
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+lighttpd supports SSLv2 and SSLv3 if it is compiled against openssl.
+
+Configuration
+-------------
+
+To enable SSL for the whole server you have to provide a valid
+certificate and have to enable the SSL engine.::
+
+  ssl.engine = "enable"
+  ssl.pemfile = "/path/to/server.pem"
+
+The HTTPS protocol does not allow you to use name-based virtual
+hosting with SSL. If you want to run multiple SSL servers with
+one lighttpd instance you must use IP-based virtual hosting: ::
+
+  $SERVER["socket"] == "10.0.0.1:443" {
+    ssl.engine                  = "enable"
+    ssl.pemfile                 = "www.example.org.pem"
+    server.name                 = "www.example.org"
+
+    server.document-root        = "/www/servers/www.example.org/pages/"
+  }
+
+If you have a .crt and a .key file, cat them together into a
+single PEM file:
+::
+
+  $ cat host.key host.crt > host.pem
+
+
+Self-Signed Certificates
+------------------------
+
+A self-signed SSL certificate can be generated like this: ::
+
+  $ openssl req -new -x509 \
+    -keyout server.pem -out server.pem \
+    -days 365 -nodes
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/state.dot
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/state.dot	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/state.dot	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,18 @@
+digraph state {
+  edge [color=green];
+  connect -> reqstart -> read -> reqend -> handlereq -> respstart -> write -> respend -> connect;
+  edge [color=grey];
+  reqend -> readpost -> handlereq [ label="POST" ];
+  edge [ color=blue]
+  respend -> reqstart [ label="keep-alive" ];
+  edge [ color=lightblue]
+  handlereq -> handlereq [ label="sub-request" ];
+  edge [style=dashed, color=red];
+  error -> close -> connect;
+  error -> connect;
+  handlereq -> error;
+  read -> error;
+  readpost -> error;
+  write -> error;
+  connect [shape=box];
+}

Added: lighttpd/tags/1.4.19-5+lenny2/doc/state.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/state.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/state.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,170 @@
+============================
+The State Engine of lighttpd
+============================
+
+------------
+Module: core
+------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/01 07:01:29 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  This is a short summary of the state-engine which is driving the lighttpd
+  webserver. It describes the basic concepts and the way the different parts
+  of the server are connected.
+
+.. meta::
+  :keywords: lighttpd, state-engine
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+States
+------
+
+The state-engine is currently made of 11 states which are walk-through on
+the way each connection. Some of them are specific for a special operation
+and some may never be hit at all.
+
+:connect:
+  waiting for a connection
+:reqstart:
+  init the read-idle timer
+:read:
+  read http-request-header from network
+:reqend:
+  parse request
+:readpost:
+  read http-request-content from network
+:handlereq:
+  handle the request internally (might result in sub-requests)
+:respstart:
+  prepare response header
+:write:
+  write response-header + content to network
+:respend:
+  cleanup environment, log request
+:error:
+  reset connection (incl. close())
+:close:
+  close connection (handle lingering close)
+
+.. image:: state.png
+
+A simple GET request (green path)
+---------------------------------
+
+The connection is idling in the 'connect' state waiting for a connection.
+As soon as the connection is set up we init the read-timer in 'reqstart'
+and start to read data from the network. As soon as we get the
+HTTP-request terminator (CRLFCRLF) we forward the header to the parser.
+
+The parsed request is handled by 'handlereq' and as soon as a decision out
+the request is made it is sent to 'respstart' to prepare the
+HTTP-response header. In the 'write' state the prepare content is sent out
+to the network. When everything is sent 'respend' is entered to log the
+request and cleanup the environment. After the close() call the connection
+is set back to the 'connect' state again.
+
+Keep-Alive (blue path)
+----------------------
+
+The Keep-Alive handling is implemented by going from the 'respend'
+directly to 'reqstart' without the close() and the accept() calls.
+
+POST requests (grey path)
+-------------------------
+
+As requests might contain a request-body the state 'readpost' entered as
+soon as the header is parsed and we know how much data we expect.
+
+Pipelining
+----------
+
+HTTP/1.1 supportes pipelining (sending multiple requests without waiting
+for the response of the first request). This is handled transparently by
+the 'read' state.
+
+Unexpected errors (red path)
+----------------------------
+
+For really hard errors we use the 'error' state which resets the
+connection and can be call from every state. It is only use if there is no
+other way to handle the issue (e.g. client-side close of the connection).
+If possible we should use http-status 500 ('internal server error') and
+log the issue in the errorlog.
+
+If we have to take care of some data which is coming in after we ran into
+the error condition the 'close' state is used the init a half-close and
+read all the delay packet from the network.
+
+Sub-Requests (lightblue)
+------------------------
+
+The FastCGI, CGI, ... intergration is done by introducing a loop in
+'handlereq' to handle all aspect which are neccesary to find out what has
+to be sent back to the client.
+
+Functions
+=========
+
+Important functions used by the state-engine
+
+:state-engine:
+
+- ``connection_state_machine()``
+
+:connect:
+
+- (nothing)
+
+:reqstart:
+
+- (nothing)
+
+:read:
+
+- ``connection_handle_read_state()``
+- ``connection_handle_read()``
+
+:reqend:
+
+- ``http_request_parse()``
+
+:readpost:
+
+- ``connection_handle_read_state()``
+- ``connection_handle_read()``
+
+:handlereq:
+
+- ``http_response_prepare()``
+
+:respstart:
+
+- ``connection_handle_write_prepare()``
+
+:write:
+
+- ``connection_handle_write()``
+
+:respend:
+
+- ``plugins_call_handle_request_done()``
+- ``plugins_call_handle_connection_close()``
+- ``connection_close()`` (if not keep-alive)
+- ``connection_reset()``
+
+:error:
+
+- ``plugins_call_handle_request_done()``
+- ``plugins_call_handle_connection_close()``
+- ``connection_reset()``
+
+:close:
+
+- ``connection_close()``

Added: lighttpd/tags/1.4.19-5+lenny2/doc/status.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/status.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/status.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,111 @@
+=============
+Server Status
+=============
+
+------------------
+Module: mod_status
+------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  mod_status displays the server's status and configuration
+
+.. meta::
+  :keywords: lighttpd, server status
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+The server status module generates the status overview of the webserver. The
+information covers:
+
+- uptime
+- average throughput
+- current throughput
+- active connections and their state
+
+
+We need to load the module first. ::
+
+  server.modules = ( ..., "mod_ssi", ... )
+
+By default the status page is disabled to hide internal information from
+unauthorized users. ::
+
+  status.status-url = "/server-status"
+
+If you want to open the status page just for users from the local network
+cover it in a conditional. ::
+
+  $HTTP["remoteip"] == "10.0.0.0/8" {
+    status.status-url = "/server-status"
+  }
+
+Or require authorization: ::
+
+  auth.require = ( "/server-status" =>
+    ( "realm" ... ) )
+
+
+Please note that when using the server.max-worker directive, the stati of the
+childs are not combined yet, so you're going to see different stats with each
+request.
+
+
+Output Format
+-------------
+
+By default a nice looking HTML page is generated. If you append ?auto to the
+status-url you can get a text version which is simpler to parse. ::
+
+  Total Accesses: 1234
+  Total kBytes: 1043
+  Uptime: 1234
+  BusyServers: 123
+
+Total Accesses is the number of handled requests, kBytes the overall outgoing
+traffic, Uptime the uptime in seconds and BusyServers the number of currently
+active connections.
+
+The naming is kept compatible to Apache even if we have another concept and
+don't start new servers for each connection.
+
+
+Options
+=======
+
+status.status-url
+
+  relative URL which is used to retrieve the status-page
+
+  Default: unset
+
+  Example: status.status-url = "/server-status"
+
+status.enable-sort
+
+  add JavaScript which allows client-side sorting for the connection overview
+
+  Default: enable
+
+status.config-url
+
+  relative URL for the config page which displays the loaded modules
+
+  Default: unset
+
+  Example: status.config-url = "/server-config"
+
+status.statistics-url
+
+  relative URL for a plain-text page containing the internal statistics
+
+  Default: unset
+
+  Example: status.statistics-url = "/server-statistics"
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/sysconfig.lighttpd
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/sysconfig.lighttpd	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/sysconfig.lighttpd	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+LIGHTTPD_CONF_PATH=/etc/lighttpd/lighttpd.conf

Added: lighttpd/tags/1.4.19-5+lenny2/doc/traffic-shaping.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/traffic-shaping.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/traffic-shaping.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,55 @@
+===============
+Traffic Shaping
+===============
+
+------------
+Module: core
+------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  limiting bandwidth usage
+
+.. meta::
+  :keywords: lighttpd, bandwidth limit, traffic shaping
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+Starting with 1.3.8, lighttpd supports limiting the bandwidth for
+a single connection or config context like a virtual host or a URL.
+
+Options
+=======
+
+:connection.kbytes-per-second:
+  limit the throughput for each single connection to the given
+  limit in kbyte/s
+
+  default: 0 (no limit)
+
+:server.kbytes-per-second:
+  limit the throughput for all connections to the given limit
+  in kbyte/s
+
+  if you want to specify a limit for a special virtual server
+  use: ::
+
+    $HTTP["host"] == "www.example.org" {
+      server.kbytes-per-second = 128
+    }
+
+  which will override the default for this host.
+
+  default: 0 (no limit)
+
+Additional Notes
+================
+
+Keep in mind that a limit below 32kb/s might actually limit the traffic to 32kb/s. This
+is caused by the size of the TCP send buffer.

Added: lighttpd/tags/1.4.19-5+lenny2/doc/trigger_b4_dl.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/trigger_b4_dl.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/trigger_b4_dl.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,57 @@
+=======================
+Trigger before Download
+=======================
+
+-------------------------
+Module: mod_trigger_b4_dl
+-------------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  another anti-hot-linking module
+
+.. meta::
+  :keywords: lighttpd, hot-linking, deep-linking
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+Anti Hotlinking:
+
+ * if user requests ''download-url'' directly, the request is denied and he is redirected to ''deny-url'
+ * if user visits ''trigger-url'' before requesting ''download-url'', access is granted
+ * if user visits ''download-url'' again after ''trigger-timeout'' has elapsed, the request is denied and he is redirected to ''deny-url''
+
+The trigger information is either stored locally in a gdbm file or remotely in memcached.
+
+Requirements
+------------
+
+ * libpcre
+ * libgdbm or libmemcache
+
+Options
+=======
+
+::
+
+  trigger-before-download.gdbm-filename = "/home/weigon/testbase/trigger.db"
+  trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" )
+  trigger-before-download.trigger-url = "^/trigger/"
+  trigger-before-download.download-url = "^/download/"
+  trigger-before-download.deny-url = "http://192.168.1.5:1025/index.html"
+  trigger-before-download.trigger-timeout = 10
+
+If both trigger-before-download.gdbm-filename and
+trigger-before-download.memcache-hosts is set gdbm will take precedence.
+
+Installation
+============
+
+memcached should be started with the option -M as we don't want to remove entry if the memory is full.
+

Added: lighttpd/tags/1.4.19-5+lenny2/doc/userdir.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/userdir.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/userdir.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,72 @@
+=======
+userdir
+=======
+
+-------------------
+Module: mod_userdir
+-------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/08/29 09:43:49 $
+:Revision: $Revision: 1.1 $
+
+:abstract:
+  The userdir module ...
+
+.. meta::
+  :keywords: lighttpd, userdir
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+The userdir module provides a simple way to link user-based directories into the global namespace of the webserver.
+
+Requests in the form ``/~user/page.html`` are rewritten to take the file ``page.html`` from the home directory of the user.
+If ``userdir.path`` is set, the path will be appended to the home directory
+building the classic mapping of: ::
+
+  userdir.path = "public_html"
+
+  URL: http://www.example.org/~jan/index.html
+  Path: /home/jan/public_html/
+
+To control which users should be able to use this feature you can set a list of usernames to include or exclude.
+
+In case your mapping is independent of /etc/passwd you can use
+``userdir.basepath``: ::
+
+  userdir.path = "htdocs"
+  userdir.basepath = "/var/www/users/"
+
+  URL: http://www.example.org/~jan/index.html
+  Path: /var/www/users/jan/htdocs/index.html
+
+Options
+=======
+
+userdir.path
+  usually it should be set to "public_html" to take ~/public_html/ as the document root
+
+  Default: empty (document root is the home directory)
+  Example: ::
+
+    userdir.path = "public_html"
+
+userdir.exclude-user
+  list of usernames which may not use this feature
+
+  Default: empty (all users may use it)
+  Example: ::
+
+    userdir.exclude-user = ( "root", "postmaster" )
+
+
+userdir.include-user
+  if set, only users from this list may use the feature
+
+  Default: empty (all users may use it)
+
+userdir.basepath
+  if set, don't check /etc/passwd for homedir

Added: lighttpd/tags/1.4.19-5+lenny2/doc/webdav.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/doc/webdav.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/doc/webdav.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,64 @@
+======
+WebDAV
+======
+
+--------------------
+Module: mod_webdav
+--------------------
+
+:Author: Jan Kneschke
+:Date: $Date: 2004/11/03 22:26:05 $
+:Revision: $Revision: 1.2 $
+
+:abstract:
+  WebDAV module for lighttpd
+
+.. meta::
+  :keywords: lighttpd, webdav
+
+.. contents:: Table of Contents
+
+Description
+===========
+
+The WebDAV module is a very minimalistic implementation of RFC 2518.
+Minimalistic means that not all operations are implemented yet.
+
+So far we have
+
+ * PROPFIND
+ * OPTIONS
+ * MKCOL
+ * DELETE
+ * PUT
+
+and the usual GET, POST, HEAD from HTTP/1.1.
+
+So far, mounting a WebDAV resource into Windows XP works and the basic litmus
+tests are passed.
+
+Options
+=======
+
+webdav.activate
+  If you load the webdav module, the WebDAV functionality has to be
+  enabled for the directories you want to provide to the user.
+
+  Default: disable
+
+webdav.is-readonly
+  Only allow reading methods (GET, PROPFIND, OPTIONS) on WebDAV resources.
+
+  Default: writable
+
+Examples
+========
+
+To enable WebDAV for the /dav directory, you wrap your webdav options in
+a conditional. You have to use the regex like below as you want to match
+the directory /dav and everything below it, but not e.g. /davos. ::
+
+  $HTTP["url"] =~ "^/dav($|/)" {
+    webdav.activate = "enable"
+    webdav.is-readonly = "enable"
+  }

Added: lighttpd/tags/1.4.19-5+lenny2/install-sh
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/install-sh	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/install-sh	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,507 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2006-10-14.15
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""	$nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+posix_glob=
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chmodcmd=$chmodprog
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c         (ignored)
+-d         create directories instead of installing files.
+-g GROUP   $chgrpprog installed files to GROUP.
+-m MODE    $chmodprog installed files to MODE.
+-o USER    $chownprog installed files to USER.
+-s         $stripprog installed files.
+-t DIRECTORY  install into DIRECTORY.
+-T         report an error if DSTFILE is a directory.
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+        shift
+        shift
+	case $mode in
+	  *' '* | *'	'* | *'
+'*	  | *'*'* | *'?'* | *'['*)
+	    echo "$0: invalid mode: $mode" >&2
+	    exit 1;;
+	esac
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t) dstarg=$2
+	shift
+	shift
+	continue;;
+
+    -T) no_target_directory=true
+	shift
+	continue;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)	shift
+	break;;
+
+    -*)	echo "$0: invalid option: $1" >&2
+	exit 1;;
+
+    *)  break;;
+  esac
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dstarg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dstarg"
+      shift # fnord
+    fi
+    shift # arg
+    dstarg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+	u_plus_rw=
+      else
+	u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src ;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dstarg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dstarg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst ;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+	echo "$0: $dstarg: Is a directory" >&2
+	exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+	(dirname "$dst") 2>/dev/null ||
+	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	     X"$dst" : 'X\(//\)[^/]' \| \
+	     X"$dst" : 'X\(//\)$' \| \
+	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+	echo X"$dst" |
+	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)[^/].*/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\/\)$/{
+		   s//\1/
+		   q
+		 }
+		 /^X\(\/\).*/{
+		   s//\1/
+		   q
+		 }
+		 s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+	# Create intermediate dirs using mode 755 as modified by the umask.
+	# This is like FreeBSD 'install' as of 1997-10-28.
+	umask=`umask`
+	case $stripcmd.$umask in
+	  # Optimize common cases.
+	  *[2367][2367]) mkdir_umask=$umask;;
+	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+	  *[0-7])
+	    mkdir_umask=`expr $umask + 22 \
+	      - $umask % 100 % 40 + $umask % 20 \
+	      - $umask % 10 % 4 + $umask % 2
+	    `;;
+	  *) mkdir_umask=$umask,go-w;;
+	esac
+
+	# With -d, create the new directory with the user-specified mode.
+	# Otherwise, rely on $mkdir_umask.
+	if test -n "$dir_arg"; then
+	  mkdir_mode=-m$mode
+	else
+	  mkdir_mode=
+	fi
+
+	posix_mkdir=false
+	case $umask in
+	  *[123567][0-7][0-7])
+	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
+	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+	    ;;
+	  *)
+	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+	    if (umask $mkdir_umask &&
+		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	    then
+	      if test -z "$dir_arg" || {
+		   # Check for POSIX incompatibilities with -m.
+		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+		   # other-writeable bit of parent directory when it shouldn't.
+		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   case $ls_ld_tmpdir in
+		     d????-?r-*) different_mode=700;;
+		     d????-?--*) different_mode=755;;
+		     *) false;;
+		   esac &&
+		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+		   }
+		 }
+	      then posix_mkdir=:
+	      fi
+	      rmdir "$tmpdir/d" "$tmpdir"
+	    else
+	      # Remove any dirs left behind by ancient mkdir implementations.
+	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	    fi
+	    trap '' 0;;
+	esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+	umask $mkdir_umask &&
+	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+	/*) prefix=/ ;;
+	-*) prefix=./ ;;
+	*)  prefix= ;;
+      esac
+
+      case $posix_glob in
+        '')
+	  if (set -f) 2>/dev/null; then
+	    posix_glob=true
+	  else
+	    posix_glob=false
+	  fi ;;
+      esac
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob && set -f
+      set fnord $dstdir
+      shift
+      $posix_glob && set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+	test -z "$d" && continue
+
+	prefix=$prefix$d
+	if test -d "$prefix"; then
+	  prefixes=
+	else
+	  if $posix_mkdir; then
+	    (umask=$mkdir_umask &&
+	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+	    # Don't fail if two instances are running concurrently.
+	    test -d "$prefix" || exit 1
+	  else
+	    case $prefix in
+	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+	      *) qprefix=$prefix;;
+	    esac
+	    prefixes="$prefixes '$qprefix'"
+	  fi
+	fi
+	prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+	# Don't fail if two instances are running concurrently.
+	(umask $mkdir_umask &&
+	 eval "\$doit_exec \$mkdirprog $prefixes") ||
+	  test -d "$dstdir" || exit 1
+	obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # Now rename the file to the real destination.
+    { $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
+      || {
+	   # The rename failed, perhaps because mv can't rename something else
+	   # to itself, or perhaps because mv is so ancient that it does not
+	   # support -f.
+
+	   # Now remove or move aside any old file at destination location.
+	   # We try this two ways since rm can't unlink itself on some
+	   # systems and the destination file might be busy for other
+	   # reasons.  In this case, the final cleanup might fail but the new
+	   # file should still install successfully.
+	   {
+	     if test -f "$dst"; then
+	       $doit $rmcmd -f "$dst" 2>/dev/null \
+	       || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
+		     && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
+	       || {
+		 echo "$0: cannot unlink or rename $dst" >&2
+		 (exit 1); exit 1
+	       }
+	     else
+	       :
+	     fi
+	   } &&
+
+	   # Now rename the file to the real destination.
+	   $doit $mvcmd "$dsttmp" "$dst"
+	 }
+    } || exit 1
+
+    trap '' 0
+  fi
+done
+
+# 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:


Property changes on: lighttpd/tags/1.4.19-5+lenny2/install-sh
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/lighttpd.spec
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/lighttpd.spec	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/lighttpd.spec	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,83 @@
+Summary: A fast webserver with minimal memory-footprint (lighttpd)
+Name: lighttpd
+Version: 1.4.19
+Release: 1
+Source: http://jan.kneschke.de/projects/lighttpd/download/lighttpd-%version.tar.gz
+Packager: Jan Kneschke <jan at kneschke.de>
+License: BSD
+Group: Networking/Daemons
+URL: http://www.lighttpd.net/
+Requires: pcre >= 3.1 zlib
+BuildRequires: libtool zlib-devel
+BuildRoot: %{_tmppath}/%{name}-root
+
+%description
+lighttpd is intented to be a frontend for ad-servers which have to deliver
+small files concurrently to many connections.
+
+Available rpmbuild rebuild options:
+--with: ssl mysql lua memcache
+
+%prep
+%setup -q
+
+%build
+rm -rf %{buildroot}
+%configure \
+    %{?_with_mysql:       --with-mysql} \
+    %{?_with_lua:         --with-lua} \
+    %{?_with_memcache:    --with-memcache} \
+    %{?_with_ssl:         --with-openssl}
+make
+
+%install
+%makeinstall
+
+mkdir -p %{buildroot}%{_sysconfdir}/{init.d,sysconfig}
+if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then
+	install -m 755 doc/rc.lighttpd.redhat %{buildroot}%{_sysconfdir}/init.d/lighttpd
+else
+	install -m 755 doc/rc.lighttpd %{buildroot}%{_sysconfdir}/init.d/lighttpd
+fi
+install -m 644 doc/sysconfig.lighttpd %{buildroot}%{_sysconfdir}/sysconfig/lighttpd
+
+%clean
+rm -rf %{buildroot}
+
+%post
+## read http://www.fedora.us/docs/spec.html next time :)
+if [ "$1" = "1" ]; then
+	# real install, not upgrade
+	/sbin/chkconfig --add lighttpd
+fi
+
+%preun
+if [ "$1" = "0"]; then
+	# real uninstall, not upgrade
+	%{_sysconfdir}/init.d/lighttpd stop
+	/sbin/chkconfig --del lighttpd
+fi
+
+%files
+%defattr(-,root,root)
+%doc doc/lighttpd.conf doc/lighttpd.user README INSTALL ChangeLog COPYING AUTHORS
+%doc doc/*.txt
+%config(noreplace) %attr(0755,root,root) %{_sysconfdir}/init.d/lighttpd
+%config(noreplace) %attr(0644,root,root) %{_sysconfdir}/sysconfig/lighttpd
+%{_mandir}/*
+%{_libdir}/*
+%{_sbindir}/*
+%{_bindir}/*
+
+%changelog
+* Thu Sep 30 2004 12:41 <jan at kneschke.de> 1.3.1
+- upgraded to 1.3.1
+
+* Tue Jun 29 2004 17:26 <jan at kneschke.de> 1.2.3
+- rpmlint'ed the package
+- added URL
+- added (noreplace) to start-script
+- change group to Networking/Daemon (like apache)
+
+* Sun Feb 23 2003 15:04 <jan at kneschke.de>
+- initial version

Added: lighttpd/tags/1.4.19-5+lenny2/lighttpd.spec.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/lighttpd.spec.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/lighttpd.spec.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,83 @@
+Summary: A fast webserver with minimal memory-footprint (lighttpd)
+Name: lighttpd
+Version: @VERSION@
+Release: 1
+Source: http://jan.kneschke.de/projects/lighttpd/download/lighttpd-%version.tar.gz
+Packager: Jan Kneschke <jan at kneschke.de>
+License: BSD
+Group: Networking/Daemons
+URL: http://www.lighttpd.net/
+Requires: pcre >= 3.1 zlib
+BuildRequires: libtool zlib-devel
+BuildRoot: %{_tmppath}/%{name}-root
+
+%description
+lighttpd is intented to be a frontend for ad-servers which have to deliver
+small files concurrently to many connections.
+
+Available rpmbuild rebuild options:
+--with: ssl mysql lua memcache
+
+%prep
+%setup -q
+
+%build
+rm -rf %{buildroot}
+%configure \
+    %{?_with_mysql:       --with-mysql} \
+    %{?_with_lua:         --with-lua} \
+    %{?_with_memcache:    --with-memcache} \
+    %{?_with_ssl:         --with-openssl}
+make
+
+%install
+%makeinstall
+
+mkdir -p %{buildroot}%{_sysconfdir}/{init.d,sysconfig}
+if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then
+	install -m 755 doc/rc.lighttpd.redhat %{buildroot}%{_sysconfdir}/init.d/lighttpd
+else
+	install -m 755 doc/rc.lighttpd %{buildroot}%{_sysconfdir}/init.d/lighttpd
+fi
+install -m 644 doc/sysconfig.lighttpd %{buildroot}%{_sysconfdir}/sysconfig/lighttpd
+
+%clean
+rm -rf %{buildroot}
+
+%post
+## read http://www.fedora.us/docs/spec.html next time :)
+if [ "$1" = "1" ]; then
+	# real install, not upgrade
+	/sbin/chkconfig --add lighttpd
+fi
+
+%preun
+if [ "$1" = "0"]; then
+	# real uninstall, not upgrade
+	%{_sysconfdir}/init.d/lighttpd stop
+	/sbin/chkconfig --del lighttpd
+fi
+
+%files
+%defattr(-,root,root)
+%doc doc/lighttpd.conf doc/lighttpd.user README INSTALL ChangeLog COPYING AUTHORS
+%doc doc/*.txt
+%config(noreplace) %attr(0755,root,root) %{_sysconfdir}/init.d/lighttpd
+%config(noreplace) %attr(0644,root,root) %{_sysconfdir}/sysconfig/lighttpd
+%{_mandir}/*
+%{_libdir}/*
+%{_sbindir}/*
+%{_bindir}/*
+
+%changelog
+* Thu Sep 30 2004 12:41 <jan at kneschke.de> 1.3.1
+- upgraded to 1.3.1
+
+* Tue Jun 29 2004 17:26 <jan at kneschke.de> 1.2.3
+- rpmlint'ed the package
+- added URL
+- added (noreplace) to start-script
+- change group to Networking/Daemon (like apache)
+
+* Sun Feb 23 2003 15:04 <jan at kneschke.de>
+- initial version

Added: lighttpd/tags/1.4.19-5+lenny2/ltmain.sh
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/ltmain.sh	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/ltmain.sh	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,6863 @@
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun configure.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+basename="s,^.*/,,g"
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+progname=`echo "$progpath" | $SED $basename`
+modename="$progname"
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.5.22
+TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes.
+if test -n "${ZSH_VERSION+set}" ; then
+  setopt NO_GLOB_SUBST
+fi
+
+# Check that we have a working $echo.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell, and then maybe $echo will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  SP2NL='tr \040 \012'
+  NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  SP2NL='tr \100 \n'
+  NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+  save_LANG="$LANG"; LANG=C; export LANG
+fi
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS=" 	$lt_nl"
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+  $echo "$modename: not configured to build any kind of library" 1>&2
+  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+  exit $EXIT_FAILURE
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+duplicate_deps=no
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+
+#####################################
+# Shell function definitions:
+# This seems to be the best place for them
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+	# Failing that, at least try and use $RANDOM to avoid a race
+	my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+	save_mktempdir_umask=`umask`
+	umask 0077
+	$mkdir "$my_tmpdir"
+	umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || {
+        $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2
+	exit $EXIT_FAILURE
+      }
+    fi
+
+    $echo "X$my_tmpdir" | $Xsed
+}
+
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
+      $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 | \
+	$SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $echo $win32_libid_type
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+	case $arg in
+	  *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	CC_quoted="$CC_quoted $arg"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+	for z in $available_tags; do
+	  if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+	    # Evaluate the configuration.
+	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    CC_quoted=
+	    for arg in $CC; do
+	    # Double-quote args containing other shell metacharacters.
+	    case $arg in
+	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	      arg="\"$arg\""
+	      ;;
+	    esac
+	    CC_quoted="$CC_quoted $arg"
+	  done
+	    case "$@ " in
+	      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
+	      # The compiler in the base compile command matches
+	      # the one in the tagged configuration.
+	      # Assume this is the tagged configuration we want.
+	      tagname=$z
+	      break
+	      ;;
+	    esac
+	  fi
+	done
+	# If $tagname still isn't set, then no tagged configuration
+	# was found and let the user know that the "--tag" command
+	# line option must be used.
+	if test -z "$tagname"; then
+	  $echo "$modename: unable to infer tagged configuration"
+	  $echo "$modename: specify a tag with \`--tag'" 1>&2
+	  exit $EXIT_FAILURE
+#        else
+#          $echo "$modename: using $tagname tagged configuration"
+	fi
+	;;
+      esac
+    fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+
+    $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
+    $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
+      exit $EXIT_FAILURE
+    fi
+}
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+    my_status=""
+
+    $show "${rm}r $my_gentop"
+    $run ${rm}r "$my_gentop"
+    $show "$mkdir $my_gentop"
+    $run $mkdir "$my_gentop"
+    my_status=$?
+    if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then
+      exit $my_status
+    fi
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+	*) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
+      my_xdir="$my_gentop/$my_xlib"
+
+      $show "${rm}r $my_xdir"
+      $run ${rm}r "$my_xdir"
+      $show "$mkdir $my_xdir"
+      $run $mkdir "$my_xdir"
+      exit_status=$?
+      if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then
+	exit $exit_status
+      fi
+      case $host in
+      *-darwin*)
+	$show "Extracting $my_xabs"
+	# Do not bother doing anything if just a dry run
+	if test -z "$run"; then
+	  darwin_orig_dir=`pwd`
+	  cd $my_xdir || exit $?
+	  darwin_archive=$my_xabs
+	  darwin_curdir=`pwd`
+	  darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
+	  darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
+	  if test -n "$darwin_arches"; then 
+	    darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
+	    darwin_arch=
+	    $show "$darwin_base_archive has multiple architectures $darwin_arches"
+	    for darwin_arch in  $darwin_arches ; do
+	      mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+	      cd "$darwin_curdir"
+	      $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+	    done # $darwin_arches
+      ## Okay now we have a bunch of thin objects, gotta fatten them up :)
+	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
+	    darwin_file=
+	    darwin_files=
+	    for darwin_file in $darwin_filelist; do
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+	      lipo -create -output "$darwin_file" $darwin_files
+	    done # $darwin_filelist
+	    ${rm}r unfat-$$
+	    cd "$darwin_orig_dir"
+	  else
+	    cd "$darwin_orig_dir"
+ 	    func_extract_an_archive "$my_xdir" "$my_xabs"
+	  fi # $darwin_arches
+	fi # $run
+	;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+        ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+    done
+    func_extract_archives_result="$my_oldobjs"
+}
+# End of Shell function definitions
+#####################################
+
+# Darwin sucks
+eval std_shrext=\"$shrext_cmds\"
+
+disable_libs=no
+
+# Parse our command line options once, thoroughly.
+while test "$#" -gt 0
+do
+  arg="$1"
+  shift
+
+  case $arg in
+  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$prev"; then
+    case $prev in
+    execute_dlfiles)
+      execute_dlfiles="$execute_dlfiles $arg"
+      ;;
+    tag)
+      tagname="$arg"
+      preserve_args="${preserve_args}=$arg"
+
+      # Check whether tagname contains only valid characters
+      case $tagname in
+      *[!-_A-Za-z0-9,/]*)
+	$echo "$progname: invalid tag name: $tagname" 1>&2
+	exit $EXIT_FAILURE
+	;;
+      esac
+
+      case $tagname in
+      CC)
+	# Don't test for the "default" C tag, as we know, it's there, but
+	# not specially marked.
+	;;
+      *)
+	if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
+	  taglist="$taglist $tagname"
+	  # Evaluate the configuration.
+	  eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
+	else
+	  $echo "$progname: ignoring unknown tag $tagname" 1>&2
+	fi
+	;;
+      esac
+      ;;
+    *)
+      eval "$prev=\$arg"
+      ;;
+    esac
+
+    prev=
+    prevopt=
+    continue
+  fi
+
+  # Have we seen a non-optional argument yet?
+  case $arg in
+  --help)
+    show_help=yes
+    ;;
+
+  --version)
+    $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+    $echo
+    $echo "Copyright (C) 2005  Free Software Foundation, Inc."
+    $echo "This is free software; see the source for copying conditions.  There is NO"
+    $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+    exit $?
+    ;;
+
+  --config)
+    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
+    done
+    exit $?
+    ;;
+
+  --debug)
+    $echo "$progname: enabling shell trace mode"
+    set -x
+    preserve_args="$preserve_args $arg"
+    ;;
+
+  --dry-run | -n)
+    run=:
+    ;;
+
+  --features)
+    $echo "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $echo "enable shared libraries"
+    else
+      $echo "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $echo "enable static libraries"
+    else
+      $echo "disable static libraries"
+    fi
+    exit $?
+    ;;
+
+  --finish) mode="finish" ;;
+
+  --mode) prevopt="--mode" prev=mode ;;
+  --mode=*) mode="$optarg" ;;
+
+  --preserve-dup-deps) duplicate_deps="yes" ;;
+
+  --quiet | --silent)
+    show=:
+    preserve_args="$preserve_args $arg"
+    ;;
+
+  --tag)
+    prevopt="--tag"
+    prev=tag
+    preserve_args="$preserve_args --tag"
+    ;;
+  --tag=*)
+    set tag "$optarg" ${1+"$@"}
+    shift
+    prev=tag
+    preserve_args="$preserve_args --tag"
+    ;;
+
+  -dlopen)
+    prevopt="-dlopen"
+    prev=execute_dlfiles
+    ;;
+
+  -*)
+    $echo "$modename: unrecognized option \`$arg'" 1>&2
+    $echo "$help" 1>&2
+    exit $EXIT_FAILURE
+    ;;
+
+  *)
+    nonopt="$arg"
+    break
+    ;;
+  esac
+done
+
+if test -n "$prevopt"; then
+  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+  $echo "$help" 1>&2
+  exit $EXIT_FAILURE
+fi
+
+case $disable_libs in
+no) 
+  ;;
+shared)
+  build_libtool_libs=no
+  build_old_libs=yes
+  ;;
+static)
+  build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+  ;;
+esac
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+if test -z "$show_help"; then
+
+  # Infer the operation mode.
+  if test -z "$mode"; then
+    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
+    $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2
+    case $nonopt in
+    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
+      mode=link
+      for arg
+      do
+	case $arg in
+	-c)
+	   mode=compile
+	   break
+	   ;;
+	esac
+      done
+      ;;
+    *db | *dbx | *strace | *truss)
+      mode=execute
+      ;;
+    *install*|cp|mv)
+      mode=install
+      ;;
+    *rm)
+      mode=uninstall
+      ;;
+    *)
+      # If we have no mode, but dlfiles were specified, then do execute mode.
+      test -n "$execute_dlfiles" && mode=execute
+
+      # Just use the default operation mode.
+      if test -z "$mode"; then
+	if test -n "$nonopt"; then
+	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+	else
+	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+	fi
+      fi
+      ;;
+    esac
+  fi
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+    $echo "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$modename --help --mode=$mode' for more information."
+
+  # These modes are in order of execution frequency so that they run quickly.
+  case $mode in
+  # libtool compile mode
+  compile)
+    modename="$modename: compile"
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+	# do not "continue".  Instead, add this to base_compile
+	lastarg="$arg"
+	arg_mode=normal
+	;;
+
+      target )
+	libobj="$arg"
+	arg_mode=normal
+	continue
+	;;
+
+      normal )
+	# Accept any command-line options.
+	case $arg in
+	-o)
+	  if test -n "$libobj" ; then
+	    $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  arg_mode=target
+	  continue
+	  ;;
+
+	-static | -prefer-pic | -prefer-non-pic)
+	  later="$later $arg"
+	  continue
+	  ;;
+
+	-no-suppress)
+	  suppress_opt=no
+	  continue
+	  ;;
+
+	-Xcompiler)
+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
+	  continue      #  The current "srcfile" will either be retained or
+	  ;;            #  replaced later.  I would guess that would be a bug.
+
+	-Wc,*)
+	  args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+	  lastarg=
+	  save_ifs="$IFS"; IFS=','
+ 	  for arg in $args; do
+	    IFS="$save_ifs"
+
+	    # Double-quote args containing other shell metacharacters.
+	    # Many Bourne shells cannot handle close brackets correctly
+	    # in scan sets, so we specify it separately.
+	    case $arg in
+	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	      arg="\"$arg\""
+	      ;;
+	    esac
+	    lastarg="$lastarg $arg"
+	  done
+	  IFS="$save_ifs"
+	  lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+	  # Add the arguments to base_compile.
+	  base_compile="$base_compile $lastarg"
+	  continue
+	  ;;
+
+	* )
+	  # Accept the current argument as the source file.
+	  # The previous "srcfile" becomes the current argument.
+	  #
+	  lastarg="$srcfile"
+	  srcfile="$arg"
+	  ;;
+	esac  #  case $arg
+	;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+
+      case $lastarg in
+      # Double-quote args containing other shell metacharacters.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, and some SunOS ksh mistreat backslash-escaping
+      # in scan sets (worked around with variable expansion),
+      # and furthermore cannot handle '|' '&' '(' ')' in scan sets 
+      # at all, so we specify them separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	lastarg="\"$lastarg\""
+	;;
+      esac
+
+      base_compile="$base_compile $lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      $echo "$modename: you must specify an argument for -Xcompile"
+      exit $EXIT_FAILURE
+      ;;
+    target)
+      $echo "$modename: you must specify a target with \`-o'" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    *)
+      # Get the name of the library object.
+      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    xform='[cCFSifmso]'
+    case $libobj in
+    *.ada) xform=ada ;;
+    *.adb) xform=adb ;;
+    *.ads) xform=ads ;;
+    *.asm) xform=asm ;;
+    *.c++) xform=c++ ;;
+    *.cc) xform=cc ;;
+    *.ii) xform=ii ;;
+    *.class) xform=class ;;
+    *.cpp) xform=cpp ;;
+    *.cxx) xform=cxx ;;
+    *.f90) xform=f90 ;;
+    *.for) xform=for ;;
+    *.java) xform=java ;;
+    esac
+
+    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+    case $libobj in
+    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+    *)
+      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -static)
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+      esac
+    done
+
+    qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
+    case $qlibobj in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	qlibobj="\"$qlibobj\"" ;;
+    esac
+    test "X$libobj" != "X$qlibobj" \
+	&& $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' 	&()|`$[]' \
+	&& $echo "$modename: libobj name \`$libobj' may not contain shell special characters."
+    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$xdir" = "X$obj"; then
+      xdir=
+    else
+      xdir=$xdir/
+    fi
+    lobj=${xdir}$objdir/$objname
+
+    if test -z "$base_compile"; then
+      $echo "$modename: you must specify a compilation command" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    $run $rm $removelist
+    trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+      removelist="$removelist $output_obj $lockfile"
+      trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $run ln "$progpath" "$lockfile" 2>/dev/null; do
+	$show "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+	$echo "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+      $echo "$srcfile" > "$lockfile"
+    fi
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+    qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
+    case $qsrcfile in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+      qsrcfile="\"$qsrcfile\"" ;;
+    esac
+
+    $run $rm "$libobj" "${libobj}T"
+
+    # Create a libtool object file (analogous to a ".la" file),
+    # but don't create it if we're doing a dry run.
+    test -z "$run" && cat > ${libobj}T <<EOF
+# $libobj - a libtool object file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+EOF
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+	command="$base_compile $qsrcfile $pic_flag"
+      else
+	# Don't build PIC code
+	command="$base_compile $qsrcfile"
+      fi
+
+      if test ! -d "${xdir}$objdir"; then
+	$show "$mkdir ${xdir}$objdir"
+	$run $mkdir ${xdir}$objdir
+	exit_status=$?
+	if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then
+	  exit $exit_status
+	fi
+      fi
+
+      if test -z "$output_obj"; then
+	# Place PIC objects in $objdir
+	command="$command -o $lobj"
+      fi
+
+      $run $rm "$lobj" "$output_obj"
+
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+	test -n "$output_obj" && $run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+	$show "$mv $output_obj $lobj"
+	if $run $mv $output_obj $lobj; then :
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+      fi
+
+      # Append the name of the PIC object to the libtool object file.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object='$objdir/$objname'
+
+EOF
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+        suppress_output=' >/dev/null 2>&1'
+      fi
+    else
+      # No PIC object so indicate it doesn't exist in the libtool
+      # object file.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+pic_object=none
+
+EOF
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+	# Don't build PIC code
+	command="$base_compile $qsrcfile"
+      else
+	command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+	command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      $run $rm "$obj" "$output_obj"
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      if test "$need_locks" = warn &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+	$show "$mv $output_obj $obj"
+	if $run $mv $output_obj $obj; then :
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+      fi
+
+      # Append the name of the non-PIC object the libtool object file.
+      # Only append if the libtool object file exists.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object='$objname'
+
+EOF
+    else
+      # Append the name of the non-PIC object the libtool object file.
+      # Only append if the libtool object file exists.
+      test -z "$run" && cat >> ${libobj}T <<EOF
+# Name of the non-PIC object.
+non_pic_object=none
+
+EOF
+    fi
+
+    $run $mv "${libobj}T" "${libobj}"
+
+    # Unlock the critical section if it was locked
+    if test "$need_locks" != no; then
+      $run $rm "$lockfile"
+    fi
+
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool link mode
+  link | relink)
+    modename="$modename: link"
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args="$nonopt"
+    base_compile="$nonopt $@"
+    compile_command="$nonopt"
+    finalize_command="$nonopt"
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    notinst_path= # paths that contain not-installed libtool libraries
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -all-static | -static)
+	if test "X$arg" = "X-all-static"; then
+	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+	  fi
+	  if test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	else
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=built
+	fi
+	build_libtool_libs=no
+	build_old_libs=yes
+	break
+	;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+	;;
+      *) qarg=$arg ;;
+      esac
+      libtool_args="$libtool_args $qarg"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+	case $prev in
+	output)
+	  compile_command="$compile_command @OUTPUT@"
+	  finalize_command="$finalize_command @OUTPUT@"
+	  ;;
+	esac
+
+	case $prev in
+	dlfiles|dlprefiles)
+	  if test "$preload" = no; then
+	    # Add the symbol object into the linking commands.
+	    compile_command="$compile_command @SYMFILE@"
+	    finalize_command="$finalize_command @SYMFILE@"
+	    preload=yes
+	  fi
+	  case $arg in
+	  *.la | *.lo) ;;  # We handle these cases below.
+	  force)
+	    if test "$dlself" = no; then
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  self)
+	    if test "$prev" = dlprefiles; then
+	      dlself=yes
+	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+	      dlself=yes
+	    else
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  *)
+	    if test "$prev" = dlfiles; then
+	      dlfiles="$dlfiles $arg"
+	    else
+	      dlprefiles="$dlprefiles $arg"
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  esac
+	  ;;
+	expsyms)
+	  export_symbols="$arg"
+	  if test ! -f "$arg"; then
+	    $echo "$modename: symbol file \`$arg' does not exist"
+	    exit $EXIT_FAILURE
+	  fi
+	  prev=
+	  continue
+	  ;;
+	expsyms_regex)
+	  export_symbols_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	inst_prefix)
+	  inst_prefix_dir="$arg"
+	  prev=
+	  continue
+	  ;;
+	precious_regex)
+	  precious_files_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	release)
+	  release="-$arg"
+	  prev=
+	  continue
+	  ;;
+	objectlist)
+	  if test -f "$arg"; then
+	    save_arg=$arg
+	    moreargs=
+	    for fil in `cat $save_arg`
+	    do
+#	      moreargs="$moreargs $fil"
+	      arg=$fil
+	      # A libtool-controlled object.
+
+	      # Check to see that this really is a libtool object.
+	      if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+		pic_object=
+		non_pic_object=
+
+		# Read the .lo file
+		# If there is no directory component, then add one.
+		case $arg in
+		*/* | *\\*) . $arg ;;
+		*) . ./$arg ;;
+		esac
+
+		if test -z "$pic_object" || \
+		   test -z "$non_pic_object" ||
+		   test "$pic_object" = none && \
+		   test "$non_pic_object" = none; then
+		  $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+		  exit $EXIT_FAILURE
+		fi
+
+		# Extract subdirectory from the argument.
+		xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+		if test "X$xdir" = "X$arg"; then
+		  xdir=
+		else
+		  xdir="$xdir/"
+		fi
+
+		if test "$pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  pic_object="$xdir$pic_object"
+
+		  if test "$prev" = dlfiles; then
+		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		      dlfiles="$dlfiles $pic_object"
+		      prev=
+		      continue
+		    else
+		      # If libtool objects are unsupported, then we need to preload.
+		      prev=dlprefiles
+		    fi
+		  fi
+
+		  # CHECK ME:  I think I busted this.  -Ossama
+		  if test "$prev" = dlprefiles; then
+		    # Preload the old-style object.
+		    dlprefiles="$dlprefiles $pic_object"
+		    prev=
+		  fi
+
+		  # A PIC object.
+		  libobjs="$libobjs $pic_object"
+		  arg="$pic_object"
+		fi
+
+		# Non-PIC object.
+		if test "$non_pic_object" != none; then
+		  # Prepend the subdirectory the object is found in.
+		  non_pic_object="$xdir$non_pic_object"
+
+		  # A standard non-PIC object
+		  non_pic_objects="$non_pic_objects $non_pic_object"
+		  if test -z "$pic_object" || test "$pic_object" = none ; then
+		    arg="$non_pic_object"
+		  fi
+		else
+		  # If the PIC object exists, use it instead.
+		  # $xdir was prepended to $pic_object above.
+		  non_pic_object="$pic_object"
+		  non_pic_objects="$non_pic_objects $non_pic_object"
+		fi
+	      else
+		# Only an error if not doing a dry-run.
+		if test -z "$run"; then
+		  $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+		  exit $EXIT_FAILURE
+		else
+		  # Dry-run case.
+
+		  # Extract subdirectory from the argument.
+		  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+		  if test "X$xdir" = "X$arg"; then
+		    xdir=
+		  else
+		    xdir="$xdir/"
+		  fi
+
+		  pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+		  non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+		  libobjs="$libobjs $pic_object"
+		  non_pic_objects="$non_pic_objects $non_pic_object"
+		fi
+	      fi
+	    done
+	  else
+	    $echo "$modename: link input file \`$save_arg' does not exist"
+	    exit $EXIT_FAILURE
+	  fi
+	  arg=$save_arg
+	  prev=
+	  continue
+	  ;;
+	rpath | xrpath)
+	  # We need an absolute path.
+	  case $arg in
+	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+	  *)
+	    $echo "$modename: only absolute run-paths are allowed" 1>&2
+	    exit $EXIT_FAILURE
+	    ;;
+	  esac
+	  if test "$prev" = rpath; then
+	    case "$rpath " in
+	    *" $arg "*) ;;
+	    *) rpath="$rpath $arg" ;;
+	    esac
+	  else
+	    case "$xrpath " in
+	    *" $arg "*) ;;
+	    *) xrpath="$xrpath $arg" ;;
+	    esac
+	  fi
+	  prev=
+	  continue
+	  ;;
+	xcompiler)
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  compile_command="$compile_command $qarg"
+	  finalize_command="$finalize_command $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $wl$qarg"
+	  prev=
+	  compile_command="$compile_command $wl$qarg"
+	  finalize_command="$finalize_command $wl$qarg"
+	  continue
+	  ;;
+	xcclinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  compile_command="$compile_command $qarg"
+	  finalize_command="$finalize_command $qarg"
+	  continue
+	  ;;
+	shrext)
+  	  shrext_cmds="$arg"
+	  prev=
+	  continue
+	  ;;
+	darwin_framework|darwin_framework_skip)
+	  test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg"
+	  compile_command="$compile_command $arg"
+	  finalize_command="$finalize_command $arg"
+	  prev=
+	  continue
+	  ;;
+	*)
+	  eval "$prev=\"\$arg\""
+	  prev=
+	  continue
+	  ;;
+	esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+	if test -n "$link_static_flag"; then
+	  compile_command="$compile_command $link_static_flag"
+	  finalize_command="$finalize_command $link_static_flag"
+	fi
+	continue
+	;;
+
+      -allow-undefined)
+	# FIXME: remove this flag sometime in the future.
+	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+	continue
+	;;
+
+      -avoid-version)
+	avoid_version=yes
+	continue
+	;;
+
+      -dlopen)
+	prev=dlfiles
+	continue
+	;;
+
+      -dlpreopen)
+	prev=dlprefiles
+	continue
+	;;
+
+      -export-dynamic)
+	export_dynamic=yes
+	continue
+	;;
+
+      -export-symbols | -export-symbols-regex)
+	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	  $echo "$modename: more than one -exported-symbols argument is not allowed"
+	  exit $EXIT_FAILURE
+	fi
+	if test "X$arg" = "X-export-symbols"; then
+	  prev=expsyms
+	else
+	  prev=expsyms_regex
+	fi
+	continue
+	;;
+
+      -framework|-arch|-isysroot)
+	case " $CC " in
+	  *" ${arg} ${1} "* | *" ${arg}	${1} "*) 
+		prev=darwin_framework_skip ;;
+	  *) compiler_flags="$compiler_flags $arg"
+	     prev=darwin_framework ;;
+	esac
+	compile_command="$compile_command $arg"
+	finalize_command="$finalize_command $arg"
+	continue
+	;;
+
+      -inst-prefix-dir)
+	prev=inst_prefix
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix* | /*-*-irix*)
+	  compile_command="$compile_command $arg"
+	  finalize_command="$finalize_command $arg"
+	  ;;
+	esac
+	continue
+	;;
+
+      -L*)
+	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  absdir=`cd "$dir" && pwd`
+	  if test -z "$absdir"; then
+	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+	    absdir="$dir"
+	    notinst_path="$notinst_path $dir"
+	  fi
+	  dir="$absdir"
+	  ;;
+	esac
+	case "$deplibs " in
+	*" -L$dir "*) ;;
+	*)
+	  deplibs="$deplibs -L$dir"
+	  lib_search_path="$lib_search_path $dir"
+	  ;;
+	esac
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$dir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  esac
+	  ;;
+	esac
+	continue
+	;;
+
+      -l*)
+	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
+	    # These systems don't actually have a C or math library (as such)
+	    continue
+	    ;;
+	  *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C and math libraries are in the System framework
+	    deplibs="$deplibs -framework System"
+	    continue
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  esac
+	elif test "X$arg" = "X-lc_r"; then
+	 case $host in
+	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	   # Do not include libc_r directly, use -pthread flag.
+	   continue
+	   ;;
+	 esac
+	fi
+	deplibs="$deplibs $arg"
+	continue
+	;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      -model)
+	compile_command="$compile_command $arg"
+	compiler_flags="$compiler_flags $arg"
+	finalize_command="$finalize_command $arg"
+	prev=xcompiler
+	continue
+	;;
+
+     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+	compiler_flags="$compiler_flags $arg"
+	compile_command="$compile_command $arg"
+	finalize_command="$finalize_command $arg"
+	continue
+	;;
+
+      -module)
+	module=yes
+	continue
+	;;
+
+      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+      # +DA*, +DD* enable 64-bit mode on the HP compiler
+      # -q* pass through compiler args for the IBM compiler
+      # -m* pass through architecture-specific compiler args for GCC
+      # -m*, -t[45]*, -txscale* pass through architecture-specific
+      # compiler args for GCC
+      # -pg pass through profiling flag for GCC
+      # @file GCC response files
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \
+      -t[45]*|-txscale*|@*)
+
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+        compile_command="$compile_command $arg"
+        finalize_command="$finalize_command $arg"
+        compiler_flags="$compiler_flags $arg"
+        continue
+        ;;
+
+      -shrext)
+	prev=shrext
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # in order for the loader to find any dlls it needs.
+	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
+      -no-undefined)
+	allow_undefined=no
+	continue
+	;;
+
+      -objectlist)
+	prev=objectlist
+	continue
+	;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+	prev=precious_regex
+	continue
+	;;
+
+      -release)
+	prev=release
+	continue
+	;;
+
+      -rpath)
+	prev=rpath
+	continue
+	;;
+
+      -R)
+	prev=xrpath
+	continue
+	;;
+
+      -R*)
+	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  $echo "$modename: only absolute run-paths are allowed" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+	case "$xrpath " in
+	*" $dir "*) ;;
+	*) xrpath="$xrpath $dir" ;;
+	esac
+	continue
+	;;
+
+      -static)
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
+	continue
+	;;
+
+      -thread-safe)
+	thread_safe=yes
+	continue
+	;;
+
+      -version-info)
+	prev=vinfo
+	continue
+	;;
+      -version-number)
+	prev=vinfo
+	vinfo_number=yes
+	continue
+	;;
+
+      -Wc,*)
+	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+	  case $flag in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    flag="\"$flag\""
+	    ;;
+	  esac
+	  arg="$arg $wl$flag"
+	  compiler_flags="$compiler_flags $flag"
+	done
+	IFS="$save_ifs"
+	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+	;;
+
+      -Wl,*)
+	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+	  case $flag in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    flag="\"$flag\""
+	    ;;
+	  esac
+	  arg="$arg $wl$flag"
+	  compiler_flags="$compiler_flags $wl$flag"
+	  linker_flags="$linker_flags $flag"
+	done
+	IFS="$save_ifs"
+	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      -XCClinker)
+	prev=xcclinker
+	continue
+	;;
+
+      # Some other compiler flag.
+      -* | +*)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	;;
+
+      *.$objext)
+	# A standard object.
+	objs="$objs $arg"
+	;;
+
+      *.lo)
+	# A libtool-controlled object.
+
+	# Check to see that this really is a libtool object.
+	if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  pic_object=
+	  non_pic_object=
+
+	  # Read the .lo file
+	  # If there is no directory component, then add one.
+	  case $arg in
+	  */* | *\\*) . $arg ;;
+	  *) . ./$arg ;;
+	  esac
+
+	  if test -z "$pic_object" || \
+	     test -z "$non_pic_object" ||
+	     test "$pic_object" = none && \
+	     test "$non_pic_object" = none; then
+	    $echo "$modename: cannot find name of object for \`$arg'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  # Extract subdirectory from the argument.
+	  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+	  if test "X$xdir" = "X$arg"; then
+	    xdir=
+ 	  else
+	    xdir="$xdir/"
+	  fi
+
+	  if test "$pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    pic_object="$xdir$pic_object"
+
+	    if test "$prev" = dlfiles; then
+	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+		dlfiles="$dlfiles $pic_object"
+		prev=
+		continue
+	      else
+		# If libtool objects are unsupported, then we need to preload.
+		prev=dlprefiles
+	      fi
+	    fi
+
+	    # CHECK ME:  I think I busted this.  -Ossama
+	    if test "$prev" = dlprefiles; then
+	      # Preload the old-style object.
+	      dlprefiles="$dlprefiles $pic_object"
+	      prev=
+	    fi
+
+	    # A PIC object.
+	    libobjs="$libobjs $pic_object"
+	    arg="$pic_object"
+	  fi
+
+	  # Non-PIC object.
+	  if test "$non_pic_object" != none; then
+	    # Prepend the subdirectory the object is found in.
+	    non_pic_object="$xdir$non_pic_object"
+
+	    # A standard non-PIC object
+	    non_pic_objects="$non_pic_objects $non_pic_object"
+	    if test -z "$pic_object" || test "$pic_object" = none ; then
+	      arg="$non_pic_object"
+	    fi
+	  else
+	    # If the PIC object exists, use it instead.
+	    # $xdir was prepended to $pic_object above.
+	    non_pic_object="$pic_object"
+	    non_pic_objects="$non_pic_objects $non_pic_object"
+	  fi
+	else
+	  # Only an error if not doing a dry-run.
+	  if test -z "$run"; then
+	    $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
+	    exit $EXIT_FAILURE
+	  else
+	    # Dry-run case.
+
+	    # Extract subdirectory from the argument.
+	    xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
+	    if test "X$xdir" = "X$arg"; then
+	      xdir=
+	    else
+	      xdir="$xdir/"
+	    fi
+
+	    pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
+	    non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
+	    libobjs="$libobjs $pic_object"
+	    non_pic_objects="$non_pic_objects $non_pic_object"
+	  fi
+	fi
+	;;
+
+      *.$libext)
+	# An archive.
+	deplibs="$deplibs $arg"
+	old_deplibs="$old_deplibs $arg"
+	continue
+	;;
+
+      *.la)
+	# A libtool-controlled library.
+
+	if test "$prev" = dlfiles; then
+	  # This library was specified with -dlopen.
+	  dlfiles="$dlfiles $arg"
+	  prev=
+	elif test "$prev" = dlprefiles; then
+	  # The library was specified with -dlpreopen.
+	  dlprefiles="$dlprefiles $arg"
+	  prev=
+	else
+	  deplibs="$deplibs $arg"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	compile_command="$compile_command $arg"
+	finalize_command="$finalize_command $arg"
+      fi
+    done # argument parsing loop
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      compile_command="$compile_command $arg"
+      finalize_command="$finalize_command $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$output_objdir" = "X$output"; then
+      output_objdir="$objdir"
+    else
+      output_objdir="$output_objdir/$objdir"
+    fi
+    # Create the object directory.
+    if test ! -d "$output_objdir"; then
+      $show "$mkdir $output_objdir"
+      $run $mkdir $output_objdir
+      exit_status=$?
+      if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then
+	exit $exit_status
+      fi
+    fi
+
+    # Determine the type of output
+    case $output in
+    "")
+      $echo "$modename: you must specify an output file" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    case $host in
+    *cygwin* | *mingw* | *pw32*)
+      # don't eliminate duplications in $postdeps and $predeps
+      duplicate_compiler_generated_deps=yes
+      ;;
+    *)
+      duplicate_compiler_generated_deps=$duplicate_deps
+      ;;
+    esac
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if test "X$duplicate_deps" = "Xyes" ; then
+	case "$libs " in
+	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
+	for pre_post_dep in $predeps $postdeps; do
+	  case "$pre_post_deps " in
+	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+	  esac
+	  pre_post_deps="$pre_post_deps $pre_post_dep"
+	done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    case $linkmode in
+    lib)
+	passes="conv link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+	    exit $EXIT_FAILURE
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=no
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+    for pass in $passes; do
+      if test "$linkmode,$pass" = "lib,link" ||
+	 test "$linkmode,$pass" = "prog,scan"; then
+	libs="$deplibs"
+	deplibs=
+      fi
+      if test "$linkmode" = prog; then
+	case $pass in
+	dlopen) libs="$dlfiles" ;;
+	dlpreopen) libs="$dlprefiles" ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+	esac
+      fi
+      if test "$pass" = dlopen; then
+	# Collect dlpreopened libraries
+	save_deplibs="$deplibs"
+	deplibs=
+      fi
+      for deplib in $libs; do
+	lib=
+	found=no
+	case $deplib in
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
+	  if test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    compiler_flags="$compiler_flags $deplib"
+	  fi
+	  continue
+	  ;;
+	-l*)
+	  if test "$linkmode" != lib && test "$linkmode" != prog; then
+	    $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
+	    continue
+	  fi
+	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+	    for search_ext in .la $std_shrext .so .a; do
+	      # Search the libtool library
+	      lib="$searchdir/lib${name}${search_ext}"
+	      if test -f "$lib"; then
+		if test "$search_ext" = ".la"; then
+		  found=yes
+		else
+		  found=no
+		fi
+		break 2
+	      fi
+	    done
+	  done
+	  if test "$found" != yes; then
+	    # deplib doesn't seem to be a libtool library
+	    if test "$linkmode,$pass" = "prog,link"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  else # deplib is a libtool library
+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+	    # We need to do some special things here, and not later.
+	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	      case " $predeps $postdeps " in
+	      *" $deplib "*)
+		if (${SED} -e '2q' $lib |
+                    grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+		  library_names=
+		  old_library=
+		  case $lib in
+		  */* | *\\*) . $lib ;;
+		  *) . ./$lib ;;
+		  esac
+		  for l in $old_library $library_names; do
+		    ll="$l"
+		  done
+		  if test "X$ll" = "X$old_library" ; then # only static version available
+		    found=no
+		    ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+		    test "X$ladir" = "X$lib" && ladir="."
+		    lib=$ladir/$old_library
+		    if test "$linkmode,$pass" = "prog,link"; then
+		      compile_deplibs="$deplib $compile_deplibs"
+		      finalize_deplibs="$deplib $finalize_deplibs"
+		    else
+		      deplibs="$deplib $deplibs"
+		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+		    fi
+		    continue
+		  fi
+		fi
+	        ;;
+	      *) ;;
+	      esac
+	    fi
+	  fi
+	  ;; # -l
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test "$pass" = conv && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+	    ;;
+	  prog)
+	    if test "$pass" = conv; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test "$pass" = scan; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+	    ;;
+	  *)
+	    $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test "$pass" = link; then
+	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) xrpath="$xrpath $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la) lib="$deplib" ;;
+	*.$libext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    valid_a_lib=no
+	    case $deplibs_check_method in
+	      match_pattern*)
+		set dummy $deplibs_check_method
+	        match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+		if eval $echo \"$deplib\" 2>/dev/null \
+		    | $SED 10q \
+		    | $EGREP "$match_pattern_regex" > /dev/null; then
+		  valid_a_lib=yes
+		fi
+		;;
+	      pass_all)
+		valid_a_lib=yes
+		;;
+            esac
+	    if test "$valid_a_lib" != yes; then
+	      $echo
+	      $echo "*** Warning: Trying to link with static lib archive $deplib."
+	      $echo "*** I have the capability to make that library automatically link in when"
+	      $echo "*** you link to this library.  But I can only do this if you have a"
+	      $echo "*** shared version of the library, which you do not appear to have"
+	      $echo "*** because the file extensions .$libext of this argument makes me believe"
+	      $echo "*** that it is just a static archive that I should not used here."
+	    else
+	      $echo
+	      $echo "*** Warning: Linking the shared library $output against the"
+	      $echo "*** static library $deplib is not portable!"
+	      deplibs="$deplib $deplibs"
+	    fi
+	    continue
+	    ;;
+	  prog)
+	    if test "$pass" != link; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test "$pass" = conv; then
+	    deplibs="$deplib $deplibs"
+	  elif test "$linkmode" = prog; then
+	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	      # If there is no dlopen support or we're linking statically,
+	      # we need to preload.
+	      newdlprefiles="$newdlprefiles $deplib"
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      newdlfiles="$newdlfiles $deplib"
+	    fi
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=yes
+	  continue
+	  ;;
+	esac # case $deplib
+	if test "$found" = yes || test -f "$lib"; then :
+	else
+	  $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# Check to see that this really is a libtool archive.
+	if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$ladir" = "X$lib" && ladir="."
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
+	# If the library was installed with an old release of libtool,
+	# it will not redefine variables installed, or shouldnotlink
+	installed=yes
+	shouldnotlink=no
+	avoidtemprpath=
+
+
+	# Read the .la file
+	case $lib in
+	*/* | *\\*) . $lib ;;
+	*) . ./$lib ;;
+	esac
+
+	if test "$linkmode,$pass" = "lib,link" ||
+	   test "$linkmode,$pass" = "prog,scan" ||
+	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+	fi
+
+	if test "$pass" = conv; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+	      exit $EXIT_FAILURE
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    convenience="$convenience $ladir/$objdir/$old_library"
+	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
+	    tmp_libs=
+	    for deplib in $dependency_libs; do
+	      deplibs="$deplib $deplibs"
+              if test "X$duplicate_deps" = "Xyes" ; then
+	        case "$tmp_libs " in
+	        *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	        esac
+              fi
+	      tmp_libs="$tmp_libs $deplib"
+	    done
+	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
+	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  continue
+	fi # $pass = conv
+
+
+	# Get the name of the library we link against.
+	linklib=
+	for l in $old_library $library_names; do
+	  linklib="$l"
+	done
+	if test -z "$linklib"; then
+	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# This library was specified with -dlopen.
+	if test "$pass" = dlopen; then
+	  if test -z "$libdir"; then
+	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  if test -z "$dlname" ||
+	     test "$dlopen_support" != yes ||
+	     test "$build_libtool_libs" = no; then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.  We also need to preload any
+	    # dependent libraries so libltdl's deplib preloader doesn't
+	    # bomb out in the load deplibs phase.
+	    dlprefiles="$dlprefiles $lib $dependency_libs"
+	  else
+	    newdlfiles="$newdlfiles $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
+
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+	    abs_ladir="$ladir"
+	  fi
+	  ;;
+	esac
+	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+	# Find the relevant object directory and library name.
+	if test "X$installed" = Xyes; then
+	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    libdir="$abs_ladir"
+	  else
+	    dir="$libdir"
+	    absdir="$libdir"
+	  fi
+	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+	else
+	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    # Remove this search path later
+	    notinst_path="$notinst_path $abs_ladir"
+	  else
+	    dir="$ladir/$objdir"
+	    absdir="$abs_ladir/$objdir"
+	    # Remove this search path later
+	    notinst_path="$notinst_path $abs_ladir"
+	  fi
+	fi # $installed = yes
+	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+	# This library was specified with -dlpreopen.
+	if test "$pass" = dlpreopen; then
+	  if test -z "$libdir"; then
+	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	  # Prefer using a static library (so that no silly _DYNAMIC symbols
+	  # are required to link).
+	  if test -n "$old_library"; then
+	    newdlprefiles="$newdlprefiles $dir/$old_library"
+	  # Otherwise, use the dlname, so that lt_dlopen finds it.
+	  elif test -n "$dlname"; then
+	    newdlprefiles="$newdlprefiles $dir/$dlname"
+	  else
+	    newdlprefiles="$newdlprefiles $dir/$linklib"
+	  fi
+	fi # $pass = dlpreopen
+
+	if test -z "$libdir"; then
+	  # Link the convenience library
+	  if test "$linkmode" = lib; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs" # used for prog,scan pass
+	  fi
+	  continue
+	fi
+
+
+	if test "$linkmode" = prog && test "$pass" != link; then
+	  newlib_search_path="$newlib_search_path $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=no
+	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+	     test "$build_libtool_libs" = no; then
+	    linkalldeplibs=yes
+	  fi
+
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+	    esac
+	    # Need to link against all dependency_libs?
+	    if test "$linkalldeplibs" = yes; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    if test "X$duplicate_deps" = "Xyes" ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	    fi
+	    tmp_libs="$tmp_libs $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	if test "$linkmode,$pass" = "prog,link"; then
+	  if test -n "$library_names" &&
+	     { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+	    # We need to hardcode the library path
+	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+	      # Make sure the rpath contains only unique directories.
+	      case "$temp_rpath " in
+	      *" $dir "*) ;;
+	      *" $absdir "*) ;;
+	      *) temp_rpath="$temp_rpath $absdir" ;;
+	      esac
+	    fi
+
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
+	    esac
+	  fi # $linkmode,$pass = prog,link...
+
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+	fi
+
+	link_static=no # Whether the deplib will be linked statically
+	use_static_libs=$prefer_static_libs
+	if test "$use_static_libs" = built && test "$installed" = yes ; then
+	  use_static_libs=no
+	fi
+	if test -n "$library_names" &&
+	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
+	  if test "$installed" = no; then
+	    notinst_deplibs="$notinst_deplibs $lib"
+	    need_relink=yes
+	  fi
+	  # This is a shared library
+
+	  # Warn about portability, can't link against -module's on
+	  # some systems (darwin)
+	  if test "$shouldnotlink" = yes && test "$pass" = link ; then
+	    $echo
+	    if test "$linkmode" = prog; then
+	      $echo "*** Warning: Linking the executable $output against the loadable module"
+	    else
+	      $echo "*** Warning: Linking the shared library $output against the loadable module"
+	    fi
+	    $echo "*** $linklib is not portable!"
+	  fi
+	  if test "$linkmode" = lib &&
+	     test "$hardcode_into_libs" = yes; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
+	    esac
+	  fi
+
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    realname="$2"
+	    shift; shift
+	    libname=`eval \\$echo \"$libname_spec\"`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname="$dlname"
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin* | mingw*)
+		major=`expr $current - $age`
+		versuffix="-$major"
+		;;
+	      esac
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname="$realname"
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot="$soname"
+	    soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
+	    newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      $show "extracting exported symbol list from \`$soname'"
+	      save_ifs="$IFS"; IFS='~'
+	      cmds=$extract_expsyms_cmds
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd" || exit $?
+	      done
+	      IFS="$save_ifs"
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      $show "generating import library for \`$soname'"
+	      save_ifs="$IFS"; IFS='~'
+	      cmds=$old_archive_from_expsyms_cmds
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd" || exit $?
+	      done
+	      IFS="$save_ifs"
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n "$old_archive_from_expsyms_cmds"
+
+	  if test "$linkmode" = prog || test "$mode" != relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test "$hardcode_direct" = no; then
+		add="$dir/$linklib"
+		case $host in
+		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+		    *-*-unixware7*) add_dir="-L$dir" ;;
+		  *-*-darwin* )
+		    # if the lib is a module then we can not link against
+		    # it, someone is ignoring the new warnings I added
+		    if /usr/bin/file -L $add 2> /dev/null |
+                      $EGREP ": [^:]* bundle" >/dev/null ; then
+		      $echo "** Warning, lib $linklib is a module, not a shared library"
+		      if test -z "$old_library" ; then
+		        $echo
+		        $echo "** And there doesn't seem to be a static archive available"
+		        $echo "** The link will probably fail, sorry"
+		      else
+		        add="$dir/$old_library"
+		      fi
+		    fi
+		esac
+	      elif test "$hardcode_minus_L" = no; then
+		case $host in
+		*-*-sunos*) add_shlibpath="$dir" ;;
+		esac
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = no; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test "$hardcode_direct" = yes; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = yes; then
+		add_dir="-L$dir"
+		# Try looking first in the location we're being installed to.
+		if test -n "$inst_prefix_dir"; then
+		  case $libdir in
+		    [\\/]*)
+		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		      ;;
+		  esac
+		fi
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = yes; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test "$lib_linked" != yes; then
+	      $echo "$modename: configuration error: unsupported hardcode properties"
+	      exit $EXIT_FAILURE
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+	      esac
+	    fi
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test "$hardcode_direct" != yes && \
+		 test "$hardcode_minus_L" != yes && \
+		 test "$hardcode_shlibpath_var" = yes; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+		esac
+	      fi
+	    fi
+	  fi
+
+	  if test "$linkmode" = prog || test "$mode" = relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
+	    if test "$hardcode_direct" = yes; then
+	      add="$libdir/$linklib"
+	    elif test "$hardcode_minus_L" = yes; then
+	      add_dir="-L$libdir"
+	      add="-l$name"
+	    elif test "$hardcode_shlibpath_var" = yes; then
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+	      esac
+	      add="-l$name"
+	    elif test "$hardcode_automatic" = yes; then
+	      if test -n "$inst_prefix_dir" &&
+		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
+	        add="$inst_prefix_dir$libdir/$linklib"
+	      else
+	        add="$libdir/$linklib"
+	      fi
+	    else
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir="-L$libdir"
+	      # Try looking first in the location we're being installed to.
+	      if test -n "$inst_prefix_dir"; then
+		case $libdir in
+		  [\\/]*)
+		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
+		    ;;
+		esac
+	      fi
+	      add="-l$name"
+	    fi
+
+	    if test "$linkmode" = prog; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
+	  fi
+	elif test "$linkmode" = prog; then
+	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+	  # is not unsupported.  This is valid on all known static and
+	  # shared platforms.
+	  if test "$hardcode_direct" != unsupported; then
+	    test -n "$old_library" && linklib="$old_library"
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
+	  else
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test "$build_libtool_libs" = yes; then
+	  # Not a shared library
+	  if test "$deplibs_check_method" != pass_all; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    $echo
+	    $echo "*** Warning: This system can not link to static lib archive $lib."
+	    $echo "*** I have the capability to make that library automatically link in when"
+	    $echo "*** you link to this library.  But I can only do this if you have a"
+	    $echo "*** shared version of the library, which you do not appear to have."
+	    if test "$module" = yes; then
+	      $echo "*** But as you try to build a module library, libtool will still create "
+	      $echo "*** a static module, that should work as long as the dlopening application"
+	      $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      if test -z "$global_symbol_pipe"; then
+		$echo
+		$echo "*** However, this would only work if libtool was able to extract symbol"
+		$echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		$echo "*** not find such a program.  So, this module is probably useless."
+		$echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test "$build_old_libs" = no; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test "$linkmode" = lib; then
+	  if test -n "$dependency_libs" &&
+	     { test "$hardcode_into_libs" != yes ||
+	       test "$build_old_libs" = yes ||
+	       test "$link_static" = yes; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) xrpath="$xrpath $temp_xrpath";;
+		   esac;;
+	      *) temp_deplibs="$temp_deplibs $libdir";;
+	      esac
+	    done
+	    dependency_libs="$temp_deplibs"
+	  fi
+
+	  newlib_search_path="$newlib_search_path $absdir"
+	  # Link against this library
+	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    if test "X$duplicate_deps" = "Xyes" ; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	    fi
+	    tmp_libs="$tmp_libs $deplib"
+	  done
+
+	  if test "$link_all_deplibs" != no; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      -L*) path="$deplib" ;;
+	      *.la)
+		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+		test "X$dir" = "X$deplib" && dir="."
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+		    absdir="$dir"
+		  fi
+		  ;;
+		esac
+		if grep "^installed=no" $deplib > /dev/null; then
+		  path="$absdir/$objdir"
+		else
+		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  if test -z "$libdir"; then
+		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+		    exit $EXIT_FAILURE
+		  fi
+		  if test "$absdir" != "$libdir"; then
+		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+		  fi
+		  path="$absdir"
+		fi
+		depdepl=
+		case $host in
+		*-*-darwin*)
+		  # we do not want to link against static libs,
+		  # but need to link against shared
+		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names" ; then
+		    for tmp in $deplibrary_names ; do
+		      depdepl=$tmp
+		    done
+		    if test -f "$path/$depdepl" ; then
+		      depdepl="$path/$depdepl"
+		    fi
+		    # do not add paths which are already there
+		    case " $newlib_search_path " in
+		    *" $path "*) ;;
+		    *) newlib_search_path="$newlib_search_path $path";;
+		    esac
+		  fi
+		  path=""
+		  ;;
+		*)
+		  path="-L$path"
+		  ;;
+		esac
+		;;
+	      -l*)
+		case $host in
+		*-*-darwin*)
+		  # Again, we only want to link against shared libraries
+		  eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
+		  for tmp in $newlib_search_path ; do
+		    if test -f "$tmp/lib$tmp_libs.dylib" ; then
+		      eval depdepl="$tmp/lib$tmp_libs.dylib"
+		      break
+		    fi
+		  done
+		  path=""
+		  ;;
+		*) continue ;;
+		esac
+		;;
+	      *) continue ;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$path $deplibs" ;;
+	      esac
+	      case " $deplibs " in
+	      *" $depdepl "*) ;;
+	      *) deplibs="$depdepl $deplibs" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test "$pass" != dlopen; then
+	if test "$pass" != conv; then
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) lib_search_path="$lib_search_path $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	fi
+
+	if test "$linkmode,$pass" != "prog,link"; then
+	  vars="deplibs"
+	else
+	  vars="compile_deplibs finalize_deplibs"
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    # FIXME: Pedantically, this is the right thing to do, so
+	    #        that some nasty dependency loop isn't accidentally
+	    #        broken:
+	    #new_libs="$deplib $new_libs"
+	    # Pragmatically, this seems to cause very few problems in
+	    # practice:
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    -R*) ;;
+	    *)
+	      # And here is the reason: when a library appears more
+	      # than once as an explicit dependence of a library, or
+	      # is implicitly linked in more than once by the
+	      # compiler, it is considered special, and multiple
+	      # occurrences thereof are not removed.  Compare this
+	      # with having the same library being listed as a
+	      # dependency of multiple other libraries: in this case,
+	      # we know (pedantically, we assume) the library does not
+	      # need to be listed more than once, so we keep only the
+	      # last copy.  This is not always right, but it is rare
+	      # enough that we require users that really mean to play
+	      # such unportable linking tricks to link the library
+	      # using -Wl,-lname, so that libtool does not consider it
+	      # for duplicate removal.
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) tmp_libs="$tmp_libs $deplib" ;;
+	      esac
+	      ;;
+	    *) tmp_libs="$tmp_libs $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+	case " $predeps $postdeps $compiler_lib_search_path " in
+	*" $i "*)
+	  i=""
+	  ;;
+	esac
+	if test -n "$i" ; then
+	  tmp_libs="$tmp_libs $i"
+	fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$deplibs"; then
+	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
+      fi
+
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$rpath"; then
+	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$xrpath"; then
+	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+      fi
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+	eval shared_ext=\"$shrext_cmds\"
+	eval libname=\"$libname_spec\"
+	;;
+      *)
+	if test "$module" = no; then
+	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+	if test "$need_lib_prefix" != no; then
+	  # Add the "lib" prefix for modules if required
+	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+	  eval shared_ext=\"$shrext_cmds\"
+	  eval libname=\"$libname_spec\"
+	else
+	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+	fi
+	;;
+      esac
+
+      if test -n "$objs"; then
+	if test "$deplibs_check_method" != pass_all; then
+	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+	  exit $EXIT_FAILURE
+	else
+	  $echo
+	  $echo "*** Warning: Linking the shared library $output against the non-libtool"
+	  $echo "*** objects $objs is not portable!"
+	  libobjs="$libobjs $objs"
+	fi
+      fi
+
+      if test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
+      fi
+
+      set dummy $rpath
+      if test "$#" -gt 2; then
+	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+      fi
+      install_libdir="$2"
+
+      oldlibs=
+      if test -z "$rpath"; then
+	if test "$build_libtool_libs" = yes; then
+	  # Building a libtool convenience library.
+	  # Some compilers have problems with a `.al' extension so
+	  # convenience libraries should have the same extension an
+	  # archive normally would.
+	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+	  build_libtool_libs=convenience
+	  build_old_libs=yes
+	fi
+
+	if test -n "$vinfo"; then
+	  $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
+	fi
+
+	if test -n "$release"; then
+	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+	fi
+      else
+
+	# Parse the version information argument.
+	save_ifs="$IFS"; IFS=':'
+	set dummy $vinfo 0 0 0
+	IFS="$save_ifs"
+
+	if test -n "$8"; then
+	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# convert absolute version numbers to libtool ages
+	# this retains compatibility with .la files and attempts
+	# to make the code below a bit more comprehensible
+
+	case $vinfo_number in
+	yes)
+	  number_major="$2"
+	  number_minor="$3"
+	  number_revision="$4"
+	  #
+	  # There are really only two kinds -- those that
+	  # use the current revision as the major version
+	  # and those that subtract age and use age as
+	  # a minor version.  But, then there is irix
+	  # which has an extra 1 added just for fun
+	  #
+	  case $version_type in
+	  darwin|linux|osf|windows)
+	    current=`expr $number_major + $number_minor`
+	    age="$number_minor"
+	    revision="$number_revision"
+	    ;;
+	  freebsd-aout|freebsd-elf|sunos)
+	    current="$number_major"
+	    revision="$number_minor"
+	    age="0"
+	    ;;
+	  irix|nonstopux)
+	    current=`expr $number_major + $number_minor - 1`
+	    age="$number_minor"
+	    revision="$number_minor"
+	    ;;
+	  esac
+	  ;;
+	no)
+	  current="$2"
+	  revision="$3"
+	  age="$4"
+	  ;;
+	esac
+
+	# Check that each of the things are valid numbers.
+	case $current in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	case $revision in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	case $age in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	if test "$age" -gt "$current"; then
+	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# Calculate the version variables.
+	major=
+	versuffix=
+	verstring=
+	case $version_type in
+	none) ;;
+
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  major=.`expr $current - $age`
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  minor_current=`expr $current + 1`
+	  verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+	  ;;
+
+	freebsd-aout)
+	  major=".$current"
+	  versuffix=".$current.$revision";
+	  ;;
+
+	freebsd-elf)
+	  major=".$current"
+	  versuffix=".$current";
+	  ;;
+
+	irix | nonstopux)
+	  major=`expr $current - $age + 1`
+
+	  case $version_type in
+	    nonstopux) verstring_prefix=nonstopux ;;
+	    *)         verstring_prefix=sgi ;;
+	  esac
+	  verstring="$verstring_prefix$major.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$revision
+	  while test "$loop" -ne 0; do
+	    iface=`expr $revision - $loop`
+	    loop=`expr $loop - 1`
+	    verstring="$verstring_prefix$major.$iface:$verstring"
+	  done
+
+	  # Before this point, $major must not contain `.'.
+	  major=.$major
+	  versuffix="$major.$revision"
+	  ;;
+
+	linux)
+	  major=.`expr $current - $age`
+	  versuffix="$major.$age.$revision"
+	  ;;
+
+	osf)
+	  major=.`expr $current - $age`
+	  versuffix=".$current.$age.$revision"
+	  verstring="$current.$age.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$age
+	  while test "$loop" -ne 0; do
+	    iface=`expr $current - $loop`
+	    loop=`expr $loop - 1`
+	    verstring="$verstring:${iface}.0"
+	  done
+
+	  # Make executables depend on our current version.
+	  verstring="$verstring:${current}.0"
+	  ;;
+
+	sunos)
+	  major=".$current"
+	  versuffix=".$current.$revision"
+	  ;;
+
+	windows)
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 filesystems.
+	  major=`expr $current - $age`
+	  versuffix="-$major"
+	  ;;
+
+	*)
+	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
+	  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	# Clear the version info if we defaulted, and they specified a release.
+	if test -z "$vinfo" && test -n "$release"; then
+	  major=
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=
+	    ;;
+	  *)
+	    verstring="0.0"
+	    ;;
+	  esac
+	  if test "$need_version" = no; then
+	    versuffix=
+	  else
+	    versuffix=".0.0"
+	  fi
+	fi
+
+	# Remove version info from name if versioning should be avoided
+	if test "$avoid_version" = yes && test "$need_version" = no; then
+	  major=
+	  versuffix=
+	  verstring=""
+	fi
+
+	# Check to see if the archive will have undefined symbols.
+	if test "$allow_undefined" = yes; then
+	  if test "$allow_undefined_flag" = unsupported; then
+	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+	    build_libtool_libs=no
+	    build_old_libs=yes
+	  fi
+	else
+	  # Don't allow undefined symbols.
+	  allow_undefined_flag="$no_undefined_flag"
+	fi
+      fi
+
+      if test "$mode" != relink; then
+	# Remove our outputs, but don't remove object files since they
+	# may have been created when compiling PIC objects.
+	removelist=
+	tempremovelist=`$echo "$output_objdir/*"`
+	for p in $tempremovelist; do
+	  case $p in
+	    *.$objext)
+	       ;;
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+	       if test "X$precious_files_regex" != "X"; then
+	         if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+	         then
+		   continue
+		 fi
+	       fi
+	       removelist="$removelist $p"
+	       ;;
+	    *) ;;
+	  esac
+	done
+	if test -n "$removelist"; then
+	  $show "${rm}r $removelist"
+	  $run ${rm}r $removelist
+	fi
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+	oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+	# Transform .lo files to .o files.
+	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      for path in $notinst_path; do
+	lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
+	deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
+	dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
+      done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  temp_xrpath="$temp_xrpath -R$libdir"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) dlfiles="$dlfiles $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) dlprefiles="$dlprefiles $lib" ;;
+	esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    deplibs="$deplibs -framework System"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    ;;
+ 	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test "$build_libtool_need_lc" = "yes"; then
+	      deplibs="$deplibs -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
+	# Transform deplibs into only deplibs that can be linked in shared.
+	name_save=$name
+	libname_save=$libname
+	release_save=$release
+	versuffix_save=$versuffix
+	major_save=$major
+	# I'm not sure if I'm treating the release correctly.  I think
+	# release should show up in the -l (ie -lgmp5) so we don't want to
+	# add it in twice.  Is that correct?
+	release=""
+	versuffix=""
+	major=""
+	newdeplibs=
+	droppeddeps=no
+	case $deplibs_check_method in
+	pass_all)
+	  # Don't check for shared/static.  Everything works.
+	  # This might be a little naive.  We might want to check
+	  # whether the library exists or not.  But this is on
+	  # osf3 & osf4 and I'm not really sure... Just
+	  # implementing what was already the behavior.
+	  newdeplibs=$deplibs
+	  ;;
+	test_compile)
+	  # This code stresses the "libraries are programs" paradigm to its
+	  # limits. Maybe even breaks it.  We compile a program, linking it
+	  # against the deplibs as a proxy for the library.  Then we can check
+	  # whether they linked in statically or dynamically with ldd.
+	  $rm conftest.c
+	  cat > conftest.c <<EOF
+	  int main() { return 0; }
+EOF
+	  $rm conftest
+	  $LTCC $LTCFLAGS -o conftest conftest.c $deplibs
+	  if test "$?" -eq 0 ; then
+	    ldd_output=`ldd conftest`
+	    for i in $deplibs; do
+	      name=`expr $i : '-l\(.*\)'`
+	      # If $name is empty we are operating on a -L argument.
+              if test "$name" != "" && test "$name" -ne "0"; then
+		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		  case " $predeps $postdeps " in
+		  *" $i "*)
+		    newdeplibs="$newdeplibs $i"
+		    i=""
+		    ;;
+		  esac
+	        fi
+		if test -n "$i" ; then
+		  libname=`eval \\$echo \"$libname_spec\"`
+		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
+		  set dummy $deplib_matches
+		  deplib_match=$2
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    newdeplibs="$newdeplibs $i"
+		  else
+		    droppeddeps=yes
+		    $echo
+		    $echo "*** Warning: dynamic linker does not accept needed library $i."
+		    $echo "*** I have the capability to make that library automatically link in when"
+		    $echo "*** you link to this library.  But I can only do this if you have a"
+		    $echo "*** shared version of the library, which I believe you do not have"
+		    $echo "*** because a test_compile did reveal that the linker did not use it for"
+		    $echo "*** its dynamic dependency list that programs get resolved with at runtime."
+		  fi
+		fi
+	      else
+		newdeplibs="$newdeplibs $i"
+	      fi
+	    done
+	  else
+	    # Error occurred in the first compile.  Let's try to salvage
+	    # the situation: Compile a separate program for each library.
+	    for i in $deplibs; do
+	      name=`expr $i : '-l\(.*\)'`
+	      # If $name is empty we are operating on a -L argument.
+              if test "$name" != "" && test "$name" != "0"; then
+		$rm conftest
+		$LTCC $LTCFLAGS -o conftest conftest.c $i
+		# Did it work?
+		if test "$?" -eq 0 ; then
+		  ldd_output=`ldd conftest`
+		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		    case " $predeps $postdeps " in
+		    *" $i "*)
+		      newdeplibs="$newdeplibs $i"
+		      i=""
+		      ;;
+		    esac
+		  fi
+		  if test -n "$i" ; then
+		    libname=`eval \\$echo \"$libname_spec\"`
+		    deplib_matches=`eval \\$echo \"$library_names_spec\"`
+		    set dummy $deplib_matches
+		    deplib_match=$2
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		      newdeplibs="$newdeplibs $i"
+		    else
+		      droppeddeps=yes
+		      $echo
+		      $echo "*** Warning: dynamic linker does not accept needed library $i."
+		      $echo "*** I have the capability to make that library automatically link in when"
+		      $echo "*** you link to this library.  But I can only do this if you have a"
+		      $echo "*** shared version of the library, which you do not appear to have"
+		      $echo "*** because a test_compile did reveal that the linker did not use this one"
+		      $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+		    fi
+		  fi
+		else
+		  droppeddeps=yes
+		  $echo
+		  $echo "*** Warning!  Library $i is needed by this library but I was not able to"
+		  $echo "***  make it link in!  You will probably need to install it or some"
+		  $echo "*** library that it depends on before this library will be fully"
+		  $echo "*** functional.  Installing it before continuing would be even better."
+		fi
+	      else
+		newdeplibs="$newdeplibs $i"
+	      fi
+	    done
+	  fi
+	  ;;
+	file_magic*)
+	  set dummy $deplibs_check_method
+	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    name=`expr $a_deplib : '-l\(.*\)'`
+	    # If $name is empty we are operating on a -L argument.
+            if test "$name" != "" && test  "$name" != "0"; then
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  newdeplibs="$newdeplibs $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval \\$echo \"$libname_spec\"`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		      # Follow soft links.
+		      if ls -lLd "$potent_lib" 2>/dev/null \
+			 | grep " -> " >/dev/null; then
+			continue
+		      fi
+		      # The statement above tries to avoid entering an
+		      # endless loop below, in case of cyclic links.
+		      # We might still enter an endless loop, since a link
+		      # loop can be closed while we follow links,
+		      # but so what?
+		      potlib="$potent_lib"
+		      while test -h "$potlib" 2>/dev/null; do
+			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+			case $potliblink in
+			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+			esac
+		      done
+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+			 | ${SED} 10q \
+			 | $EGREP "$file_magic_regex" > /dev/null; then
+			newdeplibs="$newdeplibs $a_deplib"
+			a_deplib=""
+			break 2
+		      fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		$echo
+		$echo "*** Warning: linker path does not have real file for library $a_deplib."
+		$echo "*** I have the capability to make that library automatically link in when"
+		$echo "*** you link to this library.  But I can only do this if you have a"
+		$echo "*** shared version of the library, which you do not appear to have"
+		$echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $echo "*** with $libname but no candidates were found. (...for file magic test)"
+		else
+		  $echo "*** with $libname and none of the candidates passed a file format test"
+		  $echo "*** using a file magic. Last file checked: $potlib"
+		fi
+	      fi
+	    else
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	    fi
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    name=`expr $a_deplib : '-l\(.*\)'`
+	    # If $name is empty we are operating on a -L argument.
+	    if test -n "$name" && test "$name" != "0"; then
+	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  newdeplibs="$newdeplibs $a_deplib"
+		  a_deplib=""
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib" ; then
+		libname=`eval \\$echo \"$libname_spec\"`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		    potlib="$potent_lib" # see symlink-check above in file_magic test
+		    if eval $echo \"$potent_lib\" 2>/dev/null \
+		        | ${SED} 10q \
+		        | $EGREP "$match_pattern_regex" > /dev/null; then
+		      newdeplibs="$newdeplibs $a_deplib"
+		      a_deplib=""
+		      break 2
+		    fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		$echo
+		$echo "*** Warning: linker path does not have real file for library $a_deplib."
+		$echo "*** I have the capability to make that library automatically link in when"
+		$echo "*** you link to this library.  But I can only do this if you have a"
+		$echo "*** shared version of the library, which you do not appear to have"
+		$echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib" ; then
+		  $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
+		else
+		  $echo "*** with $libname and none of the candidates passed a file format test"
+		  $echo "*** using a regex pattern. Last file checked: $potlib"
+		fi
+	      fi
+	    else
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	    fi
+	  done # Gone through all deplibs.
+	  ;;
+	none | unknown | *)
+	  newdeplibs=""
+	  tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+	    -e 's/ -[LR][^ ]*//g'`
+	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+	    for i in $predeps $postdeps ; do
+	      # can't use Xsed below, because $i might contain '/'
+	      tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
+	    done
+	  fi
+	  if $echo "X $tmp_deplibs" | $Xsed -e 's/[ 	]//g' \
+	    | grep . >/dev/null; then
+	    $echo
+	    if test "X$deplibs_check_method" = "Xnone"; then
+	      $echo "*** Warning: inter-library dependencies are not supported in this platform."
+	    else
+	      $echo "*** Warning: inter-library dependencies are not known to be supported."
+	    fi
+	    $echo "*** All declared inter-library dependencies are being dropped."
+	    droppeddeps=yes
+	  fi
+	  ;;
+	esac
+	versuffix=$versuffix_save
+	major=$major_save
+	release=$release_save
+	libname=$libname_save
+	name=$name_save
+
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library is the System framework
+	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	  ;;
+	esac
+
+	if test "$droppeddeps" = yes; then
+	  if test "$module" = yes; then
+	    $echo
+	    $echo "*** Warning: libtool could not satisfy all declared inter-library"
+	    $echo "*** dependencies of module $libname.  Therefore, libtool will create"
+	    $echo "*** a static module, that should work as long as the dlopening"
+	    $echo "*** application is linked with the -dlopen flag."
+	    if test -z "$global_symbol_pipe"; then
+	      $echo
+	      $echo "*** However, this would only work if libtool was able to extract symbol"
+	      $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      $echo "*** not find such a program.  So, this module is probably useless."
+	      $echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	    fi
+	    if test "$build_old_libs" = no; then
+	      oldlibs="$output_objdir/$libname.$libext"
+	      build_libtool_libs=module
+	      build_old_libs=yes
+	    else
+	      build_libtool_libs=no
+	    fi
+	  else
+	    $echo "*** The inter-library dependencies that have been dropped here will be"
+	    $echo "*** automatically added whenever a program is linked with this library"
+	    $echo "*** or is declared to -dlopen it."
+
+	    if test "$allow_undefined" = no; then
+	      $echo
+	      $echo "*** Since this library must not contain undefined symbols,"
+	      $echo "*** because either the platform does not support them or"
+	      $echo "*** it was explicitly requested with -no-undefined,"
+	      $echo "*** libtool will only create a static version of it."
+	      if test "$build_old_libs" = no; then
+		oldlibs="$output_objdir/$libname.$libext"
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  fi
+	fi
+	# Done checking deplibs!
+	deplibs=$newdeplibs
+      fi
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $deplibs " in
+	  *" -L$path/$objdir "*)
+	    new_libs="$new_libs -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) new_libs="$new_libs $deplib" ;;
+	  esac
+	  ;;
+	*) new_libs="$new_libs $deplib" ;;
+	esac
+      done
+      deplibs="$new_libs"
+
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+	if test "$hardcode_into_libs" = yes; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath="$finalize_rpath"
+	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs="$libdir"
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		dep_rpath="$dep_rpath $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) perm_rpath="$perm_rpath $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir="$hardcode_libdirs"
+	    if test -n "$hardcode_libdir_flag_spec_ld"; then
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+	    else
+	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+	    fi
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      rpath="$rpath$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath="$finalize_shlibpath"
+	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
+	# Get the real and link names of the library.
+	eval shared_ext=\"$shrext_cmds\"
+	eval library_names=\"$library_names_spec\"
+	set dummy $library_names
+	realname="$2"
+	shift; shift
+
+	if test -n "$soname_spec"; then
+	  eval soname=\"$soname_spec\"
+	else
+	  soname="$realname"
+	fi
+	if test -z "$dlname"; then
+	  dlname=$soname
+	fi
+
+	lib="$output_objdir/$realname"
+	linknames=
+	for link
+	do
+	  linknames="$linknames $link"
+	done
+
+	# Use standard objects if they are pic
+	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+
+	# Prepare the list of exported symbols
+	if test -z "$export_symbols"; then
+	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+	    $show "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $run $rm $export_symbols
+	    cmds=$export_symbols_cmds
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd in $cmds; do
+	      IFS="$save_ifs"
+	      eval cmd=\"$cmd\"
+	      if len=`expr "X$cmd" : ".*"` &&
+	       test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	        $show "$cmd"
+	        $run eval "$cmd" || exit $?
+	        skipped_export=false
+	      else
+	        # The command line is too long to execute in one step.
+	        $show "using reloadable object file for export list..."
+	        skipped_export=:
+		# Break out early, otherwise skipped_export may be
+		# set to false by a later but shorter cmd.
+		break
+	      fi
+	    done
+	    IFS="$save_ifs"
+	    if test -n "$export_symbols_regex"; then
+	      $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+	      $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+	fi
+
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+	fi
+
+	tmp_deplibs=
+	for test_deplib in $deplibs; do
+		case " $convenience " in
+		*" $test_deplib "*) ;;
+		*)
+			tmp_deplibs="$tmp_deplibs $test_deplib"
+			;;
+		esac
+	done
+	deplibs="$tmp_deplibs"
+
+	if test -n "$convenience"; then
+	  if test -n "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	  else
+	    gentop="$output_objdir/${outputname}x"
+	    generated="$generated $gentop"
+
+	    func_extract_archives $gentop $convenience
+	    libobjs="$libobjs $func_extract_archives_result"
+	  fi
+	fi
+	
+	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+	  eval flag=\"$thread_safe_flag_spec\"
+	  linker_flags="$linker_flags $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test "$mode" = relink; then
+	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+	fi
+
+	# Do each of the archive commands.
+	if test "$module" = yes && test -n "$module_cmds" ; then
+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	    eval test_cmds=\"$module_expsym_cmds\"
+	    cmds=$module_expsym_cmds
+	  else
+	    eval test_cmds=\"$module_cmds\"
+	    cmds=$module_cmds
+	  fi
+	else
+	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	  eval test_cmds=\"$archive_expsym_cmds\"
+	  cmds=$archive_expsym_cmds
+	else
+	  eval test_cmds=\"$archive_cmds\"
+	  cmds=$archive_cmds
+	  fi
+	fi
+
+	if test "X$skipped_export" != "X:" &&
+	   len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+	   test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  :
+	else
+	  # The command line is too long to link in one step, link piecewise.
+	  $echo "creating reloadable object files..."
+
+	  # Save the value of $output and $libobjs because we want to
+	  # use them later.  If we have whole_archive_flag_spec, we
+	  # want to use save_libobjs as it was before
+	  # whole_archive_flag_spec was expanded, because we can't
+	  # assume the linker understands whole_archive_flag_spec.
+	  # This may have to be revisited, in case too many
+	  # convenience libraries get linked in and end up exceeding
+	  # the spec.
+	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	  fi
+	  save_output=$output
+	  output_la=`$echo "X$output" | $Xsed -e "$basename"`
+
+	  # Clear the reloadable object creation command queue and
+	  # initialize k to one.
+	  test_cmds=
+	  concat_cmds=
+	  objlist=
+	  delfiles=
+	  last_robj=
+	  k=1
+	  output=$output_objdir/$output_la-${k}.$objext
+	  # Loop over the list of objects to be linked.
+	  for obj in $save_libobjs
+	  do
+	    eval test_cmds=\"$reload_cmds $objlist $last_robj\"
+	    if test "X$objlist" = X ||
+	       { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+		 test "$len" -le "$max_cmd_len"; }; then
+	      objlist="$objlist $obj"
+	    else
+	      # The command $test_cmds is almost too long, add a
+	      # command to the queue.
+	      if test "$k" -eq 1 ; then
+		# The first file doesn't have a previous command to add.
+		eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+	      else
+		# All subsequent reloadable object files will link in
+		# the last one created.
+		eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
+	      fi
+	      last_robj=$output_objdir/$output_la-${k}.$objext
+	      k=`expr $k + 1`
+	      output=$output_objdir/$output_la-${k}.$objext
+	      objlist=$obj
+	      len=1
+	    fi
+	  done
+	  # Handle the remaining objects by creating one last
+	  # reloadable object file.  All subsequent reloadable object
+	  # files will link in the last one created.
+	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	  eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+
+	  if ${skipped_export-false}; then
+	    $show "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $run $rm $export_symbols
+	    libobjs=$output
+	    # Append the command to create the export file.
+	    eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
+          fi
+
+	  # Set up a command to remove the reloadable object files
+	  # after they are used.
+	  i=0
+	  while test "$i" -lt "$k"
+	  do
+	    i=`expr $i + 1`
+	    delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
+	  done
+
+	  $echo "creating a temporary reloadable object file: $output"
+
+	  # Loop through the commands generated above and execute them.
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $concat_cmds; do
+	    IFS="$save_ifs"
+	    $show "$cmd"
+	    $run eval "$cmd" || exit $?
+	  done
+	  IFS="$save_ifs"
+
+	  libobjs=$output
+	  # Restore the value of output.
+	  output=$save_output
+
+	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	  fi
+	  # Expand the library linking commands again to reset the
+	  # value of $libobjs for piecewise linking.
+
+	  # Do each of the archive commands.
+	  if test "$module" = yes && test -n "$module_cmds" ; then
+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	      cmds=$module_expsym_cmds
+	    else
+	      cmds=$module_cmds
+	    fi
+	  else
+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	    cmds=$archive_expsym_cmds
+	  else
+	    cmds=$archive_cmds
+	    fi
+	  fi
+
+	  # Append the command to remove the reloadable object files
+	  # to the just-reset $cmds.
+	  eval cmds=\"\$cmds~\$rm $delfiles\"
+	fi
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $show "$cmd"
+	  $run eval "$cmd" || {
+	    lt_exit=$?
+
+	    # Restore the uninstalled library and exit
+	    if test "$mode" = relink; then
+	      $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
+	    fi
+
+	    exit $lt_exit
+	  }
+	done
+	IFS="$save_ifs"
+
+	# Restore the uninstalled library and exit
+	if test "$mode" = relink; then
+	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+
+	  if test -n "$convenience"; then
+	    if test -z "$whole_archive_flag_spec"; then
+	      $show "${rm}r $gentop"
+	      $run ${rm}r "$gentop"
+	    fi
+	  fi
+
+	  exit $EXIT_SUCCESS
+	fi
+
+	# Create links to the real library.
+	for linkname in $linknames; do
+	  if test "$realname" != "$linkname"; then
+	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+	  fi
+	done
+
+	# If -module or -export-dynamic was specified, set the dlname.
+	if test "$module" = yes || test "$export_dynamic" = yes; then
+	  # On all known operating systems, these are identical.
+	  dlname="$soname"
+	fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$deplibs"; then
+	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+      fi
+
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$rpath"; then
+	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$xrpath"; then
+	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+      fi
+
+      case $output in
+      *.lo)
+	if test -n "$objs$old_deplibs"; then
+	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+	libobj="$output"
+	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+	;;
+      *)
+	libobj=
+	obj="$output"
+	;;
+      esac
+
+      # Delete the old objects.
+      $run $rm $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec
+      wl=
+
+      if test -n "$convenience"; then
+	if test -n "$whole_archive_flag_spec"; then
+	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+	else
+	  gentop="$output_objdir/${obj}x"
+	  generated="$generated $gentop"
+
+	  func_extract_archives $gentop $convenience
+	  reload_conv_objs="$reload_objs $func_extract_archives_result"
+	fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      cmds=$reload_cmds
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+	IFS="$save_ifs"
+	eval cmd=\"$cmd\"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+	if test -n "$gentop"; then
+	  $show "${rm}r $gentop"
+	  $run ${rm}r $gentop
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+	if test -n "$gentop"; then
+	  $show "${rm}r $gentop"
+	  $run ${rm}r $gentop
+	fi
+
+	# Create an invalid libtool object if no PIC, so that we don't
+	# accidentally link it into a program.
+	# $show "echo timestamp > $libobj"
+	# $run eval "echo timestamp > $libobj" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+	# Only do commands if we really have different PIC objects.
+	reload_objs="$libobjs $reload_conv_objs"
+	output="$libobj"
+	cmds=$reload_cmds
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  eval cmd=\"$cmd\"
+	  $show "$cmd"
+	  $run eval "$cmd" || exit $?
+	done
+	IFS="$save_ifs"
+      fi
+
+      if test -n "$gentop"; then
+	$show "${rm}r $gentop"
+	$run ${rm}r $gentop
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+	*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
+      esac
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+      fi
+
+      if test "$preload" = yes; then
+	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
+	   test "$dlopen_self_static" = unknown; then
+	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
+	fi
+      fi
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	;;
+      esac
+
+      case $host in
+      *darwin*)
+        # Don't allow lazy linking, it breaks C++ global constructors
+        if test "$tagname" = CXX ; then
+        compile_command="$compile_command ${wl}-bind_at_load"
+        finalize_command="$finalize_command ${wl}-bind_at_load"
+        fi
+        ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $compile_deplibs " in
+	  *" -L$path/$objdir "*)
+	    new_libs="$new_libs -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $compile_deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) new_libs="$new_libs $deplib" ;;
+	  esac
+	  ;;
+	*) new_libs="$new_libs $deplib" ;;
+	esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	for libdir in $rpath $xrpath; do
+	  # This is the magic to use -rpath.
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    rpath="$rpath $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) perm_rpath="$perm_rpath $libdir" ;;
+	  esac
+	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$libdir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$testbindir";;
+	  esac
+	  ;;
+	esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    rpath="$rpath $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$finalize_perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+	  esac
+	fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+	# Transform all the library objects into standard objects.
+	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      dlsyms=
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	if test -n "$NM" && test -n "$global_symbol_pipe"; then
+	  dlsyms="${outputname}S.c"
+	else
+	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+	fi
+      fi
+
+      if test -n "$dlsyms"; then
+	case $dlsyms in
+	"") ;;
+	*.c)
+	  # Discover the nlist of each of the dlfiles.
+	  nlist="$output_objdir/${outputname}.nm"
+
+	  $show "$rm $nlist ${nlist}S ${nlist}T"
+	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+	  # Parse the name list into a source file.
+	  $show "creating $output_objdir/$dlsyms"
+
+	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+	  if test "$dlself" = yes; then
+	    $show "generating symbol list for \`$output'"
+
+	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+	    # Add our own program objects to the symbol list.
+	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	    for arg in $progfiles; do
+	      $show "extracting global C symbols from \`$arg'"
+	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+	    done
+
+	    if test -n "$exclude_expsyms"; then
+	      $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      $run eval '$mv "$nlist"T "$nlist"'
+	    fi
+
+	    if test -n "$export_symbols_regex"; then
+	      $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      $run eval '$mv "$nlist"T "$nlist"'
+	    fi
+
+	    # Prepare the list of exported symbols
+	    if test -z "$export_symbols"; then
+	      export_symbols="$output_objdir/$outputname.exp"
+	      $run $rm $export_symbols
+	      $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+              case $host in
+              *cygwin* | *mingw* )
+	        $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+		$run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+                ;;
+              esac
+	    else
+	      $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+	      $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+	      $run eval 'mv "$nlist"T "$nlist"'
+              case $host in
+              *cygwin* | *mingw* )
+	        $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+		$run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                ;;
+              esac
+	    fi
+	  fi
+
+	  for arg in $dlprefiles; do
+	    $show "extracting global C symbols from \`$arg'"
+	    name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
+	    $run eval '$echo ": $name " >> "$nlist"'
+	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+	  done
+
+	  if test -z "$run"; then
+	    # Make sure we have at least an empty file.
+	    test -f "$nlist" || : > "$nlist"
+
+	    if test -n "$exclude_expsyms"; then
+	      $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	      $mv "$nlist"T "$nlist"
+	    fi
+
+	    # Try sorting and uniquifying the output.
+	    if grep -v "^: " < "$nlist" |
+		if sort -k 3 </dev/null >/dev/null 2>&1; then
+		  sort -k 3
+		else
+		  sort +2
+		fi |
+		uniq > "$nlist"S; then
+	      :
+	    else
+	      grep -v "^: " < "$nlist" > "$nlist"S
+	    fi
+
+	    if test -f "$nlist"S; then
+	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+	    else
+	      $echo '/* NONE */' >> "$output_objdir/$dlsyms"
+	    fi
+
+	    $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+"
+
+	    case $host in
+	    *cygwin* | *mingw* )
+	  $echo >> "$output_objdir/$dlsyms" "\
+/* DATA imports from DLLs on WIN32 can't be const, because
+   runtime relocations are performed -- see ld's documentation
+   on pseudo-relocs */
+struct {
+"
+	      ;;
+	    * )
+	  $echo >> "$output_objdir/$dlsyms" "\
+const struct {
+"
+	      ;;
+	    esac
+
+
+	  $echo >> "$output_objdir/$dlsyms" "\
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{\
+"
+
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
+
+	    $echo >> "$output_objdir/$dlsyms" "\
+  {0, (lt_ptr) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+	  fi
+
+	  pic_flag_for_symtable=
+	  case $host in
+	  # compiling the symbol table file with pic_flag works around
+	  # a FreeBSD bug that causes programs to crash when -lm is
+	  # linked before any other PIC object.  But we must not use
+	  # pic_flag when linking with -static.  The problem exists in
+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	    case "$compile_command " in
+	    *" -static "*) ;;
+	    *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
+	    esac;;
+	  *-*-hpux*)
+	    case "$compile_command " in
+	    *" -static "*) ;;
+	    *) pic_flag_for_symtable=" $pic_flag";;
+	    esac
+	  esac
+
+	  # Now compile the dynamic symbol file.
+	  $show "(cd $output_objdir && $LTCC  $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+	  $run eval '(cd $output_objdir && $LTCC  $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+	  # Clean up the generated files.
+	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+	  # Transform the symbol file into the correct name.
+          case $host in
+          *cygwin* | *mingw* )
+            if test -f "$output_objdir/${outputname}.def" ; then
+              compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
+              finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
+            else
+              compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+              finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+             fi
+            ;;
+          * )
+            compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+            finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+            ;;
+          esac
+	  ;;
+	*)
+	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+      else
+	# We keep going just in case the user didn't refer to
+	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+	# really was required.
+
+	# Nullify the symbol file.
+	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+      fi
+
+      if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+	# Replace the output file specification.
+	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	link_command="$compile_command$compile_rpath"
+
+	# We have no uninstalled library dependencies, so finalize right now.
+	$show "$link_command"
+	$run eval "$link_command"
+	exit_status=$?
+
+	# Delete the generated files.
+	if test -n "$dlsyms"; then
+	  $show "$rm $output_objdir/${outputname}S.${objext}"
+	  $run $rm "$output_objdir/${outputname}S.${objext}"
+	fi
+
+	exit $exit_status
+      fi
+
+      if test -n "$shlibpath_var"; then
+	# We should set the shlibpath_var
+	rpath=
+	for dir in $temp_rpath; do
+	  case $dir in
+	  [\\/]* | [A-Za-z]:[\\/]*)
+	    # Absolute path.
+	    rpath="$rpath$dir:"
+	    ;;
+	  *)
+	    # Relative path: add a thisdir entry.
+	    rpath="$rpath\$thisdir/$dir:"
+	    ;;
+	  esac
+	done
+	temp_rpath="$rpath"
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+	if test -n "$perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $perm_rpath; do
+	    rpath="$rpath$dir:"
+	  done
+	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+	if test -n "$finalize_perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $finalize_perm_rpath; do
+	    rpath="$rpath$dir:"
+	  done
+	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+      fi
+
+      if test "$no_install" = yes; then
+	# We don't need to create a wrapper script.
+	link_command="$compile_var$compile_command$compile_rpath"
+	# Replace the output file specification.
+	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$run $rm $output
+	# Link the executable and exit
+	$show "$link_command"
+	$run eval "$link_command" || exit $?
+	exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+	# Fast installation is not supported
+	link_command="$compile_var$compile_command$compile_rpath"
+	relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
+	$echo "$modename: \`$output' will be relinked during installation" 1>&2
+      else
+	if test "$fast_install" != no; then
+	  link_command="$finalize_var$compile_command$finalize_rpath"
+	  if test "$fast_install" = yes; then
+	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+	  else
+	    # fast_install is set to needless
+	    relink_command=
+	  fi
+	else
+	  link_command="$compile_var$compile_command$compile_rpath"
+	  relink_command="$finalize_var$finalize_command$finalize_rpath"
+	fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      $show "$link_command"
+      $run eval "$link_command" || exit $?
+
+      # Now create the wrapper script.
+      $show "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
+	  fi
+	done
+	relink_command="(cd `pwd`; $relink_command)"
+	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $echo for shipping.
+      if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
+	case $progpath in
+	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+	esac
+	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if our run command is non-null.
+      if test -z "$run"; then
+	# win32 will think the script is a binary if it has
+	# a .exe suffix, so we strip it off here.
+	case $output in
+	  *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*)
+	    exeext=.exe
+	    outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
+	  *) exeext= ;;
+	esac
+	case $host in
+	  *cygwin* | *mingw* )
+            output_name=`basename $output`
+            output_path=`dirname $output`
+            cwrappersource="$output_path/$objdir/lt-$output_name.c"
+            cwrapper="$output_path/$output_name.exe"
+            $rm $cwrappersource $cwrapper
+            trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+	    cat > $cwrappersource <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "/bin/sh $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+	    cat >> $cwrappersource<<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+        (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+/* -DDEBUG is fairly common in CFLAGS.  */
+#undef DEBUG
+#if defined DEBUGWRAPPER
+# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__)
+#else
+# define DEBUG(format, ...)
+#endif
+
+const char *program_name = NULL;
+
+void * xmalloc (size_t num);
+char * xstrdup (const char *string);
+const char * base_name (const char *name);
+char * find_executable(const char *wrapper);
+int    check_executable(const char *path);
+char * strendzap(char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  DEBUG("(main) argv[0]      : %s\n",argv[0]);
+  DEBUG("(main) program_name : %s\n",program_name);
+  newargz = XMALLOC(char *, argc+2);
+EOF
+
+            cat >> $cwrappersource <<EOF
+  newargz[0] = (char *) xstrdup("$SHELL");
+EOF
+
+            cat >> $cwrappersource <<"EOF"
+  newargz[1] = find_executable(argv[0]);
+  if (newargz[1] == NULL)
+    lt_fatal("Couldn't find %s", argv[0]);
+  DEBUG("(main) found exe at : %s\n",newargz[1]);
+  /* we know the script has the same name, without the .exe */
+  /* so make sure newargz[1] doesn't end in .exe */
+  strendzap(newargz[1],".exe");
+  for (i = 1; i < argc; i++)
+    newargz[i+1] = xstrdup(argv[i]);
+  newargz[argc+1] = NULL;
+
+  for (i=0; i<argc+1; i++)
+  {
+    DEBUG("(main) newargz[%d]   : %s\n",i,newargz[i]);
+    ;
+  }
+
+EOF
+
+            case $host_os in
+              mingw*)
+                cat >> $cwrappersource <<EOF
+  execv("$SHELL",(char const **)newargz);
+EOF
+              ;;
+              *)
+                cat >> $cwrappersource <<EOF
+  execv("$SHELL",newargz);
+EOF
+              ;;
+            esac
+
+            cat >> $cwrappersource <<"EOF"
+  return 127;
+}
+
+void *
+xmalloc (size_t num)
+{
+  void * p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
+;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char)name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable(const char * path)
+{
+  struct stat st;
+
+  DEBUG("(check_executable)  : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!");
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0) &&
+      (
+        /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */
+#if defined (S_IXOTH)
+       ((st.st_mode & S_IXOTH) == S_IXOTH) ||
+#endif
+#if defined (S_IXGRP)
+       ((st.st_mode & S_IXGRP) == S_IXGRP) ||
+#endif
+       ((st.st_mode & S_IXUSR) == S_IXUSR))
+      )
+    return 1;
+  else
+    return 0;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise */
+char *
+find_executable (const char* wrapper)
+{
+  int has_slash = 0;
+  const char* p;
+  const char* p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char* concat_name;
+
+  DEBUG("(find_executable)  : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!");
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':')
+  {
+    concat_name = xstrdup (wrapper);
+    if (check_executable(concat_name))
+      return concat_name;
+    XFREE(concat_name);
+  }
+  else
+  {
+#endif
+    if (IS_DIR_SEPARATOR (wrapper[0]))
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable(concat_name))
+        return concat_name;
+      XFREE(concat_name);
+    }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+    {
+      has_slash = 1;
+      break;
+    }
+  if (!has_slash)
+  {
+    /* no slashes; search PATH */
+    const char* path = getenv ("PATH");
+    if (path != NULL)
+    {
+      for (p = path; *p; p = p_next)
+      {
+        const char* q;
+        size_t p_len;
+        for (q = p; *q; q++)
+          if (IS_PATH_SEPARATOR(*q))
+            break;
+        p_len = q - p;
+        p_next = (*q == '\0' ? q : q + 1);
+        if (p_len == 0)
+        {
+          /* empty path: current directory */
+          if (getcwd (tmp, LT_PATHMAX) == NULL)
+            lt_fatal ("getcwd failed");
+          tmp_len = strlen(tmp);
+          concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
+          memcpy (concat_name, tmp, tmp_len);
+          concat_name[tmp_len] = '/';
+          strcpy (concat_name + tmp_len + 1, wrapper);
+        }
+        else
+        {
+          concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1);
+          memcpy (concat_name, p, p_len);
+          concat_name[p_len] = '/';
+          strcpy (concat_name + p_len + 1, wrapper);
+        }
+        if (check_executable(concat_name))
+          return concat_name;
+        XFREE(concat_name);
+      }
+    }
+    /* not found in PATH; assume curdir */
+  }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  tmp_len = strlen(tmp);
+  concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable(concat_name))
+    return concat_name;
+  XFREE(concat_name);
+  return NULL;
+}
+
+char *
+strendzap(char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert(str != NULL);
+  assert(pat != NULL);
+
+  len = strlen(str);
+  patlen = strlen(pat);
+
+  if (patlen <= len)
+  {
+    str += len - patlen;
+    if (strcmp(str, pat) == 0)
+      *str = '\0';
+  }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char * mode,
+          const char * message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+EOF
+          # we should really use a build-platform specific compiler
+          # here, but OTOH, the wrappers (shell script and this C one)
+          # are only useful if you want to execute the "real" binary.
+          # Since the "real" binary is built for $host, then this
+          # wrapper might as well be built for $host, too.
+          $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource
+          ;;
+        esac
+        $rm $output
+        trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
+
+	$echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variable:
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$echo are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    echo=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$echo works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$echo will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+	$echo >> $output "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+  done
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+	if test "$fast_install" = yes; then
+	  $echo >> $output "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" || \\
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $mkdir \"\$progdir\"
+    else
+      $rm \"\$progdir/\$file\"
+    fi"
+
+	  $echo >> $output "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+	$echo \"\$relink_command_output\" >&2
+	$rm \"\$progdir/\$file\"
+	exit $EXIT_FAILURE
+      fi
+    fi
+
+    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $rm \"\$progdir/\$program\";
+      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $rm \"\$progdir/\$file\"
+  fi"
+	else
+	  $echo >> $output "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+	fi
+
+	$echo >> $output "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+	# Export our shlibpath_var if we have one.
+	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	  $echo >> $output "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+	fi
+
+	# fixup the dll searchpath if we need to.
+	if test -n "$dllsearchpath"; then
+	  $echo >> $output "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
+	$echo >> $output "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+	case $host in
+	# Backslashes separate directories on plain windows
+	*-*-mingw | *-*-os2*)
+	  $echo >> $output "\
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+	  ;;
+
+	*)
+	  $echo >> $output "\
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+	  ;;
+	esac
+	$echo >> $output "\
+      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+      exit $EXIT_FAILURE
+    fi
+  else
+    # The program doesn't exist.
+    \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$echo \"This script is just a wrapper for \$program.\" 1>&2
+    $echo \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit $EXIT_FAILURE
+  fi
+fi\
+"
+	chmod +x $output
+      fi
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+	oldobjs="$libobjs_save"
+	addlibs="$convenience"
+	build_libtool_libs=no
+      else
+	if test "$build_libtool_libs" = module; then
+	  oldobjs="$libobjs_save"
+	  build_libtool_libs=no
+	else
+	  oldobjs="$old_deplibs $non_pic_objects"
+	fi
+	addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+	gentop="$output_objdir/${outputname}x"
+	generated="$generated $gentop"
+
+	func_extract_archives $gentop $addlibs
+	oldobjs="$oldobjs $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+	# POSIX demands no paths to be encoded in archives.  We have
+	# to avoid creating archives with duplicate basenames if we
+	# might have to extract them afterwards, e.g., when creating a
+	# static archive out of a convenience library, or when linking
+	# the entirety of a libtool archive into another (currently
+	# not supported by libtool).
+	if (for obj in $oldobjs
+	    do
+	      $echo "X$obj" | $Xsed -e 's%^.*/%%'
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	  :
+	else
+	  $echo "copying selected object files to avoid basename conflicts..."
+
+	  if test -z "$gentop"; then
+	    gentop="$output_objdir/${outputname}x"
+	    generated="$generated $gentop"
+
+	    $show "${rm}r $gentop"
+	    $run ${rm}r "$gentop"
+	    $show "$mkdir $gentop"
+	    $run $mkdir "$gentop"
+	    exit_status=$?
+	    if test "$exit_status" -ne 0 && test ! -d "$gentop"; then
+	      exit $exit_status
+	    fi
+	  fi
+
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  counter=1
+	  for obj in $save_oldobjs
+	  do
+	    objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+	    case " $oldobjs " in
+	    " ") oldobjs=$obj ;;
+	    *[\ /]"$objbase "*)
+	      while :; do
+		# Make sure we don't pick an alternate name that also
+		# overlaps.
+		newobj=lt$counter-$objbase
+		counter=`expr $counter + 1`
+		case " $oldobjs " in
+		*[\ /]"$newobj "*) ;;
+		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
+		esac
+	      done
+	      $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+	      $run ln "$obj" "$gentop/$newobj" ||
+	      $run cp "$obj" "$gentop/$newobj"
+	      oldobjs="$oldobjs $gentop/$newobj"
+	      ;;
+	    *) oldobjs="$oldobjs $obj" ;;
+	    esac
+	  done
+	fi
+
+	eval cmds=\"$old_archive_cmds\"
+
+	if len=`expr "X$cmds" : ".*"` &&
+	     test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  cmds=$old_archive_cmds
+	else
+	  # the command line is too long to link in one step, link in parts
+	  $echo "using piecewise archive linking..."
+	  save_RANLIB=$RANLIB
+	  RANLIB=:
+	  objlist=
+	  concat_cmds=
+	  save_oldobjs=$oldobjs
+
+	  # Is there a better way of finding the last object in the list?
+	  for obj in $save_oldobjs
+	  do
+	    last_oldobj=$obj
+	  done
+	  for obj in $save_oldobjs
+	  do
+	    oldobjs="$objlist $obj"
+	    objlist="$objlist $obj"
+	    eval test_cmds=\"$old_archive_cmds\"
+	    if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
+	       test "$len" -le "$max_cmd_len"; then
+	      :
+	    else
+	      # the above command should be used before it gets too long
+	      oldobjs=$objlist
+	      if test "$obj" = "$last_oldobj" ; then
+	        RANLIB=$save_RANLIB
+	      fi
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+	      objlist=
+	    fi
+	  done
+	  RANLIB=$save_RANLIB
+	  oldobjs=$objlist
+	  if test "X$oldobjs" = "X" ; then
+	    eval cmds=\"\$concat_cmds\"
+	  else
+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+	  fi
+	fi
+      fi
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+        eval cmd=\"$cmd\"
+	IFS="$save_ifs"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$generated"; then
+      $show "${rm}r$generated"
+      $run ${rm}r$generated
+    fi
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      $show "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+	relink_command=
+      fi
+
+
+      # Only create the output if not a dry run.
+      if test -z "$run"; then
+	for installed in no yes; do
+	  if test "$installed" = yes; then
+	    if test -z "$install_libdir"; then
+	      break
+	    fi
+	    output="$output_objdir/$outputname"i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		if test -z "$libdir"; then
+		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+		  exit $EXIT_FAILURE
+		fi
+		newdependency_libs="$newdependency_libs $libdir/$name"
+		;;
+	      *) newdependency_libs="$newdependency_libs $deplib" ;;
+	      esac
+	    done
+	    dependency_libs="$newdependency_libs"
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+	      if test -z "$libdir"; then
+		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+		exit $EXIT_FAILURE
+	      fi
+	      newdlfiles="$newdlfiles $libdir/$name"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+	      if test -z "$libdir"; then
+		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+		exit $EXIT_FAILURE
+	      fi
+	      newdlprefiles="$newdlprefiles $libdir/$name"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  else
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      newdlfiles="$newdlfiles $abs"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      newdlprefiles="$newdlprefiles $abs"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  fi
+	  $rm $output
+	  # place dlname in correct position for cygwin
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	  esac
+	  $echo > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+	  if test "$installed" = no && test "$need_relink" = yes; then
+	    $echo >> $output "\
+relink_command=\"$relink_command\""
+	  fi
+	done
+      fi
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool install mode
+  install)
+    modename="$modename: install"
+
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $echo "X$nonopt" | grep shtool > /dev/null; then
+      # Aesthetically quote it.
+      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	arg="\"$arg\""
+	;;
+      esac
+      install_prog="$arg "
+      arg="$1"
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+    case $arg in
+    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+      arg="\"$arg\""
+      ;;
+    esac
+    install_prog="$install_prog$arg"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+	files="$files $dest"
+	dest=$arg
+	continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f) 
+      	case " $install_prog " in
+	*[\\\ /]cp\ *) ;;
+	*) prev=$arg ;;
+	esac
+	;;
+      -g | -m | -o) prev=$arg ;;
+      -s)
+	stripme=" -s"
+	continue
+	;;
+      -*)
+	;;
+      *)
+	# If the previous option needed an argument, then skip it.
+	if test -n "$prev"; then
+	  prev=
+	else
+	  dest=$arg
+	  continue
+	fi
+	;;
+      esac
+
+      # Aesthetically quote the argument.
+      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	arg="\"$arg\""
+	;;
+      esac
+      install_prog="$install_prog $arg"
+    done
+
+    if test -z "$install_prog"; then
+      $echo "$modename: you must specify an install program" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prev' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+	$echo "$modename: no file or destination specified" 1>&2
+      else
+	$echo "$modename: you must specify a destination" 1>&2
+      fi
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    # Strip any trailing slash from the destination.
+    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+      test "X$destdir" = "X$dest" && destdir=.
+      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files
+      if test "$#" -gt 2; then
+	$echo "$modename: \`$dest' is not a directory" 1>&2
+	$echo "$help" 1>&2
+	exit $EXIT_FAILURE
+      fi
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+	case $file in
+	*.lo) ;;
+	*)
+	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+	# Do the static libraries later.
+	staticlibs="$staticlibs $file"
+	;;
+
+      *.la)
+	# Check to see that this really is a libtool archive.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	library_names=
+	old_library=
+	relink_command=
+	# If there is no directory component, then add one.
+	case $file in
+	*/* | *\\*) . $file ;;
+	*) . ./$file ;;
+	esac
+
+	# Add the libdir to current_libdirs if it is the destination.
+	if test "X$destdir" = "X$libdir"; then
+	  case "$current_libdirs " in
+	  *" $libdir "*) ;;
+	  *) current_libdirs="$current_libdirs $libdir" ;;
+	  esac
+	else
+	  # Note the libdir as a future libdir.
+	  case "$future_libdirs " in
+	  *" $libdir "*) ;;
+	  *) future_libdirs="$future_libdirs $libdir" ;;
+	  esac
+	fi
+
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
+	test "X$dir" = "X$file/" && dir=
+	dir="$dir$objdir"
+
+	if test -n "$relink_command"; then
+	  # Determine the prefix the user has applied to our future dir.
+	  inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
+
+	  # Don't allow the user to place us outside of our expected
+	  # location b/c this prevents finding dependent libraries that
+	  # are installed to the same prefix.
+	  # At present, this check doesn't affect windows .dll's that
+	  # are installed into $libdir/../bin (currently, that works fine)
+	  # but it's something to keep an eye on.
+	  if test "$inst_prefix_dir" = "$destdir"; then
+	    $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  if test -n "$inst_prefix_dir"; then
+	    # Stick the inst_prefix_dir data into the link command.
+	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	  else
+	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+	  fi
+
+	  $echo "$modename: warning: relinking \`$file'" 1>&2
+	  $show "$relink_command"
+	  if $run eval "$relink_command"; then :
+	  else
+	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+	fi
+
+	# See the names of the shared library.
+	set dummy $library_names
+	if test -n "$2"; then
+	  realname="$2"
+	  shift
+	  shift
+
+	  srcname="$realname"
+	  test -n "$relink_command" && srcname="$realname"T
+
+	  # Install the shared library and build the symlinks.
+	  $show "$install_prog $dir/$srcname $destdir/$realname"
+	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+	  if test -n "$stripme" && test -n "$striplib"; then
+	    $show "$striplib $destdir/$realname"
+	    $run eval "$striplib $destdir/$realname" || exit $?
+	  fi
+
+	  if test "$#" -gt 0; then
+	    # Delete the old symlinks, and create new ones.
+	    # Try `ln -sf' first, because the `ln' binary might depend on
+	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
+	    # so we also need to try rm && ln -s.
+	    for linkname
+	    do
+	      if test "$linkname" != "$realname"; then
+                $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
+                $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
+	      fi
+	    done
+	  fi
+
+	  # Do each command in the postinstall commands.
+	  lib="$destdir/$realname"
+	  cmds=$postinstall_cmds
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $cmds; do
+	    IFS="$save_ifs"
+	    eval cmd=\"$cmd\"
+	    $show "$cmd"
+	    $run eval "$cmd" || {
+	      lt_exit=$?
+
+	      # Restore the uninstalled library and exit
+	      if test "$mode" = relink; then
+		$run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
+	      fi
+
+	      exit $lt_exit
+	    }
+	  done
+	  IFS="$save_ifs"
+	fi
+
+	# Install the pseudo-library for information purposes.
+	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	instname="$dir/$name"i
+	$show "$install_prog $instname $destdir/$name"
+	$run eval "$install_prog $instname $destdir/$name" || exit $?
+
+	# Maybe install the static library, too.
+	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+	;;
+
+      *.lo)
+	# Install (i.e. copy) a libtool object.
+
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	  destfile="$destdir/$destfile"
+	fi
+
+	# Deduce the name of the destination old-style object file.
+	case $destfile in
+	*.lo)
+	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+	  ;;
+	*.$objext)
+	  staticdest="$destfile"
+	  destfile=
+	  ;;
+	*)
+	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	  ;;
+	esac
+
+	# Install the libtool object if requested.
+	if test -n "$destfile"; then
+	  $show "$install_prog $file $destfile"
+	  $run eval "$install_prog $file $destfile" || exit $?
+	fi
+
+	# Install the old object if enabled.
+	if test "$build_old_libs" = yes; then
+	  # Deduce the name of the old-style object file.
+	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+	  $show "$install_prog $staticobj $staticdest"
+	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+	fi
+	exit $EXIT_SUCCESS
+	;;
+
+      *)
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	  destfile="$destdir/$destfile"
+	fi
+
+	# If the file is missing, and there is a .exe on the end, strip it
+	# because it is most likely a libtool script we actually want to
+	# install
+	stripped_ext=""
+	case $file in
+	  *.exe)
+	    if test ! -f "$file"; then
+	      file=`$echo $file|${SED} 's,.exe$,,'`
+	      stripped_ext=".exe"
+	    fi
+	    ;;
+	esac
+
+	# Do a test to see if this is really a libtool program.
+	case $host in
+	*cygwin*|*mingw*)
+	    wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
+	    ;;
+	*)
+	    wrapper=$file
+	    ;;
+	esac
+	if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
+	  notinst_deplibs=
+	  relink_command=
+
+	  # Note that it is not necessary on cygwin/mingw to append a dot to
+	  # foo even if both foo and FILE.exe exist: automatic-append-.exe
+	  # behavior happens only for exec(3), not for open(2)!  Also, sourcing
+	  # `FILE.' does not work on cygwin managed mounts.
+	  #
+	  # If there is no directory component, then add one.
+	  case $wrapper in
+	  */* | *\\*) . ${wrapper} ;;
+	  *) . ./${wrapper} ;;
+	  esac
+
+	  # Check the variables that should have been set.
+	  if test -z "$notinst_deplibs"; then
+	    $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
+	    exit $EXIT_FAILURE
+	  fi
+
+	  finalize=yes
+	  for lib in $notinst_deplibs; do
+	    # Check to see that each library is installed.
+	    libdir=
+	    if test -f "$lib"; then
+	      # If there is no directory component, then add one.
+	      case $lib in
+	      */* | *\\*) . $lib ;;
+	      *) . ./$lib ;;
+	      esac
+	    fi
+	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    if test -n "$libdir" && test ! -f "$libfile"; then
+	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
+	      finalize=no
+	    fi
+	  done
+
+	  relink_command=
+	  # Note that it is not necessary on cygwin/mingw to append a dot to
+	  # foo even if both foo and FILE.exe exist: automatic-append-.exe
+	  # behavior happens only for exec(3), not for open(2)!  Also, sourcing
+	  # `FILE.' does not work on cygwin managed mounts.
+	  #
+	  # If there is no directory component, then add one.
+	  case $wrapper in
+	  */* | *\\*) . ${wrapper} ;;
+	  *) . ./${wrapper} ;;
+	  esac
+
+	  outputname=
+	  if test "$fast_install" = no && test -n "$relink_command"; then
+	    if test "$finalize" = yes && test -z "$run"; then
+	      tmpdir=`func_mktempdir`
+	      file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
+	      outputname="$tmpdir/$file"
+	      # Replace the output file specification.
+	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+	      $show "$relink_command"
+	      if $run eval "$relink_command"; then :
+	      else
+		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+		${rm}r "$tmpdir"
+		continue
+	      fi
+	      file="$outputname"
+	    else
+	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
+	    fi
+	  else
+	    # Install the binary that we compiled earlier.
+	    file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+	  fi
+	fi
+
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyway 
+	case $install_prog,$host in
+	*/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
+	    ;;
+	  esac
+	  ;;
+	esac
+	$show "$install_prog$stripme $file $destfile"
+	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+	test -n "$outputname" && ${rm}r "$tmpdir"
+	;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      $show "$install_prog $file $oldlib"
+      $run eval "$install_prog \$file \$oldlib" || exit $?
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	$show "$old_striplib $oldlib"
+	$run eval "$old_striplib $oldlib" || exit $?
+      fi
+
+      # Do each command in the postinstall commands.
+      cmds=$old_postinstall_cmds
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+	IFS="$save_ifs"
+	eval cmd=\"$cmd\"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$future_libdirs"; then
+      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+    fi
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      test -n "$run" && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+    ;;
+
+  # libtool finish mode
+  finish)
+    modename="$modename: finish"
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+	libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+	if test -n "$finish_cmds"; then
+	  # Do each command in the finish commands.
+	  cmds=$finish_cmds
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $cmds; do
+	    IFS="$save_ifs"
+	    eval cmd=\"$cmd\"
+	    $show "$cmd"
+	    $run eval "$cmd" || admincmds="$admincmds
+       $cmd"
+	  done
+	  IFS="$save_ifs"
+	fi
+	if test -n "$finish_eval"; then
+	  # Do the single finish_eval.
+	  eval cmds=\"$finish_eval\"
+	  $run eval "$cmds" || admincmds="$admincmds
+       $cmds"
+	fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    test "$show" = : && exit $EXIT_SUCCESS
+
+    $echo "X----------------------------------------------------------------------" | $Xsed
+    $echo "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $echo "   $libdir"
+    done
+    $echo
+    $echo "If you ever happen to want to link against installed libraries"
+    $echo "in a given directory, LIBDIR, you must either use libtool, and"
+    $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $echo "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $echo "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $echo "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $echo "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $echo "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    $echo
+    $echo "See any operating system documentation about shared libraries for"
+    $echo "more information, such as the ld(1) and ld.so(8) manual pages."
+    $echo "X----------------------------------------------------------------------" | $Xsed
+    exit $EXIT_SUCCESS
+    ;;
+
+  # libtool execute mode
+  execute)
+    modename="$modename: execute"
+
+    # The first argument is the command name.
+    cmd="$nonopt"
+    if test -z "$cmd"; then
+      $echo "$modename: you must specify a COMMAND" 1>&2
+      $echo "$help"
+      exit $EXIT_FAILURE
+    fi
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      if test ! -f "$file"; then
+	$echo "$modename: \`$file' is not a file" 1>&2
+	$echo "$help" 1>&2
+	exit $EXIT_FAILURE
+      fi
+
+      dir=
+      case $file in
+      *.la)
+	# Check to see that this really is a libtool archive.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+	  $echo "$help" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+
+	# Read the libtool library.
+	dlname=
+	library_names=
+
+	# If there is no directory component, then add one.
+	case $file in
+	*/* | *\\*) . $file ;;
+	*) . ./$file ;;
+	esac
+
+	# Skip this library if it cannot be dlopened.
+	if test -z "$dlname"; then
+	  # Warn if it was a shared library.
+	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+	  continue
+	fi
+
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$dir" = "X$file" && dir=.
+
+	if test -f "$dir/$objdir/$dlname"; then
+	  dir="$dir/$objdir"
+	else
+	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+	  exit $EXIT_FAILURE
+	fi
+	;;
+
+      *.lo)
+	# Just add the directory containing the .lo file.
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$dir" = "X$file" && dir=.
+	;;
+
+      *)
+	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+	continue
+	;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+	eval "$shlibpath_var=\"\$dir\""
+      else
+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+	# Do a test to see if this is really a libtool program.
+	if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . $file ;;
+	  *) . ./$file ;;
+	  esac
+
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	fi
+	;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+      args="$args \"$file\""
+    done
+
+    if test -z "$run"; then
+      if test -n "$shlibpath_var"; then
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      if test "${save_LC_ALL+set}" = set; then
+	LC_ALL="$save_LC_ALL"; export LC_ALL
+      fi
+      if test "${save_LANG+set}" = set; then
+	LANG="$save_LANG"; export LANG
+      fi
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+	$echo "export $shlibpath_var"
+      fi
+      $echo "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+    ;;
+
+  # libtool clean and uninstall mode
+  clean | uninstall)
+    modename="$modename: $mode"
+    rm="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) rm="$rm $arg"; rmforce=yes ;;
+      -*) rm="$rm $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    if test -z "$rm"; then
+      $echo "$modename: you must specify an RM program" 1>&2
+      $echo "$help" 1>&2
+      exit $EXIT_FAILURE
+    fi
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+      if test "X$dir" = "X$file"; then
+	dir=.
+	objdir="$origobjdir"
+      else
+	objdir="$dir/$origobjdir"
+      fi
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+	case " $rmdirs " in
+	  *" $objdir "*) ;;
+	  *) rmdirs="$rmdirs $objdir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if (test -L "$file") >/dev/null 2>&1 \
+	|| (test -h "$file") >/dev/null 2>&1 \
+	|| test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif test "$rmforce" = yes; then
+	continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+	# Possibly a libtool archive, so verify it.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  . $dir/$name
+
+	  # Delete the libtool libraries and symlinks.
+	  for n in $library_names; do
+	    rmfiles="$rmfiles $objdir/$n"
+	  done
+	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+	  case "$mode" in
+	  clean)
+	    case "  $library_names " in
+	    # "  " in the beginning catches empty $dlname
+	    *" $dlname "*) ;;
+	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
+	    esac
+	     test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+	    ;;
+	  uninstall)
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      cmds=$postuninstall_cmds
+	      save_ifs="$IFS"; IFS='~'
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd"
+		if test "$?" -ne 0 && test "$rmforce" != yes; then
+		  exit_status=1
+		fi
+	      done
+	      IFS="$save_ifs"
+	    fi
+
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      cmds=$old_postuninstall_cmds
+	      save_ifs="$IFS"; IFS='~'
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		eval cmd=\"$cmd\"
+		$show "$cmd"
+		$run eval "$cmd"
+		if test "$?" -ne 0 && test "$rmforce" != yes; then
+		  exit_status=1
+		fi
+	      done
+	      IFS="$save_ifs"
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
+	    ;;
+	  esac
+	fi
+	;;
+
+      *.lo)
+	# Possibly a libtool object, so verify it.
+	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+
+	  # Read the .lo file
+	  . $dir/$name
+
+	  # Add PIC object to the list of files to remove.
+	  if test -n "$pic_object" \
+	     && test "$pic_object" != none; then
+	    rmfiles="$rmfiles $dir/$pic_object"
+	  fi
+
+	  # Add non-PIC object to the list of files to remove.
+	  if test -n "$non_pic_object" \
+	     && test "$non_pic_object" != none; then
+	    rmfiles="$rmfiles $dir/$non_pic_object"
+	  fi
+	fi
+	;;
+
+      *)
+	if test "$mode" = clean ; then
+	  noexename=$name
+	  case $file in
+	  *.exe)
+	    file=`$echo $file|${SED} 's,.exe$,,'`
+	    noexename=`$echo $name|${SED} 's,.exe$,,'`
+	    # $file with .exe has already been added to rmfiles,
+	    # add $file without .exe
+	    rmfiles="$rmfiles $file"
+	    ;;
+	  esac
+	  # Do a test to see if this is a libtool program.
+	  if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	    relink_command=
+	    . $dir/$noexename
+
+	    # note $name still contains .exe if it was in $file originally
+	    # as does the version of $file that was added into $rmfiles
+	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+	    if test "$fast_install" = yes && test -n "$relink_command"; then
+	      rmfiles="$rmfiles $objdir/lt-$name"
+	    fi
+	    if test "X$noexename" != "X$name" ; then
+	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+	    fi
+	  fi
+	fi
+	;;
+      esac
+      $show "$rm $rmfiles"
+      $run $rm $rmfiles || exit_status=1
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	$show "rmdir $dir"
+	$run rmdir $dir >/dev/null 2>&1
+      fi
+    done
+
+    exit $exit_status
+    ;;
+
+  "")
+    $echo "$modename: you must specify a MODE" 1>&2
+    $echo "$generic_help" 1>&2
+    exit $EXIT_FAILURE
+    ;;
+  esac
+
+  if test -z "$exec_cmd"; then
+    $echo "$modename: invalid operation mode \`$mode'" 1>&2
+    $echo "$generic_help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+fi # test -z "$show_help"
+
+if test -n "$exec_cmd"; then
+  eval exec $exec_cmd
+  exit $EXIT_FAILURE
+fi
+
+# We need to display help for each of the modes.
+case $mode in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+    --config          show all configuration variables
+    --debug           enable verbose shell tracing
+-n, --dry-run         display commands without modifying any files
+    --features        display basic configuration information and exit
+    --finish          same as \`--mode=finish'
+    --help            display this help message and exit
+    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
+    --quiet           same as \`--silent'
+    --silent          don't print informational messages
+    --tag=TAG         use configuration variables from tag TAG
+    --version         print version information
+
+MODE must be one of the following:
+
+      clean           remove files from the build directory
+      compile         compile a source file into a libtool object
+      execute         automatically set library path, then run a program
+      finish          complete the installation of libtool libraries
+      install         install libraries or executables
+      link            create a library or an executable
+      uninstall       remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE.
+
+Report bugs to <bug-libtool at gnu.org>."
+  exit $EXIT_SUCCESS
+  ;;
+
+clean)
+  $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+  ;;
+
+compile)
+  $echo \
+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -static           always build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+  ;;
+
+execute)
+  $echo \
+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+  ;;
+
+finish)
+  $echo \
+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+  ;;
+
+install)
+  $echo \
+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+  ;;
+
+link)
+  $echo \
+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+		    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+		    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -static           do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+		    specify library version info [each variable defaults to 0]
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+  ;;
+
+uninstall)
+  $echo \
+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+  ;;
+
+*)
+  $echo "$modename: invalid operation mode \`$mode'" 1>&2
+  $echo "$help" 1>&2
+  exit $EXIT_FAILURE
+  ;;
+esac
+
+$echo
+$echo "Try \`$modename --help' for more information about other modes."
+
+exit $?
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+disable_libs=shared
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+disable_libs=static
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:

Added: lighttpd/tags/1.4.19-5+lenny2/missing
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/missing	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/missing	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,367 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2006-05-10.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# 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 2, 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake at gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).
+case $1 in
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $1 in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+	   sed 's/\.am$/.in/' |
+	   while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+	case $LASTARG in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f y.tab.h; then
+	echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+	echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+	case $LASTARG in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if test -f "$SRCFILE"; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if test ! -f lex.yy.c; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 \`Help2man' package in order for those modifications to take
+	 effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+	/^@setfilename/{
+	  s/.* \([^ ]*\) *$/\1/
+	  p
+	  q
+	}' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case $firstarg in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case $firstarg in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# 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:


Property changes on: lighttpd/tags/1.4.19-5+lenny2/missing
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/openwrt/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/openwrt/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/openwrt/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+EXTRA_DIST=conffiles  control  lighttpd.conf  S51lighttpd lighttpd.mk

Added: lighttpd/tags/1.4.19-5+lenny2/openwrt/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/openwrt/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/openwrt/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,358 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = openwrt
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+	$(srcdir)/control.in $(srcdir)/lighttpd.mk.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = control lighttpd.mk
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = conffiles  control  lighttpd.conf  S51lighttpd lighttpd.mk
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  openwrt/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  openwrt/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+control: $(top_builddir)/config.status $(srcdir)/control.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+lighttpd.mk: $(top_builddir)/config.status $(srcdir)/lighttpd.mk.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/openwrt/S51lighttpd
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/openwrt/S51lighttpd	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/openwrt/S51lighttpd	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+/usr/sbin/lighttpd -f /etc/lighttpd.conf
+exit $?


Property changes on: lighttpd/tags/1.4.19-5+lenny2/openwrt/S51lighttpd
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/openwrt/conffiles
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/openwrt/conffiles	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/openwrt/conffiles	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+/etc/lighttpd.conf

Added: lighttpd/tags/1.4.19-5+lenny2/openwrt/control
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/openwrt/control	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/openwrt/control	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,9 @@
+Package: lighttpd
+Version: 1.4.19
+Architecture: mipsel
+Maintainer: Jan Kneschke <jan at kneschke.de>
+Source: http://jan.kneschke.de/projects/lighttpd/download/lighttpd-1.4.19.tar.gz
+Section: net
+Priority: optional
+Depends:
+Description: Flexible and Lightweight Webserver

Added: lighttpd/tags/1.4.19-5+lenny2/openwrt/control.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/openwrt/control.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/openwrt/control.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,9 @@
+Package: lighttpd
+Version: @VERSION@
+Architecture: mipsel
+Maintainer: Jan Kneschke <jan at kneschke.de>
+Source: http://jan.kneschke.de/projects/lighttpd/download/lighttpd-@VERSION@.tar.gz
+Section: net
+Priority: optional
+Depends:
+Description: Flexible and Lightweight Webserver

Added: lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,231 @@
+# lighttpd configuration file
+#
+# use a it as base for lighttpd 1.0.0 and above
+#
+# $Id: lighttpd.conf,v 1.6 2004/08/29 09:44:53 weigon Exp $
+
+############ Options you really have to take care of ####################
+
+## modules to load
+# at least mod_access and mod_accesslog should be loaded
+# all other module should only be loaded if really neccesary
+# - saves some time
+# - saves memory
+server.modules              = (
+#                               "mod_rewrite",
+#                               "mod_redirect",
+			        "mod_access",
+#				"mod_auth",
+#                               "mod_status",
+#				"mod_fastcgi",
+#				"mod_simple_vhost",
+#				"mod_evhost",
+#				"mod_cgi",
+#				"mod_compress",
+#                               "mod_ssi",
+#                               "mod_usertrack",
+# 				"mod_rrdtool",
+#				"mod_accesslog"
+)
+
+## a static document-root, for virtual-hosting take look at the
+## server.virtual-* options
+server.document-root             = "/www/"
+
+## where to send error-messages to
+# server.errorlog            = ""
+
+# files to check for if .../ is requested
+server.indexfiles          = ( "index.php", "index.html",
+                                "index.htm", "default.htm" )
+
+# mimetype mapping
+mimetype.assign            = (
+  ".pdf"          =>      "application/pdf",
+  ".sig"          =>      "application/pgp-signature",
+  ".spl"          =>      "application/futuresplash",
+  ".class"        =>      "application/octet-stream",
+  ".ps"           =>      "application/postscript",
+  ".torrent"      =>      "application/x-bittorrent",
+  ".dvi"          =>      "application/x-dvi",
+  ".gz"           =>      "application/x-gzip",
+  ".pac"          =>      "application/x-ns-proxy-autoconfig",
+  ".swf"          =>      "application/x-shockwave-flash",
+  ".tar.gz"       =>      "application/x-tgz",
+  ".tgz"          =>      "application/x-tgz",
+  ".tar"          =>      "application/x-tar",
+  ".zip"          =>      "application/zip",
+  ".mp3"          =>      "audio/mpeg",
+  ".m3u"          =>      "audio/x-mpegurl",
+  ".wma"          =>      "audio/x-ms-wma",
+  ".wax"          =>      "audio/x-ms-wax",
+  ".ogg"          =>      "audio/x-wav",
+  ".wav"          =>      "audio/x-wav",
+  ".gif"          =>      "image/gif",
+  ".jpg"          =>      "image/jpeg",
+  ".jpeg"         =>      "image/jpeg",
+  ".png"          =>      "image/png",
+  ".xbm"          =>      "image/x-xbitmap",
+  ".xpm"          =>      "image/x-xpixmap",
+  ".xwd"          =>      "image/x-xwindowdump",
+  ".css"          =>      "text/css",
+  ".html"         =>      "text/html",
+  ".htm"          =>      "text/html",
+  ".js"           =>      "text/javascript",
+  ".asc"          =>      "text/plain",
+  ".c"            =>      "text/plain",
+  ".conf"         =>      "text/plain",
+  ".text"         =>      "text/plain",
+  ".txt"          =>      "text/plain",
+  ".dtd"          =>      "text/xml",
+  ".xml"          =>      "text/xml",
+  ".mpeg"         =>      "video/mpeg",
+  ".mpg"          =>      "video/mpeg",
+  ".mov"          =>      "video/quicktime",
+  ".qt"           =>      "video/quicktime",
+  ".avi"          =>      "video/x-msvideo",
+  ".asf"          =>      "video/x-ms-asf",
+  ".asx"          =>      "video/x-ms-asf",
+  ".wmv"          =>      "video/x-ms-wmv"
+ )
+
+# Use the "Content-Type" extended attribute to obtain mime type if possible
+# mimetypes.use-xattr = "enable"
+
+#### accesslog module
+# accesslog.filename          = "/www/logs/access.log"
+
+## deny access the file-extensions
+#
+# ~    is for backupfiles from vi, emacs, joe, ...
+# .inc is often used for code includes which should in general not be part
+#      of the document-root
+url.access-deny             = ( "~", ".inc" )
+
+
+
+######### Options that are good to be but not neccesary to be changed #######
+
+## bind to port (default: 80)
+#server.port                = 81
+
+## bind to localhost (default: all interfaces)
+#server.bind                = "grisu.home.kneschke.de"
+
+## error-handler for status 404
+#server.error-handler-404   = "/error-handler.html"
+#server.error-handler-404   = "/error-handler.php"
+
+
+###### virtual hosts
+##
+##   If you want name-based virtual hosting add the next three settings and load
+##   mod_simple_vhost
+##
+## document-root =
+##   virtual-server-root + virtual-server-default-host + virtual-server-docroot or
+##   virtual-server-root + http-host + virtual-server-docroot
+##
+#simple-vhost.server-root         = "/home/weigon/wwwroot/servers/"
+#simple-vhost.default-host        = "grisu.home.kneschke.de"
+#simple-vhost.document-root       = "/pages/"
+
+
+##
+## Format: <errorfile-prefix><status>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix    = "/home/weigon/projects/lighttpd/doc/status-"
+
+## virtual directory listings
+#server.dir-listing          = "enable"
+
+## send unhandled HTTP-header headers to error-log
+#debug.dump-unknown-headers  = "enable"
+
+### only root can use these options
+#
+# chroot() to directory (default: no chroot() )
+#server.chroot            = "/"
+
+## change uid to <uid> (default: don't care)
+#server.username            = "wwwrun"
+
+## change uid to <uid> (default: don't care)
+#server.groupname           = "wwwrun"
+
+#### compress module
+#compress.cache-dir          = "/tmp/lighttpd/cache/compress/"
+#compress.filetype           = ("text/plain", "text/html")
+
+#### fastcgi module
+## read fastcgi.txt for more info
+#fastcgi.server              = ( ".php" =>
+#				( "grisu" =>
+#				  (
+#				    "host" => "192.168.2.10",
+#				    "port" => 1026
+#				  )
+#				)
+#			      )
+
+#### CGI module
+#cgi.assign                  = ( ".pl"  => "/usr/bin/perl",
+#                                ".cgi" => "/usr/bin/perl" )
+#
+
+#### SSL engine
+#ssl.engine                  = "enable"
+#ssl.pemfile                 = "server.pem"
+
+#### status module
+# status.status-url = "/server-status"
+# status.config-url = "/server-config"
+
+#### auth module
+## read authentification.txt for more info
+# auth.backend                = "plain"
+# auth.backend.plain.userfile = "lighttpd.user"
+# auth.backend.plain.groupfile = "lighttpd.group"
+
+# auth.backend.ldap.hostname = "localhost"
+# auth.backend.ldap.base-dn  = "dc=my-domain,dc=com"
+# auth.backend.ldap.filter   = "(uid=$)"
+
+# auth.require                = ( "/server-status" =>
+#                                (
+#				  "method"  => "digest",
+#				  "realm"   => "download archiv",
+#				  "require" => "group=www|user=jan|host=192.168.2.10"
+#				),
+#				"/server-info" =>
+#                                (
+#				  "method"  => "digest",
+#				  "realm"   => "download archiv",
+#				  "require" => "group=www|user=jan|host=192.168.2.10"
+#				)
+#                              )
+
+#### url handling modules (rewrite, redirect, access)
+# url.rewrite                 = ( "^/$"             => "/server-status" )
+# url.redirect                = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
+
+#
+# define a pattern for the host url finding
+# %% => % sign
+# %0 => domain name + tld
+# %1 => tld
+# %2 => domain name without tld
+# %3 => subdomain 1 name
+# %4 => subdomain 2 name
+#
+# evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"
+
+#### expire module
+# expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#### ssi
+# ssi.extension              = ( ".shtml" )
+
+#### rrdtool
+# rrdtool.binary = "/usr/bin/rrdtool"
+# rrdtool.db-name = "/var/www/lighttpd.rrd"

Added: lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.mk
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.mk	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.mk	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,72 @@
+######################################################
+#
+#  An example makefile to fetch a package from sources
+#  then fetch the ipkg updates required to the base package
+#  extract the archives into the build tree
+#  and then build the source
+#
+######################################################
+
+
+#  For this example we'll use a fairly simple package that compiles easily
+#  and has sources available for download at sourceforge
+LIGHTTPD=lighttpd-1.4.19
+LIGHTTPD_TARGET=.built
+LIGHTTPD_DIR=$(BUILD_DIR)/$(LIGHTTPD)
+LIGHTTPD_IPK=$(BUILD_DIR)/$(LIGHTTPD)_mipsel.ipk
+LIGHTTPD_IPK_DIR=$(BUILD_DIR)/$(LIGHTTPD)-ipk
+
+LIGHTTPD_SITE=http://jan.kneschke.de/projects/lighttpd/download/
+LIGHTTPD_SOURCE=$(LIGHTTPD).tar.gz
+
+
+# We need to download sources if we dont have them
+$(DL_DIR)/$(LIGHTTPD_SOURCE) :
+	$(WGET) -P $(DL_DIR) $(LIGHTTPD_SITE)/$(LIGHTTPD_SOURCE)
+
+# if we have the sources, they do no good unless they are unpacked
+$(LIGHTTPD_DIR)/.unpacked:	$(DL_DIR)/$(LIGHTTPD_SOURCE)
+	gzip -cd $(DL_DIR)/$(LIGHTTPD_SOURCE) | tar -C $(BUILD_DIR) -xvf -
+	touch $(LIGHTTPD_DIR)/.unpacked
+
+# if we have the sources unpacked, we need to configure them
+$(LIGHTTPD_DIR)/.configured:	$(LIGHTTPD_DIR)/.unpacked
+	(cd $(LIGHTTPD_DIR); rm -rf config.cache; \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		LD=$(TARGET_CROSS)ld \
+		./configure \
+		--target=$(GNU_TARGET_NAME) \
+		--host=$(GNU_TARGET_NAME) \
+		--build=$(GNU_HOST_NAME) \
+		--prefix=/usr \
+		--exec-prefix=/usr \
+		--bindir=/usr/bin \
+		--sbindir=/usr/sbin \
+		--disable-zlib \
+		--sysconfdir=/etc \
+		--program-transform-name="s,y,y," \
+	);
+	touch $(LIGHTTPD_DIR)/.configured
+
+
+# now that we have it all in place, just build it
+$(LIGHTTPD_DIR)/$(LIGHTTPD_TARGET):	$(LIGHTTPD_DIR)/.configured
+	cd $(LIGHTTPD_DIR) && $(MAKE) CC=$(TARGET_CC) DESTDIR="$(LIGHTTPD_IPK_DIR)" install
+	$(STAGING_DIR)/bin/sstrip $(LIGHTTPD_IPK_DIR)/usr/sbin/lighttpd
+	touch $(LIGHTTPD_DIR)/$(LIGHTTPD_TARGET)
+
+$(LIGHTTPD_IPK): uclibc $(LIGHTTPD_DIR)/$(LIGHTTPD_TARGET)
+	mkdir -p $(LIGHTTPD_IPK_DIR)/CONTROL
+	mkdir -p $(LIGHTTPD_IPK_DIR)/etc/init.d
+	cp $(LIGHTTPD_DIR)/openwrt/conffiles $(LIGHTTPD_IPK_DIR)/CONTROL
+	cp $(LIGHTTPD_DIR)/openwrt/control $(LIGHTTPD_IPK_DIR)/CONTROL
+	cp $(LIGHTTPD_DIR)/openwrt/S51lighttpd $(LIGHTTPD_IPK_DIR)/etc/init.d/
+	cp $(LIGHTTPD_DIR)/openwrt/lighttpd.conf $(LIGHTTPD_IPK_DIR)/etc/
+
+	rm -f $(LIGHTTPD_IPK_DIR)/usr/lib/*.a
+	rm -f $(LIGHTTPD_IPK_DIR)/usr/lib/*.la
+
+	cd $(BUILD_DIR); $(IPKG_BUILD) $(LIGHTTPD_IPK_DIR)
+
+lighttpd-ipk: $(LIGHTTPD_IPK)

Added: lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.mk.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.mk.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/openwrt/lighttpd.mk.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,72 @@
+######################################################
+#
+#  An example makefile to fetch a package from sources
+#  then fetch the ipkg updates required to the base package
+#  extract the archives into the build tree
+#  and then build the source
+#
+######################################################
+
+
+#  For this example we'll use a fairly simple package that compiles easily
+#  and has sources available for download at sourceforge
+LIGHTTPD=lighttpd- at VERSION@
+LIGHTTPD_TARGET=.built
+LIGHTTPD_DIR=$(BUILD_DIR)/$(LIGHTTPD)
+LIGHTTPD_IPK=$(BUILD_DIR)/$(LIGHTTPD)_mipsel.ipk
+LIGHTTPD_IPK_DIR=$(BUILD_DIR)/$(LIGHTTPD)-ipk
+
+LIGHTTPD_SITE=http://jan.kneschke.de/projects/lighttpd/download/
+LIGHTTPD_SOURCE=$(LIGHTTPD).tar.gz
+
+
+# We need to download sources if we dont have them
+$(DL_DIR)/$(LIGHTTPD_SOURCE) :
+	$(WGET) -P $(DL_DIR) $(LIGHTTPD_SITE)/$(LIGHTTPD_SOURCE)
+
+# if we have the sources, they do no good unless they are unpacked
+$(LIGHTTPD_DIR)/.unpacked:	$(DL_DIR)/$(LIGHTTPD_SOURCE)
+	gzip -cd $(DL_DIR)/$(LIGHTTPD_SOURCE) | tar -C $(BUILD_DIR) -xvf -
+	touch $(LIGHTTPD_DIR)/.unpacked
+
+# if we have the sources unpacked, we need to configure them
+$(LIGHTTPD_DIR)/.configured:	$(LIGHTTPD_DIR)/.unpacked
+	(cd $(LIGHTTPD_DIR); rm -rf config.cache; \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		LD=$(TARGET_CROSS)ld \
+		./configure \
+		--target=$(GNU_TARGET_NAME) \
+		--host=$(GNU_TARGET_NAME) \
+		--build=$(GNU_HOST_NAME) \
+		--prefix=/usr \
+		--exec-prefix=/usr \
+		--bindir=/usr/bin \
+		--sbindir=/usr/sbin \
+		--disable-zlib \
+		--sysconfdir=/etc \
+		--program-transform-name="s,y,y," \
+	);
+	touch $(LIGHTTPD_DIR)/.configured
+
+
+# now that we have it all in place, just build it
+$(LIGHTTPD_DIR)/$(LIGHTTPD_TARGET):	$(LIGHTTPD_DIR)/.configured
+	cd $(LIGHTTPD_DIR) && $(MAKE) CC=$(TARGET_CC) DESTDIR="$(LIGHTTPD_IPK_DIR)" install
+	$(STAGING_DIR)/bin/sstrip $(LIGHTTPD_IPK_DIR)/usr/sbin/lighttpd
+	touch $(LIGHTTPD_DIR)/$(LIGHTTPD_TARGET)
+
+$(LIGHTTPD_IPK): uclibc $(LIGHTTPD_DIR)/$(LIGHTTPD_TARGET)
+	mkdir -p $(LIGHTTPD_IPK_DIR)/CONTROL
+	mkdir -p $(LIGHTTPD_IPK_DIR)/etc/init.d
+	cp $(LIGHTTPD_DIR)/openwrt/conffiles $(LIGHTTPD_IPK_DIR)/CONTROL
+	cp $(LIGHTTPD_DIR)/openwrt/control $(LIGHTTPD_IPK_DIR)/CONTROL
+	cp $(LIGHTTPD_DIR)/openwrt/S51lighttpd $(LIGHTTPD_IPK_DIR)/etc/init.d/
+	cp $(LIGHTTPD_DIR)/openwrt/lighttpd.conf $(LIGHTTPD_IPK_DIR)/etc/
+
+	rm -f $(LIGHTTPD_IPK_DIR)/usr/lib/*.a
+	rm -f $(LIGHTTPD_IPK_DIR)/usr/lib/*.la
+
+	cd $(BUILD_DIR); $(IPKG_BUILD) $(LIGHTTPD_IPK_DIR)
+
+lighttpd-ipk: $(LIGHTTPD_IPK)

Added: lighttpd/tags/1.4.19-5+lenny2/src/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,284 @@
+AM_CFLAGS = $(FAM_CFLAGS)
+
+noinst_PROGRAMS=proc_open lemon # simple-fcgi #graphic evalo bench ajp ssl error_test adserver gen-license
+sbin_PROGRAMS=lighttpd lighttpd-angel
+bin_PROGRAMS=spawn-fcgi
+LEMON=$(top_builddir)/src/lemon
+
+lemon_SOURCES=lemon.c
+
+lighttpd_angel_SOURCES=lighttpd-angel.c
+
+#simple_fcgi_SOURCES=simple-fcgi.c
+#simple_fcgi_LDADD=-lfcgi
+
+if CROSS_COMPILING
+configparser.c configparser.h:
+mod_ssi_exprparser.c mod_ssi_exprparser.h:
+else
+$(srcdir)/configparser.y: lemon
+$(srcdir)/mod_ssi_exprparser.y: lemon
+
+configparser.c configparser.h: $(srcdir)/configparser.y
+	rm -f configparser.h
+	$(LEMON) -q $(srcdir)/configparser.y $(srcdir)/lempar.c
+
+mod_ssi_exprparser.c mod_ssi_exprparser.h: $(srcdir)/mod_ssi_exprparser.y
+	rm -f mod_ssi_exprparser.h
+	$(LEMON) -q $(srcdir)/mod_ssi_exprparser.y $(srcdir)/lempar.c
+endif
+
+$(srcdir)/configfile.c: configparser.h
+$(srcdir)/mod_ssi_expr.c: mod_ssi_exprparser.h
+
+common_src=buffer.c log.c \
+      keyvalue.c chunk.c  \
+      http_chunk.c stream.c fdevent.c \
+      stat_cache.c plugin.c joblist.c etag.c array.c \
+      data_string.c data_count.c data_array.c \
+      data_integer.c md5.c data_fastcgi.c \
+      fdevent_select.c fdevent_linux_rtsig.c \
+      fdevent_poll.c fdevent_linux_sysepoll.c \
+      fdevent_solaris_devpoll.c fdevent_freebsd_kqueue.c \
+      data_config.c bitset.c \
+      inet_ntop_cache.c crc32.c \
+      connections-glue.c \
+      configfile-glue.c \
+      http-header-glue.c \
+      network_write.c network_linux_sendfile.c \
+      network_freebsd_sendfile.c network_writev.c \
+      network_solaris_sendfilev.c network_openssl.c \
+      splaytree.c status_counter.c
+
+src = server.c response.c connections.c network.c \
+      configfile.c configparser.c request.c proc_open.c
+
+spawn_fcgi_SOURCES=spawn-fcgi.c
+
+lib_LTLIBRARIES =
+
+if NO_RDYNAMIC
+# if the linker doesn't allow referencing symbols of the binary
+# we have to put everything into a shared-lib and link it into
+# everything
+lib_LTLIBRARIES += liblightcomp.la
+liblightcomp_la_SOURCES=$(common_src)
+liblightcomp_la_CFLAGS=$(AM_CFLAGS)
+liblightcomp_la_LDFLAGS = -avoid-version -no-undefined
+liblightcomp_la_LIBADD = $(PCRE_LIB) $(SSL_LIB) $(FAM_LIBS)
+common_libadd = liblightcomp.la
+else
+src += $(common_src)
+common_libadd =
+endif
+
+lib_LTLIBRARIES += mod_flv_streaming.la
+mod_flv_streaming_la_SOURCES = mod_flv_streaming.c
+mod_flv_streaming_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_flv_streaming_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_evasive.la
+mod_evasive_la_SOURCES = mod_evasive.c
+mod_evasive_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_evasive_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_webdav.la
+mod_webdav_la_SOURCES = mod_webdav.c
+mod_webdav_la_CFLAGS = $(AM_CFLAGS) $(XML_CFLAGS) $(SQLITE_CFLAGS) 
+mod_webdav_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_webdav_la_LIBADD = $(common_libadd) $(XML_LIBS) $(SQLITE_LIBS) $(UUID_LIBS)
+
+lib_LTLIBRARIES += mod_magnet.la
+mod_magnet_la_SOURCES = mod_magnet.c mod_magnet_cache.c
+mod_magnet_la_CFLAGS = $(AM_CFLAGS) $(LUA_CFLAGS)
+mod_magnet_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_magnet_la_LIBADD = $(common_libadd) $(LUA_LIBS) -lm
+
+lib_LTLIBRARIES += mod_cml.la
+mod_cml_la_SOURCES = mod_cml.c mod_cml_lua.c mod_cml_funcs.c
+mod_cml_la_CFLAGS = $(AM_CFLAGS) $(LUA_CFLAGS)
+mod_cml_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_cml_la_LIBADD = $(MEMCACHE_LIB) $(common_libadd) $(LUA_LIBS) -lm
+
+lib_LTLIBRARIES += mod_trigger_b4_dl.la
+mod_trigger_b4_dl_la_SOURCES = mod_trigger_b4_dl.c
+mod_trigger_b4_dl_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_trigger_b4_dl_la_LIBADD = $(GDBM_LIB) $(MEMCACHE_LIB) $(PCRE_LIB) $(common_libadd)
+
+lib_LTLIBRARIES += mod_mysql_vhost.la
+mod_mysql_vhost_la_SOURCES = mod_mysql_vhost.c
+mod_mysql_vhost_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_mysql_vhost_la_LIBADD = $(MYSQL_LIBS) $(common_libadd)
+mod_mysql_vhost_la_CPPFLAGS = $(MYSQL_INCLUDE)
+
+lib_LTLIBRARIES += mod_cgi.la
+mod_cgi_la_SOURCES = mod_cgi.c
+mod_cgi_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_cgi_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_scgi.la
+mod_scgi_la_SOURCES = mod_scgi.c
+mod_scgi_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_scgi_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_staticfile.la
+mod_staticfile_la_SOURCES = mod_staticfile.c
+mod_staticfile_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_staticfile_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_dirlisting.la
+mod_dirlisting_la_SOURCES = mod_dirlisting.c
+mod_dirlisting_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_dirlisting_la_LIBADD = $(common_libadd) $(PCRE_LIB)
+
+lib_LTLIBRARIES += mod_indexfile.la
+mod_indexfile_la_SOURCES = mod_indexfile.c
+mod_indexfile_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_indexfile_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_setenv.la
+mod_setenv_la_SOURCES = mod_setenv.c
+mod_setenv_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_setenv_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_alias.la
+mod_alias_la_SOURCES = mod_alias.c
+mod_alias_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_alias_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_userdir.la
+mod_userdir_la_SOURCES = mod_userdir.c
+mod_userdir_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_userdir_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_rrdtool.la
+mod_rrdtool_la_SOURCES = mod_rrdtool.c
+mod_rrdtool_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_rrdtool_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_usertrack.la
+mod_usertrack_la_SOURCES = mod_usertrack.c
+mod_usertrack_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_usertrack_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_proxy.la
+mod_proxy_la_SOURCES = mod_proxy.c
+mod_proxy_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_proxy_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_ssi.la
+mod_ssi_la_SOURCES = mod_ssi_exprparser.c mod_ssi_expr.c mod_ssi.c
+mod_ssi_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_ssi_la_LIBADD = $(common_libadd) $(PCRE_LIB)
+
+lib_LTLIBRARIES += mod_secdownload.la
+mod_secdownload_la_SOURCES = mod_secure_download.c
+mod_secdownload_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_secdownload_la_LIBADD = $(common_libadd)
+
+#lib_LTLIBRARIES += mod_httptls.la
+#mod_httptls_la_SOURCES = mod_httptls.c
+#mod_httptls_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+#mod_httptls_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_expire.la
+mod_expire_la_SOURCES = mod_expire.c
+mod_expire_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_expire_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_evhost.la
+mod_evhost_la_SOURCES = mod_evhost.c
+mod_evhost_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_evhost_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_simple_vhost.la
+mod_simple_vhost_la_SOURCES = mod_simple_vhost.c
+mod_simple_vhost_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_simple_vhost_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_fastcgi.la
+mod_fastcgi_la_SOURCES = mod_fastcgi.c
+mod_fastcgi_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_fastcgi_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_extforward.la
+mod_extforward_la_SOURCES = mod_extforward.c
+mod_extforward_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_extforward_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_access.la
+mod_access_la_SOURCES = mod_access.c
+mod_access_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_access_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_compress.la
+mod_compress_la_SOURCES = mod_compress.c
+mod_compress_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_compress_la_LIBADD = $(Z_LIB) $(BZ_LIB) $(common_libadd)
+
+lib_LTLIBRARIES += mod_auth.la
+mod_auth_la_SOURCES = mod_auth.c http_auth_digest.c http_auth.c
+mod_auth_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_auth_la_LIBADD = $(CRYPT_LIB) $(LDAP_LIB) $(LBER_LIB) $(common_libadd)
+
+lib_LTLIBRARIES += mod_rewrite.la
+mod_rewrite_la_SOURCES = mod_rewrite.c
+mod_rewrite_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_rewrite_la_LIBADD = $(PCRE_LIB) $(common_libadd)
+
+lib_LTLIBRARIES += mod_redirect.la
+mod_redirect_la_SOURCES = mod_redirect.c
+mod_redirect_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_redirect_la_LIBADD = $(PCRE_LIB) $(common_libadd)
+
+lib_LTLIBRARIES += mod_status.la
+mod_status_la_SOURCES = mod_status.c
+mod_status_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_status_la_LIBADD = $(common_libadd)
+
+lib_LTLIBRARIES += mod_accesslog.la
+mod_accesslog_la_SOURCES = mod_accesslog.c
+mod_accesslog_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_accesslog_la_LIBADD = $(common_libadd)
+
+
+hdr = server.h buffer.h network.h log.h keyvalue.h \
+      response.h request.h fastcgi.h chunk.h \
+      settings.h http_chunk.h http_auth_digest.h \
+      md5.h http_auth.h stream.h \
+      fdevent.h connections.h base.h stat_cache.h \
+      plugin.h mod_auth.h \
+      etag.h joblist.h array.h crc32.h \
+      network_backends.h configfile.h bitset.h \
+      mod_ssi.h mod_ssi_expr.h inet_ntop_cache.h \
+      configparser.h mod_ssi_exprparser.h \
+      sys-mmap.h sys-socket.h mod_cml.h mod_cml_funcs.h \
+      splaytree.h proc_open.h status_counter.h \
+      mod_magnet_cache.h
+
+DEFS= @DEFS@ -DLIBRARY_DIR="\"$(libdir)\"" -DSBIN_DIR="\"$(sbindir)\""
+
+lighttpd_SOURCES = $(src)
+lighttpd_LDADD = $(PCRE_LIB) $(DL_LIB) $(SENDFILE_LIB) $(ATTR_LIB) $(common_libadd) $(SSL_LIB) $(FAM_LIBS)
+lighttpd_LDFLAGS = -export-dynamic
+lighttpd_CCPFLAGS = $(FAM_CFLAGS)
+
+proc_open_SOURCES = proc_open.c buffer.c
+proc_open_CPPFLAGS= -DDEBUG_PROC_OPEN
+
+#gen_license_SOURCES = license.c md5.c buffer.c gen_license.c
+
+#ssl_SOURCES = ssl.c
+
+
+#adserver_SOURCES = buffer.c iframe.c
+#adserver_LDADD = -lfcgi -lmysqlclient
+
+#error_test_SOURCES = error_test.c
+
+#evalo_SOURCES = buffer.c eval.c
+#bench_SOURCES = buffer.c bench.c
+#ajp_SOURCES = ajp.c
+
+noinst_HEADERS   = $(hdr)
+EXTRA_DIST = mod_skeleton.c configparser.y mod_ssi_exprparser.y lempar.c SConscript

Added: lighttpd/tags/1.4.19-5+lenny2/src/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1687 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+noinst_PROGRAMS = proc_open$(EXEEXT) lemon$(EXEEXT)
+sbin_PROGRAMS = lighttpd$(EXEEXT) lighttpd-angel$(EXEEXT)
+bin_PROGRAMS = spawn-fcgi$(EXEEXT)
+
+# if the linker doesn't allow referencing symbols of the binary
+# we have to put everything into a shared-lib and link it into
+# everything
+ at NO_RDYNAMIC_TRUE@am__append_1 = liblightcomp.la
+ at NO_RDYNAMIC_FALSE@am__append_2 = $(common_src)
+subdir = src
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
+	"$(DESTDIR)$(sbindir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+ at NO_RDYNAMIC_TRUE@liblightcomp_la_DEPENDENCIES =  \
+ at NO_RDYNAMIC_TRUE@	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ at NO_RDYNAMIC_TRUE@	$(am__DEPENDENCIES_1)
+am__liblightcomp_la_SOURCES_DIST = buffer.c log.c keyvalue.c chunk.c \
+	http_chunk.c stream.c fdevent.c stat_cache.c plugin.c \
+	joblist.c etag.c array.c data_string.c data_count.c \
+	data_array.c data_integer.c md5.c data_fastcgi.c \
+	fdevent_select.c fdevent_linux_rtsig.c fdevent_poll.c \
+	fdevent_linux_sysepoll.c fdevent_solaris_devpoll.c \
+	fdevent_freebsd_kqueue.c data_config.c bitset.c \
+	inet_ntop_cache.c crc32.c connections-glue.c configfile-glue.c \
+	http-header-glue.c network_write.c network_linux_sendfile.c \
+	network_freebsd_sendfile.c network_writev.c \
+	network_solaris_sendfilev.c network_openssl.c splaytree.c \
+	status_counter.c
+am__objects_1 = liblightcomp_la-buffer.lo liblightcomp_la-log.lo \
+	liblightcomp_la-keyvalue.lo liblightcomp_la-chunk.lo \
+	liblightcomp_la-http_chunk.lo liblightcomp_la-stream.lo \
+	liblightcomp_la-fdevent.lo liblightcomp_la-stat_cache.lo \
+	liblightcomp_la-plugin.lo liblightcomp_la-joblist.lo \
+	liblightcomp_la-etag.lo liblightcomp_la-array.lo \
+	liblightcomp_la-data_string.lo liblightcomp_la-data_count.lo \
+	liblightcomp_la-data_array.lo liblightcomp_la-data_integer.lo \
+	liblightcomp_la-md5.lo liblightcomp_la-data_fastcgi.lo \
+	liblightcomp_la-fdevent_select.lo \
+	liblightcomp_la-fdevent_linux_rtsig.lo \
+	liblightcomp_la-fdevent_poll.lo \
+	liblightcomp_la-fdevent_linux_sysepoll.lo \
+	liblightcomp_la-fdevent_solaris_devpoll.lo \
+	liblightcomp_la-fdevent_freebsd_kqueue.lo \
+	liblightcomp_la-data_config.lo liblightcomp_la-bitset.lo \
+	liblightcomp_la-inet_ntop_cache.lo liblightcomp_la-crc32.lo \
+	liblightcomp_la-connections-glue.lo \
+	liblightcomp_la-configfile-glue.lo \
+	liblightcomp_la-http-header-glue.lo \
+	liblightcomp_la-network_write.lo \
+	liblightcomp_la-network_linux_sendfile.lo \
+	liblightcomp_la-network_freebsd_sendfile.lo \
+	liblightcomp_la-network_writev.lo \
+	liblightcomp_la-network_solaris_sendfilev.lo \
+	liblightcomp_la-network_openssl.lo \
+	liblightcomp_la-splaytree.lo liblightcomp_la-status_counter.lo
+ at NO_RDYNAMIC_TRUE@am_liblightcomp_la_OBJECTS = $(am__objects_1)
+liblightcomp_la_OBJECTS = $(am_liblightcomp_la_OBJECTS)
+liblightcomp_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(liblightcomp_la_CFLAGS) \
+	$(CFLAGS) $(liblightcomp_la_LDFLAGS) $(LDFLAGS) -o $@
+ at NO_RDYNAMIC_TRUE@am_liblightcomp_la_rpath = -rpath $(libdir)
+ at NO_RDYNAMIC_TRUE@am__DEPENDENCIES_2 = liblightcomp.la
+mod_access_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_access_la_OBJECTS = mod_access.lo
+mod_access_la_OBJECTS = $(am_mod_access_la_OBJECTS)
+mod_access_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_access_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_accesslog_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_accesslog_la_OBJECTS = mod_accesslog.lo
+mod_accesslog_la_OBJECTS = $(am_mod_accesslog_la_OBJECTS)
+mod_accesslog_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_accesslog_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_alias_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_alias_la_OBJECTS = mod_alias.lo
+mod_alias_la_OBJECTS = $(am_mod_alias_la_OBJECTS)
+mod_alias_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_alias_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_auth_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+am_mod_auth_la_OBJECTS = mod_auth.lo http_auth_digest.lo http_auth.lo
+mod_auth_la_OBJECTS = $(am_mod_auth_la_OBJECTS)
+mod_auth_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_auth_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_cgi_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_cgi_la_OBJECTS = mod_cgi.lo
+mod_cgi_la_OBJECTS = $(am_mod_cgi_la_OBJECTS)
+mod_cgi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_cgi_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_cml_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1)
+am_mod_cml_la_OBJECTS = mod_cml_la-mod_cml.lo \
+	mod_cml_la-mod_cml_lua.lo mod_cml_la-mod_cml_funcs.lo
+mod_cml_la_OBJECTS = $(am_mod_cml_la_OBJECTS)
+mod_cml_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(mod_cml_la_CFLAGS) \
+	$(CFLAGS) $(mod_cml_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_compress_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+am_mod_compress_la_OBJECTS = mod_compress.lo
+mod_compress_la_OBJECTS = $(am_mod_compress_la_OBJECTS)
+mod_compress_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_compress_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_dirlisting_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1)
+am_mod_dirlisting_la_OBJECTS = mod_dirlisting.lo
+mod_dirlisting_la_OBJECTS = $(am_mod_dirlisting_la_OBJECTS)
+mod_dirlisting_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_dirlisting_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_evasive_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_evasive_la_OBJECTS = mod_evasive.lo
+mod_evasive_la_OBJECTS = $(am_mod_evasive_la_OBJECTS)
+mod_evasive_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_evasive_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_evhost_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_evhost_la_OBJECTS = mod_evhost.lo
+mod_evhost_la_OBJECTS = $(am_mod_evhost_la_OBJECTS)
+mod_evhost_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_evhost_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_expire_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_expire_la_OBJECTS = mod_expire.lo
+mod_expire_la_OBJECTS = $(am_mod_expire_la_OBJECTS)
+mod_expire_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_expire_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_extforward_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_extforward_la_OBJECTS = mod_extforward.lo
+mod_extforward_la_OBJECTS = $(am_mod_extforward_la_OBJECTS)
+mod_extforward_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_extforward_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_fastcgi_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_fastcgi_la_OBJECTS = mod_fastcgi.lo
+mod_fastcgi_la_OBJECTS = $(am_mod_fastcgi_la_OBJECTS)
+mod_fastcgi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_fastcgi_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_flv_streaming_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_flv_streaming_la_OBJECTS = mod_flv_streaming.lo
+mod_flv_streaming_la_OBJECTS = $(am_mod_flv_streaming_la_OBJECTS)
+mod_flv_streaming_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_flv_streaming_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_indexfile_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_indexfile_la_OBJECTS = mod_indexfile.lo
+mod_indexfile_la_OBJECTS = $(am_mod_indexfile_la_OBJECTS)
+mod_indexfile_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_indexfile_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_magnet_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1)
+am_mod_magnet_la_OBJECTS = mod_magnet_la-mod_magnet.lo \
+	mod_magnet_la-mod_magnet_cache.lo
+mod_magnet_la_OBJECTS = $(am_mod_magnet_la_OBJECTS)
+mod_magnet_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(mod_magnet_la_CFLAGS) \
+	$(CFLAGS) $(mod_magnet_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_mysql_vhost_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+am_mod_mysql_vhost_la_OBJECTS = mod_mysql_vhost_la-mod_mysql_vhost.lo
+mod_mysql_vhost_la_OBJECTS = $(am_mod_mysql_vhost_la_OBJECTS)
+mod_mysql_vhost_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_mysql_vhost_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_proxy_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_proxy_la_OBJECTS = mod_proxy.lo
+mod_proxy_la_OBJECTS = $(am_mod_proxy_la_OBJECTS)
+mod_proxy_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_proxy_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_redirect_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+am_mod_redirect_la_OBJECTS = mod_redirect.lo
+mod_redirect_la_OBJECTS = $(am_mod_redirect_la_OBJECTS)
+mod_redirect_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_redirect_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_rewrite_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+am_mod_rewrite_la_OBJECTS = mod_rewrite.lo
+mod_rewrite_la_OBJECTS = $(am_mod_rewrite_la_OBJECTS)
+mod_rewrite_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_rewrite_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_rrdtool_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_rrdtool_la_OBJECTS = mod_rrdtool.lo
+mod_rrdtool_la_OBJECTS = $(am_mod_rrdtool_la_OBJECTS)
+mod_rrdtool_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_rrdtool_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_scgi_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_scgi_la_OBJECTS = mod_scgi.lo
+mod_scgi_la_OBJECTS = $(am_mod_scgi_la_OBJECTS)
+mod_scgi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_scgi_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_secdownload_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_secdownload_la_OBJECTS = mod_secure_download.lo
+mod_secdownload_la_OBJECTS = $(am_mod_secdownload_la_OBJECTS)
+mod_secdownload_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_secdownload_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_setenv_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_setenv_la_OBJECTS = mod_setenv.lo
+mod_setenv_la_OBJECTS = $(am_mod_setenv_la_OBJECTS)
+mod_setenv_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_setenv_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_simple_vhost_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_simple_vhost_la_OBJECTS = mod_simple_vhost.lo
+mod_simple_vhost_la_OBJECTS = $(am_mod_simple_vhost_la_OBJECTS)
+mod_simple_vhost_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_simple_vhost_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_ssi_la_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
+am_mod_ssi_la_OBJECTS = mod_ssi_exprparser.lo mod_ssi_expr.lo \
+	mod_ssi.lo
+mod_ssi_la_OBJECTS = $(am_mod_ssi_la_OBJECTS)
+mod_ssi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_ssi_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_staticfile_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_staticfile_la_OBJECTS = mod_staticfile.lo
+mod_staticfile_la_OBJECTS = $(am_mod_staticfile_la_OBJECTS)
+mod_staticfile_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_staticfile_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_status_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_status_la_OBJECTS = mod_status.lo
+mod_status_la_OBJECTS = $(am_mod_status_la_OBJECTS)
+mod_status_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_status_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_trigger_b4_dl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2)
+am_mod_trigger_b4_dl_la_OBJECTS = mod_trigger_b4_dl.lo
+mod_trigger_b4_dl_la_OBJECTS = $(am_mod_trigger_b4_dl_la_OBJECTS)
+mod_trigger_b4_dl_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_trigger_b4_dl_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_userdir_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_userdir_la_OBJECTS = mod_userdir.lo
+mod_userdir_la_OBJECTS = $(am_mod_userdir_la_OBJECTS)
+mod_userdir_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_userdir_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_usertrack_la_DEPENDENCIES = $(am__DEPENDENCIES_2)
+am_mod_usertrack_la_OBJECTS = mod_usertrack.lo
+mod_usertrack_la_OBJECTS = $(am_mod_usertrack_la_OBJECTS)
+mod_usertrack_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(mod_usertrack_la_LDFLAGS) $(LDFLAGS) -o $@
+mod_webdav_la_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+am_mod_webdav_la_OBJECTS = mod_webdav_la-mod_webdav.lo
+mod_webdav_la_OBJECTS = $(am_mod_webdav_la_OBJECTS)
+mod_webdav_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(mod_webdav_la_CFLAGS) \
+	$(CFLAGS) $(mod_webdav_la_LDFLAGS) $(LDFLAGS) -o $@
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(sbin_PROGRAMS)
+am_lemon_OBJECTS = lemon.$(OBJEXT)
+lemon_OBJECTS = $(am_lemon_OBJECTS)
+lemon_LDADD = $(LDADD)
+am__lighttpd_SOURCES_DIST = server.c response.c connections.c \
+	network.c configfile.c configparser.c request.c proc_open.c \
+	buffer.c log.c keyvalue.c chunk.c http_chunk.c stream.c \
+	fdevent.c stat_cache.c plugin.c joblist.c etag.c array.c \
+	data_string.c data_count.c data_array.c data_integer.c md5.c \
+	data_fastcgi.c fdevent_select.c fdevent_linux_rtsig.c \
+	fdevent_poll.c fdevent_linux_sysepoll.c \
+	fdevent_solaris_devpoll.c fdevent_freebsd_kqueue.c \
+	data_config.c bitset.c inet_ntop_cache.c crc32.c \
+	connections-glue.c configfile-glue.c http-header-glue.c \
+	network_write.c network_linux_sendfile.c \
+	network_freebsd_sendfile.c network_writev.c \
+	network_solaris_sendfilev.c network_openssl.c splaytree.c \
+	status_counter.c
+am__objects_2 = buffer.$(OBJEXT) log.$(OBJEXT) keyvalue.$(OBJEXT) \
+	chunk.$(OBJEXT) http_chunk.$(OBJEXT) stream.$(OBJEXT) \
+	fdevent.$(OBJEXT) stat_cache.$(OBJEXT) plugin.$(OBJEXT) \
+	joblist.$(OBJEXT) etag.$(OBJEXT) array.$(OBJEXT) \
+	data_string.$(OBJEXT) data_count.$(OBJEXT) \
+	data_array.$(OBJEXT) data_integer.$(OBJEXT) md5.$(OBJEXT) \
+	data_fastcgi.$(OBJEXT) fdevent_select.$(OBJEXT) \
+	fdevent_linux_rtsig.$(OBJEXT) fdevent_poll.$(OBJEXT) \
+	fdevent_linux_sysepoll.$(OBJEXT) \
+	fdevent_solaris_devpoll.$(OBJEXT) \
+	fdevent_freebsd_kqueue.$(OBJEXT) data_config.$(OBJEXT) \
+	bitset.$(OBJEXT) inet_ntop_cache.$(OBJEXT) crc32.$(OBJEXT) \
+	connections-glue.$(OBJEXT) configfile-glue.$(OBJEXT) \
+	http-header-glue.$(OBJEXT) network_write.$(OBJEXT) \
+	network_linux_sendfile.$(OBJEXT) \
+	network_freebsd_sendfile.$(OBJEXT) network_writev.$(OBJEXT) \
+	network_solaris_sendfilev.$(OBJEXT) network_openssl.$(OBJEXT) \
+	splaytree.$(OBJEXT) status_counter.$(OBJEXT)
+ at NO_RDYNAMIC_FALSE@am__objects_3 = $(am__objects_2)
+am__objects_4 = server.$(OBJEXT) response.$(OBJEXT) \
+	connections.$(OBJEXT) network.$(OBJEXT) configfile.$(OBJEXT) \
+	configparser.$(OBJEXT) request.$(OBJEXT) proc_open.$(OBJEXT) \
+	$(am__objects_3)
+am_lighttpd_OBJECTS = $(am__objects_4)
+lighttpd_OBJECTS = $(am_lighttpd_OBJECTS)
+lighttpd_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+	$(am__DEPENDENCIES_1)
+lighttpd_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(lighttpd_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_lighttpd_angel_OBJECTS = lighttpd-angel.$(OBJEXT)
+lighttpd_angel_OBJECTS = $(am_lighttpd_angel_OBJECTS)
+lighttpd_angel_LDADD = $(LDADD)
+am_proc_open_OBJECTS = proc_open-proc_open.$(OBJEXT) \
+	proc_open-buffer.$(OBJEXT)
+proc_open_OBJECTS = $(am_proc_open_OBJECTS)
+proc_open_LDADD = $(LDADD)
+am_spawn_fcgi_OBJECTS = spawn-fcgi.$(OBJEXT)
+spawn_fcgi_OBJECTS = $(am_spawn_fcgi_OBJECTS)
+spawn_fcgi_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(liblightcomp_la_SOURCES) $(mod_access_la_SOURCES) \
+	$(mod_accesslog_la_SOURCES) $(mod_alias_la_SOURCES) \
+	$(mod_auth_la_SOURCES) $(mod_cgi_la_SOURCES) \
+	$(mod_cml_la_SOURCES) $(mod_compress_la_SOURCES) \
+	$(mod_dirlisting_la_SOURCES) $(mod_evasive_la_SOURCES) \
+	$(mod_evhost_la_SOURCES) $(mod_expire_la_SOURCES) \
+	$(mod_extforward_la_SOURCES) $(mod_fastcgi_la_SOURCES) \
+	$(mod_flv_streaming_la_SOURCES) $(mod_indexfile_la_SOURCES) \
+	$(mod_magnet_la_SOURCES) $(mod_mysql_vhost_la_SOURCES) \
+	$(mod_proxy_la_SOURCES) $(mod_redirect_la_SOURCES) \
+	$(mod_rewrite_la_SOURCES) $(mod_rrdtool_la_SOURCES) \
+	$(mod_scgi_la_SOURCES) $(mod_secdownload_la_SOURCES) \
+	$(mod_setenv_la_SOURCES) $(mod_simple_vhost_la_SOURCES) \
+	$(mod_ssi_la_SOURCES) $(mod_staticfile_la_SOURCES) \
+	$(mod_status_la_SOURCES) $(mod_trigger_b4_dl_la_SOURCES) \
+	$(mod_userdir_la_SOURCES) $(mod_usertrack_la_SOURCES) \
+	$(mod_webdav_la_SOURCES) $(lemon_SOURCES) $(lighttpd_SOURCES) \
+	$(lighttpd_angel_SOURCES) $(proc_open_SOURCES) \
+	$(spawn_fcgi_SOURCES)
+DIST_SOURCES = $(am__liblightcomp_la_SOURCES_DIST) \
+	$(mod_access_la_SOURCES) $(mod_accesslog_la_SOURCES) \
+	$(mod_alias_la_SOURCES) $(mod_auth_la_SOURCES) \
+	$(mod_cgi_la_SOURCES) $(mod_cml_la_SOURCES) \
+	$(mod_compress_la_SOURCES) $(mod_dirlisting_la_SOURCES) \
+	$(mod_evasive_la_SOURCES) $(mod_evhost_la_SOURCES) \
+	$(mod_expire_la_SOURCES) $(mod_extforward_la_SOURCES) \
+	$(mod_fastcgi_la_SOURCES) $(mod_flv_streaming_la_SOURCES) \
+	$(mod_indexfile_la_SOURCES) $(mod_magnet_la_SOURCES) \
+	$(mod_mysql_vhost_la_SOURCES) $(mod_proxy_la_SOURCES) \
+	$(mod_redirect_la_SOURCES) $(mod_rewrite_la_SOURCES) \
+	$(mod_rrdtool_la_SOURCES) $(mod_scgi_la_SOURCES) \
+	$(mod_secdownload_la_SOURCES) $(mod_setenv_la_SOURCES) \
+	$(mod_simple_vhost_la_SOURCES) $(mod_ssi_la_SOURCES) \
+	$(mod_staticfile_la_SOURCES) $(mod_status_la_SOURCES) \
+	$(mod_trigger_b4_dl_la_SOURCES) $(mod_userdir_la_SOURCES) \
+	$(mod_usertrack_la_SOURCES) $(mod_webdav_la_SOURCES) \
+	$(lemon_SOURCES) $(am__lighttpd_SOURCES_DIST) \
+	$(lighttpd_angel_SOURCES) $(proc_open_SOURCES) \
+	$(spawn_fcgi_SOURCES)
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@ -DLIBRARY_DIR="\"$(libdir)\"" -DSBIN_DIR="\"$(sbindir)\""
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CFLAGS = $(FAM_CFLAGS)
+LEMON = $(top_builddir)/src/lemon
+lemon_SOURCES = lemon.c
+lighttpd_angel_SOURCES = lighttpd-angel.c
+common_src = buffer.c log.c \
+      keyvalue.c chunk.c  \
+      http_chunk.c stream.c fdevent.c \
+      stat_cache.c plugin.c joblist.c etag.c array.c \
+      data_string.c data_count.c data_array.c \
+      data_integer.c md5.c data_fastcgi.c \
+      fdevent_select.c fdevent_linux_rtsig.c \
+      fdevent_poll.c fdevent_linux_sysepoll.c \
+      fdevent_solaris_devpoll.c fdevent_freebsd_kqueue.c \
+      data_config.c bitset.c \
+      inet_ntop_cache.c crc32.c \
+      connections-glue.c \
+      configfile-glue.c \
+      http-header-glue.c \
+      network_write.c network_linux_sendfile.c \
+      network_freebsd_sendfile.c network_writev.c \
+      network_solaris_sendfilev.c network_openssl.c \
+      splaytree.c status_counter.c
+
+src = server.c response.c connections.c network.c configfile.c \
+	configparser.c request.c proc_open.c $(am__append_2)
+spawn_fcgi_SOURCES = spawn-fcgi.c
+
+#lib_LTLIBRARIES += mod_httptls.la
+#mod_httptls_la_SOURCES = mod_httptls.c
+#mod_httptls_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+#mod_httptls_la_LIBADD = $(common_libadd)
+lib_LTLIBRARIES = $(am__append_1) mod_flv_streaming.la mod_evasive.la \
+	mod_webdav.la mod_magnet.la mod_cml.la mod_trigger_b4_dl.la \
+	mod_mysql_vhost.la mod_cgi.la mod_scgi.la mod_staticfile.la \
+	mod_dirlisting.la mod_indexfile.la mod_setenv.la mod_alias.la \
+	mod_userdir.la mod_rrdtool.la mod_usertrack.la mod_proxy.la \
+	mod_ssi.la mod_secdownload.la mod_expire.la mod_evhost.la \
+	mod_simple_vhost.la mod_fastcgi.la mod_extforward.la \
+	mod_access.la mod_compress.la mod_auth.la mod_rewrite.la \
+	mod_redirect.la mod_status.la mod_accesslog.la
+ at NO_RDYNAMIC_TRUE@liblightcomp_la_SOURCES = $(common_src)
+ at NO_RDYNAMIC_TRUE@liblightcomp_la_CFLAGS = $(AM_CFLAGS)
+ at NO_RDYNAMIC_TRUE@liblightcomp_la_LDFLAGS = -avoid-version -no-undefined
+ at NO_RDYNAMIC_TRUE@liblightcomp_la_LIBADD = $(PCRE_LIB) $(SSL_LIB) $(FAM_LIBS)
+ at NO_RDYNAMIC_FALSE@common_libadd = 
+ at NO_RDYNAMIC_TRUE@common_libadd = liblightcomp.la
+mod_flv_streaming_la_SOURCES = mod_flv_streaming.c
+mod_flv_streaming_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_flv_streaming_la_LIBADD = $(common_libadd)
+mod_evasive_la_SOURCES = mod_evasive.c
+mod_evasive_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_evasive_la_LIBADD = $(common_libadd)
+mod_webdav_la_SOURCES = mod_webdav.c
+mod_webdav_la_CFLAGS = $(AM_CFLAGS) $(XML_CFLAGS) $(SQLITE_CFLAGS) 
+mod_webdav_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_webdav_la_LIBADD = $(common_libadd) $(XML_LIBS) $(SQLITE_LIBS) $(UUID_LIBS)
+mod_magnet_la_SOURCES = mod_magnet.c mod_magnet_cache.c
+mod_magnet_la_CFLAGS = $(AM_CFLAGS) $(LUA_CFLAGS)
+mod_magnet_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_magnet_la_LIBADD = $(common_libadd) $(LUA_LIBS) -lm
+mod_cml_la_SOURCES = mod_cml.c mod_cml_lua.c mod_cml_funcs.c
+mod_cml_la_CFLAGS = $(AM_CFLAGS) $(LUA_CFLAGS)
+mod_cml_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_cml_la_LIBADD = $(MEMCACHE_LIB) $(common_libadd) $(LUA_LIBS) -lm
+mod_trigger_b4_dl_la_SOURCES = mod_trigger_b4_dl.c
+mod_trigger_b4_dl_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_trigger_b4_dl_la_LIBADD = $(GDBM_LIB) $(MEMCACHE_LIB) $(PCRE_LIB) $(common_libadd)
+mod_mysql_vhost_la_SOURCES = mod_mysql_vhost.c
+mod_mysql_vhost_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_mysql_vhost_la_LIBADD = $(MYSQL_LIBS) $(common_libadd)
+mod_mysql_vhost_la_CPPFLAGS = $(MYSQL_INCLUDE)
+mod_cgi_la_SOURCES = mod_cgi.c
+mod_cgi_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_cgi_la_LIBADD = $(common_libadd)
+mod_scgi_la_SOURCES = mod_scgi.c
+mod_scgi_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_scgi_la_LIBADD = $(common_libadd)
+mod_staticfile_la_SOURCES = mod_staticfile.c
+mod_staticfile_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_staticfile_la_LIBADD = $(common_libadd)
+mod_dirlisting_la_SOURCES = mod_dirlisting.c
+mod_dirlisting_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_dirlisting_la_LIBADD = $(common_libadd) $(PCRE_LIB)
+mod_indexfile_la_SOURCES = mod_indexfile.c
+mod_indexfile_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_indexfile_la_LIBADD = $(common_libadd)
+mod_setenv_la_SOURCES = mod_setenv.c
+mod_setenv_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_setenv_la_LIBADD = $(common_libadd)
+mod_alias_la_SOURCES = mod_alias.c
+mod_alias_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_alias_la_LIBADD = $(common_libadd)
+mod_userdir_la_SOURCES = mod_userdir.c
+mod_userdir_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_userdir_la_LIBADD = $(common_libadd)
+mod_rrdtool_la_SOURCES = mod_rrdtool.c
+mod_rrdtool_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_rrdtool_la_LIBADD = $(common_libadd)
+mod_usertrack_la_SOURCES = mod_usertrack.c
+mod_usertrack_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_usertrack_la_LIBADD = $(common_libadd)
+mod_proxy_la_SOURCES = mod_proxy.c
+mod_proxy_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_proxy_la_LIBADD = $(common_libadd)
+mod_ssi_la_SOURCES = mod_ssi_exprparser.c mod_ssi_expr.c mod_ssi.c
+mod_ssi_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_ssi_la_LIBADD = $(common_libadd) $(PCRE_LIB)
+mod_secdownload_la_SOURCES = mod_secure_download.c
+mod_secdownload_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_secdownload_la_LIBADD = $(common_libadd)
+mod_expire_la_SOURCES = mod_expire.c
+mod_expire_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_expire_la_LIBADD = $(common_libadd)
+mod_evhost_la_SOURCES = mod_evhost.c
+mod_evhost_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_evhost_la_LIBADD = $(common_libadd)
+mod_simple_vhost_la_SOURCES = mod_simple_vhost.c
+mod_simple_vhost_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_simple_vhost_la_LIBADD = $(common_libadd)
+mod_fastcgi_la_SOURCES = mod_fastcgi.c
+mod_fastcgi_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_fastcgi_la_LIBADD = $(common_libadd)
+mod_extforward_la_SOURCES = mod_extforward.c
+mod_extforward_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_extforward_la_LIBADD = $(common_libadd)
+mod_access_la_SOURCES = mod_access.c
+mod_access_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_access_la_LIBADD = $(common_libadd)
+mod_compress_la_SOURCES = mod_compress.c
+mod_compress_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_compress_la_LIBADD = $(Z_LIB) $(BZ_LIB) $(common_libadd)
+mod_auth_la_SOURCES = mod_auth.c http_auth_digest.c http_auth.c
+mod_auth_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_auth_la_LIBADD = $(CRYPT_LIB) $(LDAP_LIB) $(LBER_LIB) $(common_libadd)
+mod_rewrite_la_SOURCES = mod_rewrite.c
+mod_rewrite_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_rewrite_la_LIBADD = $(PCRE_LIB) $(common_libadd)
+mod_redirect_la_SOURCES = mod_redirect.c
+mod_redirect_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_redirect_la_LIBADD = $(PCRE_LIB) $(common_libadd)
+mod_status_la_SOURCES = mod_status.c
+mod_status_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_status_la_LIBADD = $(common_libadd)
+mod_accesslog_la_SOURCES = mod_accesslog.c
+mod_accesslog_la_LDFLAGS = -module -export-dynamic -avoid-version -no-undefined
+mod_accesslog_la_LIBADD = $(common_libadd)
+hdr = server.h buffer.h network.h log.h keyvalue.h \
+      response.h request.h fastcgi.h chunk.h \
+      settings.h http_chunk.h http_auth_digest.h \
+      md5.h http_auth.h stream.h \
+      fdevent.h connections.h base.h stat_cache.h \
+      plugin.h mod_auth.h \
+      etag.h joblist.h array.h crc32.h \
+      network_backends.h configfile.h bitset.h \
+      mod_ssi.h mod_ssi_expr.h inet_ntop_cache.h \
+      configparser.h mod_ssi_exprparser.h \
+      sys-mmap.h sys-socket.h mod_cml.h mod_cml_funcs.h \
+      splaytree.h proc_open.h status_counter.h \
+      mod_magnet_cache.h
+
+lighttpd_SOURCES = $(src)
+lighttpd_LDADD = $(PCRE_LIB) $(DL_LIB) $(SENDFILE_LIB) $(ATTR_LIB) $(common_libadd) $(SSL_LIB) $(FAM_LIBS)
+lighttpd_LDFLAGS = -export-dynamic
+lighttpd_CCPFLAGS = $(FAM_CFLAGS)
+proc_open_SOURCES = proc_open.c buffer.c
+proc_open_CPPFLAGS = -DDEBUG_PROC_OPEN
+
+#gen_license_SOURCES = license.c md5.c buffer.c gen_license.c
+
+#ssl_SOURCES = ssl.c
+
+#adserver_SOURCES = buffer.c iframe.c
+#adserver_LDADD = -lfcgi -lmysqlclient
+
+#error_test_SOURCES = error_test.c
+
+#evalo_SOURCES = buffer.c eval.c
+#bench_SOURCES = buffer.c bench.c
+#ajp_SOURCES = ajp.c
+noinst_HEADERS = $(hdr)
+EXTRA_DIST = mod_skeleton.c configparser.y mod_ssi_exprparser.y lempar.c SConscript
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  if test -f $$p; then \
+	    f=$(am__strip_dir) \
+	    echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+	    $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  p=$(am__strip_dir) \
+	  echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+	  $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+	  test "$$dir" != "$$p" || dir=.; \
+	  echo "rm -f \"$${dir}/so_locations\""; \
+	  rm -f "$${dir}/so_locations"; \
+	done
+liblightcomp.la: $(liblightcomp_la_OBJECTS) $(liblightcomp_la_DEPENDENCIES) 
+	$(liblightcomp_la_LINK) $(am_liblightcomp_la_rpath) $(liblightcomp_la_OBJECTS) $(liblightcomp_la_LIBADD) $(LIBS)
+mod_access.la: $(mod_access_la_OBJECTS) $(mod_access_la_DEPENDENCIES) 
+	$(mod_access_la_LINK) -rpath $(libdir) $(mod_access_la_OBJECTS) $(mod_access_la_LIBADD) $(LIBS)
+mod_accesslog.la: $(mod_accesslog_la_OBJECTS) $(mod_accesslog_la_DEPENDENCIES) 
+	$(mod_accesslog_la_LINK) -rpath $(libdir) $(mod_accesslog_la_OBJECTS) $(mod_accesslog_la_LIBADD) $(LIBS)
+mod_alias.la: $(mod_alias_la_OBJECTS) $(mod_alias_la_DEPENDENCIES) 
+	$(mod_alias_la_LINK) -rpath $(libdir) $(mod_alias_la_OBJECTS) $(mod_alias_la_LIBADD) $(LIBS)
+mod_auth.la: $(mod_auth_la_OBJECTS) $(mod_auth_la_DEPENDENCIES) 
+	$(mod_auth_la_LINK) -rpath $(libdir) $(mod_auth_la_OBJECTS) $(mod_auth_la_LIBADD) $(LIBS)
+mod_cgi.la: $(mod_cgi_la_OBJECTS) $(mod_cgi_la_DEPENDENCIES) 
+	$(mod_cgi_la_LINK) -rpath $(libdir) $(mod_cgi_la_OBJECTS) $(mod_cgi_la_LIBADD) $(LIBS)
+mod_cml.la: $(mod_cml_la_OBJECTS) $(mod_cml_la_DEPENDENCIES) 
+	$(mod_cml_la_LINK) -rpath $(libdir) $(mod_cml_la_OBJECTS) $(mod_cml_la_LIBADD) $(LIBS)
+mod_compress.la: $(mod_compress_la_OBJECTS) $(mod_compress_la_DEPENDENCIES) 
+	$(mod_compress_la_LINK) -rpath $(libdir) $(mod_compress_la_OBJECTS) $(mod_compress_la_LIBADD) $(LIBS)
+mod_dirlisting.la: $(mod_dirlisting_la_OBJECTS) $(mod_dirlisting_la_DEPENDENCIES) 
+	$(mod_dirlisting_la_LINK) -rpath $(libdir) $(mod_dirlisting_la_OBJECTS) $(mod_dirlisting_la_LIBADD) $(LIBS)
+mod_evasive.la: $(mod_evasive_la_OBJECTS) $(mod_evasive_la_DEPENDENCIES) 
+	$(mod_evasive_la_LINK) -rpath $(libdir) $(mod_evasive_la_OBJECTS) $(mod_evasive_la_LIBADD) $(LIBS)
+mod_evhost.la: $(mod_evhost_la_OBJECTS) $(mod_evhost_la_DEPENDENCIES) 
+	$(mod_evhost_la_LINK) -rpath $(libdir) $(mod_evhost_la_OBJECTS) $(mod_evhost_la_LIBADD) $(LIBS)
+mod_expire.la: $(mod_expire_la_OBJECTS) $(mod_expire_la_DEPENDENCIES) 
+	$(mod_expire_la_LINK) -rpath $(libdir) $(mod_expire_la_OBJECTS) $(mod_expire_la_LIBADD) $(LIBS)
+mod_extforward.la: $(mod_extforward_la_OBJECTS) $(mod_extforward_la_DEPENDENCIES) 
+	$(mod_extforward_la_LINK) -rpath $(libdir) $(mod_extforward_la_OBJECTS) $(mod_extforward_la_LIBADD) $(LIBS)
+mod_fastcgi.la: $(mod_fastcgi_la_OBJECTS) $(mod_fastcgi_la_DEPENDENCIES) 
+	$(mod_fastcgi_la_LINK) -rpath $(libdir) $(mod_fastcgi_la_OBJECTS) $(mod_fastcgi_la_LIBADD) $(LIBS)
+mod_flv_streaming.la: $(mod_flv_streaming_la_OBJECTS) $(mod_flv_streaming_la_DEPENDENCIES) 
+	$(mod_flv_streaming_la_LINK) -rpath $(libdir) $(mod_flv_streaming_la_OBJECTS) $(mod_flv_streaming_la_LIBADD) $(LIBS)
+mod_indexfile.la: $(mod_indexfile_la_OBJECTS) $(mod_indexfile_la_DEPENDENCIES) 
+	$(mod_indexfile_la_LINK) -rpath $(libdir) $(mod_indexfile_la_OBJECTS) $(mod_indexfile_la_LIBADD) $(LIBS)
+mod_magnet.la: $(mod_magnet_la_OBJECTS) $(mod_magnet_la_DEPENDENCIES) 
+	$(mod_magnet_la_LINK) -rpath $(libdir) $(mod_magnet_la_OBJECTS) $(mod_magnet_la_LIBADD) $(LIBS)
+mod_mysql_vhost.la: $(mod_mysql_vhost_la_OBJECTS) $(mod_mysql_vhost_la_DEPENDENCIES) 
+	$(mod_mysql_vhost_la_LINK) -rpath $(libdir) $(mod_mysql_vhost_la_OBJECTS) $(mod_mysql_vhost_la_LIBADD) $(LIBS)
+mod_proxy.la: $(mod_proxy_la_OBJECTS) $(mod_proxy_la_DEPENDENCIES) 
+	$(mod_proxy_la_LINK) -rpath $(libdir) $(mod_proxy_la_OBJECTS) $(mod_proxy_la_LIBADD) $(LIBS)
+mod_redirect.la: $(mod_redirect_la_OBJECTS) $(mod_redirect_la_DEPENDENCIES) 
+	$(mod_redirect_la_LINK) -rpath $(libdir) $(mod_redirect_la_OBJECTS) $(mod_redirect_la_LIBADD) $(LIBS)
+mod_rewrite.la: $(mod_rewrite_la_OBJECTS) $(mod_rewrite_la_DEPENDENCIES) 
+	$(mod_rewrite_la_LINK) -rpath $(libdir) $(mod_rewrite_la_OBJECTS) $(mod_rewrite_la_LIBADD) $(LIBS)
+mod_rrdtool.la: $(mod_rrdtool_la_OBJECTS) $(mod_rrdtool_la_DEPENDENCIES) 
+	$(mod_rrdtool_la_LINK) -rpath $(libdir) $(mod_rrdtool_la_OBJECTS) $(mod_rrdtool_la_LIBADD) $(LIBS)
+mod_scgi.la: $(mod_scgi_la_OBJECTS) $(mod_scgi_la_DEPENDENCIES) 
+	$(mod_scgi_la_LINK) -rpath $(libdir) $(mod_scgi_la_OBJECTS) $(mod_scgi_la_LIBADD) $(LIBS)
+mod_secdownload.la: $(mod_secdownload_la_OBJECTS) $(mod_secdownload_la_DEPENDENCIES) 
+	$(mod_secdownload_la_LINK) -rpath $(libdir) $(mod_secdownload_la_OBJECTS) $(mod_secdownload_la_LIBADD) $(LIBS)
+mod_setenv.la: $(mod_setenv_la_OBJECTS) $(mod_setenv_la_DEPENDENCIES) 
+	$(mod_setenv_la_LINK) -rpath $(libdir) $(mod_setenv_la_OBJECTS) $(mod_setenv_la_LIBADD) $(LIBS)
+mod_simple_vhost.la: $(mod_simple_vhost_la_OBJECTS) $(mod_simple_vhost_la_DEPENDENCIES) 
+	$(mod_simple_vhost_la_LINK) -rpath $(libdir) $(mod_simple_vhost_la_OBJECTS) $(mod_simple_vhost_la_LIBADD) $(LIBS)
+mod_ssi.la: $(mod_ssi_la_OBJECTS) $(mod_ssi_la_DEPENDENCIES) 
+	$(mod_ssi_la_LINK) -rpath $(libdir) $(mod_ssi_la_OBJECTS) $(mod_ssi_la_LIBADD) $(LIBS)
+mod_staticfile.la: $(mod_staticfile_la_OBJECTS) $(mod_staticfile_la_DEPENDENCIES) 
+	$(mod_staticfile_la_LINK) -rpath $(libdir) $(mod_staticfile_la_OBJECTS) $(mod_staticfile_la_LIBADD) $(LIBS)
+mod_status.la: $(mod_status_la_OBJECTS) $(mod_status_la_DEPENDENCIES) 
+	$(mod_status_la_LINK) -rpath $(libdir) $(mod_status_la_OBJECTS) $(mod_status_la_LIBADD) $(LIBS)
+mod_trigger_b4_dl.la: $(mod_trigger_b4_dl_la_OBJECTS) $(mod_trigger_b4_dl_la_DEPENDENCIES) 
+	$(mod_trigger_b4_dl_la_LINK) -rpath $(libdir) $(mod_trigger_b4_dl_la_OBJECTS) $(mod_trigger_b4_dl_la_LIBADD) $(LIBS)
+mod_userdir.la: $(mod_userdir_la_OBJECTS) $(mod_userdir_la_DEPENDENCIES) 
+	$(mod_userdir_la_LINK) -rpath $(libdir) $(mod_userdir_la_OBJECTS) $(mod_userdir_la_LIBADD) $(LIBS)
+mod_usertrack.la: $(mod_usertrack_la_OBJECTS) $(mod_usertrack_la_DEPENDENCIES) 
+	$(mod_usertrack_la_LINK) -rpath $(libdir) $(mod_usertrack_la_OBJECTS) $(mod_usertrack_la_LIBADD) $(LIBS)
+mod_webdav.la: $(mod_webdav_la_OBJECTS) $(mod_webdav_la_DEPENDENCIES) 
+	$(mod_webdav_la_LINK) -rpath $(libdir) $(mod_webdav_la_OBJECTS) $(mod_webdav_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	     || test -f $$p1 \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	     || test -f $$p1 \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-sbinPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(sbindir)/$$f"; \
+	done
+
+clean-sbinPROGRAMS:
+	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+lemon$(EXEEXT): $(lemon_OBJECTS) $(lemon_DEPENDENCIES) 
+	@rm -f lemon$(EXEEXT)
+	$(LINK) $(lemon_OBJECTS) $(lemon_LDADD) $(LIBS)
+lighttpd$(EXEEXT): $(lighttpd_OBJECTS) $(lighttpd_DEPENDENCIES) 
+	@rm -f lighttpd$(EXEEXT)
+	$(lighttpd_LINK) $(lighttpd_OBJECTS) $(lighttpd_LDADD) $(LIBS)
+lighttpd-angel$(EXEEXT): $(lighttpd_angel_OBJECTS) $(lighttpd_angel_DEPENDENCIES) 
+	@rm -f lighttpd-angel$(EXEEXT)
+	$(LINK) $(lighttpd_angel_OBJECTS) $(lighttpd_angel_LDADD) $(LIBS)
+proc_open$(EXEEXT): $(proc_open_OBJECTS) $(proc_open_DEPENDENCIES) 
+	@rm -f proc_open$(EXEEXT)
+	$(LINK) $(proc_open_OBJECTS) $(proc_open_LDADD) $(LIBS)
+spawn-fcgi$(EXEEXT): $(spawn_fcgi_OBJECTS) $(spawn_fcgi_DEPENDENCIES) 
+	@rm -f spawn-fcgi$(EXEEXT)
+	$(LINK) $(spawn_fcgi_OBJECTS) $(spawn_fcgi_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/array.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bitset.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/buffer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/chunk.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/configfile-glue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/configfile.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/configparser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/connections-glue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/connections.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/crc32.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/data_array.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/data_config.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/data_count.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/data_fastcgi.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/data_integer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/data_string.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/etag.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fdevent.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fdevent_freebsd_kqueue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fdevent_linux_rtsig.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fdevent_linux_sysepoll.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fdevent_poll.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fdevent_select.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fdevent_solaris_devpoll.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/http-header-glue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/http_auth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/http_auth_digest.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/http_chunk.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/inet_ntop_cache.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/joblist.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/keyvalue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lemon.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-array.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-bitset.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-buffer.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-chunk.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-configfile-glue.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-connections-glue.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-crc32.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-data_array.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-data_config.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-data_count.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-data_fastcgi.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-data_integer.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-data_string.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-etag.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-fdevent.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-fdevent_freebsd_kqueue.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-fdevent_linux_rtsig.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-fdevent_linux_sysepoll.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-fdevent_poll.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-fdevent_select.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-fdevent_solaris_devpoll.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-http-header-glue.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-http_chunk.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-inet_ntop_cache.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-joblist.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-keyvalue.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-log.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-md5.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-network_freebsd_sendfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-network_linux_sendfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-network_openssl.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-network_solaris_sendfilev.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-network_write.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-network_writev.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-plugin.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-splaytree.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-stat_cache.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-status_counter.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/liblightcomp_la-stream.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lighttpd-angel.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/log.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/md5.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_access.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_accesslog.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_alias.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_auth.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_cgi.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_cml_la-mod_cml.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_cml_la-mod_cml_funcs.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_cml_la-mod_cml_lua.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_compress.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_dirlisting.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_evasive.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_evhost.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_expire.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_extforward.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_fastcgi.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_flv_streaming.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_indexfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_magnet_la-mod_magnet.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_magnet_la-mod_magnet_cache.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_mysql_vhost_la-mod_mysql_vhost.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_proxy.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_redirect.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_rewrite.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_rrdtool.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_scgi.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_secure_download.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_setenv.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_simple_vhost.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_ssi.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_ssi_expr.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_ssi_exprparser.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_staticfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_status.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_trigger_b4_dl.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_userdir.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_usertrack.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mod_webdav_la-mod_webdav.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/network.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/network_freebsd_sendfile.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/network_linux_sendfile.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/network_openssl.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/network_solaris_sendfilev.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/network_write.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/network_writev.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/plugin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/proc_open-buffer.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/proc_open-proc_open.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/proc_open.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/request.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/response.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/server.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/spawn-fcgi.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/splaytree.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stat_cache.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/status_counter.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/stream.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+liblightcomp_la-buffer.lo: buffer.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-buffer.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-buffer.Tpo -c -o liblightcomp_la-buffer.lo `test -f 'buffer.c' || echo '$(srcdir)/'`buffer.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-buffer.Tpo $(DEPDIR)/liblightcomp_la-buffer.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='buffer.c' object='liblightcomp_la-buffer.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-buffer.lo `test -f 'buffer.c' || echo '$(srcdir)/'`buffer.c
+
+liblightcomp_la-log.lo: log.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-log.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-log.Tpo -c -o liblightcomp_la-log.lo `test -f 'log.c' || echo '$(srcdir)/'`log.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-log.Tpo $(DEPDIR)/liblightcomp_la-log.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='log.c' object='liblightcomp_la-log.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-log.lo `test -f 'log.c' || echo '$(srcdir)/'`log.c
+
+liblightcomp_la-keyvalue.lo: keyvalue.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-keyvalue.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-keyvalue.Tpo -c -o liblightcomp_la-keyvalue.lo `test -f 'keyvalue.c' || echo '$(srcdir)/'`keyvalue.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-keyvalue.Tpo $(DEPDIR)/liblightcomp_la-keyvalue.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='keyvalue.c' object='liblightcomp_la-keyvalue.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-keyvalue.lo `test -f 'keyvalue.c' || echo '$(srcdir)/'`keyvalue.c
+
+liblightcomp_la-chunk.lo: chunk.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-chunk.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-chunk.Tpo -c -o liblightcomp_la-chunk.lo `test -f 'chunk.c' || echo '$(srcdir)/'`chunk.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-chunk.Tpo $(DEPDIR)/liblightcomp_la-chunk.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='chunk.c' object='liblightcomp_la-chunk.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-chunk.lo `test -f 'chunk.c' || echo '$(srcdir)/'`chunk.c
+
+liblightcomp_la-http_chunk.lo: http_chunk.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-http_chunk.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-http_chunk.Tpo -c -o liblightcomp_la-http_chunk.lo `test -f 'http_chunk.c' || echo '$(srcdir)/'`http_chunk.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-http_chunk.Tpo $(DEPDIR)/liblightcomp_la-http_chunk.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http_chunk.c' object='liblightcomp_la-http_chunk.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-http_chunk.lo `test -f 'http_chunk.c' || echo '$(srcdir)/'`http_chunk.c
+
+liblightcomp_la-stream.lo: stream.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-stream.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-stream.Tpo -c -o liblightcomp_la-stream.lo `test -f 'stream.c' || echo '$(srcdir)/'`stream.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-stream.Tpo $(DEPDIR)/liblightcomp_la-stream.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stream.c' object='liblightcomp_la-stream.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-stream.lo `test -f 'stream.c' || echo '$(srcdir)/'`stream.c
+
+liblightcomp_la-fdevent.lo: fdevent.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-fdevent.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-fdevent.Tpo -c -o liblightcomp_la-fdevent.lo `test -f 'fdevent.c' || echo '$(srcdir)/'`fdevent.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-fdevent.Tpo $(DEPDIR)/liblightcomp_la-fdevent.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fdevent.c' object='liblightcomp_la-fdevent.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-fdevent.lo `test -f 'fdevent.c' || echo '$(srcdir)/'`fdevent.c
+
+liblightcomp_la-stat_cache.lo: stat_cache.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-stat_cache.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-stat_cache.Tpo -c -o liblightcomp_la-stat_cache.lo `test -f 'stat_cache.c' || echo '$(srcdir)/'`stat_cache.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-stat_cache.Tpo $(DEPDIR)/liblightcomp_la-stat_cache.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='stat_cache.c' object='liblightcomp_la-stat_cache.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-stat_cache.lo `test -f 'stat_cache.c' || echo '$(srcdir)/'`stat_cache.c
+
+liblightcomp_la-plugin.lo: plugin.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-plugin.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-plugin.Tpo -c -o liblightcomp_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-plugin.Tpo $(DEPDIR)/liblightcomp_la-plugin.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='plugin.c' object='liblightcomp_la-plugin.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-plugin.lo `test -f 'plugin.c' || echo '$(srcdir)/'`plugin.c
+
+liblightcomp_la-joblist.lo: joblist.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-joblist.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-joblist.Tpo -c -o liblightcomp_la-joblist.lo `test -f 'joblist.c' || echo '$(srcdir)/'`joblist.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-joblist.Tpo $(DEPDIR)/liblightcomp_la-joblist.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='joblist.c' object='liblightcomp_la-joblist.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-joblist.lo `test -f 'joblist.c' || echo '$(srcdir)/'`joblist.c
+
+liblightcomp_la-etag.lo: etag.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-etag.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-etag.Tpo -c -o liblightcomp_la-etag.lo `test -f 'etag.c' || echo '$(srcdir)/'`etag.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-etag.Tpo $(DEPDIR)/liblightcomp_la-etag.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='etag.c' object='liblightcomp_la-etag.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-etag.lo `test -f 'etag.c' || echo '$(srcdir)/'`etag.c
+
+liblightcomp_la-array.lo: array.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-array.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-array.Tpo -c -o liblightcomp_la-array.lo `test -f 'array.c' || echo '$(srcdir)/'`array.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-array.Tpo $(DEPDIR)/liblightcomp_la-array.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='array.c' object='liblightcomp_la-array.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-array.lo `test -f 'array.c' || echo '$(srcdir)/'`array.c
+
+liblightcomp_la-data_string.lo: data_string.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-data_string.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-data_string.Tpo -c -o liblightcomp_la-data_string.lo `test -f 'data_string.c' || echo '$(srcdir)/'`data_string.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-data_string.Tpo $(DEPDIR)/liblightcomp_la-data_string.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='data_string.c' object='liblightcomp_la-data_string.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-data_string.lo `test -f 'data_string.c' || echo '$(srcdir)/'`data_string.c
+
+liblightcomp_la-data_count.lo: data_count.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-data_count.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-data_count.Tpo -c -o liblightcomp_la-data_count.lo `test -f 'data_count.c' || echo '$(srcdir)/'`data_count.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-data_count.Tpo $(DEPDIR)/liblightcomp_la-data_count.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='data_count.c' object='liblightcomp_la-data_count.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-data_count.lo `test -f 'data_count.c' || echo '$(srcdir)/'`data_count.c
+
+liblightcomp_la-data_array.lo: data_array.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-data_array.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-data_array.Tpo -c -o liblightcomp_la-data_array.lo `test -f 'data_array.c' || echo '$(srcdir)/'`data_array.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-data_array.Tpo $(DEPDIR)/liblightcomp_la-data_array.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='data_array.c' object='liblightcomp_la-data_array.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-data_array.lo `test -f 'data_array.c' || echo '$(srcdir)/'`data_array.c
+
+liblightcomp_la-data_integer.lo: data_integer.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-data_integer.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-data_integer.Tpo -c -o liblightcomp_la-data_integer.lo `test -f 'data_integer.c' || echo '$(srcdir)/'`data_integer.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-data_integer.Tpo $(DEPDIR)/liblightcomp_la-data_integer.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='data_integer.c' object='liblightcomp_la-data_integer.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-data_integer.lo `test -f 'data_integer.c' || echo '$(srcdir)/'`data_integer.c
+
+liblightcomp_la-md5.lo: md5.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-md5.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-md5.Tpo -c -o liblightcomp_la-md5.lo `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-md5.Tpo $(DEPDIR)/liblightcomp_la-md5.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='md5.c' object='liblightcomp_la-md5.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-md5.lo `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
+
+liblightcomp_la-data_fastcgi.lo: data_fastcgi.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-data_fastcgi.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-data_fastcgi.Tpo -c -o liblightcomp_la-data_fastcgi.lo `test -f 'data_fastcgi.c' || echo '$(srcdir)/'`data_fastcgi.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-data_fastcgi.Tpo $(DEPDIR)/liblightcomp_la-data_fastcgi.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='data_fastcgi.c' object='liblightcomp_la-data_fastcgi.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-data_fastcgi.lo `test -f 'data_fastcgi.c' || echo '$(srcdir)/'`data_fastcgi.c
+
+liblightcomp_la-fdevent_select.lo: fdevent_select.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-fdevent_select.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-fdevent_select.Tpo -c -o liblightcomp_la-fdevent_select.lo `test -f 'fdevent_select.c' || echo '$(srcdir)/'`fdevent_select.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-fdevent_select.Tpo $(DEPDIR)/liblightcomp_la-fdevent_select.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fdevent_select.c' object='liblightcomp_la-fdevent_select.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-fdevent_select.lo `test -f 'fdevent_select.c' || echo '$(srcdir)/'`fdevent_select.c
+
+liblightcomp_la-fdevent_linux_rtsig.lo: fdevent_linux_rtsig.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-fdevent_linux_rtsig.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-fdevent_linux_rtsig.Tpo -c -o liblightcomp_la-fdevent_linux_rtsig.lo `test -f 'fdevent_linux_rtsig.c' || echo '$(srcdir)/'`fdevent_linux_rtsig.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-fdevent_linux_rtsig.Tpo $(DEPDIR)/liblightcomp_la-fdevent_linux_rtsig.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fdevent_linux_rtsig.c' object='liblightcomp_la-fdevent_linux_rtsig.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-fdevent_linux_rtsig.lo `test -f 'fdevent_linux_rtsig.c' || echo '$(srcdir)/'`fdevent_linux_rtsig.c
+
+liblightcomp_la-fdevent_poll.lo: fdevent_poll.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-fdevent_poll.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-fdevent_poll.Tpo -c -o liblightcomp_la-fdevent_poll.lo `test -f 'fdevent_poll.c' || echo '$(srcdir)/'`fdevent_poll.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-fdevent_poll.Tpo $(DEPDIR)/liblightcomp_la-fdevent_poll.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fdevent_poll.c' object='liblightcomp_la-fdevent_poll.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-fdevent_poll.lo `test -f 'fdevent_poll.c' || echo '$(srcdir)/'`fdevent_poll.c
+
+liblightcomp_la-fdevent_linux_sysepoll.lo: fdevent_linux_sysepoll.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-fdevent_linux_sysepoll.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-fdevent_linux_sysepoll.Tpo -c -o liblightcomp_la-fdevent_linux_sysepoll.lo `test -f 'fdevent_linux_sysepoll.c' || echo '$(srcdir)/'`fdevent_linux_sysepoll.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-fdevent_linux_sysepoll.Tpo $(DEPDIR)/liblightcomp_la-fdevent_linux_sysepoll.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fdevent_linux_sysepoll.c' object='liblightcomp_la-fdevent_linux_sysepoll.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-fdevent_linux_sysepoll.lo `test -f 'fdevent_linux_sysepoll.c' || echo '$(srcdir)/'`fdevent_linux_sysepoll.c
+
+liblightcomp_la-fdevent_solaris_devpoll.lo: fdevent_solaris_devpoll.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-fdevent_solaris_devpoll.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-fdevent_solaris_devpoll.Tpo -c -o liblightcomp_la-fdevent_solaris_devpoll.lo `test -f 'fdevent_solaris_devpoll.c' || echo '$(srcdir)/'`fdevent_solaris_devpoll.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-fdevent_solaris_devpoll.Tpo $(DEPDIR)/liblightcomp_la-fdevent_solaris_devpoll.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fdevent_solaris_devpoll.c' object='liblightcomp_la-fdevent_solaris_devpoll.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-fdevent_solaris_devpoll.lo `test -f 'fdevent_solaris_devpoll.c' || echo '$(srcdir)/'`fdevent_solaris_devpoll.c
+
+liblightcomp_la-fdevent_freebsd_kqueue.lo: fdevent_freebsd_kqueue.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-fdevent_freebsd_kqueue.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-fdevent_freebsd_kqueue.Tpo -c -o liblightcomp_la-fdevent_freebsd_kqueue.lo `test -f 'fdevent_freebsd_kqueue.c' || echo '$(srcdir)/'`fdevent_freebsd_kqueue.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-fdevent_freebsd_kqueue.Tpo $(DEPDIR)/liblightcomp_la-fdevent_freebsd_kqueue.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fdevent_freebsd_kqueue.c' object='liblightcomp_la-fdevent_freebsd_kqueue.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-fdevent_freebsd_kqueue.lo `test -f 'fdevent_freebsd_kqueue.c' || echo '$(srcdir)/'`fdevent_freebsd_kqueue.c
+
+liblightcomp_la-data_config.lo: data_config.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-data_config.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-data_config.Tpo -c -o liblightcomp_la-data_config.lo `test -f 'data_config.c' || echo '$(srcdir)/'`data_config.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-data_config.Tpo $(DEPDIR)/liblightcomp_la-data_config.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='data_config.c' object='liblightcomp_la-data_config.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-data_config.lo `test -f 'data_config.c' || echo '$(srcdir)/'`data_config.c
+
+liblightcomp_la-bitset.lo: bitset.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-bitset.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-bitset.Tpo -c -o liblightcomp_la-bitset.lo `test -f 'bitset.c' || echo '$(srcdir)/'`bitset.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-bitset.Tpo $(DEPDIR)/liblightcomp_la-bitset.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='bitset.c' object='liblightcomp_la-bitset.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-bitset.lo `test -f 'bitset.c' || echo '$(srcdir)/'`bitset.c
+
+liblightcomp_la-inet_ntop_cache.lo: inet_ntop_cache.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-inet_ntop_cache.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-inet_ntop_cache.Tpo -c -o liblightcomp_la-inet_ntop_cache.lo `test -f 'inet_ntop_cache.c' || echo '$(srcdir)/'`inet_ntop_cache.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-inet_ntop_cache.Tpo $(DEPDIR)/liblightcomp_la-inet_ntop_cache.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='inet_ntop_cache.c' object='liblightcomp_la-inet_ntop_cache.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-inet_ntop_cache.lo `test -f 'inet_ntop_cache.c' || echo '$(srcdir)/'`inet_ntop_cache.c
+
+liblightcomp_la-crc32.lo: crc32.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-crc32.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-crc32.Tpo -c -o liblightcomp_la-crc32.lo `test -f 'crc32.c' || echo '$(srcdir)/'`crc32.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-crc32.Tpo $(DEPDIR)/liblightcomp_la-crc32.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='crc32.c' object='liblightcomp_la-crc32.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-crc32.lo `test -f 'crc32.c' || echo '$(srcdir)/'`crc32.c
+
+liblightcomp_la-connections-glue.lo: connections-glue.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-connections-glue.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-connections-glue.Tpo -c -o liblightcomp_la-connections-glue.lo `test -f 'connections-glue.c' || echo '$(srcdir)/'`connections-glue.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-connections-glue.Tpo $(DEPDIR)/liblightcomp_la-connections-glue.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='connections-glue.c' object='liblightcomp_la-connections-glue.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-connections-glue.lo `test -f 'connections-glue.c' || echo '$(srcdir)/'`connections-glue.c
+
+liblightcomp_la-configfile-glue.lo: configfile-glue.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-configfile-glue.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-configfile-glue.Tpo -c -o liblightcomp_la-configfile-glue.lo `test -f 'configfile-glue.c' || echo '$(srcdir)/'`configfile-glue.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-configfile-glue.Tpo $(DEPDIR)/liblightcomp_la-configfile-glue.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='configfile-glue.c' object='liblightcomp_la-configfile-glue.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-configfile-glue.lo `test -f 'configfile-glue.c' || echo '$(srcdir)/'`configfile-glue.c
+
+liblightcomp_la-http-header-glue.lo: http-header-glue.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-http-header-glue.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-http-header-glue.Tpo -c -o liblightcomp_la-http-header-glue.lo `test -f 'http-header-glue.c' || echo '$(srcdir)/'`http-header-glue.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-http-header-glue.Tpo $(DEPDIR)/liblightcomp_la-http-header-glue.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http-header-glue.c' object='liblightcomp_la-http-header-glue.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-http-header-glue.lo `test -f 'http-header-glue.c' || echo '$(srcdir)/'`http-header-glue.c
+
+liblightcomp_la-network_write.lo: network_write.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-network_write.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-network_write.Tpo -c -o liblightcomp_la-network_write.lo `test -f 'network_write.c' || echo '$(srcdir)/'`network_write.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-network_write.Tpo $(DEPDIR)/liblightcomp_la-network_write.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='network_write.c' object='liblightcomp_la-network_write.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-network_write.lo `test -f 'network_write.c' || echo '$(srcdir)/'`network_write.c
+
+liblightcomp_la-network_linux_sendfile.lo: network_linux_sendfile.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-network_linux_sendfile.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-network_linux_sendfile.Tpo -c -o liblightcomp_la-network_linux_sendfile.lo `test -f 'network_linux_sendfile.c' || echo '$(srcdir)/'`network_linux_sendfile.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-network_linux_sendfile.Tpo $(DEPDIR)/liblightcomp_la-network_linux_sendfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='network_linux_sendfile.c' object='liblightcomp_la-network_linux_sendfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-network_linux_sendfile.lo `test -f 'network_linux_sendfile.c' || echo '$(srcdir)/'`network_linux_sendfile.c
+
+liblightcomp_la-network_freebsd_sendfile.lo: network_freebsd_sendfile.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-network_freebsd_sendfile.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-network_freebsd_sendfile.Tpo -c -o liblightcomp_la-network_freebsd_sendfile.lo `test -f 'network_freebsd_sendfile.c' || echo '$(srcdir)/'`network_freebsd_sendfile.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-network_freebsd_sendfile.Tpo $(DEPDIR)/liblightcomp_la-network_freebsd_sendfile.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='network_freebsd_sendfile.c' object='liblightcomp_la-network_freebsd_sendfile.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-network_freebsd_sendfile.lo `test -f 'network_freebsd_sendfile.c' || echo '$(srcdir)/'`network_freebsd_sendfile.c
+
+liblightcomp_la-network_writev.lo: network_writev.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-network_writev.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-network_writev.Tpo -c -o liblightcomp_la-network_writev.lo `test -f 'network_writev.c' || echo '$(srcdir)/'`network_writev.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-network_writev.Tpo $(DEPDIR)/liblightcomp_la-network_writev.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='network_writev.c' object='liblightcomp_la-network_writev.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-network_writev.lo `test -f 'network_writev.c' || echo '$(srcdir)/'`network_writev.c
+
+liblightcomp_la-network_solaris_sendfilev.lo: network_solaris_sendfilev.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-network_solaris_sendfilev.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-network_solaris_sendfilev.Tpo -c -o liblightcomp_la-network_solaris_sendfilev.lo `test -f 'network_solaris_sendfilev.c' || echo '$(srcdir)/'`network_solaris_sendfilev.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-network_solaris_sendfilev.Tpo $(DEPDIR)/liblightcomp_la-network_solaris_sendfilev.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='network_solaris_sendfilev.c' object='liblightcomp_la-network_solaris_sendfilev.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-network_solaris_sendfilev.lo `test -f 'network_solaris_sendfilev.c' || echo '$(srcdir)/'`network_solaris_sendfilev.c
+
+liblightcomp_la-network_openssl.lo: network_openssl.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-network_openssl.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-network_openssl.Tpo -c -o liblightcomp_la-network_openssl.lo `test -f 'network_openssl.c' || echo '$(srcdir)/'`network_openssl.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-network_openssl.Tpo $(DEPDIR)/liblightcomp_la-network_openssl.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='network_openssl.c' object='liblightcomp_la-network_openssl.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-network_openssl.lo `test -f 'network_openssl.c' || echo '$(srcdir)/'`network_openssl.c
+
+liblightcomp_la-splaytree.lo: splaytree.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-splaytree.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-splaytree.Tpo -c -o liblightcomp_la-splaytree.lo `test -f 'splaytree.c' || echo '$(srcdir)/'`splaytree.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-splaytree.Tpo $(DEPDIR)/liblightcomp_la-splaytree.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='splaytree.c' object='liblightcomp_la-splaytree.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-splaytree.lo `test -f 'splaytree.c' || echo '$(srcdir)/'`splaytree.c
+
+liblightcomp_la-status_counter.lo: status_counter.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -MT liblightcomp_la-status_counter.lo -MD -MP -MF $(DEPDIR)/liblightcomp_la-status_counter.Tpo -c -o liblightcomp_la-status_counter.lo `test -f 'status_counter.c' || echo '$(srcdir)/'`status_counter.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/liblightcomp_la-status_counter.Tpo $(DEPDIR)/liblightcomp_la-status_counter.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='status_counter.c' object='liblightcomp_la-status_counter.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(liblightcomp_la_CFLAGS) $(CFLAGS) -c -o liblightcomp_la-status_counter.lo `test -f 'status_counter.c' || echo '$(srcdir)/'`status_counter.c
+
+mod_cml_la-mod_cml.lo: mod_cml.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_cml_la_CFLAGS) $(CFLAGS) -MT mod_cml_la-mod_cml.lo -MD -MP -MF $(DEPDIR)/mod_cml_la-mod_cml.Tpo -c -o mod_cml_la-mod_cml.lo `test -f 'mod_cml.c' || echo '$(srcdir)/'`mod_cml.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/mod_cml_la-mod_cml.Tpo $(DEPDIR)/mod_cml_la-mod_cml.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_cml.c' object='mod_cml_la-mod_cml.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_cml_la_CFLAGS) $(CFLAGS) -c -o mod_cml_la-mod_cml.lo `test -f 'mod_cml.c' || echo '$(srcdir)/'`mod_cml.c
+
+mod_cml_la-mod_cml_lua.lo: mod_cml_lua.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_cml_la_CFLAGS) $(CFLAGS) -MT mod_cml_la-mod_cml_lua.lo -MD -MP -MF $(DEPDIR)/mod_cml_la-mod_cml_lua.Tpo -c -o mod_cml_la-mod_cml_lua.lo `test -f 'mod_cml_lua.c' || echo '$(srcdir)/'`mod_cml_lua.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/mod_cml_la-mod_cml_lua.Tpo $(DEPDIR)/mod_cml_la-mod_cml_lua.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_cml_lua.c' object='mod_cml_la-mod_cml_lua.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_cml_la_CFLAGS) $(CFLAGS) -c -o mod_cml_la-mod_cml_lua.lo `test -f 'mod_cml_lua.c' || echo '$(srcdir)/'`mod_cml_lua.c
+
+mod_cml_la-mod_cml_funcs.lo: mod_cml_funcs.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_cml_la_CFLAGS) $(CFLAGS) -MT mod_cml_la-mod_cml_funcs.lo -MD -MP -MF $(DEPDIR)/mod_cml_la-mod_cml_funcs.Tpo -c -o mod_cml_la-mod_cml_funcs.lo `test -f 'mod_cml_funcs.c' || echo '$(srcdir)/'`mod_cml_funcs.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/mod_cml_la-mod_cml_funcs.Tpo $(DEPDIR)/mod_cml_la-mod_cml_funcs.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_cml_funcs.c' object='mod_cml_la-mod_cml_funcs.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_cml_la_CFLAGS) $(CFLAGS) -c -o mod_cml_la-mod_cml_funcs.lo `test -f 'mod_cml_funcs.c' || echo '$(srcdir)/'`mod_cml_funcs.c
+
+mod_magnet_la-mod_magnet.lo: mod_magnet.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_magnet_la_CFLAGS) $(CFLAGS) -MT mod_magnet_la-mod_magnet.lo -MD -MP -MF $(DEPDIR)/mod_magnet_la-mod_magnet.Tpo -c -o mod_magnet_la-mod_magnet.lo `test -f 'mod_magnet.c' || echo '$(srcdir)/'`mod_magnet.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/mod_magnet_la-mod_magnet.Tpo $(DEPDIR)/mod_magnet_la-mod_magnet.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_magnet.c' object='mod_magnet_la-mod_magnet.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_magnet_la_CFLAGS) $(CFLAGS) -c -o mod_magnet_la-mod_magnet.lo `test -f 'mod_magnet.c' || echo '$(srcdir)/'`mod_magnet.c
+
+mod_magnet_la-mod_magnet_cache.lo: mod_magnet_cache.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_magnet_la_CFLAGS) $(CFLAGS) -MT mod_magnet_la-mod_magnet_cache.lo -MD -MP -MF $(DEPDIR)/mod_magnet_la-mod_magnet_cache.Tpo -c -o mod_magnet_la-mod_magnet_cache.lo `test -f 'mod_magnet_cache.c' || echo '$(srcdir)/'`mod_magnet_cache.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/mod_magnet_la-mod_magnet_cache.Tpo $(DEPDIR)/mod_magnet_la-mod_magnet_cache.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_magnet_cache.c' object='mod_magnet_la-mod_magnet_cache.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_magnet_la_CFLAGS) $(CFLAGS) -c -o mod_magnet_la-mod_magnet_cache.lo `test -f 'mod_magnet_cache.c' || echo '$(srcdir)/'`mod_magnet_cache.c
+
+mod_mysql_vhost_la-mod_mysql_vhost.lo: mod_mysql_vhost.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mod_mysql_vhost_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mod_mysql_vhost_la-mod_mysql_vhost.lo -MD -MP -MF $(DEPDIR)/mod_mysql_vhost_la-mod_mysql_vhost.Tpo -c -o mod_mysql_vhost_la-mod_mysql_vhost.lo `test -f 'mod_mysql_vhost.c' || echo '$(srcdir)/'`mod_mysql_vhost.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/mod_mysql_vhost_la-mod_mysql_vhost.Tpo $(DEPDIR)/mod_mysql_vhost_la-mod_mysql_vhost.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_mysql_vhost.c' object='mod_mysql_vhost_la-mod_mysql_vhost.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(mod_mysql_vhost_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mod_mysql_vhost_la-mod_mysql_vhost.lo `test -f 'mod_mysql_vhost.c' || echo '$(srcdir)/'`mod_mysql_vhost.c
+
+mod_webdav_la-mod_webdav.lo: mod_webdav.c
+ at am__fastdepCC_TRUE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_webdav_la_CFLAGS) $(CFLAGS) -MT mod_webdav_la-mod_webdav.lo -MD -MP -MF $(DEPDIR)/mod_webdav_la-mod_webdav.Tpo -c -o mod_webdav_la-mod_webdav.lo `test -f 'mod_webdav.c' || echo '$(srcdir)/'`mod_webdav.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/mod_webdav_la-mod_webdav.Tpo $(DEPDIR)/mod_webdav_la-mod_webdav.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='mod_webdav.c' object='mod_webdav_la-mod_webdav.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mod_webdav_la_CFLAGS) $(CFLAGS) -c -o mod_webdav_la-mod_webdav.lo `test -f 'mod_webdav.c' || echo '$(srcdir)/'`mod_webdav.c
+
+proc_open-proc_open.o: proc_open.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(proc_open_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT proc_open-proc_open.o -MD -MP -MF $(DEPDIR)/proc_open-proc_open.Tpo -c -o proc_open-proc_open.o `test -f 'proc_open.c' || echo '$(srcdir)/'`proc_open.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/proc_open-proc_open.Tpo $(DEPDIR)/proc_open-proc_open.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='proc_open.c' object='proc_open-proc_open.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(proc_open_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o proc_open-proc_open.o `test -f 'proc_open.c' || echo '$(srcdir)/'`proc_open.c
+
+proc_open-proc_open.obj: proc_open.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(proc_open_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT proc_open-proc_open.obj -MD -MP -MF $(DEPDIR)/proc_open-proc_open.Tpo -c -o proc_open-proc_open.obj `if test -f 'proc_open.c'; then $(CYGPATH_W) 'proc_open.c'; else $(CYGPATH_W) '$(srcdir)/proc_open.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/proc_open-proc_open.Tpo $(DEPDIR)/proc_open-proc_open.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='proc_open.c' object='proc_open-proc_open.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(proc_open_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o proc_open-proc_open.obj `if test -f 'proc_open.c'; then $(CYGPATH_W) 'proc_open.c'; else $(CYGPATH_W) '$(srcdir)/proc_open.c'; fi`
+
+proc_open-buffer.o: buffer.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(proc_open_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT proc_open-buffer.o -MD -MP -MF $(DEPDIR)/proc_open-buffer.Tpo -c -o proc_open-buffer.o `test -f 'buffer.c' || echo '$(srcdir)/'`buffer.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/proc_open-buffer.Tpo $(DEPDIR)/proc_open-buffer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='buffer.c' object='proc_open-buffer.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(proc_open_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o proc_open-buffer.o `test -f 'buffer.c' || echo '$(srcdir)/'`buffer.c
+
+proc_open-buffer.obj: buffer.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(proc_open_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT proc_open-buffer.obj -MD -MP -MF $(DEPDIR)/proc_open-buffer.Tpo -c -o proc_open-buffer.obj `if test -f 'buffer.c'; then $(CYGPATH_W) 'buffer.c'; else $(CYGPATH_W) '$(srcdir)/buffer.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/proc_open-buffer.Tpo $(DEPDIR)/proc_open-buffer.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='buffer.c' object='proc_open-buffer.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(proc_open_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o proc_open-buffer.obj `if test -f 'buffer.c'; then $(CYGPATH_W) 'buffer.c'; else $(CYGPATH_W) '$(srcdir)/buffer.c'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS)
+install-binPROGRAMS: install-libLTLIBRARIES
+
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+	clean-libtool clean-noinstPROGRAMS clean-sbinPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS install-libLTLIBRARIES \
+	install-sbinPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \
+	uninstall-sbinPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic clean-libLTLIBRARIES clean-libtool \
+	clean-noinstPROGRAMS clean-sbinPROGRAMS ctags distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-binPROGRAMS install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-libLTLIBRARIES install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags uninstall uninstall-am \
+	uninstall-binPROGRAMS uninstall-libLTLIBRARIES \
+	uninstall-sbinPROGRAMS
+
+
+#simple_fcgi_SOURCES=simple-fcgi.c
+#simple_fcgi_LDADD=-lfcgi
+
+ at CROSS_COMPILING_TRUE@configparser.c configparser.h:
+ at CROSS_COMPILING_TRUE@mod_ssi_exprparser.c mod_ssi_exprparser.h:
+ at CROSS_COMPILING_FALSE@$(srcdir)/configparser.y: lemon
+ at CROSS_COMPILING_FALSE@$(srcdir)/mod_ssi_exprparser.y: lemon
+
+ at CROSS_COMPILING_FALSE@configparser.c configparser.h: $(srcdir)/configparser.y
+ at CROSS_COMPILING_FALSE@	rm -f configparser.h
+ at CROSS_COMPILING_FALSE@	$(LEMON) -q $(srcdir)/configparser.y $(srcdir)/lempar.c
+
+ at CROSS_COMPILING_FALSE@mod_ssi_exprparser.c mod_ssi_exprparser.h: $(srcdir)/mod_ssi_exprparser.y
+ at CROSS_COMPILING_FALSE@	rm -f mod_ssi_exprparser.h
+ at CROSS_COMPILING_FALSE@	$(LEMON) -q $(srcdir)/mod_ssi_exprparser.y $(srcdir)/lempar.c
+
+$(srcdir)/configfile.c: configparser.h
+$(srcdir)/mod_ssi_expr.c: mod_ssi_exprparser.h
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/src/SConscript
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/SConscript	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/SConscript	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,195 @@
+import os
+import re
+import types
+
+Import('env')
+
+common_src = Split("buffer.c log.c \
+      keyvalue.c chunk.c  \
+      http_chunk.c stream.c fdevent.c \
+      stat_cache.c plugin.c joblist.c etag.c array.c \
+      data_string.c data_count.c data_array.c \
+      data_integer.c md5.c data_fastcgi.c \
+      fdevent_select.c fdevent_linux_rtsig.c \
+      fdevent_poll.c fdevent_linux_sysepoll.c \
+      fdevent_solaris_devpoll.c fdevent_freebsd_kqueue.c \
+      data_config.c bitset.c \
+      inet_ntop_cache.c crc32.c \
+      connections-glue.c \
+      configfile-glue.c \
+      http-header-glue.c \
+      splaytree.c network_writev.c \
+      network_write.c network_linux_sendfile.c \
+      network_freebsd_sendfile.c  \
+      network_solaris_sendfilev.c network_openssl.c \
+      status_counter.c \
+")
+
+src = Split("server.c response.c connections.c network.c \
+      configfile.c configparser.c request.c proc_open.c")
+
+lemon = env.Program('lemon', 'lemon.c')
+
+configparser = env.Command(['configparser.c', 'configparser.h'], 'configparser.y', '(cd build; ../' + lemon[0].path + ' -q ../$SOURCE ../src/lempar.c; cd ..)')
+env.Depends(configparser, lemon)
+
+mod_ssi_exprparser = env.Command(['mod_ssi_exprparser.c', 'mod_ssi_exprparser.h'], 'mod_ssi_exprparser.y', '(cd build; ../' + lemon[0].path + ' -q ../$SOURCE ../src/lempar.c; cd ..)')
+env.Depends(mod_ssi_exprparser, lemon)
+
+## the modules and how they are built
+modules = {
+	'mod_access' : { 'src' : [ 'mod_access.c' ] },
+	'mod_alias' : { 'src' : [ 'mod_alias.c' ] },
+	'mod_cgi' : { 'src' : [ 'mod_cgi.c' ] },
+	'mod_fastcgi' : { 'src' : [ 'mod_fastcgi.c' ] },
+	'mod_scgi' : { 'src' : [ 'mod_scgi.c' ] },
+	'mod_staticfile' : { 'src' : [ 'mod_staticfile.c' ] },
+	'mod_dirlisting' : { 'src' : [ 'mod_dirlisting.c' ], 'lib' : [ env['LIBPCRE'] ] },
+	'mod_indexfile' : { 'src' : [ 'mod_indexfile.c' ] },
+	'mod_setenv' : { 'src' : [ 'mod_setenv.c' ] },
+	'mod_rrdtool' : { 'src' : [ 'mod_rrdtool.c' ] },
+	'mod_usertrack' : { 'src' : [ 'mod_usertrack.c' ] },
+	'mod_proxy' : { 'src' : [ 'mod_proxy.c' ] },
+	'mod_userdir' : { 'src' : [ 'mod_userdir.c' ] },
+	'mod_secdownload' : { 'src' : [ 'mod_secure_download.c' ] },
+	'mod_accesslog' : { 'src' : [ 'mod_accesslog.c' ] },
+	'mod_simple_vhost' : { 'src' : [ 'mod_simple_vhost.c' ] },
+	'mod_evhost' : { 'src' : [ 'mod_evhost.c' ] },
+	'mod_expire' : { 'src' : [ 'mod_expire.c' ] },
+	'mod_status' : { 'src' : [ 'mod_status.c' ] },
+	'mod_compress' : { 'src' : [ 'mod_compress.c' ], 'lib' : [ env['LIBZ'], env['LIBBZ2'] ] },
+	'mod_redirect' : { 'src' : [ 'mod_redirect.c' ], 'lib' : [ env['LIBPCRE'] ] },
+	'mod_rewrite' : { 'src' : [ 'mod_rewrite.c' ], 'lib' : [ env['LIBPCRE'] ] },
+	'mod_auth' : {
+		'src' : [ 'mod_auth.c', 'http_auth_digest.c', 'http_auth.c' ],
+		'lib' : [ env['LIBCRYPT'], env['LIBLDAP'], env['LIBLBER'] ] },
+	'mod_webdav' : { 'src' : [ 'mod_webdav.c' ], 'lib' : [ env['LIBXML2'], env['LIBSQLITE3'], env['LIBUUID'] ] },
+	'mod_mysql_vhost' : { 'src' : [ 'mod_mysql_vhost.c' ], 'lib' : [ env['LIBMYSQL'] ] },
+	'mod_trigger_b4_dl' : { 'src' : [ 'mod_trigger_b4_dl.c' ], 'lib' : [ env['LIBPCRE'] ] },
+	'mod_cml' : {
+		'src' : [ 'mod_cml_lua.c', 'mod_cml.c', 'mod_cml_funcs.c' ],
+		'lib' : [ env['LIBPCRE'], env['LIBMEMCACHE'], env['LIBLUA'], env['LIBLUALIB'] ] },
+	'mod_uploadprogress' : { 'src' : [ 'mod_uploadprogress.c' ] },
+	'mod_evasive' : { 'src' : [ 'mod_evasive.c' ] },
+	'mod_ssi' : { 'src' : [ 'mod_ssi_exprparser.c', 'mod_ssi_expr.c', 'mod_ssi.c' ], 'lib' : [ env['LIBPCRE'] ] },
+	'mod_flv_streaming' : { 'src' : [ 'mod_flv_streaming.c' ] },
+	'mod_magnet' : { 'src' : [ 'mod_magnet.c', 'mod_magnet_cache.c' ], 'lib' : [ env['LIBLUA'] ] },
+}
+
+staticenv = env.Copy(CPPFLAGS=[ env['CPPFLAGS'], '-DLIGHTTPD_STATIC', '-DOPENSSL_NO_KRB5'])
+
+## all the core-sources + the modules
+staticsrc = src + common_src
+
+staticlib = env['LIBS']
+staticinit = ''
+for module in modules.keys():
+	staticsrc += modules[module]['src']
+	staticinit += "PLUGIN_INIT(%s)\n"%module
+	if modules[module].has_key('lib'):
+		staticlib += modules[module]['lib']
+
+open('plugin-static.h', 'w+').write(staticinit)
+
+## turn all src-files into objects
+staticobj = []
+for cfile in staticsrc:
+	staticobj += [ staticenv.Object('static-' + cfile.replace('.c', ''), cfile) ]
+
+staticbin = staticenv.Program('lighttpd-semi-static',
+	staticobj,
+	LIBS = staticlib
+	)
+
+## you might have to adjust the list of libs and the order for your setup
+## this is tricky, be warned
+fullstaticlib = []
+
+## try to calculate the libs for fullstatic with ldd
+## 1. find the lib
+## 2. check the deps
+## 3. add them to the libs
+searchlibs = os.pathsep.join([ '/lib/', '/usr/lib/', '/usr/local/lib/' ])
+lddre = re.compile(r'^\s+lib([^=-]+)(?:-[\.0-9]+)?\.so\.[0-9]+ =>', re.MULTILINE)
+for libs in staticlib:
+	if type(libs) is types.StringType: libs = [ libs ]
+	for lib in libs:
+		fullstaticlib += [ lib ]
+		solibpath = env.WhereIs('lib' + lib + '.so', searchlibs)
+		fullstaticlib += [ lib ]
+		if solibpath is None:
+			continue
+
+		f = os.popen('ldd ' + solibpath, 'r')
+		for aword in lddre.findall(f.read()):
+			fullstaticlib += [ aword ]
+		f.close
+
+
+fullstaticbin = staticenv.Program('lighttpd-static',
+	staticobj,
+	LIBS = fullstaticlib,
+	LINKFLAGS= ['-static']
+	)
+
+Alias('static', staticbin)
+Alias('fullstatic', fullstaticbin)
+
+implib = 'lighttpd.exe.a'
+bin_targets = ['lighttpd']
+bin_linkflags = [ env['LINKFLAGS'] ]
+if env['COMMON_LIB'] == 'lib':
+	common_lib = env.SharedLibrary('liblighttpd', common_src, LINKFLAGS = [ env['LINKFLAGS'], '-Wl,--export-dynamic' ])
+else:
+	src += common_src
+	common_lib = []
+	if env['COMMON_LIB'] == 'bin':
+		bin_linkflags += [ '-Wl,--export-all-symbols', '-Wl,--out-implib=build/' + implib ]
+		bin_targets += [ implib ]
+	else:
+		bin_linkflags += [ '-Wl,--export-dynamic' ]
+
+instbin = env.Program(bin_targets, src, LINKFLAGS = bin_linkflags, LIBS= [ env['LIBS'], common_lib, env['LIBDL'] ])
+env.Depends(instbin, configparser)
+
+spawn_fcgi = env.Program("spawn-fcgi", "spawn-fcgi.c")
+
+if env['COMMON_LIB'] == 'bin':
+	common_lib = instbin[1]
+
+env['SHLIBPREFIX'] = ''
+instlib = []
+for module in modules.keys():
+	libs = [ common_lib ]
+	if modules[module].has_key('lib'):
+		libs +=  modules[module]['lib']
+	instlib += env.SharedLibrary(module, modules[module]['src'], LIBS= [ libs ])
+
+inst = []
+
+Default(spawn_fcgi)
+inst += env.Install('${bindir}', spawn_fcgi)
+
+if env['build_dynamic']:
+	Default(instbin[0], instlib)
+	inst += env.Install('${sbindir}', instbin[0])
+	inst += env.Install('${libdir}', instlib)
+	if env['COMMON_LIB'] == 'lib':
+		Default(common_lib)
+		inst += env.Install('${bindir}', common_lib)
+
+if env['build_static']:
+	Default(staticbin)
+	inst += env.Install('${sbindir}', staticbin)
+
+if env['build_fullstatic']:
+	Default(fullstaticbin)
+	inst += env.Install('${sbindir}', fullstaticbin)
+
+env.Alias('dynamic', instbin)
+# default all to be installed
+env.Alias('install', inst)
+
+pkgdir = '.'
+tarname = env['package'] + '-' + env['version']
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/array.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/array.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/array.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,369 @@
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include <errno.h>
+#include <assert.h>
+
+#include "array.h"
+#include "buffer.h"
+
+array *array_init(void) {
+	array *a;
+
+	a = calloc(1, sizeof(*a));
+	assert(a);
+
+	a->next_power_of_2 = 1;
+
+	return a;
+}
+
+array *array_init_array(array *src) {
+	size_t i;
+	array *a = array_init();
+
+	a->used = src->used;
+	a->size = src->size;
+	a->next_power_of_2 = src->next_power_of_2;
+	a->unique_ndx = src->unique_ndx;
+
+	a->data = malloc(sizeof(*src->data) * src->size);
+	for (i = 0; i < src->size; i++) {
+		if (src->data[i]) a->data[i] = src->data[i]->copy(src->data[i]);
+		else a->data[i] = NULL;
+	}
+
+	a->sorted = malloc(sizeof(*src->sorted)   * src->size);
+	memcpy(a->sorted, src->sorted, sizeof(*src->sorted)   * src->size);
+	return a;
+}
+
+void array_free(array *a) {
+	size_t i;
+	if (!a) return;
+
+	if (!a->is_weakref) {
+		for (i = 0; i < a->size; i++) {
+			if (a->data[i]) a->data[i]->free(a->data[i]);
+		}
+	}
+
+	if (a->data) free(a->data);
+	if (a->sorted) free(a->sorted);
+
+	free(a);
+}
+
+void array_reset(array *a) {
+	size_t i;
+	if (!a) return;
+
+	if (!a->is_weakref) {
+		for (i = 0; i < a->used; i++) {
+			a->data[i]->reset(a->data[i]);
+		}
+	}
+
+	a->used = 0;
+}
+
+data_unset *array_pop(array *a) {
+	data_unset *du;
+
+	assert(a->used != 0);
+
+	a->used --;
+	du = a->data[a->used];
+	a->data[a->used] = NULL;
+
+	return du;
+}
+
+static int array_get_index(array *a, const char *key, size_t keylen, int *rndx) {
+	int ndx = -1;
+	int i, pos = 0;
+
+	if (key == NULL) return -1;
+
+	/* try to find the string */
+	for (i = pos = a->next_power_of_2 / 2; ; i >>= 1) {
+		int cmp;
+
+		if (pos < 0) {
+			pos += i;
+		} else if (pos >= (int)a->used) {
+			pos -= i;
+		} else {
+			cmp = buffer_caseless_compare(key, keylen, a->data[a->sorted[pos]]->key->ptr, a->data[a->sorted[pos]]->key->used);
+
+			if (cmp == 0) {
+				/* found */
+				ndx = a->sorted[pos];
+				break;
+			} else if (cmp < 0) {
+				pos -= i;
+			} else {
+				pos += i;
+			}
+		}
+		if (i == 0) break;
+	}
+
+	if (rndx) *rndx = pos;
+
+	return ndx;
+}
+
+data_unset *array_get_element(array *a, const char *key) {
+	int ndx;
+
+	if (-1 != (ndx = array_get_index(a, key, strlen(key) + 1, NULL))) {
+		/* found, leave here */
+
+		return a->data[ndx];
+	}
+
+	return NULL;
+}
+
+data_unset *array_get_unused_element(array *a, data_type_t t) {
+	data_unset *ds = NULL;
+
+	UNUSED(t);
+
+	if (a->size == 0) return NULL;
+
+	if (a->used == a->size) return NULL;
+
+	if (a->data[a->used]) {
+		ds = a->data[a->used];
+
+		a->data[a->used] = NULL;
+	}
+
+	return ds;
+}
+
+/* replace or insert data, return the old one with the same key */
+data_unset *array_replace(array *a, data_unset *du) {
+	int ndx;
+
+	if (-1 == (ndx = array_get_index(a, du->key->ptr, du->key->used, NULL))) {
+		array_insert_unique(a, du);
+		return NULL;
+	} else {
+		data_unset *old = a->data[ndx];
+		a->data[ndx] = du;
+		return old;
+	}
+}
+
+int array_insert_unique(array *a, data_unset *str) {
+	int ndx = -1;
+	int pos = 0;
+	size_t j;
+
+	/* generate unique index if neccesary */
+	if (str->key->used == 0 || str->is_index_key) {
+		buffer_copy_long(str->key, a->unique_ndx++);
+		str->is_index_key = 1;
+	}
+
+	/* try to find the string */
+	if (-1 != (ndx = array_get_index(a, str->key->ptr, str->key->used, &pos))) {
+		/* found, leave here */
+		if (a->data[ndx]->type == str->type) {
+			str->insert_dup(a->data[ndx], str);
+		} else {
+			fprintf(stderr, "a\n");
+		}
+		return 0;
+	}
+
+	/* insert */
+
+	if (a->used+1 > INT_MAX) {
+		/* we can't handle more then INT_MAX entries: see array_get_index() */
+		return -1;
+	}
+
+	if (a->size == 0) {
+		a->size   = 16;
+		a->data   = malloc(sizeof(*a->data)     * a->size);
+		a->sorted = malloc(sizeof(*a->sorted)   * a->size);
+		assert(a->data);
+		assert(a->sorted);
+		for (j = a->used; j < a->size; j++) a->data[j] = NULL;
+	} else if (a->size == a->used) {
+		a->size  += 16;
+		a->data   = realloc(a->data,   sizeof(*a->data)   * a->size);
+		a->sorted = realloc(a->sorted, sizeof(*a->sorted) * a->size);
+		assert(a->data);
+		assert(a->sorted);
+		for (j = a->used; j < a->size; j++) a->data[j] = NULL;
+	}
+
+	ndx = (int) a->used;
+
+	a->data[a->used++] = str;
+
+	if (pos != ndx &&
+	    ((pos < 0) ||
+	     buffer_caseless_compare(str->key->ptr, str->key->used, a->data[a->sorted[pos]]->key->ptr, a->data[a->sorted[pos]]->key->used) > 0)) {
+		pos++;
+	}
+
+	/* move everything on step to the right */
+	if (pos != ndx) {
+		memmove(a->sorted + (pos + 1), a->sorted + (pos), (ndx - pos) * sizeof(*a->sorted));
+	}
+
+	/* insert */
+	a->sorted[pos] = ndx;
+
+	if (a->next_power_of_2 == (size_t)ndx) a->next_power_of_2 <<= 1;
+
+	return 0;
+}
+
+void array_print_indent(int depth) {
+	int i;
+	for (i = 0; i < depth; i ++) {
+		fprintf(stdout, "    ");
+	}
+}
+
+size_t array_get_max_key_length(array *a) {
+	size_t maxlen, i;
+
+	maxlen = 0;
+	for (i = 0; i < a->used; i ++) {
+		data_unset *du = a->data[i];
+		size_t len = strlen(du->key->ptr);
+
+		if (len > maxlen) {
+			maxlen = len;
+		}
+	}
+	return maxlen;
+}
+
+int array_print(array *a, int depth) {
+	size_t i;
+	size_t maxlen;
+	int oneline = 1;
+
+	if (a->used > 5) {
+		oneline = 0;
+	}
+	for (i = 0; i < a->used && oneline; i++) {
+		data_unset *du = a->data[i];
+		if (!du->is_index_key) {
+			oneline = 0;
+			break;
+		}
+		switch (du->type) {
+			case TYPE_INTEGER:
+			case TYPE_STRING:
+			case TYPE_COUNT:
+				break;
+			default:
+				oneline = 0;
+				break;
+		}
+	}
+	if (oneline) {
+		fprintf(stdout, "(");
+		for (i = 0; i < a->used; i++) {
+			data_unset *du = a->data[i];
+			if (i != 0) {
+				fprintf(stdout, ", ");
+			}
+			du->print(du, depth + 1);
+		}
+		fprintf(stdout, ")");
+		return 0;
+	}
+
+	maxlen = array_get_max_key_length(a);
+	fprintf(stdout, "(\n");
+	for (i = 0; i < a->used; i++) {
+		data_unset *du = a->data[i];
+		array_print_indent(depth + 1);
+		if (!du->is_index_key) {
+			int j;
+
+			if (i && (i % 5) == 0) {
+				fprintf(stdout, "# %zd\n", i);
+				array_print_indent(depth + 1);
+			}
+			fprintf(stdout, "\"%s\"", du->key->ptr);
+			for (j = maxlen - strlen(du->key->ptr); j > 0; j --) {
+				fprintf(stdout, " ");
+			}
+			fprintf(stdout, " => ");
+		}
+		du->print(du, depth + 1);
+		fprintf(stdout, ",\n");
+	}
+	if (!(i && (i - 1 % 5) == 0)) {
+		array_print_indent(depth + 1);
+		fprintf(stdout, "# %zd\n", i);
+	}
+	array_print_indent(depth);
+	fprintf(stdout, ")");
+
+	return 0;
+}
+
+#ifdef DEBUG_ARRAY
+int main (int argc, char **argv) {
+	array *a;
+	data_string *ds;
+	data_count *dc;
+
+	UNUSED(argc);
+	UNUSED(argv);
+
+	a = array_init();
+
+	ds = data_string_init();
+	buffer_copy_string(ds->key, "abc");
+	buffer_copy_string(ds->value, "alfrag");
+
+	array_insert_unique(a, (data_unset *)ds);
+
+	ds = data_string_init();
+	buffer_copy_string(ds->key, "abc");
+	buffer_copy_string(ds->value, "hameplman");
+
+	array_insert_unique(a, (data_unset *)ds);
+
+	ds = data_string_init();
+	buffer_copy_string(ds->key, "123");
+	buffer_copy_string(ds->value, "alfrag");
+
+	array_insert_unique(a, (data_unset *)ds);
+
+	dc = data_count_init();
+	buffer_copy_string(dc->key, "def");
+
+	array_insert_unique(a, (data_unset *)dc);
+
+	dc = data_count_init();
+	buffer_copy_string(dc->key, "def");
+
+	array_insert_unique(a, (data_unset *)dc);
+
+	array_print(a, 0);
+
+	array_free(a);
+
+	fprintf(stderr, "%d\n",
+	       buffer_caseless_compare(CONST_STR_LEN("Content-Type"), CONST_STR_LEN("Content-type")));
+
+	return 0;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/array.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/array.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/array.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,172 @@
+#ifndef ARRAY_H
+#define ARRAY_H
+
+#include <stdlib.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_PCRE_H
+# include <pcre.h>
+#endif
+#include "buffer.h"
+
+#define DATA_IS_STRING(x) (x->type == TYPE_STRING)
+
+typedef enum { TYPE_UNSET, TYPE_STRING, TYPE_COUNT, TYPE_ARRAY, TYPE_INTEGER, TYPE_FASTCGI, TYPE_CONFIG } data_type_t;
+#define DATA_UNSET \
+	data_type_t type; \
+	buffer *key; \
+	int is_index_key; /* 1 if key is a array index (autogenerated keys) */ \
+	struct data_unset *(*copy)(const struct data_unset *src); \
+	void (* free)(struct data_unset *p); \
+	void (* reset)(struct data_unset *p); \
+	int (*insert_dup)(struct data_unset *dst, struct data_unset *src); \
+	void (*print)(const struct data_unset *p, int depth)
+
+typedef struct data_unset {
+	DATA_UNSET;
+} data_unset;
+
+typedef struct {
+	data_unset  **data;
+
+	size_t *sorted;
+
+	size_t used;
+	size_t size;
+
+	size_t unique_ndx;
+
+	size_t next_power_of_2;
+	int is_weakref; /* data is weakref, don't bother the data */
+} array;
+
+typedef struct {
+	DATA_UNSET;
+
+	int count;
+} data_count;
+
+data_count *data_count_init(void);
+
+typedef struct {
+	DATA_UNSET;
+
+	buffer *value;
+} data_string;
+
+data_string *data_string_init(void);
+data_string *data_response_init(void);
+
+typedef struct {
+	DATA_UNSET;
+
+	array *value;
+} data_array;
+
+data_array *data_array_init(void);
+
+/**
+ * possible compare ops in the configfile parser
+ */
+typedef enum {
+	CONFIG_COND_UNSET,
+	CONFIG_COND_EQ,      /** == */
+	CONFIG_COND_MATCH,   /** =~ */
+	CONFIG_COND_NE,      /** != */
+	CONFIG_COND_NOMATCH  /** !~ */
+} config_cond_t;
+
+/**
+ * possible fields to match against
+ */
+typedef enum {
+	COMP_UNSET,
+	COMP_SERVER_SOCKET,
+	COMP_HTTP_URL,
+	COMP_HTTP_HOST,
+	COMP_HTTP_REFERER,
+	COMP_HTTP_USER_AGENT,
+	COMP_HTTP_COOKIE,
+	COMP_HTTP_REMOTE_IP,
+	COMP_HTTP_QUERY_STRING,
+	COMP_HTTP_SCHEME,
+	COMP_HTTP_REQUEST_METHOD,
+
+	COMP_LAST_ELEMENT
+} comp_key_t;
+
+/* $HTTP["host"] ==    "incremental.home.kneschke.de" { ... }
+ * for print:   comp_key      op    string
+ * for compare: comp          cond  string/regex
+ */
+
+typedef struct _data_config data_config;
+struct _data_config {
+	DATA_UNSET;
+
+	array *value;
+
+	buffer *comp_key;
+	comp_key_t comp;
+
+	config_cond_t cond;
+	buffer *op;
+
+	int context_ndx; /* more or less like an id */
+	array *childs;
+	/* nested */
+	data_config *parent;
+	/* for chaining only */
+	data_config *prev;
+	data_config *next;
+
+	buffer *string;
+#ifdef HAVE_PCRE_H
+	pcre   *regex;
+	pcre_extra *regex_study;
+#endif
+};
+
+data_config *data_config_init(void);
+
+typedef struct {
+	DATA_UNSET;
+
+	int value;
+} data_integer;
+
+data_integer *data_integer_init(void);
+
+typedef struct {
+	DATA_UNSET;
+
+	buffer *host;
+
+	unsigned short port;
+
+	time_t disable_ts;
+	int is_disabled;
+	size_t balance;
+
+	int usage; /* fair-balancing needs the no. of connections active on this host */
+	int last_used_ndx; /* round robin */
+} data_fastcgi;
+
+data_fastcgi *data_fastcgi_init(void);
+
+array *array_init(void);
+array *array_init_array(array *a);
+void array_free(array *a);
+void array_reset(array *a);
+int array_insert_unique(array *a, data_unset *str);
+data_unset *array_pop(array *a);
+int array_print(array *a, int depth);
+data_unset *array_get_unused_element(array *a, data_type_t t);
+data_unset *array_get_element(array *a, const char *key);
+data_unset *array_replace(array *a, data_unset *du);
+int array_strcasecmp(const char *a, size_t a_len, const char *b, size_t b_len);
+void array_print_indent(int depth);
+size_t array_get_max_key_length(array *a);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/base.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/base.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/base.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,631 @@
+#ifndef _BASE_H_
+#define _BASE_H_
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <limits.h>
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+
+#include "buffer.h"
+#include "array.h"
+#include "chunk.h"
+#include "keyvalue.h"
+#include "settings.h"
+#include "fdevent.h"
+#include "sys-socket.h"
+#include "splaytree.h"
+#include "etag.h"
+
+
+#if defined HAVE_LIBSSL && defined HAVE_OPENSSL_SSL_H
+# define USE_OPENSSL
+# include <openssl/ssl.h>
+#endif
+
+#ifdef HAVE_FAM_H
+# include <fam.h>
+#endif
+
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+#ifndef O_LARGEFILE
+# define O_LARGEFILE 0
+#endif
+
+#ifndef SIZE_MAX
+# ifdef SIZE_T_MAX
+#  define SIZE_MAX SIZE_T_MAX
+# else
+#  define SIZE_MAX ((size_t)~0)
+# endif
+#endif
+
+#ifndef SSIZE_MAX
+# define SSIZE_MAX ((size_t)~0 >> 1)
+#endif
+
+#ifdef __APPLE__
+#include <crt_externs.h>
+#define environ (* _NSGetEnviron())
+#else
+extern char **environ;
+#endif
+
+/* for solaris 2.5 and NetBSD 1.3.x */
+#ifndef HAVE_SOCKLEN_T
+typedef int socklen_t;
+#endif
+
+/* solaris and NetBSD 1.3.x again */
+#if (!defined(HAVE_STDINT_H)) && (!defined(HAVE_INTTYPES_H)) && (!defined(uint32_t))
+# define uint32_t u_int32_t
+#endif
+
+
+#ifndef SHUT_WR
+# define SHUT_WR 1
+#endif
+
+#include "settings.h"
+
+typedef enum { T_CONFIG_UNSET,
+		T_CONFIG_STRING,
+		T_CONFIG_SHORT,
+		T_CONFIG_BOOLEAN,
+		T_CONFIG_ARRAY,
+		T_CONFIG_LOCAL,
+		T_CONFIG_DEPRECATED,
+		T_CONFIG_UNSUPPORTED
+} config_values_type_t;
+
+typedef enum { T_CONFIG_SCOPE_UNSET,
+		T_CONFIG_SCOPE_SERVER,
+		T_CONFIG_SCOPE_CONNECTION
+} config_scope_type_t;
+
+typedef struct {
+	const char *key;
+	void *destination;
+
+	config_values_type_t type;
+	config_scope_type_t scope;
+} config_values_t;
+
+typedef enum { DIRECT, EXTERNAL } connection_type;
+
+typedef struct {
+	char *key;
+	connection_type type;
+	char *value;
+} request_handler;
+
+typedef struct {
+	char *key;
+	char *host;
+	unsigned short port;
+	int used;
+	short factor;
+} fcgi_connections;
+
+
+typedef union {
+#ifdef HAVE_IPV6
+	struct sockaddr_in6 ipv6;
+#endif
+	struct sockaddr_in ipv4;
+#ifdef HAVE_SYS_UN_H
+	struct sockaddr_un un;
+#endif
+	struct sockaddr plain;
+} sock_addr;
+
+/* fcgi_response_header contains ... */
+#define HTTP_STATUS         BV(0)
+#define HTTP_CONNECTION     BV(1)
+#define HTTP_CONTENT_LENGTH BV(2)
+#define HTTP_DATE           BV(3)
+#define HTTP_LOCATION       BV(4)
+
+typedef struct {
+	/** HEADER */
+	/* the request-line */
+	buffer *request;
+	buffer *uri;
+
+	buffer *orig_uri;
+
+	http_method_t  http_method;
+	http_version_t http_version;
+
+	buffer *request_line;
+
+	/* strings to the header */
+	buffer *http_host; /* not alloced */
+	const char   *http_range;
+	const char   *http_content_type;
+	const char   *http_if_modified_since;
+	const char   *http_if_none_match;
+
+	array  *headers;
+
+	/* CONTENT */
+	size_t content_length; /* returned by strtoul() */
+
+	/* internal representation */
+	int     accept_encoding;
+
+	/* internal */
+	buffer *pathinfo;
+} request;
+
+typedef struct {
+	off_t   content_length;
+	int     keep_alive;               /* used by  the subrequests in proxy, cgi and fcgi to say the subrequest was keep-alive or not */
+
+	array  *headers;
+
+	enum {
+		HTTP_TRANSFER_ENCODING_IDENTITY, HTTP_TRANSFER_ENCODING_CHUNKED
+	} transfer_encoding;
+} response;
+
+typedef struct {
+	buffer *scheme;
+	buffer *authority;
+	buffer *path;
+	buffer *path_raw;
+	buffer *query;
+} request_uri;
+
+typedef struct {
+	buffer *path;
+	buffer *basedir; /* path = "(basedir)(.*)" */
+
+	buffer *doc_root; /* path = doc_root + rel_path */
+	buffer *rel_path;
+
+	buffer *etag;
+} physical;
+
+typedef struct {
+	buffer *name;
+	buffer *etag;
+
+	struct stat st;
+
+	time_t stat_ts;
+
+#ifdef HAVE_LSTAT
+	char is_symlink;
+#endif
+
+#ifdef HAVE_FAM_H
+	int    dir_version;
+	int    dir_ndx;
+#endif
+
+	buffer *content_type;
+} stat_cache_entry;
+
+typedef struct {
+	splay_tree *files; /* the nodes of the tree are stat_cache_entry's */
+
+	buffer *dir_name; /* for building the dirname from the filename */
+#ifdef HAVE_FAM_H
+	splay_tree *dirs; /* the nodes of the tree are fam_dir_entry */
+
+	FAMConnection *fam;
+	int    fam_fcce_ndx;
+#endif
+	buffer *hash_key;  /* temp-store for the hash-key */
+} stat_cache;
+
+typedef struct {
+	array *mimetypes;
+
+	/* virtual-servers */
+	buffer *document_root;
+	buffer *server_name;
+	buffer *error_handler;
+	buffer *server_tag;
+	buffer *dirlist_encoding;
+	buffer *errorfile_prefix;
+
+	unsigned short max_keep_alive_requests;
+	unsigned short max_keep_alive_idle;
+	unsigned short max_read_idle;
+	unsigned short max_write_idle;
+	unsigned short use_xattr;
+	unsigned short follow_symlink;
+	unsigned short range_requests;
+
+	/* debug */
+
+	unsigned short log_file_not_found;
+	unsigned short log_request_header;
+	unsigned short log_request_handling;
+	unsigned short log_response_header;
+	unsigned short log_condition_handling;
+
+
+	/* server wide */
+	buffer *ssl_pemfile;
+	buffer *ssl_ca_file;
+	buffer *ssl_cipher_list;
+	unsigned short ssl_use_sslv2;
+
+	unsigned short use_ipv6;
+	unsigned short is_ssl;
+	unsigned short allow_http11;
+	unsigned short etag_use_inode;
+	unsigned short etag_use_mtime;
+	unsigned short etag_use_size;
+	unsigned short force_lowercase_filenames; /* if the FS is case-insensitive, force all files to lower-case */
+	unsigned short max_request_size;
+
+	unsigned short kbytes_per_second; /* connection kb/s limit */
+
+	/* configside */
+	unsigned short global_kbytes_per_second; /*  */
+
+	off_t  global_bytes_per_second_cnt;
+	/* server-wide traffic-shaper
+	 *
+	 * each context has the counter which is inited once
+	 * a second by the global_kbytes_per_second config-var
+	 *
+	 * as soon as global_kbytes_per_second gets below 0
+	 * the connected conns are "offline" a little bit
+	 *
+	 * the problem:
+	 * we somehow have to loose our "we are writable" signal
+	 * on the way.
+	 *
+	 */
+	off_t *global_bytes_per_second_cnt_ptr; /*  */
+
+#ifdef USE_OPENSSL
+	SSL_CTX *ssl_ctx;
+#endif
+} specific_config;
+
+/* the order of the items should be the same as they are processed
+ * read before write as we use this later */
+typedef enum {
+	CON_STATE_CONNECT,
+	CON_STATE_REQUEST_START,
+	CON_STATE_READ,
+	CON_STATE_REQUEST_END,
+	CON_STATE_READ_POST,
+	CON_STATE_HANDLE_REQUEST,
+	CON_STATE_RESPONSE_START,
+	CON_STATE_WRITE,
+	CON_STATE_RESPONSE_END,
+	CON_STATE_ERROR,
+	CON_STATE_CLOSE
+} connection_state_t;
+
+typedef enum { COND_RESULT_UNSET, COND_RESULT_FALSE, COND_RESULT_TRUE } cond_result_t;
+typedef struct {
+	cond_result_t result;
+	int patterncount;
+	int matches[3 * 10];
+	buffer *comp_value; /* just a pointer */
+	
+	comp_key_t comp_type;
+} cond_cache_t;
+
+typedef struct {
+	connection_state_t state;
+
+	/* timestamps */
+	time_t read_idle_ts;
+	time_t close_timeout_ts;
+	time_t write_request_ts;
+
+	time_t connection_start;
+	time_t request_start;
+
+	struct timeval start_tv;
+
+	size_t request_count;        /* number of requests handled in this connection */
+	size_t loops_per_request;    /* to catch endless loops in a single request
+				      *
+				      * used by mod_rewrite, mod_fastcgi, ... and others
+				      * this is self-protection
+				      */
+
+	int fd;                      /* the FD for this connection */
+	int fde_ndx;                 /* index for the fdevent-handler */
+	int ndx;                     /* reverse mapping to server->connection[ndx] */
+
+	/* fd states */
+	int is_readable;
+	int is_writable;
+
+	int     keep_alive;           /* only request.c can enable it, all other just disable */
+
+	int file_started;
+	int file_finished;
+
+	chunkqueue *write_queue;      /* a large queue for low-level write ( HTTP response ) [ file, mem ] */
+	chunkqueue *read_queue;       /* a small queue for low-level read ( HTTP request ) [ mem ] */
+	chunkqueue *request_content_queue; /* takes request-content into tempfile if necessary [ tempfile, mem ]*/
+
+	int traffic_limit_reached;
+
+	off_t bytes_written;          /* used by mod_accesslog, mod_rrd */
+	off_t bytes_written_cur_second; /* used by mod_accesslog, mod_rrd */
+	off_t bytes_read;             /* used by mod_accesslog, mod_rrd */
+	off_t bytes_header;
+
+	int http_status;
+
+	sock_addr dst_addr;
+	buffer *dst_addr_buf;
+
+	/* request */
+	buffer *parse_request;
+	unsigned int parsed_response; /* bitfield which contains the important header-fields of the parsed response header */
+
+	request  request;
+	request_uri uri;
+	physical physical;
+	response response;
+
+	size_t header_len;
+
+	buffer *authed_user;
+	array  *environment; /* used to pass lighttpd internal stuff to the FastCGI/CGI apps, setenv does that */
+
+	/* response */
+	int    got_response;
+
+	int    in_joblist;
+
+	connection_type mode;
+
+	void **plugin_ctx;           /* plugin connection specific config */
+
+	specific_config conf;        /* global connection specific config */
+	cond_cache_t *cond_cache;
+
+	buffer *server_name;
+
+	/* error-handler */
+	buffer *error_handler;
+	int error_handler_saved_status;
+	int in_error_handler;
+
+	void *srv_socket;   /* reference to the server-socket (typecast to server_socket) */
+
+#ifdef USE_OPENSSL
+	SSL *ssl;
+#endif
+	/* etag handling */
+	etag_flags_t etag_flags;
+
+	int conditional_is_valid[COMP_LAST_ELEMENT]; 
+} connection;
+
+typedef struct {
+	connection **ptr;
+	size_t size;
+	size_t used;
+} connections;
+
+
+#ifdef HAVE_IPV6
+typedef struct {
+	int family;
+	union {
+		struct in6_addr ipv6;
+		struct in_addr  ipv4;
+	} addr;
+	char b2[INET6_ADDRSTRLEN + 1];
+	time_t ts;
+} inet_ntop_cache_type;
+#endif
+
+
+typedef struct {
+	buffer *uri;
+	time_t mtime;
+	int http_status;
+} realpath_cache_type;
+
+typedef struct {
+	time_t  mtime;  /* the key */
+	buffer *str;    /* a buffer for the string represenation */
+} mtime_cache_type;
+
+typedef struct {
+	void  *ptr;
+	size_t used;
+	size_t size;
+} buffer_plugin;
+
+typedef struct {
+	unsigned short port;
+	buffer *bindhost;
+
+	buffer *errorlog_file;
+	unsigned short errorlog_use_syslog;
+
+	unsigned short dont_daemonize;
+	buffer *changeroot;
+	buffer *username;
+	buffer *groupname;
+
+	buffer *pid_file;
+
+	buffer *event_handler;
+
+	buffer *modules_dir;
+	buffer *network_backend;
+	array *modules;
+	array *upload_tempdirs;
+
+	unsigned short max_worker;
+	unsigned short max_fds;
+	unsigned short max_conns;
+	unsigned short max_request_size;
+
+	unsigned short log_request_header_on_error;
+	unsigned short log_state_handling;
+
+	enum { STAT_CACHE_ENGINE_UNSET,
+			STAT_CACHE_ENGINE_NONE,
+			STAT_CACHE_ENGINE_SIMPLE,
+#ifdef HAVE_FAM_H
+			STAT_CACHE_ENGINE_FAM
+#endif
+	} stat_cache_engine;
+	unsigned short enable_cores;
+} server_config;
+
+typedef struct {
+	sock_addr addr;
+	int       fd;
+	int       fde_ndx;
+
+	buffer *ssl_pemfile;
+	buffer *ssl_ca_file;
+	buffer *ssl_cipher_list;
+	unsigned short ssl_use_sslv2;
+	unsigned short use_ipv6;
+	unsigned short is_ssl;
+
+	buffer *srv_token;
+
+#ifdef USE_OPENSSL
+	SSL_CTX *ssl_ctx;
+#endif
+       unsigned short is_proxy_ssl;
+} server_socket;
+
+typedef struct {
+	server_socket **ptr;
+
+	size_t size;
+	size_t used;
+} server_socket_array;
+
+typedef struct server {
+	server_socket_array srv_sockets;
+
+	/* the errorlog */
+	int errorlog_fd;
+	enum { ERRORLOG_STDERR, ERRORLOG_FILE, ERRORLOG_SYSLOG } errorlog_mode;
+	buffer *errorlog_buf;
+
+	fdevents *ev, *ev_ins;
+
+	buffer_plugin plugins;
+	void *plugin_slots;
+
+	/* counters */
+	int con_opened;
+	int con_read;
+	int con_written;
+	int con_closed;
+
+	int ssl_is_init;
+
+	int max_fds;    /* max possible fds */
+	int cur_fds;    /* currently used fds */
+	int want_fds;   /* waiting fds */
+	int sockets_disabled;
+
+	size_t max_conns;
+
+	/* buffers */
+	buffer *parse_full_path;
+	buffer *response_header;
+	buffer *response_range;
+	buffer *tmp_buf;
+
+	buffer *tmp_chunk_len;
+
+	buffer *empty_string; /* is necessary for cond_match */
+
+	buffer *cond_check_buf;
+
+	/* caches */
+#ifdef HAVE_IPV6
+	inet_ntop_cache_type inet_ntop_cache[INET_NTOP_CACHE_MAX];
+#endif
+	mtime_cache_type mtime_cache[FILE_CACHE_MAX];
+
+	array *split_vals;
+
+	/* Timestamps */
+	time_t cur_ts;
+	time_t last_generated_date_ts;
+	time_t last_generated_debug_ts;
+	time_t startup_ts;
+
+	buffer *ts_debug_str;
+	buffer *ts_date_str;
+
+	/* config-file */
+	array *config;
+	array *config_touched;
+
+	array *config_context;
+	specific_config **config_storage;
+
+	server_config  srvconf;
+
+	short int config_deprecated;
+	short int config_unsupported;
+
+	connections *conns;
+	connections *joblist;
+	connections *fdwaitqueue;
+
+	stat_cache  *stat_cache;
+
+	/**
+	 * The status array can carry all the status information you want
+	 * the key to the array is <module-prefix>.<name>
+	 * and the values are counters
+	 *
+	 * example:
+	 *   fastcgi.backends        = 10
+	 *   fastcgi.active-backends = 6
+	 *   fastcgi.backend.<key>.load = 24
+	 *   fastcgi.backend.<key>....
+	 *
+	 *   fastcgi.backend.<key>.disconnects = ...
+	 */
+	array *status;
+
+	fdevent_handler_t event_handler;
+
+	int (* network_backend_write)(struct server *srv, connection *con, int fd, chunkqueue *cq);
+	int (* network_backend_read)(struct server *srv, connection *con, int fd, chunkqueue *cq);
+#ifdef USE_OPENSSL
+	int (* network_ssl_backend_write)(struct server *srv, connection *con, SSL *ssl, chunkqueue *cq);
+	int (* network_ssl_backend_read)(struct server *srv, connection *con, SSL *ssl, chunkqueue *cq);
+#endif
+
+	uid_t uid;
+	gid_t gid;
+} server;
+
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/bitset.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/bitset.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/bitset.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,67 @@
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "bitset.h"
+#include "buffer.h"
+
+#define BITSET_BITS \
+	( CHAR_BIT * sizeof(size_t) )
+
+#define BITSET_MASK(pos) \
+	( ((size_t)1) << ((pos) % BITSET_BITS) )
+
+#define BITSET_WORD(set, pos) \
+	( (set)->bits[(pos) / BITSET_BITS] )
+
+#define BITSET_USED(nbits) \
+	( ((nbits) + (BITSET_BITS - 1)) / BITSET_BITS )
+
+bitset *bitset_init(size_t nbits) {
+	bitset *set;
+
+	set = malloc(sizeof(*set));
+	assert(set);
+
+	set->bits = calloc(BITSET_USED(nbits), sizeof(*set->bits));
+	set->nbits = nbits;
+
+	assert(set->bits);
+
+	return set;
+}
+
+void bitset_reset(bitset *set) {
+	memset(set->bits, 0, BITSET_USED(set->nbits) * sizeof(*set->bits));
+}
+
+void bitset_free(bitset *set) {
+	free(set->bits);
+	free(set);
+}
+
+void bitset_clear_bit(bitset *set, size_t pos) {
+	if (pos >= set->nbits) {
+	    SEGFAULT();
+	}
+
+	BITSET_WORD(set, pos) &= ~BITSET_MASK(pos);
+}
+
+void bitset_set_bit(bitset *set, size_t pos) {
+	if (pos >= set->nbits) {
+	    SEGFAULT();
+	}
+
+	BITSET_WORD(set, pos) |= BITSET_MASK(pos);
+}
+
+int bitset_test_bit(bitset *set, size_t pos) {
+	if (pos >= set->nbits) {
+	    SEGFAULT();
+	}
+
+	return (BITSET_WORD(set, pos) & BITSET_MASK(pos)) != 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/bitset.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/bitset.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/bitset.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,19 @@
+#ifndef _BITSET_H_
+#define _BITSET_H_
+
+#include <stddef.h>
+
+typedef struct {
+	size_t *bits;
+	size_t nbits;
+} bitset;
+
+bitset *bitset_init(size_t nbits);
+void bitset_reset(bitset *set);
+void bitset_free(bitset *set);
+
+void bitset_clear_bit(bitset *set, size_t pos);
+void bitset_set_bit(bitset *set, size_t pos);
+int bitset_test_bit(bitset *set, size_t pos);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/buffer.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/buffer.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/buffer.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1073 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include <stdio.h>
+#include <assert.h>
+#include <ctype.h>
+
+#include "buffer.h"
+
+
+static const char hex_chars[] = "0123456789abcdef";
+
+
+/**
+ * init the buffer
+ *
+ */
+
+buffer* buffer_init(void) {
+	buffer *b;
+
+	b = malloc(sizeof(*b));
+	assert(b);
+
+	b->ptr = NULL;
+	b->size = 0;
+	b->used = 0;
+
+	return b;
+}
+
+buffer *buffer_init_buffer(buffer *src) {
+	buffer *b = buffer_init();
+	buffer_copy_string_buffer(b, src);
+	return b;
+}
+
+/**
+ * free the buffer
+ *
+ */
+
+void buffer_free(buffer *b) {
+	if (!b) return;
+
+	free(b->ptr);
+	free(b);
+}
+
+void buffer_reset(buffer *b) {
+	if (!b) return;
+
+	/* limit don't reuse buffer larger than ... bytes */
+	if (b->size > BUFFER_MAX_REUSE_SIZE) {
+		free(b->ptr);
+		b->ptr = NULL;
+		b->size = 0;
+	}
+
+	b->used = 0;
+}
+
+
+/**
+ *
+ * allocate (if neccessary) enough space for 'size' bytes and
+ * set the 'used' counter to 0
+ *
+ */
+
+#define BUFFER_PIECE_SIZE 64
+
+int buffer_prepare_copy(buffer *b, size_t size) {
+	if (!b) return -1;
+
+	if ((0 == b->size) ||
+	    (size > b->size)) {
+		if (b->size) free(b->ptr);
+
+		b->size = size;
+
+		/* always allocate a multiply of BUFFER_PIECE_SIZE */
+		b->size += BUFFER_PIECE_SIZE - (b->size % BUFFER_PIECE_SIZE);
+
+		b->ptr = malloc(b->size);
+		assert(b->ptr);
+	}
+	b->used = 0;
+	return 0;
+}
+
+/**
+ *
+ * increase the internal buffer (if neccessary) to append another 'size' byte
+ * ->used isn't changed
+ *
+ */
+
+int buffer_prepare_append(buffer *b, size_t size) {
+	if (!b) return -1;
+
+	if (0 == b->size) {
+		b->size = size;
+
+		/* always allocate a multiply of BUFFER_PIECE_SIZE */
+		b->size += BUFFER_PIECE_SIZE - (b->size % BUFFER_PIECE_SIZE);
+
+		b->ptr = malloc(b->size);
+		b->used = 0;
+		assert(b->ptr);
+	} else if (b->used + size > b->size) {
+		b->size += size;
+
+		/* always allocate a multiply of BUFFER_PIECE_SIZE */
+		b->size += BUFFER_PIECE_SIZE - (b->size % BUFFER_PIECE_SIZE);
+
+		b->ptr = realloc(b->ptr, b->size);
+		assert(b->ptr);
+	}
+	return 0;
+}
+
+int buffer_copy_string(buffer *b, const char *s) {
+	size_t s_len;
+
+	if (!s || !b) return -1;
+
+	s_len = strlen(s) + 1;
+	buffer_prepare_copy(b, s_len);
+
+	memcpy(b->ptr, s, s_len);
+	b->used = s_len;
+
+	return 0;
+}
+
+int buffer_copy_string_len(buffer *b, const char *s, size_t s_len) {
+	if (!s || !b) return -1;
+#if 0
+	/* removed optimization as we have to keep the empty string
+	 * in some cases for the config handling
+	 *
+	 * url.access-deny = ( "" )
+	 */
+	if (s_len == 0) return 0;
+#endif
+	buffer_prepare_copy(b, s_len + 1);
+
+	memcpy(b->ptr, s, s_len);
+	b->ptr[s_len] = '\0';
+	b->used = s_len + 1;
+
+	return 0;
+}
+
+int buffer_copy_string_buffer(buffer *b, const buffer *src) {
+	if (!src) return -1;
+
+	if (src->used == 0) {
+		b->used = 0;
+		return 0;
+	}
+	return buffer_copy_string_len(b, src->ptr, src->used - 1);
+}
+
+int buffer_append_string(buffer *b, const char *s) {
+	size_t s_len;
+
+	if (!s || !b) return -1;
+
+	s_len = strlen(s);
+	buffer_prepare_append(b, s_len + 1);
+	if (b->used == 0)
+		b->used++;
+
+	memcpy(b->ptr + b->used - 1, s, s_len + 1);
+	b->used += s_len;
+
+	return 0;
+}
+
+int buffer_append_string_rfill(buffer *b, const char *s, size_t maxlen) {
+	size_t s_len;
+
+	if (!s || !b) return -1;
+
+	s_len = strlen(s);
+	buffer_prepare_append(b, maxlen + 1);
+	if (b->used == 0)
+		b->used++;
+
+	memcpy(b->ptr + b->used - 1, s, s_len);
+	if (maxlen > s_len) {
+		memset(b->ptr + b->used - 1 + s_len, ' ', maxlen - s_len);
+	}
+
+	b->used += maxlen;
+	b->ptr[b->used - 1] = '\0';
+	return 0;
+}
+
+/**
+ * append a string to the end of the buffer
+ *
+ * the resulting buffer is terminated with a '\0'
+ * s is treated as a un-terminated string (a \0 is handled a normal character)
+ *
+ * @param b a buffer
+ * @param s the string
+ * @param s_len size of the string (without the terminating \0)
+ */
+
+int buffer_append_string_len(buffer *b, const char *s, size_t s_len) {
+	if (!s || !b) return -1;
+	if (s_len == 0) return 0;
+
+	buffer_prepare_append(b, s_len + 1);
+	if (b->used == 0)
+		b->used++;
+
+	memcpy(b->ptr + b->used - 1, s, s_len);
+	b->used += s_len;
+	b->ptr[b->used - 1] = '\0';
+
+	return 0;
+}
+
+int buffer_append_string_buffer(buffer *b, const buffer *src) {
+	if (!src) return -1;
+	if (src->used == 0) return 0;
+
+	return buffer_append_string_len(b, src->ptr, src->used - 1);
+}
+
+int buffer_append_memory(buffer *b, const char *s, size_t s_len) {
+	if (!s || !b) return -1;
+	if (s_len == 0) return 0;
+
+	buffer_prepare_append(b, s_len);
+	memcpy(b->ptr + b->used, s, s_len);
+	b->used += s_len;
+
+	return 0;
+}
+
+int buffer_copy_memory(buffer *b, const char *s, size_t s_len) {
+	if (!s || !b) return -1;
+
+	b->used = 0;
+
+	return buffer_append_memory(b, s, s_len);
+}
+
+int buffer_append_long_hex(buffer *b, unsigned long value) {
+	char *buf;
+	int shift = 0;
+	unsigned long copy = value;
+
+	while (copy) {
+		copy >>= 4;
+		shift++;
+	}
+	if (shift == 0)
+		shift++;
+	if (shift & 0x01)
+		shift++;
+
+	buffer_prepare_append(b, shift + 1);
+	if (b->used == 0)
+		b->used++;
+	buf = b->ptr + (b->used - 1);
+	b->used += shift;
+
+	shift <<= 2;
+	while (shift > 0) {
+		shift -= 4;
+		*(buf++) = hex_chars[(value >> shift) & 0x0F];
+	}
+	*buf = '\0';
+
+	return 0;
+}
+
+int LI_ltostr(char *buf, long val) {
+	char swap;
+	char *end;
+	int len = 1;
+
+	if (val < 0) {
+		len++;
+		*(buf++) = '-';
+		val = -val;
+	}
+
+	end = buf;
+	while (val > 9) {
+		*(end++) = '0' + (val % 10);
+		val = val / 10;
+	}
+	*(end) = '0' + val;
+	*(end + 1) = '\0';
+	len += end - buf;
+
+	while (buf < end) {
+		swap = *end;
+		*end = *buf;
+		*buf = swap;
+
+		buf++;
+		end--;
+	}
+
+	return len;
+}
+
+int buffer_append_long(buffer *b, long val) {
+	if (!b) return -1;
+
+	buffer_prepare_append(b, 32);
+	if (b->used == 0)
+		b->used++;
+
+	b->used += LI_ltostr(b->ptr + (b->used - 1), val);
+	return 0;
+}
+
+int buffer_copy_long(buffer *b, long val) {
+	if (!b) return -1;
+
+	b->used = 0;
+	return buffer_append_long(b, val);
+}
+
+#if !defined(SIZEOF_LONG) || (SIZEOF_LONG != SIZEOF_OFF_T)
+int buffer_append_off_t(buffer *b, off_t val) {
+	char swap;
+	char *end;
+	char *start;
+	int len = 1;
+
+	if (!b) return -1;
+
+	buffer_prepare_append(b, 32);
+	if (b->used == 0)
+		b->used++;
+
+	start = b->ptr + (b->used - 1);
+	if (val < 0) {
+		len++;
+		*(start++) = '-';
+		val = -val;
+	}
+
+	end = start;
+	while (val > 9) {
+		*(end++) = '0' + (val % 10);
+		val = val / 10;
+	}
+	*(end) = '0' + val;
+	*(end + 1) = '\0';
+	len += end - start;
+
+	while (start < end) {
+		swap   = *end;
+		*end   = *start;
+		*start = swap;
+
+		start++;
+		end--;
+	}
+
+	b->used += len;
+	return 0;
+}
+
+int buffer_copy_off_t(buffer *b, off_t val) {
+	if (!b) return -1;
+
+	b->used = 0;
+	return buffer_append_off_t(b, val);
+}
+#endif /* !defined(SIZEOF_LONG) || (SIZEOF_LONG != SIZEOF_OFF_T) */
+
+char int2hex(char c) {
+	return hex_chars[(c & 0x0F)];
+}
+
+/* converts hex char (0-9, A-Z, a-z) to decimal.
+ * returns 0xFF on invalid input.
+ */
+char hex2int(unsigned char hex) {
+	hex = hex - '0';
+	if (hex > 9) {
+		hex = (hex + '0' - 1) | 0x20;
+		hex = hex - 'a' + 11;
+	}
+	if (hex > 15)
+		hex = 0xFF;
+
+	return hex;
+}
+
+
+/**
+ * init the buffer
+ *
+ */
+
+buffer_array* buffer_array_init(void) {
+	buffer_array *b;
+
+	b = malloc(sizeof(*b));
+
+	assert(b);
+	b->ptr = NULL;
+	b->size = 0;
+	b->used = 0;
+
+	return b;
+}
+
+void buffer_array_reset(buffer_array *b) {
+	size_t i;
+
+	if (!b) return;
+
+	/* if they are too large, reduce them */
+	for (i = 0; i < b->used; i++) {
+		buffer_reset(b->ptr[i]);
+	}
+
+	b->used = 0;
+}
+
+
+/**
+ * free the buffer_array
+ *
+ */
+
+void buffer_array_free(buffer_array *b) {
+	size_t i;
+	if (!b) return;
+
+	for (i = 0; i < b->size; i++) {
+		if (b->ptr[i]) buffer_free(b->ptr[i]);
+	}
+	free(b->ptr);
+	free(b);
+}
+
+buffer *buffer_array_append_get_buffer(buffer_array *b) {
+	size_t i;
+
+	if (b->size == 0) {
+		b->size = 16;
+		b->ptr = malloc(sizeof(*b->ptr) * b->size);
+		assert(b->ptr);
+		for (i = 0; i < b->size; i++) {
+			b->ptr[i] = NULL;
+		}
+	} else if (b->size == b->used) {
+		b->size += 16;
+		b->ptr = realloc(b->ptr, sizeof(*b->ptr) * b->size);
+		assert(b->ptr);
+		for (i = b->used; i < b->size; i++) {
+			b->ptr[i] = NULL;
+		}
+	}
+
+	if (b->ptr[b->used] == NULL) {
+		b->ptr[b->used] = buffer_init();
+	}
+
+	b->ptr[b->used]->used = 0;
+
+	return b->ptr[b->used++];
+}
+
+
+char * buffer_search_string_len(buffer *b, const char *needle, size_t len) {
+	size_t i;
+	if (len == 0) return NULL;
+	if (needle == NULL) return NULL;
+
+	if (b->used < len) return NULL;
+
+	for(i = 0; i < b->used - len; i++) {
+		if (0 == memcmp(b->ptr + i, needle, len)) {
+			return b->ptr + i;
+		}
+	}
+
+	return NULL;
+}
+
+buffer *buffer_init_string(const char *str) {
+	buffer *b = buffer_init();
+
+	buffer_copy_string(b, str);
+
+	return b;
+}
+
+int buffer_is_empty(buffer *b) {
+	if (!b) return 1;
+	return (b->used == 0);
+}
+
+/**
+ * check if two buffer contain the same data
+ *
+ * HISTORY: this function was pretty much optimized, but didn't handled
+ * alignment properly.
+ */
+
+int buffer_is_equal(buffer *a, buffer *b) {
+	if (a->used != b->used) return 0;
+	if (a->used == 0) return 1;
+
+	return (0 == strcmp(a->ptr, b->ptr));
+}
+
+int buffer_is_equal_string(buffer *a, const char *s, size_t b_len) {
+	buffer b;
+
+	b.ptr = (char *)s;
+	b.used = b_len + 1;
+
+	return buffer_is_equal(a, &b);
+}
+
+/* simple-assumption:
+ *
+ * most parts are equal and doing a case conversion needs time
+ *
+ */
+int buffer_caseless_compare(const char *a, size_t a_len, const char *b, size_t b_len) {
+	size_t ndx = 0, max_ndx;
+	size_t *al, *bl;
+	size_t mask = sizeof(*al) - 1;
+
+	al = (size_t *)a;
+	bl = (size_t *)b;
+
+	/* is the alignment correct ? */
+	if ( ((size_t)al & mask) == 0 &&
+	     ((size_t)bl & mask) == 0 ) {
+
+		max_ndx = ((a_len < b_len) ? a_len : b_len) & ~mask;
+
+		for (; ndx < max_ndx; ndx += sizeof(*al)) {
+			if (*al != *bl) break;
+			al++; bl++;
+
+		}
+
+	}
+
+	a = (char *)al;
+	b = (char *)bl;
+
+	max_ndx = ((a_len < b_len) ? a_len : b_len);
+
+	for (; ndx < max_ndx; ndx++) {
+		char a1 = *a++, b1 = *b++;
+
+		if (a1 != b1) {
+			if ((a1 >= 'A' && a1 <= 'Z') && (b1 >= 'a' && b1 <= 'z'))
+				a1 |= 32;
+			else if ((a1 >= 'a' && a1 <= 'z') && (b1 >= 'A' && b1 <= 'Z'))
+				b1 |= 32;
+			if ((a1 - b1) != 0) return (a1 - b1);
+
+		}
+	}
+
+	/* all chars are the same, and the length match too
+	 *
+	 * they are the same */
+	if (a_len == b_len) return 0;
+
+	/* if a is shorter then b, then b is larger */
+	return (a_len - b_len);
+}
+
+
+/**
+ * check if the rightmost bytes of the string are equal.
+ *
+ *
+ */
+
+int buffer_is_equal_right_len(buffer *b1, buffer *b2, size_t len) {
+	/* no, len -> equal */
+	if (len == 0) return 1;
+
+	/* len > 0, but empty buffers -> not equal */
+	if (b1->used == 0 || b2->used == 0) return 0;
+
+	/* buffers too small -> not equal */
+	if (b1->used - 1 < len || b1->used - 1 < len) return 0;
+
+	if (0 == strncmp(b1->ptr + b1->used - 1 - len,
+			 b2->ptr + b2->used - 1 - len, len)) {
+		return 1;
+	}
+
+	return 0;
+}
+
+int buffer_copy_string_hex(buffer *b, const char *in, size_t in_len) {
+	size_t i;
+
+	/* BO protection */
+	if (in_len * 2 < in_len) return -1;
+
+	buffer_prepare_copy(b, in_len * 2 + 1);
+
+	for (i = 0; i < in_len; i++) {
+		b->ptr[b->used++] = hex_chars[(in[i] >> 4) & 0x0F];
+		b->ptr[b->used++] = hex_chars[in[i] & 0x0F];
+	}
+	b->ptr[b->used++] = '\0';
+
+	return 0;
+}
+
+const char encoded_chars_rel_uri_part[] = {
+	/*
+	0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
+	*/
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  00 -  0F control chars */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  10 -  1F */
+	1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1,  /*  20 -  2F space " # $ % & ' + , / */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,  /*  30 -  3F : ; = ? @ < > */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  40 -  4F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  50 -  5F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  60 -  6F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,  /*  70 -  7F DEL */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  80 -  8F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  90 -  9F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  A0 -  AF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  B0 -  BF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  C0 -  CF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  D0 -  DF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  E0 -  EF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  F0 -  FF */
+};
+
+const char encoded_chars_rel_uri[] = {
+	/*
+	0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
+	*/
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  00 -  0F control chars */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  10 -  1F */
+	1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0,  /*  20 -  2F space " # $ % & ' + , / */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,  /*  30 -  3F : ; = ? @ < > */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  40 -  4F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  50 -  5F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  60 -  6F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,  /*  70 -  7F DEL */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  80 -  8F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  90 -  9F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  A0 -  AF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  B0 -  BF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  C0 -  CF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  D0 -  DF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  E0 -  EF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  F0 -  FF */
+};
+
+const char encoded_chars_html[] = {
+	/*
+	0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
+	*/
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  00 -  0F control chars */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  10 -  1F */
+	0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  20 -  2F & */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,  /*  30 -  3F < > */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  40 -  4F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  50 -  5F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  60 -  6F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,  /*  70 -  7F DEL */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  80 -  8F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  90 -  9F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  A0 -  AF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  B0 -  BF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  C0 -  CF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  D0 -  DF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  E0 -  EF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  F0 -  FF */
+};
+
+const char encoded_chars_minimal_xml[] = {
+	/*
+	0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
+	*/
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  00 -  0F control chars */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  10 -  1F */
+	0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  20 -  2F & */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,  /*  30 -  3F < > */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  40 -  4F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  50 -  5F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  60 -  6F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,  /*  70 -  7F DEL */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  80 -  8F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  90 -  9F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  A0 -  AF */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  B0 -  BF */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  C0 -  CF */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  D0 -  DF */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  E0 -  EF */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  F0 -  FF */
+};
+
+const char encoded_chars_hex[] = {
+	/*
+	0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
+	*/
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  00 -  0F control chars */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  10 -  1F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  20 -  2F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  30 -  3F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  40 -  4F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  50 -  5F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  60 -  6F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  70 -  7F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  80 -  8F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  90 -  9F */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  A0 -  AF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  B0 -  BF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  C0 -  CF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  D0 -  DF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  E0 -  EF */
+	1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /*  F0 -  FF */
+};
+
+const char encoded_chars_http_header[] = {
+	/*
+	0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
+	*/
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,  /*  00 -  0F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  10 -  1F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  20 -  2F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  30 -  3F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  40 -  4F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  50 -  5F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  60 -  6F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  70 -  7F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  80 -  8F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  90 -  9F */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  A0 -  AF */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  B0 -  BF */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  C0 -  CF */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  D0 -  DF */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  E0 -  EF */
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /*  F0 -  FF */
+};
+
+
+
+int buffer_append_string_encoded(buffer *b, const char *s, size_t s_len, buffer_encoding_t encoding) {
+	unsigned char *ds, *d;
+	size_t d_len, ndx;
+	const char *map = NULL;
+
+	if (!s || !b) return -1;
+
+	if (b->ptr[b->used - 1] != '\0') {
+		SEGFAULT();
+	}
+
+	if (s_len == 0) return 0;
+
+	switch(encoding) {
+	case ENCODING_REL_URI:
+		map = encoded_chars_rel_uri;
+		break;
+	case ENCODING_REL_URI_PART:
+		map = encoded_chars_rel_uri_part;
+		break;
+	case ENCODING_HTML:
+		map = encoded_chars_html;
+		break;
+	case ENCODING_MINIMAL_XML:
+		map = encoded_chars_minimal_xml;
+		break;
+	case ENCODING_HEX:
+		map = encoded_chars_hex;
+		break;
+	case ENCODING_HTTP_HEADER:
+		map = encoded_chars_http_header;
+		break;
+	case ENCODING_UNSET:
+		break;
+	}
+
+	assert(map != NULL);
+
+	/* count to-be-encoded-characters */
+	for (ds = (unsigned char *)s, d_len = 0, ndx = 0; ndx < s_len; ds++, ndx++) {
+		if (map[*ds]) {
+			switch(encoding) {
+			case ENCODING_REL_URI:
+			case ENCODING_REL_URI_PART:
+				d_len += 3;
+				break;
+			case ENCODING_HTML:
+			case ENCODING_MINIMAL_XML:
+				d_len += 6;
+				break;
+			case ENCODING_HTTP_HEADER:
+			case ENCODING_HEX:
+				d_len += 2;
+				break;
+			case ENCODING_UNSET:
+				break;
+			}
+		} else {
+			d_len ++;
+		}
+	}
+
+	buffer_prepare_append(b, d_len);
+
+	for (ds = (unsigned char *)s, d = (unsigned char *)b->ptr + b->used - 1, d_len = 0, ndx = 0; ndx < s_len; ds++, ndx++) {
+		if (map[*ds]) {
+			switch(encoding) {
+			case ENCODING_REL_URI:
+			case ENCODING_REL_URI_PART:
+				d[d_len++] = '%';
+				d[d_len++] = hex_chars[((*ds) >> 4) & 0x0F];
+				d[d_len++] = hex_chars[(*ds) & 0x0F];
+				break;
+			case ENCODING_HTML:
+			case ENCODING_MINIMAL_XML:
+				d[d_len++] = '&';
+				d[d_len++] = '#';
+				d[d_len++] = 'x';
+				d[d_len++] = hex_chars[((*ds) >> 4) & 0x0F];
+				d[d_len++] = hex_chars[(*ds) & 0x0F];
+				d[d_len++] = ';';
+				break;
+			case ENCODING_HEX:
+				d[d_len++] = hex_chars[((*ds) >> 4) & 0x0F];
+				d[d_len++] = hex_chars[(*ds) & 0x0F];
+				break;
+			case ENCODING_HTTP_HEADER:
+				d[d_len++] = *ds;
+				d[d_len++] = '\t';
+				break;
+			case ENCODING_UNSET:
+				break;
+			}
+		} else {
+			d[d_len++] = *ds;
+		}
+	}
+
+	/* terminate buffer and calculate new length */
+	b->ptr[b->used + d_len - 1] = '\0';
+
+	b->used += d_len;
+
+	return 0;
+}
+
+
+/* decodes url-special-chars inplace.
+ * replaces non-printable characters with '_'
+ */
+
+static int buffer_urldecode_internal(buffer *url, int is_query) {
+	unsigned char high, low;
+	const char *src;
+	char *dst;
+
+	if (!url || !url->ptr) return -1;
+
+	src = (const char*) url->ptr;
+	dst = (char*) url->ptr;
+
+	while ((*src) != '\0') {
+		if (is_query && *src == '+') {
+			*dst = ' ';
+		} else if (*src == '%') {
+			*dst = '%';
+
+			high = hex2int(*(src + 1));
+			if (high != 0xFF) {
+				low = hex2int(*(src + 2));
+				if (low != 0xFF) {
+					high = (high << 4) | low;
+
+					/* map control-characters out */
+					if (high < 32 || high == 127) high = '_';
+
+					*dst = high;
+					src += 2;
+				}
+			}
+		} else {
+			*dst = *src;
+		}
+
+		dst++;
+		src++;
+	}
+
+	*dst = '\0';
+	url->used = (dst - url->ptr) + 1;
+
+	return 0;
+}
+
+int buffer_urldecode_path(buffer *url) {
+	return buffer_urldecode_internal(url, 0);
+}
+
+int buffer_urldecode_query(buffer *url) {
+	return buffer_urldecode_internal(url, 1);
+}
+
+/* Remove "/../", "//", "/./" parts from path.
+ *
+ * /blah/..         gets  /
+ * /blah/../foo     gets  /foo
+ * /abc/./xyz       gets  /abc/xyz
+ * /abc//xyz        gets  /abc/xyz
+ *
+ * NOTE: src and dest can point to the same buffer, in which case,
+ *       the operation is performed in-place.
+ */
+
+int buffer_path_simplify(buffer *dest, buffer *src)
+{
+	int toklen;
+	char c, pre1;
+	char *start, *slash, *walk, *out;
+	unsigned short pre;
+
+	if (src == NULL || src->ptr == NULL || dest == NULL)
+		return -1;
+
+	if (src == dest)
+		buffer_prepare_append(dest, 1);
+	else
+		buffer_prepare_copy(dest, src->used + 1);
+
+	walk  = src->ptr;
+	start = dest->ptr;
+	out   = dest->ptr;
+	slash = dest->ptr;
+
+
+#if defined(__WIN32) || defined(__CYGWIN__)
+	/* cygwin is treating \ and / the same, so we have to that too
+	 */
+
+	for (walk = src->ptr; *walk; walk++) {
+		if (*walk == '\\') *walk = '/';
+	}
+	walk = src->ptr;
+#endif
+
+	while (*walk == ' ') {
+		walk++;
+	}
+
+	pre1 = *(walk++);
+	c    = *(walk++);
+	pre  = pre1;
+	if (pre1 != '/') {
+		pre = ('/' << 8) | pre1;
+		*(out++) = '/';
+	}
+	*(out++) = pre1;
+
+	if (pre1 == '\0') {
+		dest->used = (out - start) + 1;
+		return 0;
+	}
+
+	while (1) {
+		if (c == '/' || c == '\0') {
+			toklen = out - slash;
+			if (toklen == 3 && pre == (('.' << 8) | '.')) {
+				out = slash;
+				if (out > start) {
+					out--;
+					while (out > start && *out != '/') {
+						out--;
+					}
+				}
+
+				if (c == '\0')
+					out++;
+			} else if (toklen == 1 || pre == (('/' << 8) | '.')) {
+				out = slash;
+				if (c == '\0')
+					out++;
+			}
+
+			slash = out;
+		}
+
+		if (c == '\0')
+			break;
+
+		pre1 = c;
+		pre  = (pre << 8) | pre1;
+		c    = *walk;
+		*out = pre1;
+
+		out++;
+		walk++;
+	}
+
+	*out = '\0';
+	dest->used = (out - start) + 1;
+
+	return 0;
+}
+
+int light_isdigit(int c) {
+	return (c >= '0' && c <= '9');
+}
+
+int light_isxdigit(int c) {
+	if (light_isdigit(c)) return 1;
+
+	c |= 32;
+	return (c >= 'a' && c <= 'f');
+}
+
+int light_isalpha(int c) {
+	c |= 32;
+	return (c >= 'a' && c <= 'z');
+}
+
+int light_isalnum(int c) {
+	return light_isdigit(c) || light_isalpha(c);
+}
+
+int buffer_to_lower(buffer *b) {
+	char *c;
+
+	if (b->used == 0) return 0;
+
+	for (c = b->ptr; *c; c++) {
+		if (*c >= 'A' && *c <= 'Z') {
+			*c |= 32;
+		}
+	}
+
+	return 0;
+}
+
+
+int buffer_to_upper(buffer *b) {
+	char *c;
+
+	if (b->used == 0) return 0;
+
+	for (c = b->ptr; *c; c++) {
+		if (*c >= 'a' && *c <= 'z') {
+			*c &= ~32;
+		}
+	}
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/buffer.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/buffer.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/buffer.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,131 @@
+#ifndef _BUFFER_H_
+#define _BUFFER_H_
+
+#include <stdlib.h>
+#include <sys/types.h>
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "settings.h"
+
+typedef struct {
+	char *ptr;
+
+	size_t used;
+	size_t size;
+} buffer;
+
+typedef struct {
+	buffer **ptr;
+
+	size_t used;
+	size_t size;
+} buffer_array;
+
+typedef struct {
+	char *ptr;
+
+	size_t offset; /* input-pointer */
+
+	size_t used;   /* output-pointer */
+	size_t size;
+} read_buffer;
+
+buffer_array* buffer_array_init(void);
+void buffer_array_free(buffer_array *b);
+void buffer_array_reset(buffer_array *b);
+buffer *buffer_array_append_get_buffer(buffer_array *b);
+
+buffer* buffer_init(void);
+buffer* buffer_init_buffer(buffer *b);
+buffer* buffer_init_string(const char *str);
+void buffer_free(buffer *b);
+void buffer_reset(buffer *b);
+
+int buffer_prepare_copy(buffer *b, size_t size);
+int buffer_prepare_append(buffer *b, size_t size);
+
+int buffer_copy_string(buffer *b, const char *s);
+int buffer_copy_string_len(buffer *b, const char *s, size_t s_len);
+int buffer_copy_string_buffer(buffer *b, const buffer *src);
+int buffer_copy_string_hex(buffer *b, const char *in, size_t in_len);
+
+int buffer_copy_long(buffer *b, long val);
+
+int buffer_copy_memory(buffer *b, const char *s, size_t s_len);
+
+int buffer_append_string(buffer *b, const char *s);
+int buffer_append_string_len(buffer *b, const char *s, size_t s_len);
+int buffer_append_string_buffer(buffer *b, const buffer *src);
+int buffer_append_string_lfill(buffer *b, const char *s, size_t maxlen);
+int buffer_append_string_rfill(buffer *b, const char *s, size_t maxlen);
+
+int buffer_append_long_hex(buffer *b, unsigned long len);
+int buffer_append_long(buffer *b, long val);
+
+#if defined(SIZEOF_LONG) && (SIZEOF_LONG == SIZEOF_OFF_T)
+#define buffer_copy_off_t(x, y)		buffer_copy_long(x, y)
+#define buffer_append_off_t(x, y)	buffer_append_long(x, y)
+#else
+int buffer_copy_off_t(buffer *b, off_t val);
+int buffer_append_off_t(buffer *b, off_t val);
+#endif
+
+int buffer_append_memory(buffer *b, const char *s, size_t s_len);
+
+char * buffer_search_string_len(buffer *b, const char *needle, size_t len);
+
+int buffer_is_empty(buffer *b);
+int buffer_is_equal(buffer *a, buffer *b);
+int buffer_is_equal_right_len(buffer *a, buffer *b, size_t len);
+int buffer_is_equal_string(buffer *a, const char *s, size_t b_len);
+int buffer_caseless_compare(const char *a, size_t a_len, const char *b, size_t b_len);
+
+typedef enum {
+	ENCODING_UNSET,
+	ENCODING_REL_URI, /* for coding a rel-uri (/with space/and%percent) nicely as part of a href */
+	ENCODING_REL_URI_PART, /* same as ENC_REL_URL plus coding / too as %2F */
+	ENCODING_HTML,         /* & becomes & and so on */
+	ENCODING_MINIMAL_XML,  /* minimal encoding for xml */
+	ENCODING_HEX,          /* encode string as hex */
+	ENCODING_HTTP_HEADER   /* encode \n with \t\n */
+} buffer_encoding_t;
+
+int buffer_append_string_encoded(buffer *b, const char *s, size_t s_len, buffer_encoding_t encoding);
+
+int buffer_urldecode_path(buffer *url);
+int buffer_urldecode_query(buffer *url);
+int buffer_path_simplify(buffer *dest, buffer *src);
+
+int buffer_to_lower(buffer *b);
+int buffer_to_upper(buffer *b);
+
+/** deprecated */
+int LI_ltostr(char *buf, long val);
+char hex2int(unsigned char c);
+char int2hex(char i);
+
+int light_isdigit(int c);
+int light_isxdigit(int c);
+int light_isalpha(int c);
+int light_isalnum(int c);
+
+#define BUFFER_APPEND_STRING_CONST(x, y) \
+	buffer_append_string_len(x, y, sizeof(y) - 1)
+
+#define BUFFER_COPY_STRING_CONST(x, y) \
+	buffer_copy_string_len(x, y, sizeof(y) - 1)
+
+#define BUFFER_APPEND_SLASH(x) \
+	if (x->used > 1 && x->ptr[x->used - 2] != '/') { BUFFER_APPEND_STRING_CONST(x, "/"); }
+
+#define CONST_STR_LEN(x) x, x ? sizeof(x) - 1 : 0
+#define CONST_BUF_LEN(x) x->ptr, x->used ? x->used - 1 : 0
+
+
+#define SEGFAULT() do { fprintf(stderr, "%s.%d: aborted\n", __FILE__, __LINE__); abort(); } while(0)
+#define UNUSED(x) ( (void)(x) )
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/chunk.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/chunk.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/chunk.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,400 @@
+/**
+ * the network chunk-API
+ *
+ *
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+#include "chunk.h"
+
+chunkqueue *chunkqueue_init(void) {
+	chunkqueue *cq;
+
+	cq = calloc(1, sizeof(*cq));
+
+	cq->first = NULL;
+	cq->last = NULL;
+
+	cq->unused = NULL;
+
+	return cq;
+}
+
+static chunk *chunk_init(void) {
+	chunk *c;
+
+	c = calloc(1, sizeof(*c));
+
+	c->mem = buffer_init();
+	c->file.name = buffer_init();
+	c->file.fd = -1;
+	c->file.mmap.start = MAP_FAILED;
+	c->next = NULL;
+
+	return c;
+}
+
+static void chunk_free(chunk *c) {
+	if (!c) return;
+
+	buffer_free(c->mem);
+	buffer_free(c->file.name);
+
+	free(c);
+}
+
+static void chunk_reset(chunk *c) {
+	if (!c) return;
+
+	buffer_reset(c->mem);
+
+	if (c->file.is_temp && !buffer_is_empty(c->file.name)) {
+		unlink(c->file.name->ptr);
+	}
+
+	buffer_reset(c->file.name);
+
+	if (c->file.fd != -1) {
+		close(c->file.fd);
+		c->file.fd = -1;
+	}
+	if (MAP_FAILED != c->file.mmap.start) {
+		munmap(c->file.mmap.start, c->file.mmap.length);
+		c->file.mmap.start = MAP_FAILED;
+	}
+}
+
+
+void chunkqueue_free(chunkqueue *cq) {
+	chunk *c, *pc;
+
+	if (!cq) return;
+
+	for (c = cq->first; c; ) {
+		pc = c;
+		c = c->next;
+		chunk_free(pc);
+	}
+
+	for (c = cq->unused; c; ) {
+		pc = c;
+		c = c->next;
+		chunk_free(pc);
+	}
+
+	free(cq);
+}
+
+static chunk *chunkqueue_get_unused_chunk(chunkqueue *cq) {
+	chunk *c;
+
+	/* check if we have a unused chunk */
+	if (!cq->unused) {
+		c = chunk_init();
+	} else {
+		/* take the first element from the list (a stack) */
+		c = cq->unused;
+		cq->unused = c->next;
+		c->next = NULL;
+		cq->unused_chunks--;
+	}
+
+	return c;
+}
+
+static int chunkqueue_prepend_chunk(chunkqueue *cq, chunk *c) {
+	c->next = cq->first;
+	cq->first = c;
+
+	if (cq->last == NULL) {
+		cq->last = c;
+	}
+
+	return 0;
+}
+
+static int chunkqueue_append_chunk(chunkqueue *cq, chunk *c) {
+	if (cq->last) {
+		cq->last->next = c;
+	}
+	cq->last = c;
+
+	if (cq->first == NULL) {
+		cq->first = c;
+	}
+
+	return 0;
+}
+
+void chunkqueue_reset(chunkqueue *cq) {
+	chunk *c;
+	/* move everything to the unused queue */
+
+	/* mark all read written */
+	for (c = cq->first; c; c = c->next) {
+		switch(c->type) {
+		case MEM_CHUNK:
+			c->offset = c->mem->used - 1;
+			break;
+		case FILE_CHUNK:
+			c->offset = c->file.length;
+			break;
+		default:
+			break;
+		}
+	}
+
+	chunkqueue_remove_finished_chunks(cq);
+	cq->bytes_in = 0;
+	cq->bytes_out = 0;
+}
+
+int chunkqueue_append_file(chunkqueue *cq, buffer *fn, off_t offset, off_t len) {
+	chunk *c;
+
+	if (len == 0) return 0;
+
+	c = chunkqueue_get_unused_chunk(cq);
+
+	c->type = FILE_CHUNK;
+
+	buffer_copy_string_buffer(c->file.name, fn);
+	c->file.start = offset;
+	c->file.length = len;
+	c->offset = 0;
+
+	chunkqueue_append_chunk(cq, c);
+
+	return 0;
+}
+
+int chunkqueue_append_buffer(chunkqueue *cq, buffer *mem) {
+	chunk *c;
+
+	if (mem->used == 0) return 0;
+
+	c = chunkqueue_get_unused_chunk(cq);
+	c->type = MEM_CHUNK;
+	c->offset = 0;
+	buffer_copy_string_buffer(c->mem, mem);
+
+	chunkqueue_append_chunk(cq, c);
+
+	return 0;
+}
+
+int chunkqueue_append_buffer_weak(chunkqueue *cq, buffer *mem) {
+	chunk *c;
+
+	c = chunkqueue_get_unused_chunk(cq);
+	c->type = MEM_CHUNK;
+	c->offset = 0;
+	if (c->mem) buffer_free(c->mem);
+	c->mem = mem;
+
+	chunkqueue_append_chunk(cq, c);
+
+	return 0;
+}
+
+int chunkqueue_prepend_buffer(chunkqueue *cq, buffer *mem) {
+	chunk *c;
+
+	if (mem->used == 0) return 0;
+
+	c = chunkqueue_get_unused_chunk(cq);
+	c->type = MEM_CHUNK;
+	c->offset = 0;
+	buffer_copy_string_buffer(c->mem, mem);
+
+	chunkqueue_prepend_chunk(cq, c);
+
+	return 0;
+}
+
+
+int chunkqueue_append_mem(chunkqueue *cq, const char * mem, size_t len) {
+	chunk *c;
+
+	if (len == 0) return 0;
+
+	c = chunkqueue_get_unused_chunk(cq);
+	c->type = MEM_CHUNK;
+	c->offset = 0;
+	buffer_copy_string_len(c->mem, mem, len - 1);
+
+	chunkqueue_append_chunk(cq, c);
+
+	return 0;
+}
+
+buffer * chunkqueue_get_prepend_buffer(chunkqueue *cq) {
+	chunk *c;
+
+	c = chunkqueue_get_unused_chunk(cq);
+
+	c->type = MEM_CHUNK;
+	c->offset = 0;
+	buffer_reset(c->mem);
+
+	chunkqueue_prepend_chunk(cq, c);
+
+	return c->mem;
+}
+
+buffer *chunkqueue_get_append_buffer(chunkqueue *cq) {
+	chunk *c;
+
+	c = chunkqueue_get_unused_chunk(cq);
+
+	c->type = MEM_CHUNK;
+	c->offset = 0;
+	buffer_reset(c->mem);
+
+	chunkqueue_append_chunk(cq, c);
+
+	return c->mem;
+}
+
+int chunkqueue_set_tempdirs(chunkqueue *cq, array *tempdirs) {
+	if (!cq) return -1;
+
+	cq->tempdirs = tempdirs;
+
+	return 0;
+}
+
+chunk *chunkqueue_get_append_tempfile(chunkqueue *cq) {
+	chunk *c;
+	buffer *template = buffer_init_string("/var/tmp/lighttpd-upload-XXXXXX");
+
+	c = chunkqueue_get_unused_chunk(cq);
+
+	c->type = FILE_CHUNK;
+	c->offset = 0;
+
+	if (cq->tempdirs && cq->tempdirs->used) {
+		size_t i;
+
+		/* we have several tempdirs, only if all of them fail we jump out */
+
+		for (i = 0; i < cq->tempdirs->used; i++) {
+			data_string *ds = (data_string *)cq->tempdirs->data[i];
+
+			buffer_copy_string_buffer(template, ds->value);
+			BUFFER_APPEND_SLASH(template);
+			BUFFER_APPEND_STRING_CONST(template, "lighttpd-upload-XXXXXX");
+
+			if (-1 != (c->file.fd = mkstemp(template->ptr))) {
+				/* only trigger the unlink if we created the temp-file successfully */
+				c->file.is_temp = 1;
+				break;
+			}
+		}
+	} else {
+		if (-1 != (c->file.fd = mkstemp(template->ptr))) {
+			/* only trigger the unlink if we created the temp-file successfully */
+			c->file.is_temp = 1;
+		}
+	}
+
+	buffer_copy_string_buffer(c->file.name, template);
+	c->file.length = 0;
+
+	chunkqueue_append_chunk(cq, c);
+
+	buffer_free(template);
+
+	return c;
+}
+
+
+off_t chunkqueue_length(chunkqueue *cq) {
+	off_t len = 0;
+	chunk *c;
+
+	for (c = cq->first; c; c = c->next) {
+		switch (c->type) {
+		case MEM_CHUNK:
+			len += c->mem->used ? c->mem->used - 1 : 0;
+			break;
+		case FILE_CHUNK:
+			len += c->file.length;
+			break;
+		default:
+			break;
+		}
+	}
+
+	return len;
+}
+
+off_t chunkqueue_written(chunkqueue *cq) {
+	off_t len = 0;
+	chunk *c;
+
+	for (c = cq->first; c; c = c->next) {
+		switch (c->type) {
+		case MEM_CHUNK:
+		case FILE_CHUNK:
+			len += c->offset;
+			break;
+		default:
+			break;
+		}
+	}
+
+	return len;
+}
+
+int chunkqueue_is_empty(chunkqueue *cq) {
+	return cq->first ? 0 : 1;
+}
+
+int chunkqueue_remove_finished_chunks(chunkqueue *cq) {
+	chunk *c;
+
+	for (c = cq->first; c; c = cq->first) {
+		int is_finished = 0;
+
+		switch (c->type) {
+		case MEM_CHUNK:
+			if (c->mem->used == 0 || (c->offset == (off_t)c->mem->used - 1)) is_finished = 1;
+			break;
+		case FILE_CHUNK:
+			if (c->offset == c->file.length) is_finished = 1;
+			break;
+		default:
+			break;
+		}
+
+		if (!is_finished) break;
+
+		chunk_reset(c);
+
+		cq->first = c->next;
+		if (c == cq->last) cq->last = NULL;
+
+		/* keep at max 4 chunks in the 'unused'-cache */
+		if (cq->unused_chunks > 4) {
+			chunk_free(c);
+		} else {
+			c->next = cq->unused;
+			cq->unused = c;
+			cq->unused_chunks++;
+		}
+	}
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/chunk.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/chunk.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/chunk.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,70 @@
+#ifndef _CHUNK_H_
+#define _CHUNK_H_
+
+#include "buffer.h"
+#include "array.h"
+
+typedef struct chunk {
+	enum { UNUSED_CHUNK, MEM_CHUNK, FILE_CHUNK } type;
+
+	buffer *mem; /* either the storage of the mem-chunk or the read-ahead buffer */
+
+	struct {
+		/* filechunk */
+		buffer *name; /* name of the file */
+		off_t  start; /* starting offset in the file */
+		off_t  length; /* octets to send from the starting offset */
+
+		int    fd;
+		struct {
+			char   *start; /* the start pointer of the mmap'ed area */
+			size_t length; /* size of the mmap'ed area */
+			off_t  offset; /* start is <n> octet away from the start of the file */
+		} mmap;
+
+		int is_temp; /* file is temporary and will be deleted if on cleanup */
+	} file;
+
+	off_t  offset; /* octets sent from this chunk
+			  the size of the chunk is either
+			  - mem-chunk: mem->used - 1
+			  - file-chunk: file.length
+			*/
+
+	struct chunk *next;
+} chunk;
+
+typedef struct {
+	chunk *first;
+	chunk *last;
+
+	chunk *unused;
+	size_t unused_chunks;
+
+	array *tempdirs;
+
+	off_t  bytes_in, bytes_out;
+} chunkqueue;
+
+chunkqueue *chunkqueue_init(void);
+int chunkqueue_set_tempdirs(chunkqueue *c, array *tempdirs);
+int chunkqueue_append_file(chunkqueue *c, buffer *fn, off_t offset, off_t len);
+int chunkqueue_append_mem(chunkqueue *c, const char *mem, size_t len);
+int chunkqueue_append_buffer(chunkqueue *c, buffer *mem);
+int chunkqueue_append_buffer_weak(chunkqueue *c, buffer *mem);
+int chunkqueue_prepend_buffer(chunkqueue *c, buffer *mem);
+
+buffer * chunkqueue_get_append_buffer(chunkqueue *c);
+buffer * chunkqueue_get_prepend_buffer(chunkqueue *c);
+chunk * chunkqueue_get_append_tempfile(chunkqueue *cq);
+
+int chunkqueue_remove_finished_chunks(chunkqueue *cq);
+
+off_t chunkqueue_length(chunkqueue *c);
+off_t chunkqueue_written(chunkqueue *c);
+void chunkqueue_free(chunkqueue *c);
+void chunkqueue_reset(chunkqueue *c);
+
+int chunkqueue_is_empty(chunkqueue *c);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/configfile-glue.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/configfile-glue.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/configfile-glue.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,542 @@
+#include <string.h>
+
+#include "base.h"
+#include "buffer.h"
+#include "array.h"
+#include "log.h"
+#include "plugin.h"
+
+#include "configfile.h"
+
+/**
+ * like all glue code this file contains functions which
+ * are the external interface of lighttpd. The functions
+ * are used by the server itself and the plugins.
+ *
+ * The main-goal is to have a small library in the end
+ * which is linked against both and which will define
+ * the interface itself in the end.
+ *
+ */
+
+
+/* handle global options */
+
+/* parse config array */
+int config_insert_values_internal(server *srv, array *ca, const config_values_t cv[]) {
+	size_t i;
+	data_unset *du;
+
+	for (i = 0; cv[i].key; i++) {
+
+		if (NULL == (du = array_get_element(ca, cv[i].key))) {
+			/* no found */
+
+			continue;
+		}
+
+		switch (cv[i].type) {
+		case T_CONFIG_ARRAY:
+			if (du->type == TYPE_ARRAY) {
+				size_t j;
+				data_array *da = (data_array *)du;
+
+				for (j = 0; j < da->value->used; j++) {
+					if (da->value->data[j]->type == TYPE_STRING) {
+						data_string *ds = data_string_init();
+
+						buffer_copy_string_buffer(ds->value, ((data_string *)(da->value->data[j]))->value);
+						if (!da->is_index_key) {
+							/* the id's were generated automaticly, as we copy now we might have to renumber them
+							 * this is used to prepend server.modules by mod_indexfiles as it has to be loaded
+							 * before mod_fastcgi and friends */
+							buffer_copy_string_buffer(ds->key, ((data_string *)(da->value->data[j]))->key);
+						}
+
+						array_insert_unique(cv[i].destination, (data_unset *)ds);
+					} else {
+						log_error_write(srv, __FILE__, __LINE__, "sssd",
+								"the key of an array can only be a string or a integer, variable:",
+								cv[i].key, "type:", da->value->data[j]->type);
+
+						return -1;
+					}
+				}
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "ss", cv[i].key, "should have been a array of strings like ... = ( \"...\" )");
+
+				return -1;
+			}
+			break;
+		case T_CONFIG_STRING:
+			if (du->type == TYPE_STRING) {
+				data_string *ds = (data_string *)du;
+
+				buffer_copy_string_buffer(cv[i].destination, ds->value);
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "ssss", cv[i].key, "should have been a string like ... = \"...\"");
+
+				return -1;
+			}
+			break;
+		case T_CONFIG_SHORT:
+			switch(du->type) {
+			case TYPE_INTEGER: {
+				data_integer *di = (data_integer *)du;
+
+				*((unsigned short *)(cv[i].destination)) = di->value;
+				break;
+			}
+			case TYPE_STRING: {
+				data_string *ds = (data_string *)du;
+
+				log_error_write(srv, __FILE__, __LINE__, "ssb", "got a string but expected a short:", cv[i].key, ds->value);
+
+				return -1;
+			}
+			default:
+				log_error_write(srv, __FILE__, __LINE__, "ssds", "unexpected type for key:", cv[i].key, du->type, "expected a integer, range 0 ... 65535");
+				return -1;
+			}
+			break;
+		case T_CONFIG_BOOLEAN:
+			if (du->type == TYPE_STRING) {
+				data_string *ds = (data_string *)du;
+
+				if (buffer_is_equal_string(ds->value, CONST_STR_LEN("enable"))) {
+					*((unsigned short *)(cv[i].destination)) = 1;
+				} else if (buffer_is_equal_string(ds->value, CONST_STR_LEN("disable"))) {
+					*((unsigned short *)(cv[i].destination)) = 0;
+				} else {
+					log_error_write(srv, __FILE__, __LINE__, "ssbs", "ERROR: unexpected value for key:", cv[i].key, ds->value, "(enable|disable)");
+
+					return -1;
+				}
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "ssss", "ERROR: unexpected type for key:", cv[i].key, "(string)", "\"(enable|disable)\"");
+
+				return -1;
+			}
+			break;
+		case T_CONFIG_LOCAL:
+		case T_CONFIG_UNSET:
+			break;
+		case T_CONFIG_UNSUPPORTED:
+			log_error_write(srv, __FILE__, __LINE__, "ssss", "ERROR: found unsupported key:", cv[i].key, "-", (char *)(cv[i].destination));
+
+			srv->config_unsupported = 1;
+
+			break;
+		case T_CONFIG_DEPRECATED:
+			log_error_write(srv, __FILE__, __LINE__, "ssss", "ERROR: found deprecated key:", cv[i].key, "-", (char *)(cv[i].destination));
+
+			srv->config_deprecated = 1;
+
+			break;
+		}
+	}
+
+	return 0;
+}
+
+int config_insert_values_global(server *srv, array *ca, const config_values_t cv[]) {
+	size_t i;
+	data_unset *du;
+
+	for (i = 0; cv[i].key; i++) {
+		data_string *touched;
+
+		if (NULL == (du = array_get_element(ca, cv[i].key))) {
+			/* no found */
+
+			continue;
+		}
+
+		/* touched */
+		touched = data_string_init();
+
+		buffer_copy_string(touched->value, "");
+		buffer_copy_string_buffer(touched->key, du->key);
+
+		array_insert_unique(srv->config_touched, (data_unset *)touched);
+	}
+
+	return config_insert_values_internal(srv, ca, cv);
+}
+
+unsigned short sock_addr_get_port(sock_addr *addr) {
+#ifdef HAVE_IPV6
+	return ntohs(addr->plain.sa_family ? addr->ipv6.sin6_port : addr->ipv4.sin_port);
+#else
+	return ntohs(addr->ipv4.sin_port);
+#endif
+}
+
+static cond_result_t config_check_cond_cached(server *srv, connection *con, data_config *dc);
+
+static cond_result_t config_check_cond_nocache(server *srv, connection *con, data_config *dc) {
+	buffer *l;
+	server_socket *srv_sock = con->srv_socket;
+
+	/* check parent first */
+	if (dc->parent && dc->parent->context_ndx) {
+		/**
+		 * a nested conditional 
+		 *
+		 * if the parent is not decided yet or false, we can't be true either 
+		 */
+		if (con->conf.log_condition_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "go parent", dc->parent->key);
+		}
+
+		switch (config_check_cond_cached(srv, con, dc->parent)) {
+		case COND_RESULT_FALSE:
+			return COND_RESULT_FALSE;
+		case COND_RESULT_UNSET:
+			return COND_RESULT_UNSET;
+		default:
+			break;
+		}
+	}
+
+	if (dc->prev) {
+		/**
+		 * a else branch
+		 *
+		 * we can only be executed, if all of our previous brothers 
+		 * are false
+		 */
+		if (con->conf.log_condition_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "go prev", dc->prev->key);
+		}
+
+		/* make sure prev is checked first */
+		config_check_cond_cached(srv, con, dc->prev);
+
+		/* one of prev set me to FALSE */
+		switch (con->cond_cache[dc->context_ndx].result) {
+		case COND_RESULT_FALSE:
+			return con->cond_cache[dc->context_ndx].result;
+		default:
+			break;
+		}
+	}
+
+	if (!con->conditional_is_valid[dc->comp]) {
+		if (con->conf.log_condition_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "dss", 
+				dc->comp,
+				dc->key->ptr,
+				con->conditional_is_valid[dc->comp] ? "yeah" : "nej");
+		}
+
+		return COND_RESULT_UNSET;
+	}
+
+	/* pass the rules */
+
+	switch (dc->comp) {
+	case COMP_HTTP_HOST: {
+		char *ck_colon = NULL, *val_colon = NULL;
+
+		if (!buffer_is_empty(con->uri.authority)) {
+
+			/*
+			 * append server-port to the HTTP_POST if necessary
+			 */
+
+			l = con->uri.authority;
+
+			switch(dc->cond) {
+			case CONFIG_COND_NE:
+			case CONFIG_COND_EQ:
+				ck_colon = strchr(dc->string->ptr, ':');
+				val_colon = strchr(l->ptr, ':');
+
+				if (ck_colon == val_colon) {
+					/* nothing to do with it */
+					break;
+				}
+				if (ck_colon) {
+					/* condition "host:port" but client send "host" */
+					buffer_copy_string_buffer(srv->cond_check_buf, l);
+					BUFFER_APPEND_STRING_CONST(srv->cond_check_buf, ":");
+					buffer_append_long(srv->cond_check_buf, sock_addr_get_port(&(srv_sock->addr)));
+					l = srv->cond_check_buf;
+				} else if (!ck_colon) {
+					/* condition "host" but client send "host:port" */
+					buffer_copy_string_len(srv->cond_check_buf, l->ptr, val_colon - l->ptr);
+					l = srv->cond_check_buf;
+				}
+				break;
+			default:
+				break;
+			}
+		} else {
+			l = srv->empty_string;
+		}
+		break;
+	}
+	case COMP_HTTP_REMOTE_IP: {
+		char *nm_slash;
+		/* handle remoteip limitations
+		 *
+		 * "10.0.0.1" is provided for all comparisions
+		 *
+		 * only for == and != we support
+		 *
+		 * "10.0.0.1/24"
+		 */
+
+		if ((dc->cond == CONFIG_COND_EQ ||
+		     dc->cond == CONFIG_COND_NE) &&
+		    (con->dst_addr.plain.sa_family == AF_INET) &&
+		    (NULL != (nm_slash = strchr(dc->string->ptr, '/')))) {
+			int nm_bits;
+			long nm;
+			char *err;
+			struct in_addr val_inp;
+
+			if (*(nm_slash+1) == '\0') {
+				log_error_write(srv, __FILE__, __LINE__, "sb", "ERROR: no number after / ", dc->string);
+
+				return COND_RESULT_FALSE;
+			}
+
+			nm_bits = strtol(nm_slash + 1, &err, 10);
+
+			if (*err) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs", "ERROR: non-digit found in netmask:", dc->string, err);
+
+				return COND_RESULT_FALSE;
+			}
+
+			/* take IP convert to the native */
+			buffer_copy_string_len(srv->cond_check_buf, dc->string->ptr, nm_slash - dc->string->ptr);
+#ifdef __WIN32
+			if (INADDR_NONE == (val_inp.s_addr = inet_addr(srv->cond_check_buf->ptr))) {
+				log_error_write(srv, __FILE__, __LINE__, "sb", "ERROR: ip addr is invalid:", srv->cond_check_buf);
+
+				return COND_RESULT_FALSE;
+			}
+
+#else
+			if (0 == inet_aton(srv->cond_check_buf->ptr, &val_inp)) {
+				log_error_write(srv, __FILE__, __LINE__, "sb", "ERROR: ip addr is invalid:", srv->cond_check_buf);
+
+				return COND_RESULT_FALSE;
+			}
+#endif
+
+			/* build netmask */
+			nm = htonl(~((1 << (32 - nm_bits)) - 1));
+
+			if ((val_inp.s_addr & nm) == (con->dst_addr.ipv4.sin_addr.s_addr & nm)) {
+				return (dc->cond == CONFIG_COND_EQ) ? COND_RESULT_TRUE : COND_RESULT_FALSE;
+			} else {
+				return (dc->cond == CONFIG_COND_EQ) ? COND_RESULT_FALSE : COND_RESULT_TRUE;
+			}
+		} else {
+			l = con->dst_addr_buf;
+		}
+		break;
+	}
+	case COMP_HTTP_SCHEME:
+		l = con->uri.scheme;
+		break;
+
+	case COMP_HTTP_URL:
+		l = con->uri.path;
+		break;
+
+	case COMP_HTTP_QUERY_STRING:
+		l = con->uri.query;
+		break;
+
+	case COMP_SERVER_SOCKET:
+		l = srv_sock->srv_token;
+		break;
+
+	case COMP_HTTP_REFERER: {
+		data_string *ds;
+
+		if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Referer"))) {
+			l = ds->value;
+		} else {
+			l = srv->empty_string;
+		}
+		break;
+	}
+	case COMP_HTTP_COOKIE: {
+		data_string *ds;
+		if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Cookie"))) {
+			l = ds->value;
+		} else {
+			l = srv->empty_string;
+		}
+		break;
+	}
+	case COMP_HTTP_USER_AGENT: {
+		data_string *ds;
+		if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "User-Agent"))) {
+			l = ds->value;
+		} else {
+			l = srv->empty_string;
+		}
+		break;
+	}
+	case COMP_HTTP_REQUEST_METHOD: {
+		const char *method = get_http_method_name(con->request.http_method);
+
+		/* we only have the request method as const char but we need a buffer for comparing */
+
+		buffer_copy_string(srv->tmp_buf, method);
+
+		l = srv->tmp_buf;
+
+		break;
+	}
+	default:
+		return COND_RESULT_FALSE;
+	}
+
+	if (NULL == l) {
+		if (con->conf.log_condition_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "bsbs", dc->comp_key,
+					"(", l, ") compare to NULL");
+		}
+		return COND_RESULT_FALSE;
+	}
+
+	if (con->conf.log_condition_handling) {
+		log_error_write(srv, __FILE__, __LINE__,  "bsbsb", dc->comp_key,
+				"(", l, ") compare to ", dc->string);
+	}
+	switch(dc->cond) {
+	case CONFIG_COND_NE:
+	case CONFIG_COND_EQ:
+		if (buffer_is_equal(l, dc->string)) {
+			return (dc->cond == CONFIG_COND_EQ) ? COND_RESULT_TRUE : COND_RESULT_FALSE;
+		} else {
+			return (dc->cond == CONFIG_COND_EQ) ? COND_RESULT_FALSE : COND_RESULT_TRUE;
+		}
+		break;
+#ifdef HAVE_PCRE_H
+	case CONFIG_COND_NOMATCH:
+	case CONFIG_COND_MATCH: {
+		cond_cache_t *cache = &con->cond_cache[dc->context_ndx];
+		int n;
+
+#ifndef elementsof
+#define elementsof(x) (sizeof(x) / sizeof(x[0]))
+#endif
+		n = pcre_exec(dc->regex, dc->regex_study, l->ptr, l->used - 1, 0, 0,
+				cache->matches, elementsof(cache->matches));
+
+		cache->patterncount = n;
+		if (n > 0) {
+			cache->comp_value = l;
+			cache->comp_type  = dc->comp;
+			return (dc->cond == CONFIG_COND_MATCH) ? COND_RESULT_TRUE : COND_RESULT_FALSE;
+		} else {
+			/* cache is already cleared */
+			return (dc->cond == CONFIG_COND_MATCH) ? COND_RESULT_FALSE : COND_RESULT_TRUE;
+		}
+		break;
+	}
+#endif
+	default:
+		/* no way */
+		break;
+	}
+
+	return COND_RESULT_FALSE;
+}
+
+static cond_result_t config_check_cond_cached(server *srv, connection *con, data_config *dc) {
+	cond_cache_t *caches = con->cond_cache;
+
+	if (COND_RESULT_UNSET == caches[dc->context_ndx].result) {
+		if (COND_RESULT_TRUE == (caches[dc->context_ndx].result = config_check_cond_nocache(srv, con, dc))) {
+			if (dc->next) {
+				data_config *c;
+				if (con->conf.log_condition_handling) {
+					log_error_write(srv, __FILE__, __LINE__, "s",
+							"setting remains of chaining to false");
+				}
+				for (c = dc->next; c; c = c->next) {
+					caches[c->context_ndx].result = COND_RESULT_FALSE;
+				}
+			}
+		}
+		caches[dc->context_ndx].comp_type = dc->comp;
+
+		if (con->conf.log_condition_handling) {
+			log_error_write(srv, __FILE__, __LINE__, "dss", dc->context_ndx,
+					"(uncached) result:",
+					caches[dc->context_ndx].result == COND_RESULT_UNSET ? "unknown" :
+						(caches[dc->context_ndx].result == COND_RESULT_TRUE ? "true" : "false"));
+		}
+	} else {
+		if (con->conf.log_condition_handling) {
+			log_error_write(srv, __FILE__, __LINE__, "dss", dc->context_ndx,
+					"(cached) result:",
+					caches[dc->context_ndx].result == COND_RESULT_UNSET ? "unknown" : 
+						(caches[dc->context_ndx].result == COND_RESULT_TRUE ? "true" : "false"));
+		}
+	}
+	return caches[dc->context_ndx].result;
+}
+
+/**
+ * reset the config-cache for a named item
+ *
+ * if the item is COND_LAST_ELEMENT we reset all items
+ */
+void config_cond_cache_reset_item(server *srv, connection *con, comp_key_t item) {
+	size_t i;
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		if (item == COMP_LAST_ELEMENT || 
+		    con->cond_cache[i].comp_type == item) {
+			con->cond_cache[i].result = COND_RESULT_UNSET;
+			con->cond_cache[i].patterncount = 0;
+			con->cond_cache[i].comp_value = NULL;
+		}
+	}
+}
+
+/**
+ * reset the config cache to its initial state at connection start
+ */
+void config_cond_cache_reset(server *srv, connection *con) {
+	size_t i;
+
+	config_cond_cache_reset_all_items(srv, con);
+
+	for (i = 0; i < COMP_LAST_ELEMENT; i++) {
+		con->conditional_is_valid[i] = 0;
+	}
+}
+
+int config_check_cond(server *srv, connection *con, data_config *dc) {
+	if (con->conf.log_condition_handling) {
+		log_error_write(srv, __FILE__, __LINE__,  "s",  "=== start of condition block ===");
+	}
+	return (config_check_cond_cached(srv, con, dc) == COND_RESULT_TRUE);
+}
+
+int config_append_cond_match_buffer(connection *con, data_config *dc, buffer *buf, int n)
+{
+	cond_cache_t *cache = &con->cond_cache[dc->context_ndx];
+	if (n > cache->patterncount) {
+		return 0;
+	}
+
+	n <<= 1; /* n *= 2 */
+	buffer_append_string_len(buf,
+			cache->comp_value->ptr + cache->matches[n],
+			cache->matches[n + 1] - cache->matches[n]);
+	return 1;
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/configfile.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/configfile.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/configfile.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1249 @@
+#include <sys/stat.h>
+
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "server.h"
+#include "log.h"
+#include "stream.h"
+#include "plugin.h"
+#ifdef USE_LICENSE
+#include "license.h"
+#endif
+
+#include "configparser.h"
+#include "configfile.h"
+#include "proc_open.h"
+
+
+static int config_insert(server *srv) {
+	size_t i;
+	int ret = 0;
+	buffer *stat_cache_string;
+
+	config_values_t cv[] = {
+		{ "server.bind",                 NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 0 */
+		{ "server.errorlog",             NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 1 */
+		{ "server.errorfile-prefix",     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 2 */
+		{ "server.chroot",               NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 3 */
+		{ "server.username",             NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 4 */
+		{ "server.groupname",            NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 5 */
+		{ "server.port",                 NULL, T_CONFIG_SHORT,  T_CONFIG_SCOPE_SERVER },      /* 6 */
+		{ "server.tag",                  NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },  /* 7 */
+		{ "server.use-ipv6",             NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 8 */
+		{ "server.modules",              NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_SERVER },       /* 9 */
+
+		{ "server.event-handler",        NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 10 */
+		{ "server.pid-file",             NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 11 */
+		{ "server.max-request-size",     NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },   /* 12 */
+		{ "server.max-worker",           NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_SERVER },       /* 13 */
+		{ "server.document-root",        NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },  /* 14 */
+		{ "server.force-lowercase-filenames", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },   /* 15 */
+		{ "debug.log-condition-handling", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },    /* 16 */
+		{ "server.max-keep-alive-requests", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION }, /* 17 */
+		{ "server.name",                 NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },  /* 18 */
+		{ "server.max-keep-alive-idle",  NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },   /* 19 */
+
+		{ "server.max-read-idle",        NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },   /* 20 */
+		{ "server.max-write-idle",       NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },   /* 21 */
+		{ "server.error-handler-404",    NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },  /* 22 */
+		{ "server.max-fds",              NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_SERVER },       /* 23 */
+#ifdef HAVE_LSTAT
+		{ "server.follow-symlink",       NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 24 */
+#else
+		{ "server.follow-symlink",
+		  "Your system lacks lstat(). We can not differ symlinks from files."
+		  "Please remove server.follow-symlinks from your config.",
+		  T_CONFIG_UNSUPPORTED, T_CONFIG_SCOPE_UNSET }, /* 24 */
+#endif
+		{ "server.kbytes-per-second",    NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },   /* 25 */
+		{ "connection.kbytes-per-second", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },  /* 26 */
+		{ "mimetype.use-xattr",          NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 27 */
+		{ "mimetype.assign",             NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },   /* 28 */
+		{ "ssl.pemfile",                 NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 29 */
+
+		{ "ssl.engine",                  NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },     /* 30 */
+
+		{ "debug.log-file-not-found",    NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },     /* 31 */
+		{ "debug.log-request-handling",  NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },     /* 32 */
+		{ "debug.log-response-header",   NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },     /* 33 */
+		{ "debug.log-request-header",    NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },     /* 34 */
+
+		{ "server.protocol-http11",      NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },     /* 35 */
+		{ "debug.log-request-header-on-error", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER }, /* 36 */
+		{ "debug.log-state-handling",    NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },     /* 37 */
+		{ "ssl.ca-file",                 NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 38 */
+
+		{ "server.errorlog-use-syslog",  NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER },     /* 39 */
+		{ "server.range-requests",       NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 40 */
+		{ "server.stat-cache-engine",    NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },  /* 41 */
+		{ "server.max-connections",      NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_SERVER },       /* 42 */
+		{ "server.network-backend",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },  /* 43 */
+		{ "server.upload-dirs",          NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },   /* 44 */
+		{ "server.core-files",           NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 45 */
+		{ "ssl.cipher-list",             NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },      /* 46 */
+		{ "ssl.use-sslv2",               NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 47 */
+		{ "etag.use-inode",             NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER }, /* 48 */
+		{ "etag.use-mtime",             NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER }, /* 49 */
+		{ "etag.use-size",             NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_SERVER }, /* 50 */
+		{ "server.host",                 "use server.bind instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+		{ "server.docroot",              "use server.document-root instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+		{ "server.virtual-root",         "load mod_simple_vhost and use simple-vhost.server-root instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+		{ "server.virtual-default-host", "load mod_simple_vhost and use simple-vhost.default-host instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+		{ "server.virtual-docroot",      "load mod_simple_vhost and use simple-vhost.document-root instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+		{ "server.userid",               "use server.username instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+		{ "server.groupid",              "use server.groupname instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+		{ "server.use-keep-alive",       "use server.max-keep-alive-requests = 0 instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+		{ "server.force-lower-case-files",       "use server.force-lowercase-filenames instead", T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_UNSET },
+
+		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+
+	/* 0 */
+	cv[0].destination = srv->srvconf.bindhost;
+	cv[1].destination = srv->srvconf.errorlog_file;
+	cv[3].destination = srv->srvconf.changeroot;
+	cv[4].destination = srv->srvconf.username;
+	cv[5].destination = srv->srvconf.groupname;
+	cv[6].destination = &(srv->srvconf.port);
+
+	cv[9].destination = srv->srvconf.modules;
+	cv[10].destination = srv->srvconf.event_handler;
+	cv[11].destination = srv->srvconf.pid_file;
+
+	cv[13].destination = &(srv->srvconf.max_worker);
+	cv[23].destination = &(srv->srvconf.max_fds);
+	cv[36].destination = &(srv->srvconf.log_request_header_on_error);
+	cv[37].destination = &(srv->srvconf.log_state_handling);
+
+	cv[39].destination = &(srv->srvconf.errorlog_use_syslog);
+
+	stat_cache_string = buffer_init();
+	cv[41].destination = stat_cache_string;
+	cv[43].destination = srv->srvconf.network_backend;
+	cv[44].destination = srv->srvconf.upload_tempdirs;
+	cv[45].destination = &(srv->srvconf.enable_cores);
+
+	cv[42].destination = &(srv->srvconf.max_conns);
+	cv[12].destination = &(srv->srvconf.max_request_size);
+	srv->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	assert(srv->config_storage);
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		specific_config *s;
+
+		s = calloc(1, sizeof(specific_config));
+		assert(s);
+		s->document_root = buffer_init();
+		s->mimetypes     = array_init();
+		s->server_name   = buffer_init();
+		s->ssl_pemfile   = buffer_init();
+		s->ssl_ca_file   = buffer_init();
+		s->error_handler = buffer_init();
+		s->server_tag    = buffer_init();
+		s->ssl_cipher_list = buffer_init();
+		s->errorfile_prefix = buffer_init();
+		s->max_keep_alive_requests = 16;
+		s->max_keep_alive_idle = 5;
+		s->max_read_idle = 60;
+		s->max_write_idle = 360;
+		s->use_xattr     = 0;
+		s->is_ssl        = 0;
+		s->ssl_use_sslv2 = 1;
+		s->use_ipv6      = 0;
+#ifdef HAVE_LSTAT
+		s->follow_symlink = 1;
+#endif
+		s->kbytes_per_second = 0;
+		s->allow_http11  = 1;
+		s->etag_use_inode = 1;
+		s->etag_use_mtime = 1;
+		s->etag_use_size  = 1;
+		s->range_requests = 1;
+		s->force_lowercase_filenames = 0;
+		s->global_kbytes_per_second = 0;
+		s->global_bytes_per_second_cnt = 0;
+		s->global_bytes_per_second_cnt_ptr = &s->global_bytes_per_second_cnt;
+
+		cv[2].destination = s->errorfile_prefix;
+
+		cv[7].destination = s->server_tag;
+		cv[8].destination = &(s->use_ipv6);
+
+
+		/* 13 max-worker */
+		cv[14].destination = s->document_root;
+		cv[15].destination = &(s->force_lowercase_filenames);
+		cv[16].destination = &(s->log_condition_handling);
+		cv[17].destination = &(s->max_keep_alive_requests);
+		cv[18].destination = s->server_name;
+		cv[19].destination = &(s->max_keep_alive_idle);
+		cv[20].destination = &(s->max_read_idle);
+		cv[21].destination = &(s->max_write_idle);
+		cv[22].destination = s->error_handler;
+#ifdef HAVE_LSTAT
+		cv[24].destination = &(s->follow_symlink);
+#endif
+		/* 23 -> max-fds */
+		cv[25].destination = &(s->global_kbytes_per_second);
+		cv[26].destination = &(s->kbytes_per_second);
+		cv[27].destination = &(s->use_xattr);
+		cv[28].destination = s->mimetypes;
+		cv[29].destination = s->ssl_pemfile;
+		cv[30].destination = &(s->is_ssl);
+
+		cv[31].destination = &(s->log_file_not_found);
+		cv[32].destination = &(s->log_request_handling);
+		cv[33].destination = &(s->log_response_header);
+		cv[34].destination = &(s->log_request_header);
+
+		cv[35].destination = &(s->allow_http11);
+		cv[38].destination = s->ssl_ca_file;
+		cv[40].destination = &(s->range_requests);
+
+		cv[46].destination = s->ssl_cipher_list;
+		cv[47].destination = &(s->ssl_use_sslv2);
+		cv[48].destination = &(s->etag_use_inode);
+		cv[49].destination = &(s->etag_use_mtime);
+		cv[50].destination = &(s->etag_use_size);
+
+		srv->config_storage[i] = s;
+
+		if (0 != (ret = config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv))) {
+			break;
+		}
+	}
+
+	if (buffer_is_empty(stat_cache_string)) {
+		srv->srvconf.stat_cache_engine = STAT_CACHE_ENGINE_SIMPLE;
+	} else if (buffer_is_equal_string(stat_cache_string, CONST_STR_LEN("simple"))) {
+		srv->srvconf.stat_cache_engine = STAT_CACHE_ENGINE_SIMPLE;
+#ifdef HAVE_FAM_H
+	} else if (buffer_is_equal_string(stat_cache_string, CONST_STR_LEN("fam"))) {
+		srv->srvconf.stat_cache_engine = STAT_CACHE_ENGINE_FAM;
+#endif
+	} else if (buffer_is_equal_string(stat_cache_string, CONST_STR_LEN("disable"))) {
+		srv->srvconf.stat_cache_engine = STAT_CACHE_ENGINE_NONE;
+	} else {
+		log_error_write(srv, __FILE__, __LINE__, "sb",
+				"server.stat-cache-engine can be one of \"disable\", \"simple\","
+#ifdef HAVE_FAM_H
+				" \"fam\","
+#endif
+				" but not:", stat_cache_string);
+		ret = HANDLER_ERROR;
+	}
+
+	buffer_free(stat_cache_string);
+
+	return ret;
+
+}
+
+
+#define PATCH(x) con->conf.x = s->x
+int config_setup_connection(server *srv, connection *con) {
+	specific_config *s = srv->config_storage[0];
+
+	PATCH(allow_http11);
+	PATCH(mimetypes);
+	PATCH(document_root);
+	PATCH(max_keep_alive_requests);
+	PATCH(max_keep_alive_idle);
+	PATCH(max_read_idle);
+	PATCH(max_write_idle);
+	PATCH(use_xattr);
+	PATCH(error_handler);
+	PATCH(errorfile_prefix);
+#ifdef HAVE_LSTAT
+	PATCH(follow_symlink);
+#endif
+	PATCH(server_tag);
+	PATCH(kbytes_per_second);
+	PATCH(global_kbytes_per_second);
+	PATCH(global_bytes_per_second_cnt);
+
+	con->conf.global_bytes_per_second_cnt_ptr = &s->global_bytes_per_second_cnt;
+	buffer_copy_string_buffer(con->server_name, s->server_name);
+
+	PATCH(log_request_header);
+	PATCH(log_response_header);
+	PATCH(log_request_handling);
+	PATCH(log_condition_handling);
+	PATCH(log_file_not_found);
+
+	PATCH(range_requests);
+	PATCH(force_lowercase_filenames);
+	PATCH(is_ssl);
+
+	PATCH(ssl_pemfile);
+	PATCH(ssl_ca_file);
+	PATCH(ssl_cipher_list);
+	PATCH(ssl_use_sslv2);
+	PATCH(etag_use_inode);
+	PATCH(etag_use_mtime);
+	PATCH(etag_use_size);
+ 
+	return 0;
+}
+
+int config_patch_connection(server *srv, connection *con, comp_key_t comp) {
+	size_t i, j;
+
+	con->conditional_is_valid[comp] = 1;
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		specific_config *s = srv->config_storage[i];
+
+		/* not our stage */
+		if (comp != dc->comp) continue;
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.document-root"))) {
+				PATCH(document_root);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.range-requests"))) {
+				PATCH(range_requests);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.error-handler-404"))) {
+				PATCH(error_handler);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.errorfile-prefix"))) {
+				PATCH(errorfile_prefix);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("mimetype.assign"))) {
+				PATCH(mimetypes);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.max-keep-alive-requests"))) {
+				PATCH(max_keep_alive_requests);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.max-keep-alive-idle"))) {
+				PATCH(max_keep_alive_idle);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.max-write-idle"))) {
+				PATCH(max_write_idle);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.max-read-idle"))) {
+				PATCH(max_read_idle);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("mimetype.use-xattr"))) {
+				PATCH(use_xattr);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("etag.use-inode"))) {
+				PATCH(etag_use_inode);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("etag.use-mtime"))) {
+				PATCH(etag_use_mtime);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("etag.use-size"))) {
+				PATCH(etag_use_size);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.pemfile"))) {
+				PATCH(ssl_pemfile);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.ca-file"))) {
+				PATCH(ssl_ca_file);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.use-sslv2"))) {
+				PATCH(ssl_use_sslv2);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.cipher-list"))) {
+				PATCH(ssl_cipher_list);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssl.engine"))) {
+				PATCH(is_ssl);
+#ifdef HAVE_LSTAT
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.follow-symlink"))) {
+				PATCH(follow_symlink);
+#endif
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.name"))) {
+				buffer_copy_string_buffer(con->server_name, s->server_name);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.tag"))) {
+				PATCH(server_tag);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("connection.kbytes-per-second"))) {
+				PATCH(kbytes_per_second);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("debug.log-request-handling"))) {
+				PATCH(log_request_handling);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("debug.log-request-header"))) {
+				PATCH(log_request_header);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("debug.log-response-header"))) {
+				PATCH(log_response_header);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("debug.log-condition-handling"))) {
+				PATCH(log_condition_handling);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("debug.log-file-not-found"))) {
+				PATCH(log_file_not_found);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.protocol-http11"))) {
+				PATCH(allow_http11);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.force-lowercase-filenames"))) {
+				PATCH(force_lowercase_filenames);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.kbytes-per-second"))) {
+				PATCH(global_kbytes_per_second);
+				PATCH(global_bytes_per_second_cnt);
+				con->conf.global_bytes_per_second_cnt_ptr = &s->global_bytes_per_second_cnt;
+			}
+		}
+	}
+
+		con->etag_flags = (con->conf.etag_use_mtime ? ETAG_USE_MTIME : 0) |
+				  (con->conf.etag_use_inode ? ETAG_USE_INODE : 0) |
+				  (con->conf.etag_use_size  ? ETAG_USE_SIZE  : 0);
+
+	return 0;
+}
+#undef PATCH
+
+typedef struct {
+	int foo;
+	int bar;
+
+	const buffer *source;
+	const char *input;
+	size_t offset;
+	size_t size;
+
+	int line_pos;
+	int line;
+
+	int in_key;
+	int in_brace;
+	int in_cond;
+} tokenizer_t;
+
+#if 0
+static int tokenizer_open(server *srv, tokenizer_t *t, buffer *basedir, const char *fn) {
+	if (buffer_is_empty(basedir) &&
+			(fn[0] == '/' || fn[0] == '\\') &&
+			(fn[0] == '.' && (fn[1] == '/' || fn[1] == '\\'))) {
+		t->file = buffer_init_string(fn);
+	} else {
+		t->file = buffer_init_buffer(basedir);
+		buffer_append_string(t->file, fn);
+	}
+
+	if (0 != stream_open(&(t->s), t->file)) {
+		log_error_write(srv, __FILE__, __LINE__, "sbss",
+				"opening configfile ", t->file, "failed:", strerror(errno));
+		buffer_free(t->file);
+		return -1;
+	}
+
+	t->input = t->s.start;
+	t->offset = 0;
+	t->size = t->s.size;
+	t->line = 1;
+	t->line_pos = 1;
+
+	t->in_key = 1;
+	t->in_brace = 0;
+	t->in_cond = 0;
+	return 0;
+}
+
+static int tokenizer_close(server *srv, tokenizer_t *t) {
+	UNUSED(srv);
+
+	buffer_free(t->file);
+	return stream_close(&(t->s));
+}
+#endif
+static int config_skip_newline(tokenizer_t *t) {
+	int skipped = 1;
+	assert(t->input[t->offset] == '\r' || t->input[t->offset] == '\n');
+	if (t->input[t->offset] == '\r' && t->input[t->offset + 1] == '\n') {
+		skipped ++;
+		t->offset ++;
+	}
+	t->offset ++;
+	return skipped;
+}
+
+static int config_skip_comment(tokenizer_t *t) {
+	int i;
+	assert(t->input[t->offset] == '#');
+	for (i = 1; t->input[t->offset + i] &&
+	     (t->input[t->offset + i] != '\n' && t->input[t->offset + i] != '\r');
+	     i++);
+	t->offset += i;
+	return i;
+}
+
+static int config_tokenizer(server *srv, tokenizer_t *t, int *token_id, buffer *token) {
+	int tid = 0;
+	size_t i;
+
+	for (tid = 0; tid == 0 && t->offset < t->size && t->input[t->offset] ; ) {
+		char c = t->input[t->offset];
+		const char *start = NULL;
+
+		switch (c) {
+		case '=':
+			if (t->in_brace) {
+				if (t->input[t->offset + 1] == '>') {
+					t->offset += 2;
+
+					buffer_copy_string(token, "=>");
+
+					tid = TK_ARRAY_ASSIGN;
+				} else {
+					log_error_write(srv, __FILE__, __LINE__, "sbsdsds",
+							"source:", t->source,
+							"line:", t->line, "pos:", t->line_pos,
+							"use => for assignments in arrays");
+					return -1;
+				}
+			} else if (t->in_cond) {
+				if (t->input[t->offset + 1] == '=') {
+					t->offset += 2;
+
+					buffer_copy_string(token, "==");
+
+					tid = TK_EQ;
+				} else if (t->input[t->offset + 1] == '~') {
+					t->offset += 2;
+
+					buffer_copy_string(token, "=~");
+
+					tid = TK_MATCH;
+				} else {
+					log_error_write(srv, __FILE__, __LINE__, "sbsdsds",
+							"source:", t->source,
+							"line:", t->line, "pos:", t->line_pos,
+							"only =~ and == are allowed in the condition");
+					return -1;
+				}
+				t->in_key = 1;
+				t->in_cond = 0;
+			} else if (t->in_key) {
+				tid = TK_ASSIGN;
+
+				buffer_copy_string_len(token, t->input + t->offset, 1);
+
+				t->offset++;
+				t->line_pos++;
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sbsdsds",
+						"source:", t->source,
+						"line:", t->line, "pos:", t->line_pos,
+						"unexpected equal-sign: =");
+				return -1;
+			}
+
+			break;
+		case '!':
+			if (t->in_cond) {
+				if (t->input[t->offset + 1] == '=') {
+					t->offset += 2;
+
+					buffer_copy_string(token, "!=");
+
+					tid = TK_NE;
+				} else if (t->input[t->offset + 1] == '~') {
+					t->offset += 2;
+
+					buffer_copy_string(token, "!~");
+
+					tid = TK_NOMATCH;
+				} else {
+					log_error_write(srv, __FILE__, __LINE__, "sbsdsds",
+							"source:", t->source,
+							"line:", t->line, "pos:", t->line_pos,
+							"only !~ and != are allowed in the condition");
+					return -1;
+				}
+				t->in_key = 1;
+				t->in_cond = 0;
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sbsdsds",
+						"source:", t->source,
+						"line:", t->line, "pos:", t->line_pos,
+						"unexpected exclamation-marks: !");
+				return -1;
+			}
+
+			break;
+		case '\t':
+		case ' ':
+			t->offset++;
+			t->line_pos++;
+			break;
+		case '\n':
+		case '\r':
+			if (t->in_brace == 0) {
+				int done = 0;
+				while (!done && t->offset < t->size) {
+					switch (t->input[t->offset]) {
+					case '\r':
+					case '\n':
+						config_skip_newline(t);
+						t->line_pos = 1;
+						t->line++;
+						break;
+
+					case '#':
+						t->line_pos += config_skip_comment(t);
+						break;
+
+					case '\t':
+					case ' ':
+						t->offset++;
+						t->line_pos++;
+						break;
+
+					default:
+						done = 1;
+					}
+				}
+				t->in_key = 1;
+				tid = TK_EOL;
+				buffer_copy_string(token, "(EOL)");
+			} else {
+				config_skip_newline(t);
+				t->line_pos = 1;
+				t->line++;
+			}
+			break;
+		case ',':
+			if (t->in_brace > 0) {
+				tid = TK_COMMA;
+
+				buffer_copy_string(token, "(COMMA)");
+			}
+
+			t->offset++;
+			t->line_pos++;
+			break;
+		case '"':
+			/* search for the terminating " */
+			start = t->input + t->offset + 1;
+			buffer_copy_string(token, "");
+
+			for (i = 1; t->input[t->offset + i]; i++) {
+				if (t->input[t->offset + i] == '\\' &&
+				    t->input[t->offset + i + 1] == '"') {
+
+					buffer_append_string_len(token, start, t->input + t->offset + i - start);
+
+					start = t->input + t->offset + i + 1;
+
+					/* skip the " */
+					i++;
+					continue;
+				}
+
+
+				if (t->input[t->offset + i] == '"') {
+					tid = TK_STRING;
+
+					buffer_append_string_len(token, start, t->input + t->offset + i - start);
+
+					break;
+				}
+			}
+
+			if (t->input[t->offset + i] == '\0') {
+				/* ERROR */
+
+				log_error_write(srv, __FILE__, __LINE__, "sbsdsds",
+						"source:", t->source,
+						"line:", t->line, "pos:", t->line_pos,
+						"missing closing quote");
+
+				return -1;
+			}
+
+			t->offset += i + 1;
+			t->line_pos += i + 1;
+
+			break;
+		case '(':
+			t->offset++;
+			t->in_brace++;
+
+			tid = TK_LPARAN;
+
+			buffer_copy_string(token, "(");
+			break;
+		case ')':
+			t->offset++;
+			t->in_brace--;
+
+			tid = TK_RPARAN;
+
+			buffer_copy_string(token, ")");
+			break;
+		case '$':
+			t->offset++;
+
+			tid = TK_DOLLAR;
+			t->in_cond = 1;
+			t->in_key = 0;
+
+			buffer_copy_string(token, "$");
+
+			break;
+
+		case '+':
+			if (t->input[t->offset + 1] == '=') {
+				t->offset += 2;
+				buffer_copy_string(token, "+=");
+				tid = TK_APPEND;
+			} else {
+				t->offset++;
+				tid = TK_PLUS;
+				buffer_copy_string(token, "+");
+			}
+			break;
+
+		case '{':
+			t->offset++;
+
+			tid = TK_LCURLY;
+
+			buffer_copy_string(token, "{");
+
+			break;
+
+		case '}':
+			t->offset++;
+
+			tid = TK_RCURLY;
+
+			buffer_copy_string(token, "}");
+
+			break;
+
+		case '[':
+			t->offset++;
+
+			tid = TK_LBRACKET;
+
+			buffer_copy_string(token, "[");
+
+			break;
+
+		case ']':
+			t->offset++;
+
+			tid = TK_RBRACKET;
+
+			buffer_copy_string(token, "]");
+
+			break;
+		case '#':
+			t->line_pos += config_skip_comment(t);
+
+			break;
+		default:
+			if (t->in_cond) {
+				for (i = 0; t->input[t->offset + i] &&
+				     (isalpha((unsigned char)t->input[t->offset + i])
+				      ); i++);
+
+				if (i && t->input[t->offset + i]) {
+					tid = TK_SRVVARNAME;
+					buffer_copy_string_len(token, t->input + t->offset, i);
+
+					t->offset += i;
+					t->line_pos += i;
+				} else {
+					/* ERROR */
+					log_error_write(srv, __FILE__, __LINE__, "sbsdsds",
+							"source:", t->source,
+							"line:", t->line, "pos:", t->line_pos,
+							"invalid character in condition");
+					return -1;
+				}
+			} else if (isdigit((unsigned char)c)) {
+				/* take all digits */
+				for (i = 0; t->input[t->offset + i] && isdigit((unsigned char)t->input[t->offset + i]);  i++);
+
+				/* was there it least a digit ? */
+				if (i) {
+					tid = TK_INTEGER;
+
+					buffer_copy_string_len(token, t->input + t->offset, i);
+
+					t->offset += i;
+					t->line_pos += i;
+				}
+			} else {
+				/* the key might consist of [-.0-9a-z] */
+				for (i = 0; t->input[t->offset + i] &&
+				     (isalnum((unsigned char)t->input[t->offset + i]) ||
+				      t->input[t->offset + i] == '.' ||
+				      t->input[t->offset + i] == '_' || /* for env.* */
+				      t->input[t->offset + i] == '-'
+				      ); i++);
+
+				if (i && t->input[t->offset + i]) {
+					buffer_copy_string_len(token, t->input + t->offset, i);
+
+					if (strcmp(token->ptr, "include") == 0) {
+						tid = TK_INCLUDE;
+					} else if (strcmp(token->ptr, "include_shell") == 0) {
+						tid = TK_INCLUDE_SHELL;
+					} else if (strcmp(token->ptr, "global") == 0) {
+						tid = TK_GLOBAL;
+					} else if (strcmp(token->ptr, "else") == 0) {
+						tid = TK_ELSE;
+					} else {
+						tid = TK_LKEY;
+					}
+
+					t->offset += i;
+					t->line_pos += i;
+				} else {
+					/* ERROR */
+					log_error_write(srv, __FILE__, __LINE__, "sbsdsds",
+							"source:", t->source,
+							"line:", t->line, "pos:", t->line_pos,
+							"invalid character in variable name");
+					return -1;
+				}
+			}
+			break;
+		}
+	}
+
+	if (tid) {
+		*token_id = tid;
+#if 0
+		log_error_write(srv, __FILE__, __LINE__, "sbsdsdbdd",
+				"source:", t->source,
+				"line:", t->line, "pos:", t->line_pos,
+				token, token->used - 1, tid);
+#endif
+
+		return 1;
+	} else if (t->offset < t->size) {
+		fprintf(stderr, "%s.%d: %d, %s\n",
+			__FILE__, __LINE__,
+			tid, token->ptr);
+	}
+	return 0;
+}
+
+static int config_parse(server *srv, config_t *context, tokenizer_t *t) {
+	void *pParser;
+	int token_id;
+	buffer *token, *lasttoken;
+	int ret;
+
+	pParser = configparserAlloc( malloc );
+	lasttoken = buffer_init();
+	token = buffer_init();
+	while((1 == (ret = config_tokenizer(srv, t, &token_id, token))) && context->ok) {
+		buffer_copy_string_buffer(lasttoken, token);
+		configparser(pParser, token_id, token, context);
+
+		token = buffer_init();
+	}
+	buffer_free(token);
+
+	if (ret != -1 && context->ok) {
+		/* add an EOL at EOF, better than say sorry */
+		configparser(pParser, TK_EOL, buffer_init_string("(EOL)"), context);
+		if (context->ok) {
+			configparser(pParser, 0, NULL, context);
+		}
+	}
+	configparserFree(pParser, free);
+
+	if (ret == -1) {
+		log_error_write(srv, __FILE__, __LINE__, "sb",
+				"configfile parser failed at:", lasttoken);
+	} else if (context->ok == 0) {
+		log_error_write(srv, __FILE__, __LINE__, "sbsdsdsb",
+				"source:", t->source,
+				"line:", t->line, "pos:", t->line_pos,
+				"parser failed somehow near here:", lasttoken);
+		ret = -1;
+	}
+	buffer_free(lasttoken);
+
+	return ret == -1 ? -1 : 0;
+}
+
+static int tokenizer_init(tokenizer_t *t, const buffer *source, const char *input, size_t size) {
+
+	t->source = source;
+	t->input = input;
+	t->size = size;
+	t->offset = 0;
+	t->line = 1;
+	t->line_pos = 1;
+
+	t->in_key = 1;
+	t->in_brace = 0;
+	t->in_cond = 0;
+	return 0;
+}
+
+int config_parse_file(server *srv, config_t *context, const char *fn) {
+	tokenizer_t t;
+	stream s;
+	int ret;
+	buffer *filename;
+
+	if (buffer_is_empty(context->basedir) &&
+			(fn[0] == '/' || fn[0] == '\\') &&
+			(fn[0] == '.' && (fn[1] == '/' || fn[1] == '\\'))) {
+		filename = buffer_init_string(fn);
+	} else {
+		filename = buffer_init_buffer(context->basedir);
+		buffer_append_string(filename, fn);
+	}
+
+	if (0 != stream_open(&s, filename)) {
+		if (s.size == 0) {
+			/* the file was empty, nothing to parse */
+			ret = 0;
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sbss",
+					"opening configfile ", filename, "failed:", strerror(errno));
+			ret = -1;
+		} 
+	} else {
+		tokenizer_init(&t, filename, s.start, s.size);
+		ret = config_parse(srv, context, &t);
+	}
+
+	stream_close(&s);
+	buffer_free(filename);
+	return ret;
+}
+
+int config_parse_cmd(server *srv, config_t *context, const char *cmd) {
+	proc_handler_t proc;
+	tokenizer_t t;
+	int ret;
+	buffer *source;
+	buffer *out;
+	char oldpwd[PATH_MAX];
+
+	if (NULL == getcwd(oldpwd, sizeof(oldpwd))) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"cannot get cwd", strerror(errno));
+		return -1;
+	}
+
+	source = buffer_init_string(cmd);
+	out = buffer_init();
+
+	if (!buffer_is_empty(context->basedir)) {
+		chdir(context->basedir->ptr);
+	}
+
+	if (0 != proc_open_buffer(&proc, cmd, NULL, out, NULL)) {
+		log_error_write(srv, __FILE__, __LINE__, "sbss",
+				"opening", source, "failed:", strerror(errno));
+		ret = -1;
+	} else {
+		tokenizer_init(&t, source, out->ptr, out->used);
+		ret = config_parse(srv, context, &t);
+	}
+
+	buffer_free(source);
+	buffer_free(out);
+	chdir(oldpwd);
+	return ret;
+}
+
+static void context_init(server *srv, config_t *context) {
+	context->srv = srv;
+	context->ok = 1;
+	context->configs_stack = array_init();
+	context->configs_stack->is_weakref = 1;
+	context->basedir = buffer_init();
+}
+
+static void context_free(config_t *context) {
+	array_free(context->configs_stack);
+	buffer_free(context->basedir);
+}
+
+int config_read(server *srv, const char *fn) {
+	config_t context;
+	data_config *dc;
+	data_integer *dpid;
+	data_string *dcwd;
+	int ret;
+	char *pos;
+	data_array *modules;
+
+	context_init(srv, &context);
+	context.all_configs = srv->config_context;
+
+	pos = strrchr(fn,
+#ifdef __WIN32
+			'\\'
+#else
+			'/'
+#endif
+			);
+	if (pos) {
+		buffer_copy_string_len(context.basedir, fn, pos - fn + 1);
+		fn = pos + 1;
+	}
+
+	dc = data_config_init();
+	buffer_copy_string(dc->key, "global");
+
+	assert(context.all_configs->used == 0);
+	dc->context_ndx = context.all_configs->used;
+	array_insert_unique(context.all_configs, (data_unset *)dc);
+	context.current = dc;
+
+	/* default context */
+	srv->config = dc->value;
+	dpid = data_integer_init();
+	dpid->value = getpid();
+	buffer_copy_string(dpid->key, "var.PID");
+	array_insert_unique(srv->config, (data_unset *)dpid);
+
+	dcwd = data_string_init();
+	buffer_prepare_copy(dcwd->value, 1024);
+	if (NULL != getcwd(dcwd->value->ptr, dcwd->value->size - 1)) {
+		dcwd->value->used = strlen(dcwd->value->ptr) + 1;
+		buffer_copy_string(dcwd->key, "var.CWD");
+		array_insert_unique(srv->config, (data_unset *)dcwd);
+	}
+
+	ret = config_parse_file(srv, &context, fn);
+
+	/* remains nothing if parser is ok */
+	assert(!(0 == ret && context.ok && 0 != context.configs_stack->used));
+	context_free(&context);
+
+	if (0 != ret) {
+		return ret;
+	}
+
+	if (NULL != (dc = (data_config *)array_get_element(srv->config_context, "global"))) {
+		srv->config = dc->value;
+	} else {
+		return -1;
+	}
+
+	if (NULL != (modules = (data_array *)array_get_element(srv->config, "server.modules"))) {
+		data_string *ds;
+		data_array *prepends;
+
+		if (modules->type != TYPE_ARRAY) {
+			fprintf(stderr, "server.modules must be an array");
+			return -1;
+		}
+
+		prepends = data_array_init();
+
+		/* prepend default modules */
+		if (NULL == array_get_element(modules->value, "mod_indexfile")) {
+			ds = data_string_init();
+			buffer_copy_string(ds->value, "mod_indexfile");
+			array_insert_unique(prepends->value, (data_unset *)ds);
+		}
+
+		prepends = (data_array *)configparser_merge_data((data_unset *)prepends, (data_unset *)modules);
+		buffer_copy_string_buffer(prepends->key, modules->key);
+		array_replace(srv->config, (data_unset *)prepends);
+		modules->free((data_unset *)modules);
+		modules = prepends;
+
+		/* append default modules */
+		if (NULL == array_get_element(modules->value, "mod_dirlisting")) {
+			ds = data_string_init();
+			buffer_copy_string(ds->value, "mod_dirlisting");
+			array_insert_unique(modules->value, (data_unset *)ds);
+		}
+
+		if (NULL == array_get_element(modules->value, "mod_staticfile")) {
+			ds = data_string_init();
+			buffer_copy_string(ds->value, "mod_staticfile");
+			array_insert_unique(modules->value, (data_unset *)ds);
+		}
+	} else {
+		data_string *ds;
+
+		modules = data_array_init();
+
+		/* server.modules is not set */
+		ds = data_string_init();
+		buffer_copy_string(ds->value, "mod_indexfile");
+		array_insert_unique(modules->value, (data_unset *)ds);
+
+		ds = data_string_init();
+		buffer_copy_string(ds->value, "mod_dirlisting");
+		array_insert_unique(modules->value, (data_unset *)ds);
+
+		ds = data_string_init();
+		buffer_copy_string(ds->value, "mod_staticfile");
+		array_insert_unique(modules->value, (data_unset *)ds);
+
+		buffer_copy_string(modules->key, "server.modules");
+		array_insert_unique(srv->config, (data_unset *)modules);
+	}
+
+
+	if (0 != config_insert(srv)) {
+		return -1;
+	}
+
+	return 0;
+}
+
+int config_set_defaults(server *srv) {
+	size_t i;
+	specific_config *s = srv->config_storage[0];
+	struct stat st1, st2;
+
+	struct ev_map { fdevent_handler_t et; const char *name; } event_handlers[] =
+	{
+		/* - poll is most reliable
+		 * - select works everywhere
+		 * - linux-* are experimental
+		 */
+#ifdef USE_POLL
+		{ FDEVENT_HANDLER_POLL,           "poll" },
+#endif
+#ifdef USE_SELECT
+		{ FDEVENT_HANDLER_SELECT,         "select" },
+#endif
+#ifdef USE_LINUX_EPOLL
+		{ FDEVENT_HANDLER_LINUX_SYSEPOLL, "linux-sysepoll" },
+#endif
+#ifdef USE_LINUX_SIGIO
+		{ FDEVENT_HANDLER_LINUX_RTSIG,    "linux-rtsig" },
+#endif
+#ifdef USE_SOLARIS_DEVPOLL
+		{ FDEVENT_HANDLER_SOLARIS_DEVPOLL,"solaris-devpoll" },
+#endif
+#ifdef USE_FREEBSD_KQUEUE
+		{ FDEVENT_HANDLER_FREEBSD_KQUEUE, "freebsd-kqueue" },
+		{ FDEVENT_HANDLER_FREEBSD_KQUEUE, "kqueue" },
+#endif
+		{ FDEVENT_HANDLER_UNSET,          NULL }
+	};
+
+
+	if (buffer_is_empty(s->document_root)) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"a default document-root has to be set");
+
+		return -1;
+	}
+
+	if (buffer_is_empty(srv->srvconf.changeroot)) {
+		if (-1 == stat(s->document_root->ptr, &st1)) {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"base-docroot doesn't exist:",
+					s->document_root);
+			return -1;
+		}
+
+	} else {
+		buffer_copy_string_buffer(srv->tmp_buf, srv->srvconf.changeroot);
+		buffer_append_string_buffer(srv->tmp_buf, s->document_root);
+
+		if (-1 == stat(srv->tmp_buf->ptr, &st1)) {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"base-docroot doesn't exist:",
+					srv->tmp_buf);
+			return -1;
+		}
+
+	}
+
+	buffer_copy_string_buffer(srv->tmp_buf, s->document_root);
+
+	buffer_to_lower(srv->tmp_buf);
+
+	if (0 == stat(srv->tmp_buf->ptr, &st1)) {
+		int is_lower = 0;
+
+		is_lower = buffer_is_equal(srv->tmp_buf, s->document_root);
+
+		/* lower-case existed, check upper-case */
+		buffer_copy_string_buffer(srv->tmp_buf, s->document_root);
+
+		buffer_to_upper(srv->tmp_buf);
+
+		/* we have to handle the special case that upper and lower-casing results in the same filename
+		 * as in server.document-root = "/" or "/12345/" */
+
+		if (is_lower && buffer_is_equal(srv->tmp_buf, s->document_root)) {
+			/* lower-casing and upper-casing didn't result in
+			 * an other filename, no need to stat(),
+			 * just assume it is case-sensitive. */
+
+			s->force_lowercase_filenames = 0;
+		} else if (0 == stat(srv->tmp_buf->ptr, &st2)) {
+
+			/* upper case exists too, doesn't the FS handle this ? */
+
+			/* upper and lower have the same inode -> case-insensitve FS */
+
+			if (st1.st_ino == st2.st_ino) {
+				/* upper and lower have the same inode -> case-insensitve FS */
+
+				s->force_lowercase_filenames = 1;
+			}
+		}
+	}
+
+	if (srv->srvconf.port == 0) {
+		srv->srvconf.port = s->is_ssl ? 443 : 80;
+	}
+
+	if (srv->srvconf.event_handler->used == 0) {
+		/* choose a good default
+		 *
+		 * the event_handler list is sorted by 'goodness'
+		 * taking the first available should be the best solution
+		 */
+		srv->event_handler = event_handlers[0].et;
+
+		if (FDEVENT_HANDLER_UNSET == srv->event_handler) {
+			log_error_write(srv, __FILE__, __LINE__, "s",
+					"sorry, there is no event handler for this system");
+
+			return -1;
+		}
+	} else {
+		/*
+		 * User override
+		 */
+
+		for (i = 0; event_handlers[i].name; i++) {
+			if (0 == strcmp(event_handlers[i].name, srv->srvconf.event_handler->ptr)) {
+				srv->event_handler = event_handlers[i].et;
+				break;
+			}
+		}
+
+		if (FDEVENT_HANDLER_UNSET == srv->event_handler) {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"the selected event-handler in unknown or not supported:",
+					srv->srvconf.event_handler );
+
+			return -1;
+		}
+	}
+
+	if (s->is_ssl) {
+		if (buffer_is_empty(s->ssl_pemfile)) {
+			/* PEM file is require */
+
+			log_error_write(srv, __FILE__, __LINE__, "s",
+					"ssl.pemfile has to be set");
+			return -1;
+		}
+
+#ifndef USE_OPENSSL
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"ssl support is missing, recompile with --with-openssl");
+
+		return -1;
+#endif
+	}
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/configfile.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/configfile.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/configfile.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,30 @@
+#ifndef _CONFIG_PARSER_H_
+#define _CONFIG_PARSER_H_
+
+#include "array.h"
+#include "buffer.h"
+#include "server.h"
+
+typedef struct {
+	server *srv;
+	int     ok;
+	array  *all_configs;
+	array  *configs_stack; /* to parse nested block */
+	data_config *current; /* current started with { */
+	buffer *basedir;
+} config_t;
+
+void *configparserAlloc(void *(*mallocProc)(size_t));
+void configparserFree(void *p, void (*freeProc)(void*));
+void configparser(void *yyp, int yymajor, buffer *yyminor, config_t *ctx);
+int config_parse_file(server *srv, config_t *context, const char *fn);
+int config_parse_cmd(server *srv, config_t *context, const char *cmd);
+data_unset *configparser_merge_data(data_unset *op1, const data_unset *op2);
+
+void config_cond_cache_reset(server *srv, connection *con);
+void config_cond_cache_reset_item(server *srv, connection *con, comp_key_t item);
+
+#define config_cond_cache_reset_all_items(srv, con) \
+	config_cond_cache_reset_item(srv, con, COMP_LAST_ELEMENT);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/configparser.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/configparser.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/configparser.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1597 @@
+/* Driver template for the LEMON parser generator.
+** The author disclaims copyright to this source code.
+*/
+/* First off, code is include which follows the "include" declaration
+** in the input file. */
+#include <stdio.h>
+#line 5 "./configparser.y"
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "configfile.h"
+#include "buffer.h"
+#include "array.h"
+
+static void configparser_push(config_t *ctx, data_config *dc, int isnew) {
+  if (isnew) {
+    dc->context_ndx = ctx->all_configs->used;
+    assert(dc->context_ndx > ctx->current->context_ndx);
+    array_insert_unique(ctx->all_configs, (data_unset *)dc);
+    dc->parent = ctx->current;
+    array_insert_unique(dc->parent->childs, (data_unset *)dc);
+  }
+  array_insert_unique(ctx->configs_stack, (data_unset *)ctx->current);
+  ctx->current = dc;
+}
+
+static data_config *configparser_pop(config_t *ctx) {
+  data_config *old = ctx->current;
+  ctx->current = (data_config *) array_pop(ctx->configs_stack);
+  return old;
+}
+
+/* return a copied variable */
+static data_unset *configparser_get_variable(config_t *ctx, const buffer *key) {
+  data_unset *du;
+  data_config *dc;
+
+#if 0
+  fprintf(stderr, "get var %s\n", key->ptr);
+#endif
+  for (dc = ctx->current; dc; dc = dc->parent) {
+#if 0
+    fprintf(stderr, "get var on block: %s\n", dc->key->ptr);
+    array_print(dc->value, 0);
+#endif
+    if (NULL != (du = array_get_element(dc->value, key->ptr))) {
+      return du->copy(du);
+    }
+  }
+  return NULL;
+}
+
+/* op1 is to be eat/return by this function if success, op1->key is not cared
+   op2 is left untouch, unreferenced
+ */
+data_unset *configparser_merge_data(data_unset *op1, const data_unset *op2) {
+  /* type mismatch */
+  if (op1->type != op2->type) {
+    if (op1->type == TYPE_STRING && op2->type == TYPE_INTEGER) {
+      data_string *ds = (data_string *)op1;
+      buffer_append_long(ds->value, ((data_integer*)op2)->value);
+      return op1;
+    } else if (op1->type == TYPE_INTEGER && op2->type == TYPE_STRING) {
+      data_string *ds = data_string_init();
+      buffer_append_long(ds->value, ((data_integer*)op1)->value);
+      buffer_append_string_buffer(ds->value, ((data_string*)op2)->value);
+      op1->free(op1);
+      return (data_unset *)ds;
+    } else {
+      fprintf(stderr, "data type mismatch, cannot be merge\n");
+      return NULL;
+    }
+  }
+
+  switch (op1->type) {
+    case TYPE_STRING:
+      buffer_append_string_buffer(((data_string *)op1)->value, ((data_string *)op2)->value);
+      break;
+    case TYPE_INTEGER:
+      ((data_integer *)op1)->value += ((data_integer *)op2)->value;
+      break;
+    case TYPE_ARRAY: {
+      array *dst = ((data_array *)op1)->value;
+      array *src = ((data_array *)op2)->value;
+      data_unset *du;
+      size_t i;
+
+      for (i = 0; i < src->used; i ++) {
+        du = (data_unset *)src->data[i];
+        if (du) {
+          array_insert_unique(dst, du->copy(du));
+        }
+      }
+      break;
+    default:
+      assert(0);
+      break;
+    }
+  }
+  return op1;
+}
+
+
+#line 109 "configparser.c"
+/* Next is all token values, in a form suitable for use by makeheaders.
+** This section will be null unless lemon is run with the -m switch.
+*/
+/*
+** These constants (all generated automatically by the parser generator)
+** specify the various kinds of tokens (terminals) that the parser
+** understands.
+**
+** Each symbol here is a terminal symbol in the grammar.
+*/
+/* Make sure the INTERFACE macro is defined.
+*/
+#ifndef INTERFACE
+# define INTERFACE 1
+#endif
+/* The next thing included is series of defines which control
+** various aspects of the generated parser.
+**    YYCODETYPE         is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 terminals
+**                       and nonterminals.  "int" is used otherwise.
+**    YYNOCODE           is a number of type YYCODETYPE which corresponds
+**                       to no legal terminal or nonterminal number.  This
+**                       number is used to fill in empty slots of the hash
+**                       table.
+**    YYFALLBACK         If defined, this indicates that one or more tokens
+**                       have fall-back values which should be used if the
+**                       original value of the token will not parse.
+**    YYACTIONTYPE       is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 rules and
+**                       states combined.  "int" is used otherwise.
+**    configparserTOKENTYPE     is the data type used for minor tokens given
+**                       directly to the parser from the tokenizer.
+**    YYMINORTYPE        is the data type used for all minor tokens.
+**                       This is typically a union of many types, one of
+**                       which is configparserTOKENTYPE.  The entry in the union
+**                       for base tokens is called "yy0".
+**    YYSTACKDEPTH       is the maximum depth of the parser's stack.
+**    configparserARG_SDECL     A static variable declaration for the %extra_argument
+**    configparserARG_PDECL     A parameter declaration for the %extra_argument
+**    configparserARG_STORE     Code to store %extra_argument into yypParser
+**    configparserARG_FETCH     Code to extract %extra_argument from yypParser
+**    YYNSTATE           the combined number of states.
+**    YYNRULE            the number of rules in the grammar
+**    YYERRORSYMBOL      is the code number of the error symbol.  If not
+**                       defined, then do no error processing.
+*/
+/*  */
+#define YYCODETYPE unsigned char
+#define YYNOCODE 48
+#define YYACTIONTYPE unsigned char
+#define configparserTOKENTYPE buffer *
+typedef union {
+  configparserTOKENTYPE yy0;
+  config_cond_t yy27;
+  array * yy40;
+  data_unset * yy41;
+  buffer * yy43;
+  data_config * yy78;
+  int yy95;
+} YYMINORTYPE;
+#define YYSTACKDEPTH 100
+#define configparserARG_SDECL config_t *ctx;
+#define configparserARG_PDECL ,config_t *ctx
+#define configparserARG_FETCH config_t *ctx = yypParser->ctx
+#define configparserARG_STORE yypParser->ctx = ctx
+#define YYNSTATE 63
+#define YYNRULE 40
+#define YYERRORSYMBOL 26
+#define YYERRSYMDT yy95
+#define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
+#define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
+#define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
+
+/* Next are that tables used to determine what action to take based on the
+** current state and lookahead token.  These tables are used to implement
+** functions that take a state number and lookahead value and return an
+** action integer.
+**
+** Suppose the action integer is N.  Then the action is determined as
+** follows
+**
+**   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
+**                                      token onto the stack and goto state N.
+**
+**   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
+**
+**   N == YYNSTATE+YYNRULE              A syntax error has occurred.
+**
+**   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
+**
+**   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
+**                                      slots in the yy_action[] table.
+**
+** The action table is constructed as a single large table named yy_action[].
+** Given state S and lookahead X, the action is computed as
+**
+**      yy_action[ yy_shift_ofst[S] + X ]
+**
+** If the index value yy_shift_ofst[S]+X is out of range or if the value
+** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
+** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
+** and that yy_default[S] should be used instead.
+**
+** The formula above is for computing the action when the lookahead is
+** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
+** a reduce action) then the yy_reduce_ofst[] array is used in place of
+** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
+** YY_SHIFT_USE_DFLT.
+**
+** The following are the tables generated in this section:
+**
+**  yy_action[]        A single table containing all actions.
+**  yy_lookahead[]     A table containing the lookahead for each entry in
+**                     yy_action.  Used to detect hash collisions.
+**  yy_shift_ofst[]    For each state, the offset into yy_action for
+**                     shifting terminals.
+**  yy_reduce_ofst[]   For each state, the offset into yy_action for
+**                     shifting non-terminals after a reduce.
+**  yy_default[]       Default action for each state.
+*/
+static YYACTIONTYPE yy_action[] = {
+ /*     0 */     2,    3,    4,    5,   13,   14,   63,   15,    7,   45,
+ /*    10 */    20,   88,   16,   46,   28,   49,   41,   10,   40,   25,
+ /*    20 */    22,   50,   46,    8,   15,  104,    1,   20,   28,   18,
+ /*    30 */    58,   60,    6,   25,   22,   40,   47,   62,   11,   46,
+ /*    40 */    20,    9,   23,   24,   26,   29,   89,   58,   60,   10,
+ /*    50 */    17,   38,   28,   27,   37,   19,   30,   25,   22,   34,
+ /*    60 */    15,  100,   20,   20,   23,   24,   26,   12,   19,   31,
+ /*    70 */    32,   40,   19,   44,   43,   46,   95,   35,   90,   89,
+ /*    80 */    28,   49,   42,   58,   60,   25,   22,   59,   28,   27,
+ /*    90 */    33,   48,   52,   25,   22,   34,   28,   49,   51,   28,
+ /*   100 */    36,   25,   22,   61,   25,   22,   89,   28,   39,   89,
+ /*   110 */    89,   89,   25,   22,   54,   55,   56,   57,   89,   28,
+ /*   120 */    53,   21,   89,   89,   25,   22,   25,   22,
+};
+static YYCODETYPE yy_lookahead[] = {
+ /*     0 */    29,   30,   31,   32,   33,   34,    0,    1,   44,   38,
+ /*    10 */     4,   15,   41,   16,   35,   36,   45,   46,   12,   40,
+ /*    20 */    41,   42,   16,   15,    1,   27,   28,    4,   35,   36,
+ /*    30 */    24,   25,    1,   40,   41,   12,   17,   14,   13,   16,
+ /*    40 */     4,   38,    6,    7,    8,    9,   15,   24,   25,   46,
+ /*    50 */     2,    3,   35,   36,   37,    5,   39,   40,   41,   42,
+ /*    60 */     1,   11,    4,    4,    6,    7,    8,   28,    5,    9,
+ /*    70 */    10,   12,    5,   14,   28,   16,   13,   11,   13,   47,
+ /*    80 */    35,   36,   13,   24,   25,   40,   41,   42,   35,   36,
+ /*    90 */    37,   18,   43,   40,   41,   42,   35,   36,   19,   35,
+ /*   100 */    36,   40,   41,   42,   40,   41,   47,   35,   36,   47,
+ /*   110 */    47,   47,   40,   41,   20,   21,   22,   23,   47,   35,
+ /*   120 */    36,   35,   47,   47,   40,   41,   40,   41,
+};
+#define YY_SHIFT_USE_DFLT (-5)
+static signed char yy_shift_ofst[] = {
+ /*     0 */    -5,    6,   -5,   -5,   -5,   31,   -4,    8,   -3,   -5,
+ /*    10 */    25,   -5,   23,   -5,   -5,   -5,   48,   58,   67,   58,
+ /*    20 */    -5,   -5,   -5,   -5,   -5,   -5,   36,   50,   -5,   -5,
+ /*    30 */    60,   -5,   58,   -5,   66,   58,   67,   -5,   58,   67,
+ /*    40 */    65,   69,   -5,   59,   -5,   -5,   19,   73,   58,   67,
+ /*    50 */    79,   94,   58,   63,   -5,   -5,   -5,   -5,   58,   -5,
+ /*    60 */    58,   -5,   -5,
+};
+#define YY_REDUCE_USE_DFLT (-37)
+static signed char yy_reduce_ofst[] = {
+ /*     0 */    -2,  -29,  -37,  -37,  -37,  -36,  -37,  -37,    3,  -37,
+ /*    10 */   -37,   39,  -29,  -37,  -37,  -37,  -37,   -7,  -37,   86,
+ /*    20 */   -37,  -37,  -37,  -37,  -37,  -37,   17,  -37,  -37,  -37,
+ /*    30 */   -37,  -37,   53,  -37,  -37,   64,  -37,  -37,   72,  -37,
+ /*    40 */   -37,  -37,   46,  -29,  -37,  -37,  -37,  -37,  -21,  -37,
+ /*    50 */   -37,   49,   84,  -37,  -37,  -37,  -37,  -37,   45,  -37,
+ /*    60 */    61,  -37,  -37,
+};
+static YYACTIONTYPE yy_default[] = {
+ /*     0 */    65,  103,   64,   66,   67,  103,   68,  103,  103,   92,
+ /*    10 */   103,   65,  103,   69,   70,   71,  103,  103,   72,  103,
+ /*    20 */    74,   75,   77,   78,   79,   80,  103,   86,   76,   81,
+ /*    30 */   103,   82,   84,   83,  103,  103,   87,   85,  103,   73,
+ /*    40 */   103,  103,   65,  103,   91,   93,  103,  103,  103,  100,
+ /*    50 */   103,  103,  103,  103,   96,   97,   98,   99,  103,  101,
+ /*    60 */   103,  102,   94,
+};
+#define YY_SZ_ACTTAB (sizeof(yy_action)/sizeof(yy_action[0]))
+
+/* The next table maps tokens into fallback tokens.  If a construct
+** like the following:
+**
+**      %fallback ID X Y Z.
+**
+** appears in the grammer, then ID becomes a fallback token for X, Y,
+** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
+** but it does not parse, the type of the token is changed to ID and
+** the parse is retried before an error is thrown.
+*/
+#ifdef YYFALLBACK
+static const YYCODETYPE yyFallback[] = {
+};
+#endif /* YYFALLBACK */
+
+/* The following structure represents a single element of the
+** parser's stack.  Information stored includes:
+**
+**   +  The state number for the parser at this level of the stack.
+**
+**   +  The value of the token stored at this level of the stack.
+**      (In other words, the "major" token.)
+**
+**   +  The semantic value stored at this level of the stack.  This is
+**      the information used by the action routines in the grammar.
+**      It is sometimes called the "minor" token.
+*/
+struct yyStackEntry {
+  int stateno;       /* The state-number */
+  int major;         /* The major token value.  This is the code
+                     ** number for the token at this stack level */
+  YYMINORTYPE minor; /* The user-supplied minor token value.  This
+                     ** is the value of the token  */
+};
+typedef struct yyStackEntry yyStackEntry;
+
+/* The state of the parser is completely contained in an instance of
+** the following structure */
+struct yyParser {
+  int yyidx;                    /* Index of top element in stack */
+  int yyerrcnt;                 /* Shifts left before out of the error */
+  configparserARG_SDECL                /* A place to hold %extra_argument */
+  yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
+};
+typedef struct yyParser yyParser;
+
+#ifndef NDEBUG
+#include <stdio.h>
+static FILE *yyTraceFILE = 0;
+static char *yyTracePrompt = 0;
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/*
+** Turn parser tracing on by giving a stream to which to write the trace
+** and a prompt to preface each trace message.  Tracing is turned off
+** by making either argument NULL
+**
+** Inputs:
+** <ul>
+** <li> A FILE* to which trace output should be written.
+**      If NULL, then tracing is turned off.
+** <li> A prefix string written at the beginning of every
+**      line of trace output.  If NULL, then tracing is
+**      turned off.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void configparserTrace(FILE *TraceFILE, char *zTracePrompt){
+  yyTraceFILE = TraceFILE;
+  yyTracePrompt = zTracePrompt;
+  if( yyTraceFILE==0 ) yyTracePrompt = 0;
+  else if( yyTracePrompt==0 ) yyTraceFILE = 0;
+}
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing shifts, the names of all terminals and nonterminals
+** are required.  The following table supplies these names */
+static const char *yyTokenName[] = {
+  "$",             "EOL",           "ASSIGN",        "APPEND",      
+  "LKEY",          "PLUS",          "STRING",        "INTEGER",     
+  "LPARAN",        "RPARAN",        "COMMA",         "ARRAY_ASSIGN",
+  "GLOBAL",        "LCURLY",        "RCURLY",        "ELSE",        
+  "DOLLAR",        "SRVVARNAME",    "LBRACKET",      "RBRACKET",    
+  "EQ",            "MATCH",         "NE",            "NOMATCH",     
+  "INCLUDE",       "INCLUDE_SHELL",  "error",         "input",       
+  "metalines",     "metaline",      "varline",       "global",      
+  "condlines",     "include",       "include_shell",  "value",       
+  "expression",    "aelement",      "condline",      "aelements",   
+  "array",         "key",           "stringop",      "cond",        
+  "eols",          "globalstart",   "context",     
+};
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing reduce actions, the names of all rules are required.
+*/
+static const char *yyRuleName[] = {
+ /*   0 */ "input ::= metalines",
+ /*   1 */ "metalines ::= metalines metaline",
+ /*   2 */ "metalines ::=",
+ /*   3 */ "metaline ::= varline",
+ /*   4 */ "metaline ::= global",
+ /*   5 */ "metaline ::= condlines EOL",
+ /*   6 */ "metaline ::= include",
+ /*   7 */ "metaline ::= include_shell",
+ /*   8 */ "metaline ::= EOL",
+ /*   9 */ "varline ::= key ASSIGN expression",
+ /*  10 */ "varline ::= key APPEND expression",
+ /*  11 */ "key ::= LKEY",
+ /*  12 */ "expression ::= expression PLUS value",
+ /*  13 */ "expression ::= value",
+ /*  14 */ "value ::= key",
+ /*  15 */ "value ::= STRING",
+ /*  16 */ "value ::= INTEGER",
+ /*  17 */ "value ::= array",
+ /*  18 */ "array ::= LPARAN RPARAN",
+ /*  19 */ "array ::= LPARAN aelements RPARAN",
+ /*  20 */ "aelements ::= aelements COMMA aelement",
+ /*  21 */ "aelements ::= aelements COMMA",
+ /*  22 */ "aelements ::= aelement",
+ /*  23 */ "aelement ::= expression",
+ /*  24 */ "aelement ::= stringop ARRAY_ASSIGN expression",
+ /*  25 */ "eols ::= EOL",
+ /*  26 */ "eols ::=",
+ /*  27 */ "globalstart ::= GLOBAL",
+ /*  28 */ "global ::= globalstart LCURLY metalines RCURLY",
+ /*  29 */ "condlines ::= condlines eols ELSE condline",
+ /*  30 */ "condlines ::= condline",
+ /*  31 */ "condline ::= context LCURLY metalines RCURLY",
+ /*  32 */ "context ::= DOLLAR SRVVARNAME LBRACKET stringop RBRACKET cond expression",
+ /*  33 */ "cond ::= EQ",
+ /*  34 */ "cond ::= MATCH",
+ /*  35 */ "cond ::= NE",
+ /*  36 */ "cond ::= NOMATCH",
+ /*  37 */ "stringop ::= expression",
+ /*  38 */ "include ::= INCLUDE stringop",
+ /*  39 */ "include_shell ::= INCLUDE_SHELL stringop",
+};
+#endif /* NDEBUG */
+
+/*
+** This function returns the symbolic name associated with a token
+** value.
+*/
+const char *configparserTokenName(int tokenType){
+#ifndef NDEBUG
+  if( tokenType>0 && tokenType<(sizeof(yyTokenName)/sizeof(yyTokenName[0])) ){
+    return yyTokenName[tokenType];
+  }else{
+    return "Unknown";
+  }
+#else
+  return "";
+#endif
+}
+
+/*
+** This function allocates a new parser.
+** The only argument is a pointer to a function which works like
+** malloc.
+**
+** Inputs:
+** A pointer to the function used to allocate memory.
+**
+** Outputs:
+** A pointer to a parser.  This pointer is used in subsequent calls
+** to configparser and configparserFree.
+*/
+void *configparserAlloc(void *(*mallocProc)(size_t)){
+  yyParser *pParser;
+  pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
+  if( pParser ){
+    pParser->yyidx = -1;
+  }
+  return pParser;
+}
+
+/* The following function deletes the value associated with a
+** symbol.  The symbol can be either a terminal or nonterminal.
+** "yymajor" is the symbol code, and "yypminor" is a pointer to
+** the value.
+*/
+static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
+  switch( yymajor ){
+    /* Here is inserted the actions which take place when a
+    ** terminal or non-terminal is destroyed.  This can happen
+    ** when the symbol is popped from the stack during a
+    ** reduce or during error processing or when a parser is
+    ** being destroyed before it is finished parsing.
+    **
+    ** Note: during a reduce, the only symbols destroyed are those
+    ** which appear on the RHS of the rule, but which are not used
+    ** inside the C code.
+    */
+    case 1:
+    case 2:
+    case 3:
+    case 4:
+    case 5:
+    case 6:
+    case 7:
+    case 8:
+    case 9:
+    case 10:
+    case 11:
+    case 12:
+    case 13:
+    case 14:
+    case 15:
+    case 16:
+    case 17:
+    case 18:
+    case 19:
+    case 20:
+    case 21:
+    case 22:
+    case 23:
+    case 24:
+    case 25:
+#line 142 "./configparser.y"
+{ buffer_free((yypminor->yy0)); }
+#line 517 "configparser.c"
+      break;
+    case 35:
+#line 133 "./configparser.y"
+{ (yypminor->yy41)->free((yypminor->yy41)); }
+#line 522 "configparser.c"
+      break;
+    case 36:
+#line 134 "./configparser.y"
+{ (yypminor->yy41)->free((yypminor->yy41)); }
+#line 527 "configparser.c"
+      break;
+    case 37:
+#line 135 "./configparser.y"
+{ (yypminor->yy41)->free((yypminor->yy41)); }
+#line 532 "configparser.c"
+      break;
+    case 39:
+#line 136 "./configparser.y"
+{ array_free((yypminor->yy40)); }
+#line 537 "configparser.c"
+      break;
+    case 40:
+#line 137 "./configparser.y"
+{ array_free((yypminor->yy40)); }
+#line 542 "configparser.c"
+      break;
+    case 41:
+#line 138 "./configparser.y"
+{ buffer_free((yypminor->yy43)); }
+#line 547 "configparser.c"
+      break;
+    case 42:
+#line 139 "./configparser.y"
+{ buffer_free((yypminor->yy43)); }
+#line 552 "configparser.c"
+      break;
+    default:  break;   /* If no destructor action specified: do nothing */
+  }
+}
+
+/*
+** Pop the parser's stack once.
+**
+** If there is a destructor routine associated with the token which
+** is popped from the stack, then call it.
+**
+** Return the major token number for the symbol popped.
+*/
+static int yy_pop_parser_stack(yyParser *pParser){
+  YYCODETYPE yymajor;
+  yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
+
+  if( pParser->yyidx<0 ) return 0;
+#ifndef NDEBUG
+  if( yyTraceFILE && pParser->yyidx>=0 ){
+    fprintf(yyTraceFILE,"%sPopping %s\n",
+      yyTracePrompt,
+      yyTokenName[yytos->major]);
+  }
+#endif
+  yymajor = yytos->major;
+  yy_destructor( yymajor, &yytos->minor);
+  pParser->yyidx--;
+  return yymajor;
+}
+
+/*
+** Deallocate and destroy a parser.  Destructors are all called for
+** all stack elements before shutting the parser down.
+**
+** Inputs:
+** <ul>
+** <li>  A pointer to the parser.  This should be a pointer
+**       obtained from configparserAlloc.
+** <li>  A pointer to a function used to reclaim memory obtained
+**       from malloc.
+** </ul>
+*/
+void configparserFree(
+  void *p,                    /* The parser to be deleted */
+  void (*freeProc)(void*)     /* Function used to reclaim memory */
+){
+  yyParser *pParser = (yyParser*)p;
+  if( pParser==0 ) return;
+  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
+  (*freeProc)((void*)pParser);
+}
+
+/*
+** Find the appropriate action for a parser given the terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_shift_action(
+  yyParser *pParser,        /* The parser */
+  int iLookAhead            /* The look-ahead token */
+){
+  int i;
+  int stateno = pParser->yystack[pParser->yyidx].stateno;
+
+  /* if( pParser->yyidx<0 ) return YY_NO_ACTION;  */
+  i = yy_shift_ofst[stateno];
+  if( i==YY_SHIFT_USE_DFLT ){
+    return yy_default[stateno];
+  }
+  if( iLookAhead==YYNOCODE ){
+    return YY_NO_ACTION;
+  }
+  i += iLookAhead;
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+#ifdef YYFALLBACK
+    int iFallback;            /* Fallback token */
+    if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
+           && (iFallback = yyFallback[iLookAhead])!=0 ){
+#ifndef NDEBUG
+      if( yyTraceFILE ){
+        fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
+           yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
+      }
+#endif
+      return yy_find_shift_action(pParser, iFallback);
+    }
+#endif
+    return yy_default[stateno];
+  }else{
+    return yy_action[i];
+  }
+}
+
+/*
+** Find the appropriate action for a parser given the non-terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_reduce_action(
+  yyParser *pParser,        /* The parser */
+  int iLookAhead            /* The look-ahead token */
+){
+  int i;
+  int stateno = pParser->yystack[pParser->yyidx].stateno;
+
+  i = yy_reduce_ofst[stateno];
+  if( i==YY_REDUCE_USE_DFLT ){
+    return yy_default[stateno];
+  }
+  if( iLookAhead==YYNOCODE ){
+    return YY_NO_ACTION;
+  }
+  i += iLookAhead;
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    return yy_default[stateno];
+  }else{
+    return yy_action[i];
+  }
+}
+
+/*
+** Perform a shift action.
+*/
+static void yy_shift(
+  yyParser *yypParser,          /* The parser to be shifted */
+  int yyNewState,               /* The new state to shift in */
+  int yyMajor,                  /* The major token to shift in */
+  YYMINORTYPE *yypMinor         /* Pointer ot the minor token to shift in */
+){
+  yyStackEntry *yytos;
+  yypParser->yyidx++;
+  if( yypParser->yyidx>=YYSTACKDEPTH ){
+     configparserARG_FETCH;
+     yypParser->yyidx--;
+#ifndef NDEBUG
+     if( yyTraceFILE ){
+       fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
+     }
+#endif
+     while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+     /* Here code is inserted which will execute if the parser
+     ** stack every overflows */
+     configparserARG_STORE; /* Suppress warning about unused %extra_argument var */
+     return;
+  }
+  yytos = &yypParser->yystack[yypParser->yyidx];
+  yytos->stateno = yyNewState;
+  yytos->major = yyMajor;
+  yytos->minor = *yypMinor;
+#ifndef NDEBUG
+  if( yyTraceFILE && yypParser->yyidx>0 ){
+    int i;
+    fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
+    fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
+    for(i=1; i<=yypParser->yyidx; i++)
+      fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
+    fprintf(yyTraceFILE,"\n");
+  }
+#endif
+}
+
+/* The following table contains information about every rule that
+** is used during the reduce.
+*/
+static struct {
+  YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
+  unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
+} yyRuleInfo[] = {
+  { 27, 1 },
+  { 28, 2 },
+  { 28, 0 },
+  { 29, 1 },
+  { 29, 1 },
+  { 29, 2 },
+  { 29, 1 },
+  { 29, 1 },
+  { 29, 1 },
+  { 30, 3 },
+  { 30, 3 },
+  { 41, 1 },
+  { 36, 3 },
+  { 36, 1 },
+  { 35, 1 },
+  { 35, 1 },
+  { 35, 1 },
+  { 35, 1 },
+  { 40, 2 },
+  { 40, 3 },
+  { 39, 3 },
+  { 39, 2 },
+  { 39, 1 },
+  { 37, 1 },
+  { 37, 3 },
+  { 44, 1 },
+  { 44, 0 },
+  { 45, 1 },
+  { 31, 4 },
+  { 32, 4 },
+  { 32, 1 },
+  { 38, 4 },
+  { 46, 7 },
+  { 43, 1 },
+  { 43, 1 },
+  { 43, 1 },
+  { 43, 1 },
+  { 42, 1 },
+  { 33, 2 },
+  { 34, 2 },
+};
+
+static void yy_accept(yyParser*);  /* Forward Declaration */
+
+/*
+** Perform a reduce action and the shift that must immediately
+** follow the reduce.
+*/
+static void yy_reduce(
+  yyParser *yypParser,         /* The parser */
+  int yyruleno                 /* Number of the rule by which to reduce */
+){
+  int yygoto;                     /* The next state */
+  int yyact;                      /* The next action */
+  YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
+  yyStackEntry *yymsp;            /* The top of the parser's stack */
+  int yysize;                     /* Amount to pop the stack */
+  configparserARG_FETCH;
+  yymsp = &yypParser->yystack[yypParser->yyidx];
+#ifndef NDEBUG
+  if( yyTraceFILE && yyruleno>=0
+        && yyruleno<sizeof(yyRuleName)/sizeof(yyRuleName[0]) ){
+    fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
+      yyRuleName[yyruleno]);
+  }
+#endif /* NDEBUG */
+
+  switch( yyruleno ){
+  /* Beginning here are the reduction cases.  A typical example
+  ** follows:
+  **   case 0:
+  **  #line <lineno> <grammarfile>
+  **     { ... }           // User supplied code
+  **  #line <lineno> <thisfile>
+  **     break;
+  */
+      case 0:
+        /* No destructor defined for metalines */
+        break;
+      case 1:
+        /* No destructor defined for metalines */
+        /* No destructor defined for metaline */
+        break;
+      case 2:
+        break;
+      case 3:
+        /* No destructor defined for varline */
+        break;
+      case 4:
+        /* No destructor defined for global */
+        break;
+      case 5:
+#line 115 "./configparser.y"
+{ yymsp[-1].minor.yy78 = NULL; }
+#line 822 "configparser.c"
+  yy_destructor(1,&yymsp[0].minor);
+        break;
+      case 6:
+        /* No destructor defined for include */
+        break;
+      case 7:
+        /* No destructor defined for include_shell */
+        break;
+      case 8:
+  yy_destructor(1,&yymsp[0].minor);
+        break;
+      case 9:
+#line 144 "./configparser.y"
+{
+  if (ctx->ok) {
+    buffer_copy_string_buffer(yymsp[0].minor.yy41->key, yymsp[-2].minor.yy43);
+    if (strncmp(yymsp[-2].minor.yy43->ptr, "env.", sizeof("env.") - 1) == 0) {
+      fprintf(stderr, "Setting env variable is not supported in conditional %d %s: %s\n",
+          ctx->current->context_ndx,
+          ctx->current->key->ptr, yymsp[-2].minor.yy43->ptr);
+      ctx->ok = 0;
+    } else if (NULL == array_get_element(ctx->current->value, yymsp[0].minor.yy41->key->ptr)) {
+      array_insert_unique(ctx->current->value, yymsp[0].minor.yy41);
+      yymsp[0].minor.yy41 = NULL;
+    } else {
+      fprintf(stderr, "Duplicate config variable in conditional %d %s: %s\n",
+              ctx->current->context_ndx,
+              ctx->current->key->ptr, yymsp[0].minor.yy41->key->ptr);
+      ctx->ok = 0;
+      yymsp[0].minor.yy41->free(yymsp[0].minor.yy41);
+      yymsp[0].minor.yy41 = NULL;
+    }
+  }
+  buffer_free(yymsp[-2].minor.yy43);
+  yymsp[-2].minor.yy43 = NULL;
+}
+#line 859 "configparser.c"
+  yy_destructor(2,&yymsp[-1].minor);
+        break;
+      case 10:
+#line 168 "./configparser.y"
+{
+  array *vars = ctx->current->value;
+  data_unset *du;
+
+  if (strncmp(yymsp[-2].minor.yy43->ptr, "env.", sizeof("env.") - 1) == 0) {
+    fprintf(stderr, "Appending env variable is not supported in conditional %d %s: %s\n",
+        ctx->current->context_ndx,
+        ctx->current->key->ptr, yymsp[-2].minor.yy43->ptr);
+    ctx->ok = 0;
+  } else if (NULL != (du = array_get_element(vars, yymsp[-2].minor.yy43->ptr))) {
+    /* exists in current block */
+    du = configparser_merge_data(du, yymsp[0].minor.yy41);
+    if (NULL == du) {
+      ctx->ok = 0;
+    }
+    else {
+      buffer_copy_string_buffer(du->key, yymsp[-2].minor.yy43);
+      array_replace(vars, du);
+    }
+    yymsp[0].minor.yy41->free(yymsp[0].minor.yy41);
+  } else if (NULL != (du = configparser_get_variable(ctx, yymsp[-2].minor.yy43))) {
+    du = configparser_merge_data(du, yymsp[0].minor.yy41);
+    if (NULL == du) {
+      ctx->ok = 0;
+      du->free(du);
+    }
+    else {
+      buffer_copy_string_buffer(du->key, yymsp[-2].minor.yy43);
+      array_insert_unique(ctx->current->value, du);
+    }
+    yymsp[0].minor.yy41->free(yymsp[0].minor.yy41);
+  } else {
+    buffer_copy_string_buffer(yymsp[0].minor.yy41->key, yymsp[-2].minor.yy43);
+    array_insert_unique(ctx->current->value, yymsp[0].minor.yy41);
+  }
+  buffer_free(yymsp[-2].minor.yy43);
+  yymsp[-2].minor.yy43 = NULL;
+  yymsp[0].minor.yy41 = NULL;
+}
+#line 903 "configparser.c"
+  yy_destructor(3,&yymsp[-1].minor);
+        break;
+      case 11:
+#line 208 "./configparser.y"
+{
+  if (strchr(yymsp[0].minor.yy0->ptr, '.') == NULL) {
+    yygotominor.yy43 = buffer_init_string("var.");
+    buffer_append_string_buffer(yygotominor.yy43, yymsp[0].minor.yy0);
+    buffer_free(yymsp[0].minor.yy0);
+    yymsp[0].minor.yy0 = NULL;
+  } else {
+    yygotominor.yy43 = yymsp[0].minor.yy0;
+    yymsp[0].minor.yy0 = NULL;
+  }
+}
+#line 919 "configparser.c"
+        break;
+      case 12:
+#line 220 "./configparser.y"
+{
+  yygotominor.yy41 = configparser_merge_data(yymsp[-2].minor.yy41, yymsp[0].minor.yy41);
+  if (NULL == yygotominor.yy41) {
+    ctx->ok = 0;
+  }
+  yymsp[-2].minor.yy41 = NULL;
+  yymsp[0].minor.yy41->free(yymsp[0].minor.yy41);
+  yymsp[0].minor.yy41 = NULL;
+}
+#line 932 "configparser.c"
+  yy_destructor(5,&yymsp[-1].minor);
+        break;
+      case 13:
+#line 230 "./configparser.y"
+{
+  yygotominor.yy41 = yymsp[0].minor.yy41;
+  yymsp[0].minor.yy41 = NULL;
+}
+#line 941 "configparser.c"
+        break;
+      case 14:
+#line 235 "./configparser.y"
+{
+  yygotominor.yy41 = NULL;
+  if (strncmp(yymsp[0].minor.yy43->ptr, "env.", sizeof("env.") - 1) == 0) {
+    char *env;
+
+    if (NULL != (env = getenv(yymsp[0].minor.yy43->ptr + 4))) {
+      data_string *ds;
+      ds = data_string_init();
+      buffer_append_string(ds->value, env);
+      yygotominor.yy41 = (data_unset *)ds;
+    }
+    else {
+      fprintf(stderr, "Undefined env variable: %s\n", yymsp[0].minor.yy43->ptr + 4);
+      ctx->ok = 0;
+    }
+  } else if (NULL == (yygotominor.yy41 = configparser_get_variable(ctx, yymsp[0].minor.yy43))) {
+    fprintf(stderr, "Undefined config variable: %s\n", yymsp[0].minor.yy43->ptr);
+    ctx->ok = 0;
+  }
+  if (!yygotominor.yy41) {
+    /* make a dummy so it won't crash */
+    yygotominor.yy41 = (data_unset *)data_string_init();
+  }
+  buffer_free(yymsp[0].minor.yy43);
+  yymsp[0].minor.yy43 = NULL;
+}
+#line 971 "configparser.c"
+        break;
+      case 15:
+#line 262 "./configparser.y"
+{
+  yygotominor.yy41 = (data_unset *)data_string_init();
+  buffer_copy_string_buffer(((data_string *)(yygotominor.yy41))->value, yymsp[0].minor.yy0);
+  buffer_free(yymsp[0].minor.yy0);
+  yymsp[0].minor.yy0 = NULL;
+}
+#line 981 "configparser.c"
+        break;
+      case 16:
+#line 269 "./configparser.y"
+{
+  yygotominor.yy41 = (data_unset *)data_integer_init();
+  ((data_integer *)(yygotominor.yy41))->value = strtol(yymsp[0].minor.yy0->ptr, NULL, 10);
+  buffer_free(yymsp[0].minor.yy0);
+  yymsp[0].minor.yy0 = NULL;
+}
+#line 991 "configparser.c"
+        break;
+      case 17:
+#line 275 "./configparser.y"
+{
+  yygotominor.yy41 = (data_unset *)data_array_init();
+  array_free(((data_array *)(yygotominor.yy41))->value);
+  ((data_array *)(yygotominor.yy41))->value = yymsp[0].minor.yy40;
+  yymsp[0].minor.yy40 = NULL;
+}
+#line 1001 "configparser.c"
+        break;
+      case 18:
+#line 281 "./configparser.y"
+{
+  yygotominor.yy40 = array_init();
+}
+#line 1008 "configparser.c"
+  yy_destructor(8,&yymsp[-1].minor);
+  yy_destructor(9,&yymsp[0].minor);
+        break;
+      case 19:
+#line 284 "./configparser.y"
+{
+  yygotominor.yy40 = yymsp[-1].minor.yy40;
+  yymsp[-1].minor.yy40 = NULL;
+}
+#line 1018 "configparser.c"
+  yy_destructor(8,&yymsp[-2].minor);
+  yy_destructor(9,&yymsp[0].minor);
+        break;
+      case 20:
+#line 289 "./configparser.y"
+{
+  if (buffer_is_empty(yymsp[0].minor.yy41->key) ||
+      NULL == array_get_element(yymsp[-2].minor.yy40, yymsp[0].minor.yy41->key->ptr)) {
+    array_insert_unique(yymsp[-2].minor.yy40, yymsp[0].minor.yy41);
+    yymsp[0].minor.yy41 = NULL;
+  } else {
+    fprintf(stderr, "Duplicate array-key: %s\n",
+            yymsp[0].minor.yy41->key->ptr);
+    ctx->ok = 0;
+    yymsp[0].minor.yy41->free(yymsp[0].minor.yy41);
+    yymsp[0].minor.yy41 = NULL;
+  }
+
+  yygotominor.yy40 = yymsp[-2].minor.yy40;
+  yymsp[-2].minor.yy40 = NULL;
+}
+#line 1040 "configparser.c"
+  yy_destructor(10,&yymsp[-1].minor);
+        break;
+      case 21:
+#line 306 "./configparser.y"
+{
+  yygotominor.yy40 = yymsp[-1].minor.yy40;
+  yymsp[-1].minor.yy40 = NULL;
+}
+#line 1049 "configparser.c"
+  yy_destructor(10,&yymsp[0].minor);
+        break;
+      case 22:
+#line 311 "./configparser.y"
+{
+  yygotominor.yy40 = array_init();
+  array_insert_unique(yygotominor.yy40, yymsp[0].minor.yy41);
+  yymsp[0].minor.yy41 = NULL;
+}
+#line 1059 "configparser.c"
+        break;
+      case 23:
+#line 317 "./configparser.y"
+{
+  yygotominor.yy41 = yymsp[0].minor.yy41;
+  yymsp[0].minor.yy41 = NULL;
+}
+#line 1067 "configparser.c"
+        break;
+      case 24:
+#line 321 "./configparser.y"
+{
+  buffer_copy_string_buffer(yymsp[0].minor.yy41->key, yymsp[-2].minor.yy43);
+  buffer_free(yymsp[-2].minor.yy43);
+  yymsp[-2].minor.yy43 = NULL;
+
+  yygotominor.yy41 = yymsp[0].minor.yy41;
+  yymsp[0].minor.yy41 = NULL;
+}
+#line 1079 "configparser.c"
+  yy_destructor(11,&yymsp[-1].minor);
+        break;
+      case 25:
+  yy_destructor(1,&yymsp[0].minor);
+        break;
+      case 26:
+        break;
+      case 27:
+#line 333 "./configparser.y"
+{
+  data_config *dc;
+  dc = (data_config *)array_get_element(ctx->srv->config_context, "global");
+  assert(dc);
+  configparser_push(ctx, dc, 0);
+}
+#line 1095 "configparser.c"
+  yy_destructor(12,&yymsp[0].minor);
+        break;
+      case 28:
+#line 340 "./configparser.y"
+{
+  data_config *cur;
+
+  cur = ctx->current;
+  configparser_pop(ctx);
+
+  assert(cur && ctx->current);
+
+  yygotominor.yy78 = cur;
+}
+#line 1110 "configparser.c"
+        /* No destructor defined for globalstart */
+  yy_destructor(13,&yymsp[-2].minor);
+        /* No destructor defined for metalines */
+  yy_destructor(14,&yymsp[0].minor);
+        break;
+      case 29:
+#line 351 "./configparser.y"
+{
+  assert(yymsp[-3].minor.yy78->context_ndx < yymsp[0].minor.yy78->context_ndx);
+  yymsp[0].minor.yy78->prev = yymsp[-3].minor.yy78;
+  yymsp[-3].minor.yy78->next = yymsp[0].minor.yy78;
+  yygotominor.yy78 = yymsp[0].minor.yy78;
+  yymsp[-3].minor.yy78 = NULL;
+  yymsp[0].minor.yy78 = NULL;
+}
+#line 1126 "configparser.c"
+        /* No destructor defined for eols */
+  yy_destructor(15,&yymsp[-1].minor);
+        break;
+      case 30:
+#line 360 "./configparser.y"
+{
+  yygotominor.yy78 = yymsp[0].minor.yy78;
+  yymsp[0].minor.yy78 = NULL;
+}
+#line 1136 "configparser.c"
+        break;
+      case 31:
+#line 365 "./configparser.y"
+{
+  data_config *cur;
+
+  cur = ctx->current;
+  configparser_pop(ctx);
+
+  assert(cur && ctx->current);
+
+  yygotominor.yy78 = cur;
+}
+#line 1150 "configparser.c"
+        /* No destructor defined for context */
+  yy_destructor(13,&yymsp[-2].minor);
+        /* No destructor defined for metalines */
+  yy_destructor(14,&yymsp[0].minor);
+        break;
+      case 32:
+#line 376 "./configparser.y"
+{
+  data_config *dc;
+  buffer *b, *rvalue, *op;
+
+  if (ctx->ok && yymsp[0].minor.yy41->type != TYPE_STRING) {
+    fprintf(stderr, "rvalue must be string");
+    ctx->ok = 0;
+  }
+
+  switch(yymsp[-1].minor.yy27) {
+  case CONFIG_COND_NE:
+    op = buffer_init_string("!=");
+    break;
+  case CONFIG_COND_EQ:
+    op = buffer_init_string("==");
+    break;
+  case CONFIG_COND_NOMATCH:
+    op = buffer_init_string("!~");
+    break;
+  case CONFIG_COND_MATCH:
+    op = buffer_init_string("=~");
+    break;
+  default:
+    assert(0);
+    return;
+  }
+
+  b = buffer_init();
+  buffer_copy_string_buffer(b, ctx->current->key);
+  buffer_append_string(b, "/");
+  buffer_append_string_buffer(b, yymsp[-5].minor.yy0);
+  buffer_append_string_buffer(b, yymsp[-3].minor.yy43);
+  buffer_append_string_buffer(b, op);
+  rvalue = ((data_string*)yymsp[0].minor.yy41)->value;
+  buffer_append_string_buffer(b, rvalue);
+
+  if (NULL != (dc = (data_config *)array_get_element(ctx->all_configs, b->ptr))) {
+    configparser_push(ctx, dc, 0);
+  } else {
+    struct {
+      comp_key_t comp;
+      char *comp_key;
+      size_t len;
+    } comps[] = {
+      { COMP_SERVER_SOCKET,      CONST_STR_LEN("SERVER[\"socket\"]"   ) },
+      { COMP_HTTP_URL,           CONST_STR_LEN("HTTP[\"url\"]"        ) },
+      { COMP_HTTP_HOST,          CONST_STR_LEN("HTTP[\"host\"]"       ) },
+      { COMP_HTTP_REFERER,       CONST_STR_LEN("HTTP[\"referer\"]"    ) },
+      { COMP_HTTP_USER_AGENT,    CONST_STR_LEN("HTTP[\"useragent\"]"  ) },
+      { COMP_HTTP_USER_AGENT,    CONST_STR_LEN("HTTP[\"user-agent\"]"  ) },
+      { COMP_HTTP_COOKIE,        CONST_STR_LEN("HTTP[\"cookie\"]"     ) },
+      { COMP_HTTP_REMOTE_IP,     CONST_STR_LEN("HTTP[\"remoteip\"]"   ) },
+      { COMP_HTTP_REMOTE_IP,     CONST_STR_LEN("HTTP[\"remote-ip\"]"   ) },
+      { COMP_HTTP_QUERY_STRING,  CONST_STR_LEN("HTTP[\"querystring\"]") },
+      { COMP_HTTP_QUERY_STRING,  CONST_STR_LEN("HTTP[\"query-string\"]") },
+      { COMP_HTTP_REQUEST_METHOD, CONST_STR_LEN("HTTP[\"request-method\"]") },
+      { COMP_HTTP_SCHEME,        CONST_STR_LEN("HTTP[\"scheme\"]"     ) },
+      { COMP_UNSET, NULL, 0 },
+    };
+    size_t i;
+
+    dc = data_config_init();
+
+    buffer_copy_string_buffer(dc->key, b);
+    buffer_copy_string_buffer(dc->op, op);
+    buffer_copy_string_buffer(dc->comp_key, yymsp[-5].minor.yy0);
+    buffer_append_string_len(dc->comp_key, CONST_STR_LEN("[\""));
+    buffer_append_string_buffer(dc->comp_key, yymsp[-3].minor.yy43);
+    buffer_append_string_len(dc->comp_key, CONST_STR_LEN("\"]"));
+    dc->cond = yymsp[-1].minor.yy27;
+
+    for (i = 0; comps[i].comp_key; i ++) {
+      if (buffer_is_equal_string(
+            dc->comp_key, comps[i].comp_key, comps[i].len)) {
+        dc->comp = comps[i].comp;
+        break;
+      }
+    }
+    if (COMP_UNSET == dc->comp) {
+      fprintf(stderr, "error comp_key %s", dc->comp_key->ptr);
+      ctx->ok = 0;
+    }
+
+    switch(yymsp[-1].minor.yy27) {
+    case CONFIG_COND_NE:
+    case CONFIG_COND_EQ:
+      dc->string = buffer_init_buffer(rvalue);
+      break;
+    case CONFIG_COND_NOMATCH:
+    case CONFIG_COND_MATCH: {
+#ifdef HAVE_PCRE_H
+      const char *errptr;
+      int erroff;
+
+      if (NULL == (dc->regex =
+          pcre_compile(rvalue->ptr, 0, &errptr, &erroff, NULL))) {
+        dc->string = buffer_init_string(errptr);
+        dc->cond = CONFIG_COND_UNSET;
+
+        fprintf(stderr, "parsing regex failed: %s -> %s at offset %d\n",
+            rvalue->ptr, errptr, erroff);
+
+        ctx->ok = 0;
+      } else if (NULL == (dc->regex_study =
+          pcre_study(dc->regex, 0, &errptr)) &&
+                 errptr != NULL) {
+        fprintf(stderr, "studying regex failed: %s -> %s\n",
+            rvalue->ptr, errptr);
+        ctx->ok = 0;
+      } else {
+        dc->string = buffer_init_buffer(rvalue);
+      }
+#else
+      fprintf(stderr, "can't handle '$%s[%s] =~ ...' as you compiled without pcre support. \n"
+		      "(perhaps just a missing pcre-devel package ?) \n",
+                      yymsp[-5].minor.yy0->ptr, yymsp[-3].minor.yy43->ptr);
+      ctx->ok = 0;
+#endif
+      break;
+    }
+
+    default:
+      fprintf(stderr, "unknown condition for $%s[%s]\n",
+                      yymsp[-5].minor.yy0->ptr, yymsp[-3].minor.yy43->ptr);
+      ctx->ok = 0;
+      break;
+    }
+
+    configparser_push(ctx, dc, 1);
+  }
+
+  buffer_free(b);
+  buffer_free(op);
+  buffer_free(yymsp[-5].minor.yy0);
+  yymsp[-5].minor.yy0 = NULL;
+  buffer_free(yymsp[-3].minor.yy43);
+  yymsp[-3].minor.yy43 = NULL;
+  yymsp[0].minor.yy41->free(yymsp[0].minor.yy41);
+  yymsp[0].minor.yy41 = NULL;
+}
+#line 1298 "configparser.c"
+  yy_destructor(16,&yymsp[-6].minor);
+  yy_destructor(18,&yymsp[-4].minor);
+  yy_destructor(19,&yymsp[-2].minor);
+        break;
+      case 33:
+#line 516 "./configparser.y"
+{
+  yygotominor.yy27 = CONFIG_COND_EQ;
+}
+#line 1308 "configparser.c"
+  yy_destructor(20,&yymsp[0].minor);
+        break;
+      case 34:
+#line 519 "./configparser.y"
+{
+  yygotominor.yy27 = CONFIG_COND_MATCH;
+}
+#line 1316 "configparser.c"
+  yy_destructor(21,&yymsp[0].minor);
+        break;
+      case 35:
+#line 522 "./configparser.y"
+{
+  yygotominor.yy27 = CONFIG_COND_NE;
+}
+#line 1324 "configparser.c"
+  yy_destructor(22,&yymsp[0].minor);
+        break;
+      case 36:
+#line 525 "./configparser.y"
+{
+  yygotominor.yy27 = CONFIG_COND_NOMATCH;
+}
+#line 1332 "configparser.c"
+  yy_destructor(23,&yymsp[0].minor);
+        break;
+      case 37:
+#line 529 "./configparser.y"
+{
+  yygotominor.yy43 = NULL;
+  if (ctx->ok) {
+    if (yymsp[0].minor.yy41->type == TYPE_STRING) {
+      yygotominor.yy43 = buffer_init_buffer(((data_string*)yymsp[0].minor.yy41)->value);
+    } else if (yymsp[0].minor.yy41->type == TYPE_INTEGER) {
+      yygotominor.yy43 = buffer_init();
+      buffer_copy_long(yygotominor.yy43, ((data_integer *)yymsp[0].minor.yy41)->value);
+    } else {
+      fprintf(stderr, "operand must be string");
+      ctx->ok = 0;
+    }
+  }
+  yymsp[0].minor.yy41->free(yymsp[0].minor.yy41);
+  yymsp[0].minor.yy41 = NULL;
+}
+#line 1353 "configparser.c"
+        break;
+      case 38:
+#line 546 "./configparser.y"
+{
+  if (ctx->ok) {
+    if (0 != config_parse_file(ctx->srv, ctx, yymsp[0].minor.yy43->ptr)) {
+      ctx->ok = 0;
+    }
+    buffer_free(yymsp[0].minor.yy43);
+    yymsp[0].minor.yy43 = NULL;
+  }
+}
+#line 1366 "configparser.c"
+  yy_destructor(24,&yymsp[-1].minor);
+        break;
+      case 39:
+#line 556 "./configparser.y"
+{
+  if (ctx->ok) {
+    if (0 != config_parse_cmd(ctx->srv, ctx, yymsp[0].minor.yy43->ptr)) {
+      ctx->ok = 0;
+    }
+    buffer_free(yymsp[0].minor.yy43);
+    yymsp[0].minor.yy43 = NULL;
+  }
+}
+#line 1380 "configparser.c"
+  yy_destructor(25,&yymsp[-1].minor);
+        break;
+  };
+  yygoto = yyRuleInfo[yyruleno].lhs;
+  yysize = yyRuleInfo[yyruleno].nrhs;
+  yypParser->yyidx -= yysize;
+  yyact = yy_find_reduce_action(yypParser,yygoto);
+  if( yyact < YYNSTATE ){
+    yy_shift(yypParser,yyact,yygoto,&yygotominor);
+  }else if( yyact == YYNSTATE + YYNRULE + 1 ){
+    yy_accept(yypParser);
+  }
+}
+
+/*
+** The following code executes when the parse fails
+*/
+static void yy_parse_failed(
+  yyParser *yypParser           /* The parser */
+){
+  configparserARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser fails */
+#line 106 "./configparser.y"
+
+  ctx->ok = 0;
+
+#line 1414 "configparser.c"
+  configparserARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following code executes when a syntax error first occurs.
+*/
+static void yy_syntax_error(
+  yyParser *yypParser,           /* The parser */
+  int yymajor,                   /* The major type of the error token */
+  YYMINORTYPE yyminor            /* The minor type of the error token */
+){
+  configparserARG_FETCH;
+#define TOKEN (yyminor.yy0)
+  configparserARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following is executed when the parser accepts
+*/
+static void yy_accept(
+  yyParser *yypParser           /* The parser */
+){
+  configparserARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser accepts */
+  configparserARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/* The main parser program.
+** The first argument is a pointer to a structure obtained from
+** "configparserAlloc" which describes the current state of the parser.
+** The second argument is the major token number.  The third is
+** the minor token.  The fourth optional argument is whatever the
+** user wants (and specified in the grammar) and is available for
+** use by the action routines.
+**
+** Inputs:
+** <ul>
+** <li> A pointer to the parser (an opaque structure.)
+** <li> The major token number.
+** <li> The minor token number.
+** <li> An option argument of a grammar-specified type.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void configparser(
+  void *yyp,                   /* The parser */
+  int yymajor,                 /* The major token code number */
+  configparserTOKENTYPE yyminor       /* The value for the token */
+  configparserARG_PDECL               /* Optional %extra_argument parameter */
+){
+  YYMINORTYPE yyminorunion;
+  int yyact;            /* The parser action. */
+  int yyendofinput;     /* True if we are at the end of input */
+  int yyerrorhit = 0;   /* True if yymajor has invoked an error */
+  yyParser *yypParser;  /* The parser */
+
+  /* (re)initialize the parser, if necessary */
+  yypParser = (yyParser*)yyp;
+  if( yypParser->yyidx<0 ){
+    if( yymajor==0 ) return;
+    yypParser->yyidx = 0;
+    yypParser->yyerrcnt = -1;
+    yypParser->yystack[0].stateno = 0;
+    yypParser->yystack[0].major = 0;
+  }
+  yyminorunion.yy0 = yyminor;
+  yyendofinput = (yymajor==0);
+  configparserARG_STORE;
+
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
+  }
+#endif
+
+  do{
+    yyact = yy_find_shift_action(yypParser,yymajor);
+    if( yyact<YYNSTATE ){
+      yy_shift(yypParser,yyact,yymajor,&yyminorunion);
+      yypParser->yyerrcnt--;
+      if( yyendofinput && yypParser->yyidx>=0 ){
+        yymajor = 0;
+      }else{
+        yymajor = YYNOCODE;
+      }
+    }else if( yyact < YYNSTATE + YYNRULE ){
+      yy_reduce(yypParser,yyact-YYNSTATE);
+    }else if( yyact == YY_ERROR_ACTION ){
+      int yymx;
+#ifndef NDEBUG
+      if( yyTraceFILE ){
+        fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
+      }
+#endif
+#ifdef YYERRORSYMBOL
+      /* A syntax error has occurred.
+      ** The response to an error depends upon whether or not the
+      ** grammar defines an error token "ERROR".
+      **
+      ** This is what we do if the grammar does define ERROR:
+      **
+      **  * Call the %syntax_error function.
+      **
+      **  * Begin popping the stack until we enter a state where
+      **    it is legal to shift the error symbol, then shift
+      **    the error symbol.
+      **
+      **  * Set the error count to three.
+      **
+      **  * Begin accepting and shifting new tokens.  No new error
+      **    processing will occur until three tokens have been
+      **    shifted successfully.
+      **
+      */
+      if( yypParser->yyerrcnt<0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yymx = yypParser->yystack[yypParser->yyidx].major;
+      if( yymx==YYERRORSYMBOL || yyerrorhit ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE,"%sDiscard input token %s\n",
+             yyTracePrompt,yyTokenName[yymajor]);
+        }
+#endif
+        yy_destructor(yymajor,&yyminorunion);
+        yymajor = YYNOCODE;
+      }else{
+         while(
+          yypParser->yyidx >= 0 &&
+          yymx != YYERRORSYMBOL &&
+          (yyact = yy_find_shift_action(yypParser,YYERRORSYMBOL)) >= YYNSTATE
+        ){
+          yy_pop_parser_stack(yypParser);
+        }
+        if( yypParser->yyidx < 0 || yymajor==0 ){
+          yy_destructor(yymajor,&yyminorunion);
+          yy_parse_failed(yypParser);
+          yymajor = YYNOCODE;
+        }else if( yymx!=YYERRORSYMBOL ){
+          YYMINORTYPE u2;
+          u2.YYERRSYMDT = 0;
+          yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
+        }
+      }
+      yypParser->yyerrcnt = 3;
+      yyerrorhit = 1;
+#else  /* YYERRORSYMBOL is not defined */
+      /* This is what we do if the grammar does not define ERROR:
+      **
+      **  * Report an error message, and throw away the input token.
+      **
+      **  * If the input token is $, then fail the parse.
+      **
+      ** As before, subsequent error messages are suppressed until
+      ** three input tokens have been successfully shifted.
+      */
+      if( yypParser->yyerrcnt<=0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yypParser->yyerrcnt = 3;
+      yy_destructor(yymajor,&yyminorunion);
+      if( yyendofinput ){
+        yy_parse_failed(yypParser);
+      }
+      yymajor = YYNOCODE;
+#endif
+    }else{
+      yy_accept(yypParser);
+      yymajor = YYNOCODE;
+    }
+  }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
+  return;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/configparser.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/configparser.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/configparser.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,25 @@
+#define TK_EOL                             1
+#define TK_ASSIGN                          2
+#define TK_APPEND                          3
+#define TK_LKEY                            4
+#define TK_PLUS                            5
+#define TK_STRING                          6
+#define TK_INTEGER                         7
+#define TK_LPARAN                          8
+#define TK_RPARAN                          9
+#define TK_COMMA                          10
+#define TK_ARRAY_ASSIGN                   11
+#define TK_GLOBAL                         12
+#define TK_LCURLY                         13
+#define TK_RCURLY                         14
+#define TK_ELSE                           15
+#define TK_DOLLAR                         16
+#define TK_SRVVARNAME                     17
+#define TK_LBRACKET                       18
+#define TK_RBRACKET                       19
+#define TK_EQ                             20
+#define TK_MATCH                          21
+#define TK_NE                             22
+#define TK_NOMATCH                        23
+#define TK_INCLUDE                        24
+#define TK_INCLUDE_SHELL                  25

Added: lighttpd/tags/1.4.19-5+lenny2/src/configparser.y
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/configparser.y	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/configparser.y	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,564 @@
+%token_prefix TK_
+%extra_argument {config_t *ctx}
+%name configparser
+
+%include {
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "configfile.h"
+#include "buffer.h"
+#include "array.h"
+
+static void configparser_push(config_t *ctx, data_config *dc, int isnew) {
+  if (isnew) {
+    dc->context_ndx = ctx->all_configs->used;
+    assert(dc->context_ndx > ctx->current->context_ndx);
+    array_insert_unique(ctx->all_configs, (data_unset *)dc);
+    dc->parent = ctx->current;
+    array_insert_unique(dc->parent->childs, (data_unset *)dc);
+  }
+  array_insert_unique(ctx->configs_stack, (data_unset *)ctx->current);
+  ctx->current = dc;
+}
+
+static data_config *configparser_pop(config_t *ctx) {
+  data_config *old = ctx->current;
+  ctx->current = (data_config *) array_pop(ctx->configs_stack);
+  return old;
+}
+
+/* return a copied variable */
+static data_unset *configparser_get_variable(config_t *ctx, const buffer *key) {
+  data_unset *du;
+  data_config *dc;
+
+#if 0
+  fprintf(stderr, "get var %s\n", key->ptr);
+#endif
+  for (dc = ctx->current; dc; dc = dc->parent) {
+#if 0
+    fprintf(stderr, "get var on block: %s\n", dc->key->ptr);
+    array_print(dc->value, 0);
+#endif
+    if (NULL != (du = array_get_element(dc->value, key->ptr))) {
+      return du->copy(du);
+    }
+  }
+  return NULL;
+}
+
+/* op1 is to be eat/return by this function if success, op1->key is not cared
+   op2 is left untouch, unreferenced
+ */
+data_unset *configparser_merge_data(data_unset *op1, const data_unset *op2) {
+  /* type mismatch */
+  if (op1->type != op2->type) {
+    if (op1->type == TYPE_STRING && op2->type == TYPE_INTEGER) {
+      data_string *ds = (data_string *)op1;
+      buffer_append_long(ds->value, ((data_integer*)op2)->value);
+      return op1;
+    } else if (op1->type == TYPE_INTEGER && op2->type == TYPE_STRING) {
+      data_string *ds = data_string_init();
+      buffer_append_long(ds->value, ((data_integer*)op1)->value);
+      buffer_append_string_buffer(ds->value, ((data_string*)op2)->value);
+      op1->free(op1);
+      return (data_unset *)ds;
+    } else {
+      fprintf(stderr, "data type mismatch, cannot be merge\n");
+      return NULL;
+    }
+  }
+
+  switch (op1->type) {
+    case TYPE_STRING:
+      buffer_append_string_buffer(((data_string *)op1)->value, ((data_string *)op2)->value);
+      break;
+    case TYPE_INTEGER:
+      ((data_integer *)op1)->value += ((data_integer *)op2)->value;
+      break;
+    case TYPE_ARRAY: {
+      array *dst = ((data_array *)op1)->value;
+      array *src = ((data_array *)op2)->value;
+      data_unset *du;
+      size_t i;
+
+      for (i = 0; i < src->used; i ++) {
+        du = (data_unset *)src->data[i];
+        if (du) {
+          array_insert_unique(dst, du->copy(du));
+        }
+      }
+      break;
+    default:
+      assert(0);
+      break;
+    }
+  }
+  return op1;
+}
+
+}
+
+%parse_failure {
+  ctx->ok = 0;
+}
+
+input ::= metalines.
+metalines ::= metalines metaline.
+metalines ::= .
+metaline ::= varline.
+metaline ::= global.
+metaline ::= condlines(A) EOL. { A = NULL; }
+metaline ::= include.
+metaline ::= include_shell.
+metaline ::= EOL.
+
+%type       value                  {data_unset *}
+%type       expression             {data_unset *}
+%type       aelement               {data_unset *}
+%type       condline               {data_config *}
+%type       condlines              {data_config *}
+%type       global                 {data_config *}
+%type       aelements              {array *}
+%type       array                  {array *}
+%type       key                    {buffer *}
+%type       stringop               {buffer *}
+
+%type       cond                   {config_cond_t }
+
+%destructor value                  { $$->free($$); }
+%destructor expression             { $$->free($$); }
+%destructor aelement               { $$->free($$); }
+%destructor aelements              { array_free($$); }
+%destructor array                  { array_free($$); }
+%destructor key                    { buffer_free($$); }
+%destructor stringop               { buffer_free($$); }
+
+%token_type                        {buffer *}
+%token_destructor                  { buffer_free($$); }
+
+varline ::= key(A) ASSIGN expression(B). {
+  if (ctx->ok) {
+    buffer_copy_string_buffer(B->key, A);
+    if (strncmp(A->ptr, "env.", sizeof("env.") - 1) == 0) {
+      fprintf(stderr, "Setting env variable is not supported in conditional %d %s: %s\n",
+          ctx->current->context_ndx,
+          ctx->current->key->ptr, A->ptr);
+      ctx->ok = 0;
+    } else if (NULL == array_get_element(ctx->current->value, B->key->ptr)) {
+      array_insert_unique(ctx->current->value, B);
+      B = NULL;
+    } else {
+      fprintf(stderr, "Duplicate config variable in conditional %d %s: %s\n",
+              ctx->current->context_ndx,
+              ctx->current->key->ptr, B->key->ptr);
+      ctx->ok = 0;
+      B->free(B);
+      B = NULL;
+    }
+  }
+  buffer_free(A);
+  A = NULL;
+}
+
+varline ::= key(A) APPEND expression(B). {
+  array *vars = ctx->current->value;
+  data_unset *du;
+
+  if (strncmp(A->ptr, "env.", sizeof("env.") - 1) == 0) {
+    fprintf(stderr, "Appending env variable is not supported in conditional %d %s: %s\n",
+        ctx->current->context_ndx,
+        ctx->current->key->ptr, A->ptr);
+    ctx->ok = 0;
+  } else if (NULL != (du = array_get_element(vars, A->ptr))) {
+    /* exists in current block */
+    du = configparser_merge_data(du, B);
+    if (NULL == du) {
+      ctx->ok = 0;
+    }
+    else {
+      buffer_copy_string_buffer(du->key, A);
+      array_replace(vars, du);
+    }
+    B->free(B);
+  } else if (NULL != (du = configparser_get_variable(ctx, A))) {
+    du = configparser_merge_data(du, B);
+    if (NULL == du) {
+      ctx->ok = 0;
+      du->free(du);
+    }
+    else {
+      buffer_copy_string_buffer(du->key, A);
+      array_insert_unique(ctx->current->value, du);
+    }
+    B->free(B);
+  } else {
+    buffer_copy_string_buffer(B->key, A);
+    array_insert_unique(ctx->current->value, B);
+  }
+  buffer_free(A);
+  A = NULL;
+  B = NULL;
+}
+
+key(A) ::= LKEY(B). {
+  if (strchr(B->ptr, '.') == NULL) {
+    A = buffer_init_string("var.");
+    buffer_append_string_buffer(A, B);
+    buffer_free(B);
+    B = NULL;
+  } else {
+    A = B;
+    B = NULL;
+  }
+}
+
+expression(A) ::= expression(B) PLUS value(C). {
+  A = configparser_merge_data(B, C);
+  if (NULL == A) {
+    ctx->ok = 0;
+  }
+  B = NULL;
+  C->free(C);
+  C = NULL;
+}
+
+expression(A) ::= value(B). {
+  A = B;
+  B = NULL;
+}
+
+value(A) ::= key(B). {
+  A = NULL;
+  if (strncmp(B->ptr, "env.", sizeof("env.") - 1) == 0) {
+    char *env;
+
+    if (NULL != (env = getenv(B->ptr + 4))) {
+      data_string *ds;
+      ds = data_string_init();
+      buffer_append_string(ds->value, env);
+      A = (data_unset *)ds;
+    }
+    else {
+      fprintf(stderr, "Undefined env variable: %s\n", B->ptr + 4);
+      ctx->ok = 0;
+    }
+  } else if (NULL == (A = configparser_get_variable(ctx, B))) {
+    fprintf(stderr, "Undefined config variable: %s\n", B->ptr);
+    ctx->ok = 0;
+  }
+  if (!A) {
+    /* make a dummy so it won't crash */
+    A = (data_unset *)data_string_init();
+  }
+  buffer_free(B);
+  B = NULL;
+}
+
+value(A) ::= STRING(B). {
+  A = (data_unset *)data_string_init();
+  buffer_copy_string_buffer(((data_string *)(A))->value, B);
+  buffer_free(B);
+  B = NULL;
+}
+
+value(A) ::= INTEGER(B). {
+  A = (data_unset *)data_integer_init();
+  ((data_integer *)(A))->value = strtol(B->ptr, NULL, 10);
+  buffer_free(B);
+  B = NULL;
+}
+value(A) ::= array(B). {
+  A = (data_unset *)data_array_init();
+  array_free(((data_array *)(A))->value);
+  ((data_array *)(A))->value = B;
+  B = NULL;
+}
+array(A) ::= LPARAN RPARAN. {
+  A = array_init();
+}
+array(A) ::= LPARAN aelements(B) RPARAN. {
+  A = B;
+  B = NULL;
+}
+
+aelements(A) ::= aelements(C) COMMA aelement(B). {
+  if (buffer_is_empty(B->key) ||
+      NULL == array_get_element(C, B->key->ptr)) {
+    array_insert_unique(C, B);
+    B = NULL;
+  } else {
+    fprintf(stderr, "Duplicate array-key: %s\n",
+            B->key->ptr);
+    ctx->ok = 0;
+    B->free(B);
+    B = NULL;
+  }
+
+  A = C;
+  C = NULL;
+}
+
+aelements(A) ::= aelements(C) COMMA. {
+  A = C;
+  C = NULL;
+}
+
+aelements(A) ::= aelement(B). {
+  A = array_init();
+  array_insert_unique(A, B);
+  B = NULL;
+}
+
+aelement(A) ::= expression(B). {
+  A = B;
+  B = NULL;
+}
+aelement(A) ::= stringop(B) ARRAY_ASSIGN expression(C). {
+  buffer_copy_string_buffer(C->key, B);
+  buffer_free(B);
+  B = NULL;
+
+  A = C;
+  C = NULL;
+}
+
+eols ::= EOL.
+eols ::= .
+
+globalstart ::= GLOBAL. {
+  data_config *dc;
+  dc = (data_config *)array_get_element(ctx->srv->config_context, "global");
+  assert(dc);
+  configparser_push(ctx, dc, 0);
+}
+
+global(A) ::= globalstart LCURLY metalines RCURLY. {
+  data_config *cur;
+
+  cur = ctx->current;
+  configparser_pop(ctx);
+
+  assert(cur && ctx->current);
+
+  A = cur;
+}
+
+condlines(A) ::= condlines(B) eols ELSE condline(C). {
+  assert(B->context_ndx < C->context_ndx);
+  C->prev = B;
+  B->next = C;
+  A = C;
+  B = NULL;
+  C = NULL;
+}
+
+condlines(A) ::= condline(B). {
+  A = B;
+  B = NULL;
+}
+
+condline(A) ::= context LCURLY metalines RCURLY. {
+  data_config *cur;
+
+  cur = ctx->current;
+  configparser_pop(ctx);
+
+  assert(cur && ctx->current);
+
+  A = cur;
+}
+
+context ::= DOLLAR SRVVARNAME(B) LBRACKET stringop(C) RBRACKET cond(E) expression(D). {
+  data_config *dc;
+  buffer *b, *rvalue, *op;
+
+  if (ctx->ok && D->type != TYPE_STRING) {
+    fprintf(stderr, "rvalue must be string");
+    ctx->ok = 0;
+  }
+
+  switch(E) {
+  case CONFIG_COND_NE:
+    op = buffer_init_string("!=");
+    break;
+  case CONFIG_COND_EQ:
+    op = buffer_init_string("==");
+    break;
+  case CONFIG_COND_NOMATCH:
+    op = buffer_init_string("!~");
+    break;
+  case CONFIG_COND_MATCH:
+    op = buffer_init_string("=~");
+    break;
+  default:
+    assert(0);
+    return;
+  }
+
+  b = buffer_init();
+  buffer_copy_string_buffer(b, ctx->current->key);
+  buffer_append_string(b, "/");
+  buffer_append_string_buffer(b, B);
+  buffer_append_string_buffer(b, C);
+  buffer_append_string_buffer(b, op);
+  rvalue = ((data_string*)D)->value;
+  buffer_append_string_buffer(b, rvalue);
+
+  if (NULL != (dc = (data_config *)array_get_element(ctx->all_configs, b->ptr))) {
+    configparser_push(ctx, dc, 0);
+  } else {
+    struct {
+      comp_key_t comp;
+      char *comp_key;
+      size_t len;
+    } comps[] = {
+      { COMP_SERVER_SOCKET,      CONST_STR_LEN("SERVER[\"socket\"]"   ) },
+      { COMP_HTTP_URL,           CONST_STR_LEN("HTTP[\"url\"]"        ) },
+      { COMP_HTTP_HOST,          CONST_STR_LEN("HTTP[\"host\"]"       ) },
+      { COMP_HTTP_REFERER,       CONST_STR_LEN("HTTP[\"referer\"]"    ) },
+      { COMP_HTTP_USER_AGENT,    CONST_STR_LEN("HTTP[\"useragent\"]"  ) },
+      { COMP_HTTP_USER_AGENT,    CONST_STR_LEN("HTTP[\"user-agent\"]"  ) },
+      { COMP_HTTP_COOKIE,        CONST_STR_LEN("HTTP[\"cookie\"]"     ) },
+      { COMP_HTTP_REMOTE_IP,     CONST_STR_LEN("HTTP[\"remoteip\"]"   ) },
+      { COMP_HTTP_REMOTE_IP,     CONST_STR_LEN("HTTP[\"remote-ip\"]"   ) },
+      { COMP_HTTP_QUERY_STRING,  CONST_STR_LEN("HTTP[\"querystring\"]") },
+      { COMP_HTTP_QUERY_STRING,  CONST_STR_LEN("HTTP[\"query-string\"]") },
+      { COMP_HTTP_REQUEST_METHOD, CONST_STR_LEN("HTTP[\"request-method\"]") },
+      { COMP_HTTP_SCHEME,        CONST_STR_LEN("HTTP[\"scheme\"]"     ) },
+      { COMP_UNSET, NULL, 0 },
+    };
+    size_t i;
+
+    dc = data_config_init();
+
+    buffer_copy_string_buffer(dc->key, b);
+    buffer_copy_string_buffer(dc->op, op);
+    buffer_copy_string_buffer(dc->comp_key, B);
+    buffer_append_string_len(dc->comp_key, CONST_STR_LEN("[\""));
+    buffer_append_string_buffer(dc->comp_key, C);
+    buffer_append_string_len(dc->comp_key, CONST_STR_LEN("\"]"));
+    dc->cond = E;
+
+    for (i = 0; comps[i].comp_key; i ++) {
+      if (buffer_is_equal_string(
+            dc->comp_key, comps[i].comp_key, comps[i].len)) {
+        dc->comp = comps[i].comp;
+        break;
+      }
+    }
+    if (COMP_UNSET == dc->comp) {
+      fprintf(stderr, "error comp_key %s", dc->comp_key->ptr);
+      ctx->ok = 0;
+    }
+
+    switch(E) {
+    case CONFIG_COND_NE:
+    case CONFIG_COND_EQ:
+      dc->string = buffer_init_buffer(rvalue);
+      break;
+    case CONFIG_COND_NOMATCH:
+    case CONFIG_COND_MATCH: {
+#ifdef HAVE_PCRE_H
+      const char *errptr;
+      int erroff;
+
+      if (NULL == (dc->regex =
+          pcre_compile(rvalue->ptr, 0, &errptr, &erroff, NULL))) {
+        dc->string = buffer_init_string(errptr);
+        dc->cond = CONFIG_COND_UNSET;
+
+        fprintf(stderr, "parsing regex failed: %s -> %s at offset %d\n",
+            rvalue->ptr, errptr, erroff);
+
+        ctx->ok = 0;
+      } else if (NULL == (dc->regex_study =
+          pcre_study(dc->regex, 0, &errptr)) &&
+                 errptr != NULL) {
+        fprintf(stderr, "studying regex failed: %s -> %s\n",
+            rvalue->ptr, errptr);
+        ctx->ok = 0;
+      } else {
+        dc->string = buffer_init_buffer(rvalue);
+      }
+#else
+      fprintf(stderr, "can't handle '$%s[%s] =~ ...' as you compiled without pcre support. \n"
+		      "(perhaps just a missing pcre-devel package ?) \n",
+                      B->ptr, C->ptr);
+      ctx->ok = 0;
+#endif
+      break;
+    }
+
+    default:
+      fprintf(stderr, "unknown condition for $%s[%s]\n",
+                      B->ptr, C->ptr);
+      ctx->ok = 0;
+      break;
+    }
+
+    configparser_push(ctx, dc, 1);
+  }
+
+  buffer_free(b);
+  buffer_free(op);
+  buffer_free(B);
+  B = NULL;
+  buffer_free(C);
+  C = NULL;
+  D->free(D);
+  D = NULL;
+}
+cond(A) ::= EQ. {
+  A = CONFIG_COND_EQ;
+}
+cond(A) ::= MATCH. {
+  A = CONFIG_COND_MATCH;
+}
+cond(A) ::= NE. {
+  A = CONFIG_COND_NE;
+}
+cond(A) ::= NOMATCH. {
+  A = CONFIG_COND_NOMATCH;
+}
+
+stringop(A) ::= expression(B). {
+  A = NULL;
+  if (ctx->ok) {
+    if (B->type == TYPE_STRING) {
+      A = buffer_init_buffer(((data_string*)B)->value);
+    } else if (B->type == TYPE_INTEGER) {
+      A = buffer_init();
+      buffer_copy_long(A, ((data_integer *)B)->value);
+    } else {
+      fprintf(stderr, "operand must be string");
+      ctx->ok = 0;
+    }
+  }
+  B->free(B);
+  B = NULL;
+}
+
+include ::= INCLUDE stringop(A). {
+  if (ctx->ok) {
+    if (0 != config_parse_file(ctx->srv, ctx, A->ptr)) {
+      ctx->ok = 0;
+    }
+    buffer_free(A);
+    A = NULL;
+  }
+}
+
+include_shell ::= INCLUDE_SHELL stringop(A). {
+  if (ctx->ok) {
+    if (0 != config_parse_cmd(ctx->srv, ctx, A->ptr)) {
+      ctx->ok = 0;
+    }
+    buffer_free(A);
+    A = NULL;
+  }
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/connections-glue.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/connections-glue.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/connections-glue.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,44 @@
+#include "base.h"
+
+const char *connection_get_state(connection_state_t state) {
+	switch (state) {
+	case CON_STATE_CONNECT: return "connect";
+	case CON_STATE_READ: return "read";
+	case CON_STATE_READ_POST: return "readpost";
+	case CON_STATE_WRITE: return "write";
+	case CON_STATE_CLOSE: return "close";
+	case CON_STATE_ERROR: return "error";
+	case CON_STATE_HANDLE_REQUEST: return "handle-req";
+	case CON_STATE_REQUEST_START: return "req-start";
+	case CON_STATE_REQUEST_END: return "req-end";
+	case CON_STATE_RESPONSE_START: return "resp-start";
+	case CON_STATE_RESPONSE_END: return "resp-end";
+	default: return "(unknown)";
+	}
+}
+
+const char *connection_get_short_state(connection_state_t state) {
+	switch (state) {
+	case CON_STATE_CONNECT: return ".";
+	case CON_STATE_READ: return "r";
+	case CON_STATE_READ_POST: return "R";
+	case CON_STATE_WRITE: return "W";
+	case CON_STATE_CLOSE: return "C";
+	case CON_STATE_ERROR: return "E";
+	case CON_STATE_HANDLE_REQUEST: return "h";
+	case CON_STATE_REQUEST_START: return "q";
+	case CON_STATE_REQUEST_END: return "Q";
+	case CON_STATE_RESPONSE_START: return "s";
+	case CON_STATE_RESPONSE_END: return "S";
+	default: return "x";
+	}
+}
+
+int connection_set_state(server *srv, connection *con, connection_state_t state) {
+	UNUSED(srv);
+
+	con->state = state;
+
+	return 0;
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/connections.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/connections.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/connections.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1787 @@
+#include <sys/stat.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <fcntl.h>
+#include <assert.h>
+
+#include "buffer.h"
+#include "server.h"
+#include "log.h"
+#include "connections.h"
+#include "fdevent.h"
+
+#include "request.h"
+#include "response.h"
+#include "network.h"
+#include "http_chunk.h"
+#include "stat_cache.h"
+#include "joblist.h"
+
+#include "plugin.h"
+
+#include "inet_ntop_cache.h"
+
+#ifdef USE_OPENSSL
+# include <openssl/ssl.h>
+# include <openssl/err.h>
+#endif
+
+#ifdef HAVE_SYS_FILIO_H
+# include <sys/filio.h>
+#endif
+
+#include "sys-socket.h"
+
+typedef struct {
+	        PLUGIN_DATA;
+} plugin_data;
+
+static connection *connections_get_new_connection(server *srv) {
+	connections *conns = srv->conns;
+	size_t i;
+
+	if (conns->size == 0) {
+		conns->size = 128;
+		conns->ptr = NULL;
+		conns->ptr = malloc(sizeof(*conns->ptr) * conns->size);
+		for (i = 0; i < conns->size; i++) {
+			conns->ptr[i] = connection_init(srv);
+		}
+	} else if (conns->size == conns->used) {
+		conns->size += 128;
+		conns->ptr = realloc(conns->ptr, sizeof(*conns->ptr) * conns->size);
+
+		for (i = conns->used; i < conns->size; i++) {
+			conns->ptr[i] = connection_init(srv);
+		}
+	}
+
+	connection_reset(srv, conns->ptr[conns->used]);
+#if 0
+	fprintf(stderr, "%s.%d: add: ", __FILE__, __LINE__);
+	for (i = 0; i < conns->used + 1; i++) {
+		fprintf(stderr, "%d ", conns->ptr[i]->fd);
+	}
+	fprintf(stderr, "\n");
+#endif
+
+	conns->ptr[conns->used]->ndx = conns->used;
+	return conns->ptr[conns->used++];
+}
+
+static int connection_del(server *srv, connection *con) {
+	size_t i;
+	connections *conns = srv->conns;
+	connection *temp;
+
+	if (con == NULL) return -1;
+
+	if (-1 == con->ndx) return -1;
+
+	i = con->ndx;
+
+	/* not last element */
+
+	if (i != conns->used - 1) {
+		temp = conns->ptr[i];
+		conns->ptr[i] = conns->ptr[conns->used - 1];
+		conns->ptr[conns->used - 1] = temp;
+
+		conns->ptr[i]->ndx = i;
+		conns->ptr[conns->used - 1]->ndx = -1;
+	}
+
+	conns->used--;
+
+	con->ndx = -1;
+#if 0
+	fprintf(stderr, "%s.%d: del: (%d)", __FILE__, __LINE__, conns->used);
+	for (i = 0; i < conns->used; i++) {
+		fprintf(stderr, "%d ", conns->ptr[i]->fd);
+	}
+	fprintf(stderr, "\n");
+#endif
+	return 0;
+}
+
+int connection_close(server *srv, connection *con) {
+#ifdef USE_OPENSSL
+	server_socket *srv_sock = con->srv_socket;
+#endif
+
+#ifdef USE_OPENSSL
+	if (srv_sock->is_ssl) {
+		if (con->ssl) SSL_free(con->ssl);
+		con->ssl = NULL;
+	}
+#endif
+
+	fdevent_event_del(srv->ev, &(con->fde_ndx), con->fd);
+	fdevent_unregister(srv->ev, con->fd);
+#ifdef __WIN32
+	if (closesocket(con->fd)) {
+		log_error_write(srv, __FILE__, __LINE__, "sds",
+				"(warning) close:", con->fd, strerror(errno));
+	}
+#else
+	if (close(con->fd)) {
+		log_error_write(srv, __FILE__, __LINE__, "sds",
+				"(warning) close:", con->fd, strerror(errno));
+	}
+#endif
+
+	srv->cur_fds--;
+#if 0
+	log_error_write(srv, __FILE__, __LINE__, "sd",
+			"closed()", con->fd);
+#endif
+
+	connection_del(srv, con);
+	connection_set_state(srv, con, CON_STATE_CONNECT);
+
+	return 0;
+}
+
+#if 0
+static void dump_packet(const unsigned char *data, size_t len) {
+	size_t i, j;
+
+	if (len == 0) return;
+
+	for (i = 0; i < len; i++) {
+		if (i % 16 == 0) fprintf(stderr, "  ");
+
+		fprintf(stderr, "%02x ", data[i]);
+
+		if ((i + 1) % 16 == 0) {
+			fprintf(stderr, "  ");
+			for (j = 0; j <= i % 16; j++) {
+				unsigned char c;
+
+				if (i-15+j >= len) break;
+
+				c = data[i-15+j];
+
+				fprintf(stderr, "%c", c > 32 && c < 128 ? c : '.');
+			}
+
+			fprintf(stderr, "\n");
+		}
+	}
+
+	if (len % 16 != 0) {
+		for (j = i % 16; j < 16; j++) {
+			fprintf(stderr, "   ");
+		}
+
+		fprintf(stderr, "  ");
+		for (j = i & ~0xf; j < len; j++) {
+			unsigned char c;
+
+			c = data[j];
+			fprintf(stderr, "%c", c > 32 && c < 128 ? c : '.');
+		}
+		fprintf(stderr, "\n");
+	}
+}
+#endif
+
+static int connection_handle_read_ssl(server *srv, connection *con) {
+#ifdef USE_OPENSSL
+	int r, ssl_err, len, count = 0, read_offset, toread;
+	buffer *b = NULL;
+
+	if (!con->conf.is_ssl) return -1;
+
+	do {
+		if (NULL != con->read_queue->last)
+			b = con->read_queue->last->mem;
+
+		if (NULL == b || b->size - b->used < 1024) {
+			b = chunkqueue_get_append_buffer(con->read_queue);
+			len = SSL_pending(con->ssl);
+			if (len < 4*1024) len = 4*1024; /* always alloc >= 4k buffer */
+			buffer_prepare_copy(b, len + 1);
+
+			/* overwrite everything with 0 */
+			memset(b->ptr, 0, b->size);
+		}
+
+		read_offset = (b->used > 0) ? b->used - 1 : 0;
+		toread = b->size - 1 - read_offset;
+
+		len = SSL_read(con->ssl, b->ptr + read_offset, toread);
+
+		if (len > 0) {
+			if (b->used > 0) b->used--;
+			b->used += len;
+			b->ptr[b->used++] = '\0';
+
+			con->bytes_read += len;
+			count += len;
+		}
+	} while (len == toread && count < MAX_READ_LIMIT);
+
+
+	if (len < 0) {
+		switch ((r = SSL_get_error(con->ssl, len))) {
+		case SSL_ERROR_WANT_READ:
+		case SSL_ERROR_WANT_WRITE:
+			con->is_readable = 0;
+
+
+			/* the manual says we have to call SSL_read with the same arguments next time.
+			 * we ignore this restriction; no one has complained about it in 1.5 yet, so it probably works anyway.
+			 */
+
+			return 0;
+		case SSL_ERROR_SYSCALL:
+			/**
+			 * man SSL_get_error()
+			 *
+			 * SSL_ERROR_SYSCALL
+			 *   Some I/O error occurred.  The OpenSSL error queue may contain more
+			 *   information on the error.  If the error queue is empty (i.e.
+			 *   ERR_get_error() returns 0), ret can be used to find out more about
+			 *   the error: If ret == 0, an EOF was observed that violates the
+			 *   protocol.  If ret == -1, the underlying BIO reported an I/O error
+			 *   (for socket I/O on Unix systems, consult errno for details).
+			 *
+			 */
+			while((ssl_err = ERR_get_error())) {
+				/* get all errors from the error-queue */
+				log_error_write(srv, __FILE__, __LINE__, "sds", "SSL:",
+						r, ERR_error_string(ssl_err, NULL));
+			}
+
+			switch(errno) {
+			default:
+				log_error_write(srv, __FILE__, __LINE__, "sddds", "SSL:",
+						len, r, errno,
+						strerror(errno));
+				break;
+			}
+
+			break;
+		case SSL_ERROR_ZERO_RETURN:
+			/* clean shutdown on the remote side */
+
+			if (r == 0) {
+				/* FIXME: later */
+			}
+
+			/* fall thourgh */
+		default:
+			while((ssl_err = ERR_get_error())) {
+				/* get all errors from the error-queue */
+				log_error_write(srv, __FILE__, __LINE__, "sds", "SSL:",
+						r, ERR_error_string(ssl_err, NULL));
+			}
+			break;
+		}
+
+		connection_set_state(srv, con, CON_STATE_ERROR);
+
+		return -1;
+	} else if (len == 0) {
+		con->is_readable = 0;
+		/* the other end close the connection -> KEEP-ALIVE */
+
+		return -2;
+	}
+
+	return 0;
+#else
+	return -1;
+#endif
+}
+
+static int connection_handle_read(server *srv, connection *con) {
+	int len;
+	buffer *b;
+	int toread, read_offset;
+
+	if (con->conf.is_ssl) {
+		return connection_handle_read_ssl(srv, con);
+	}
+	b = (NULL != con->read_queue->last) ? con->read_queue->last->mem : NULL;
+
+	/* default size for chunks is 4kb; only use bigger chunks if FIONREAD tells
+	 *  us more than 4kb is available
+	 * if FIONREAD doesn't signal a big chunk we fill the previous buffer
+	 *  if it has >= 1kb free
+	 */
+
+#if defined(__WIN32)
+	if (NULL == b || b->size - b->used < 1024) {
+		b = chunkqueue_get_append_buffer(con->read_queue);
+		buffer_prepare_copy(b, 4 * 1024);
+	}
+
+	read_offset = (b->used == 0) ? 0 : b->used - 1;
+	len = recv(con->fd, b->ptr + read_offset, b->size - 1 - read_offset, 0);
+#else
+	if (ioctl(con->fd, FIONREAD, &toread) || toread == 0 || toread <= 4*1024) {
+		if (NULL == b || b->size - b->used < 1024) {
+			b = chunkqueue_get_append_buffer(con->read_queue);
+			buffer_prepare_copy(b, 4 * 1024);
+		}
+	} else {
+		if (toread > MAX_READ_LIMIT) toread = MAX_READ_LIMIT;
+		b = chunkqueue_get_append_buffer(con->read_queue);
+		buffer_prepare_copy(b, toread + 1);
+        }
+	read_offset = (b->used == 0) ? 0 : b->used - 1;
+	len = read(con->fd, b->ptr + read_offset, b->size - 1 - read_offset);
+
+#endif
+
+	if (len < 0) {
+		con->is_readable = 0;
+
+		if (errno == EAGAIN) return 0;
+		if (errno == EINTR) {
+			/* we have been interrupted before we could read */
+			con->is_readable = 1;
+			return 0;
+		}
+
+		if (errno != ECONNRESET) {
+			/* expected for keep-alive */
+			log_error_write(srv, __FILE__, __LINE__, "ssd", "connection closed - read failed: ", strerror(errno), errno);
+		}
+
+		connection_set_state(srv, con, CON_STATE_ERROR);
+
+		return -1;
+	} else if (len == 0) {
+		con->is_readable = 0;
+		/* the other end close the connection -> KEEP-ALIVE */
+
+		/* pipelining */
+
+		return -2;
+	} else if ((size_t)len < b->size - 1) {
+		/* we got less then expected, wait for the next fd-event */
+
+		con->is_readable = 0;
+	}
+
+	if (b->used > 0) b->used--;
+	b->used += len;
+	b->ptr[b->used++] = '\0';
+
+	con->bytes_read += len;
+#if 0
+	dump_packet(b->ptr, len);
+#endif
+
+	return 0;
+}
+
+static int connection_handle_write_prepare(server *srv, connection *con) {
+	if (con->mode == DIRECT) {
+		/* static files */
+		switch(con->request.http_method) {
+		case HTTP_METHOD_GET:
+		case HTTP_METHOD_POST:
+		case HTTP_METHOD_HEAD:
+		case HTTP_METHOD_PUT:
+		case HTTP_METHOD_MKCOL:
+		case HTTP_METHOD_DELETE:
+		case HTTP_METHOD_COPY:
+		case HTTP_METHOD_MOVE:
+		case HTTP_METHOD_PROPFIND:
+		case HTTP_METHOD_PROPPATCH:
+		case HTTP_METHOD_LOCK:
+		case HTTP_METHOD_UNLOCK:
+			break;
+		case HTTP_METHOD_OPTIONS:
+			/*
+			 * 400 is coming from the request-parser BEFORE uri.path is set
+			 * 403 is from the response handler when noone else catched it
+			 *
+			 * */
+			if ((!con->http_status || con->http_status == 200) && con->uri.path->used &&
+			    con->uri.path->ptr[0] != '*') {
+				response_header_insert(srv, con, CONST_STR_LEN("Allow"), CONST_STR_LEN("OPTIONS, GET, HEAD, POST"));
+
+				con->response.transfer_encoding &= ~HTTP_TRANSFER_ENCODING_CHUNKED;
+				con->parsed_response &= ~HTTP_CONTENT_LENGTH;
+
+				con->http_status = 200;
+				con->file_finished = 1;
+
+				chunkqueue_reset(con->write_queue);
+			}
+			break;
+		default:
+			switch(con->http_status) {
+			case 400: /* bad request */
+			case 414: /* overload request header */
+			case 505: /* unknown protocol */
+			case 207: /* this was webdav */
+				break;
+			default:
+				con->http_status = 501;
+				break;
+			}
+			break;
+		}
+	}
+
+	if (con->http_status == 0) {
+		con->http_status = 403;
+	}
+
+	switch(con->http_status) {
+	case 400: /* class: header + custom body */
+	case 401:
+	case 403:
+	case 404:
+	case 408:
+	case 409:
+	case 411:
+	case 416:
+	case 423:
+	case 500:
+	case 501:
+	case 503:
+	case 505:
+		if (con->mode != DIRECT) break;
+
+		con->file_finished = 0;
+
+		buffer_reset(con->physical.path);
+
+		/* try to send static errorfile */
+		if (!buffer_is_empty(con->conf.errorfile_prefix)) {
+			stat_cache_entry *sce = NULL;
+
+			buffer_copy_string_buffer(con->physical.path, con->conf.errorfile_prefix);
+			buffer_append_string(con->physical.path, get_http_status_body_name(con->http_status));
+
+			if (HANDLER_ERROR != stat_cache_get_entry(srv, con, con->physical.path, &sce)) {
+				con->file_finished = 1;
+
+				http_chunk_append_file(srv, con, con->physical.path, 0, sce->st.st_size);
+				response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(sce->content_type));
+			}
+		}
+
+		if (!con->file_finished) {
+			buffer *b;
+
+			buffer_reset(con->physical.path);
+
+			con->file_finished = 1;
+			b = chunkqueue_get_append_buffer(con->write_queue);
+
+			/* build default error-page */
+			buffer_copy_string(b,
+					   "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"
+					   "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n"
+					   "         \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"
+					   "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"
+					   " <head>\n"
+					   "  <title>");
+			buffer_append_long(b, con->http_status);
+			buffer_append_string(b, " - ");
+			buffer_append_string(b, get_http_status_name(con->http_status));
+
+			buffer_append_string(b,
+					     "</title>\n"
+					     " </head>\n"
+					     " <body>\n"
+					     "  <h1>");
+			buffer_append_long(b, con->http_status);
+			buffer_append_string(b, " - ");
+			buffer_append_string(b, get_http_status_name(con->http_status));
+
+			buffer_append_string(b,"</h1>\n"
+					     " </body>\n"
+					     "</html>\n"
+					     );
+
+			response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/html"));
+		}
+		/* fall through */
+	case 207:
+	case 200: /* class: header + body */
+	case 201:
+	case 300:
+	case 301:
+	case 302:
+	case 303:
+	case 307:
+		break;
+
+	case 206: /* write_queue is already prepared */
+		break;
+	case 204:
+	case 205: /* class: header only */
+	case 304:
+	default:
+		/* disable chunked encoding again as we have no body */
+		con->response.transfer_encoding &= ~HTTP_TRANSFER_ENCODING_CHUNKED;
+		con->parsed_response &= ~HTTP_CONTENT_LENGTH;
+		chunkqueue_reset(con->write_queue);
+
+		con->file_finished = 1;
+		break;
+	}
+
+	if (con->file_finished) {
+		/* we have all the content and chunked encoding is not used, set a content-length */
+
+		if ((!(con->parsed_response & HTTP_CONTENT_LENGTH)) &&
+		    (con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED) == 0) {
+			off_t qlen = chunkqueue_length(con->write_queue);
+
+			/**
+			 * The Content-Length header only can be sent if we have content:
+			 * - HEAD doesn't have a content-body (but have a content-length)
+			 * - 1xx, 204 and 304 don't have a content-body (RFC 2616 Section 4.3)
+			 *
+			 * Otherwise generate a Content-Length header as chunked encoding is not 
+			 * available
+			 */
+			if ((con->http_status >= 100 && con->http_status < 200) ||
+			    con->http_status == 204 ||
+			    con->http_status == 304) {
+				data_string *ds;
+				/* no Content-Body, no Content-Length */
+				if (NULL != (ds = (data_string*) array_get_element(con->response.headers, "Content-Length"))) {
+					buffer_reset(ds->value); // Headers with empty values are ignored for output
+				}
+			} else if (qlen > 0 || con->request.http_method != HTTP_METHOD_HEAD) {
+				/* qlen = 0 is important for Redirects (301, ...) as they MAY have
+				 * a content. Browsers are waiting for a Content otherwise
+				 */
+				buffer_copy_off_t(srv->tmp_buf, qlen);
+
+				response_header_overwrite(srv, con, CONST_STR_LEN("Content-Length"), CONST_BUF_LEN(srv->tmp_buf));
+			}
+		}
+	} else {
+		/**
+		 * the file isn't finished yet, but we have all headers
+		 *
+		 * to get keep-alive we either need:
+		 * - Content-Length: ... (HTTP/1.0 and HTTP/1.0) or
+		 * - Transfer-Encoding: chunked (HTTP/1.1)
+		 */
+
+		if (((con->parsed_response & HTTP_CONTENT_LENGTH) == 0) &&
+		    ((con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED) == 0)) {
+			con->keep_alive = 0;
+		}
+
+		/**
+		 * if the backend sent a Connection: close, follow the wish
+		 *
+		 * NOTE: if the backend sent Connection: Keep-Alive, but no Content-Length, we
+		 * will close the connection. That's fine. We can always decide the close 
+		 * the connection
+		 *
+		 * FIXME: to be nice we should remove the Connection: ... 
+		 */
+		if (con->parsed_response & HTTP_CONNECTION) {
+			/* a subrequest disable keep-alive although the client wanted it */
+			if (con->keep_alive && !con->response.keep_alive) {
+				con->keep_alive = 0;
+			}
+		}
+	}
+
+	if (con->request.http_method == HTTP_METHOD_HEAD) {
+		/**
+		 * a HEAD request has the same as a GET 
+		 * without the content
+		 */
+		con->file_finished = 1;
+
+		chunkqueue_reset(con->write_queue);
+		con->response.transfer_encoding &= ~HTTP_TRANSFER_ENCODING_CHUNKED;
+	}
+
+	http_response_write_header(srv, con);
+
+	return 0;
+}
+
+static int connection_handle_write(server *srv, connection *con) {
+	switch(network_write_chunkqueue(srv, con, con->write_queue)) {
+	case 0:
+		if (con->file_finished) {
+			connection_set_state(srv, con, CON_STATE_RESPONSE_END);
+			joblist_append(srv, con);
+		}
+		break;
+	case -1: /* error on our side */
+		log_error_write(srv, __FILE__, __LINE__, "sd",
+				"connection closed: write failed on fd", con->fd);
+		connection_set_state(srv, con, CON_STATE_ERROR);
+		joblist_append(srv, con);
+		break;
+	case -2: /* remote close */
+		connection_set_state(srv, con, CON_STATE_ERROR);
+		joblist_append(srv, con);
+		break;
+	case 1:
+		con->is_writable = 0;
+
+		/* not finished yet -> WRITE */
+		break;
+	}
+
+	return 0;
+}
+
+
+
+connection *connection_init(server *srv) {
+	connection *con;
+
+	UNUSED(srv);
+
+	con = calloc(1, sizeof(*con));
+
+	con->fd = 0;
+	con->ndx = -1;
+	con->fde_ndx = -1;
+	con->bytes_written = 0;
+	con->bytes_read = 0;
+	con->bytes_header = 0;
+	con->loops_per_request = 0;
+
+#define CLEAN(x) \
+	con->x = buffer_init();
+
+	CLEAN(request.uri);
+	CLEAN(request.request_line);
+	CLEAN(request.request);
+	CLEAN(request.pathinfo);
+
+	CLEAN(request.orig_uri);
+
+	CLEAN(uri.scheme);
+	CLEAN(uri.authority);
+	CLEAN(uri.path);
+	CLEAN(uri.path_raw);
+	CLEAN(uri.query);
+
+	CLEAN(physical.doc_root);
+	CLEAN(physical.path);
+	CLEAN(physical.basedir);
+	CLEAN(physical.rel_path);
+	CLEAN(physical.etag);
+	CLEAN(parse_request);
+
+	CLEAN(authed_user);
+	CLEAN(server_name);
+	CLEAN(error_handler);
+	CLEAN(dst_addr_buf);
+
+#undef CLEAN
+	con->write_queue = chunkqueue_init();
+	con->read_queue = chunkqueue_init();
+	con->request_content_queue = chunkqueue_init();
+	chunkqueue_set_tempdirs(con->request_content_queue, srv->srvconf.upload_tempdirs);
+
+	con->request.headers      = array_init();
+	con->response.headers     = array_init();
+	con->environment     = array_init();
+
+	/* init plugin specific connection structures */
+
+	con->plugin_ctx = calloc(1, (srv->plugins.used + 1) * sizeof(void *));
+
+	con->cond_cache = calloc(srv->config_context->used, sizeof(cond_cache_t));
+	config_setup_connection(srv, con);
+
+	return con;
+}
+
+void connections_free(server *srv) {
+	connections *conns = srv->conns;
+	size_t i;
+
+	for (i = 0; i < conns->size; i++) {
+		connection *con = conns->ptr[i];
+
+		connection_reset(srv, con);
+
+		chunkqueue_free(con->write_queue);
+		chunkqueue_free(con->read_queue);
+		chunkqueue_free(con->request_content_queue);
+		array_free(con->request.headers);
+		array_free(con->response.headers);
+		array_free(con->environment);
+
+#define CLEAN(x) \
+	buffer_free(con->x);
+
+		CLEAN(request.uri);
+		CLEAN(request.request_line);
+		CLEAN(request.request);
+		CLEAN(request.pathinfo);
+
+		CLEAN(request.orig_uri);
+
+		CLEAN(uri.scheme);
+		CLEAN(uri.authority);
+		CLEAN(uri.path);
+		CLEAN(uri.path_raw);
+		CLEAN(uri.query);
+
+		CLEAN(physical.doc_root);
+		CLEAN(physical.path);
+		CLEAN(physical.basedir);
+		CLEAN(physical.etag);
+		CLEAN(physical.rel_path);
+		CLEAN(parse_request);
+
+		CLEAN(authed_user);
+		CLEAN(server_name);
+		CLEAN(error_handler);
+		CLEAN(dst_addr_buf);
+#undef CLEAN
+		free(con->plugin_ctx);
+		free(con->cond_cache);
+
+		free(con);
+	}
+
+	free(conns->ptr);
+}
+
+
+int connection_reset(server *srv, connection *con) {
+	size_t i;
+
+	plugins_call_connection_reset(srv, con);
+
+	con->is_readable = 1;
+	con->is_writable = 1;
+	con->http_status = 0;
+	con->file_finished = 0;
+	con->file_started = 0;
+	con->got_response = 0;
+
+	con->parsed_response = 0;
+
+	con->bytes_written = 0;
+	con->bytes_written_cur_second = 0;
+	con->bytes_read = 0;
+	con->bytes_header = 0;
+	con->loops_per_request = 0;
+
+	con->request.http_method = HTTP_METHOD_UNSET;
+	con->request.http_version = HTTP_VERSION_UNSET;
+
+	con->request.http_if_modified_since = NULL;
+	con->request.http_if_none_match = NULL;
+
+	con->response.keep_alive = 0;
+	con->response.content_length = -1;
+	con->response.transfer_encoding = 0;
+
+	con->mode = DIRECT;
+
+#define CLEAN(x) \
+	if (con->x) buffer_reset(con->x);
+
+	CLEAN(request.uri);
+	CLEAN(request.request_line);
+	CLEAN(request.pathinfo);
+	CLEAN(request.request);
+
+	CLEAN(request.orig_uri);
+
+	CLEAN(uri.scheme);
+	CLEAN(uri.authority);
+	CLEAN(uri.path);
+	CLEAN(uri.path_raw);
+	CLEAN(uri.query);
+
+	CLEAN(physical.doc_root);
+	CLEAN(physical.path);
+	CLEAN(physical.basedir);
+	CLEAN(physical.rel_path);
+	CLEAN(physical.etag);
+
+	CLEAN(parse_request);
+
+	CLEAN(authed_user);
+	CLEAN(server_name);
+	CLEAN(error_handler);
+#undef CLEAN
+
+#define CLEAN(x) \
+	if (con->x) con->x->used = 0;
+
+#undef CLEAN
+
+#define CLEAN(x) \
+		con->request.x = NULL;
+
+	CLEAN(http_host);
+	CLEAN(http_range);
+	CLEAN(http_content_type);
+#undef CLEAN
+	con->request.content_length = 0;
+
+	array_reset(con->request.headers);
+	array_reset(con->response.headers);
+	array_reset(con->environment);
+
+	chunkqueue_reset(con->write_queue);
+	chunkqueue_reset(con->request_content_queue);
+
+	/* the plugins should cleanup themself */
+	for (i = 0; i < srv->plugins.used; i++) {
+		plugin *p = ((plugin **)(srv->plugins.ptr))[i];
+		plugin_data *pd = p->data;
+
+		if (!pd) continue;
+
+		if (con->plugin_ctx[pd->id] != NULL) {
+			log_error_write(srv, __FILE__, __LINE__, "sb", "missing cleanup in", p->name);
+		}
+
+		con->plugin_ctx[pd->id] = NULL;
+	}
+
+	/* The cond_cache gets reset in response.c */
+//	config_cond_cache_reset(srv, con);
+
+	con->header_len = 0;
+	con->in_error_handler = 0;
+
+	config_setup_connection(srv, con);
+
+	return 0;
+}
+
+/**
+ * handle all header and content read
+ *
+ * we get called by the state-engine and by the fdevent-handler
+ */
+int connection_handle_read_state(server *srv, connection *con)  {
+	connection_state_t ostate = con->state;
+	chunk *c, *last_chunk;
+	off_t last_offset;
+	chunkqueue *cq = con->read_queue;
+	chunkqueue *dst_cq = con->request_content_queue;
+	int is_closed = 0; /* the connection got closed, if we don't have a complete header, -> error */
+
+	if (con->is_readable) {
+		con->read_idle_ts = srv->cur_ts;
+
+		switch(connection_handle_read(srv, con)) {
+		case -1:
+			return -1;
+		case -2:
+			is_closed = 1;
+			break;
+		default:
+			break;
+		}
+	}
+
+	/* the last chunk might be empty */
+	for (c = cq->first; c;) {
+		if (cq->first == c && c->mem->used == 0) {
+			/* the first node is empty */
+			/* ... and it is empty, move it to unused */
+
+			cq->first = c->next;
+			if (cq->first == NULL) cq->last = NULL;
+
+			c->next = cq->unused;
+			cq->unused = c;
+			cq->unused_chunks++;
+
+			c = cq->first;
+		} else if (c->next && c->next->mem->used == 0) {
+			chunk *fc;
+			/* next node is the last one */
+			/* ... and it is empty, move it to unused */
+
+			fc = c->next;
+			c->next = fc->next;
+
+			fc->next = cq->unused;
+			cq->unused = fc;
+			cq->unused_chunks++;
+
+			/* the last node was empty */
+			if (c->next == NULL) {
+				cq->last = c;
+			}
+
+			c = c->next;
+		} else {
+			c = c->next;
+		}
+	}
+
+	/* we might have got several packets at once
+	 */
+
+	switch(ostate) {
+	case CON_STATE_READ:
+		/* if there is a \r\n\r\n in the chunkqueue
+		 *
+		 * scan the chunk-queue twice
+		 * 1. to find the \r\n\r\n
+		 * 2. to copy the header-packet
+		 *
+		 */
+
+		last_chunk = NULL;
+		last_offset = 0;
+
+		for (c = cq->first; !last_chunk && c; c = c->next) {
+			buffer b;
+			size_t i;
+
+			b.ptr = c->mem->ptr + c->offset;
+			b.used = c->mem->used - c->offset;
+
+			for (i = 0; !last_chunk && i < b.used; i++) {
+				char ch = b.ptr[i];
+				size_t have_chars = 0;
+
+				switch (ch) {
+				case '\r':
+					/* we have to do a 4 char lookup */
+					have_chars = b.used - i - 1;
+
+					if (have_chars >= 4) {
+						/* all chars are in this buffer */
+
+						if (0 == strncmp(b.ptr + i, "\r\n\r\n", 4)) {
+							/* found */
+							last_chunk = c;
+							last_offset = i + 4;
+
+							break;
+						}
+					} else {
+						chunk *lookahead_chunk = c->next;
+						size_t missing_chars;
+						/* looks like the following chars are not in the same chunk */
+
+						missing_chars = 4 - have_chars;
+
+						if (lookahead_chunk && lookahead_chunk->type == MEM_CHUNK) {
+							/* is the chunk long enough to contain the other chars ? */
+
+							if (lookahead_chunk->mem->used > missing_chars) {
+								if (0 == strncmp(b.ptr + i, "\r\n\r\n", have_chars) &&
+								    0 == strncmp(lookahead_chunk->mem->ptr, "\r\n\r\n" + have_chars, missing_chars)) {
+
+									last_chunk = lookahead_chunk;
+									last_offset = missing_chars;
+
+									break;
+								}
+							} else {
+								/* a splited \r \n */
+								break;
+							}
+						}
+					}
+
+					break;
+				}
+			}
+		}
+
+		/* found */
+		if (last_chunk) {
+			buffer_reset(con->request.request);
+
+			for (c = cq->first; c; c = c->next) {
+				buffer b;
+
+				b.ptr = c->mem->ptr + c->offset;
+				b.used = c->mem->used - c->offset;
+
+				if (c == last_chunk) {
+					b.used = last_offset + 1;
+				}
+
+				buffer_append_string_buffer(con->request.request, &b);
+
+				if (c == last_chunk) {
+					c->offset += last_offset;
+
+					break;
+				} else {
+					/* the whole packet was copied */
+					c->offset = c->mem->used - 1;
+				}
+			}
+
+			connection_set_state(srv, con, CON_STATE_REQUEST_END);
+		} else if (chunkqueue_length(cq) > 64 * 1024) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "oversized request-header -> sending Status 414");
+
+			con->http_status = 414; /* Request-URI too large */
+			con->keep_alive = 0;
+			connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+		}
+		break;
+	case CON_STATE_READ_POST:
+		for (c = cq->first; c && (dst_cq->bytes_in != (off_t)con->request.content_length); c = c->next) {
+			off_t weWant, weHave, toRead;
+
+			weWant = con->request.content_length - dst_cq->bytes_in;
+
+			assert(c->mem->used);
+
+			weHave = c->mem->used - c->offset - 1;
+
+			toRead = weHave > weWant ? weWant : weHave;
+
+			/* the new way, copy everything into a chunkqueue whcih might use tempfiles */
+			if (con->request.content_length > 64 * 1024) {
+				chunk *dst_c = NULL;
+				/* copy everything to max 1Mb sized tempfiles */
+
+				/*
+				 * if the last chunk is
+				 * - smaller than 1Mb (size < 1Mb)
+				 * - not read yet (offset == 0)
+				 * -> append to it
+				 * otherwise
+				 * -> create a new chunk
+				 *
+				 * */
+
+				if (dst_cq->last &&
+				    dst_cq->last->type == FILE_CHUNK &&
+				    dst_cq->last->file.is_temp &&
+				    dst_cq->last->offset == 0) {
+					/* ok, take the last chunk for our job */
+
+			 		if (dst_cq->last->file.length < 1 * 1024 * 1024) {
+						dst_c = dst_cq->last;
+
+						if (dst_c->file.fd == -1) {
+							/* this should not happen as we cache the fd, but you never know */
+							dst_c->file.fd = open(dst_c->file.name->ptr, O_WRONLY | O_APPEND);
+						}
+					} else {
+						/* the chunk is too large now, close it */
+						dst_c = dst_cq->last;
+
+						if (dst_c->file.fd != -1) {
+							close(dst_c->file.fd);
+							dst_c->file.fd = -1;
+						}
+						dst_c = chunkqueue_get_append_tempfile(dst_cq);
+					}
+				} else {
+					dst_c = chunkqueue_get_append_tempfile(dst_cq);
+				}
+
+				/* we have a chunk, let's write to it */
+
+				if (dst_c->file.fd == -1) {
+					/* we don't have file to write to,
+					 * EACCES might be one reason.
+					 *
+					 * Instead of sending 500 we send 413 and say the request is too large
+					 *  */
+
+					log_error_write(srv, __FILE__, __LINE__, "sbs",
+							"denying upload as opening to temp-file for upload failed:",
+							dst_c->file.name, strerror(errno));
+
+					con->http_status = 413; /* Request-Entity too large */
+					con->keep_alive = 0;
+					connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+
+					break;
+				}
+
+				if (toRead != write(dst_c->file.fd, c->mem->ptr + c->offset, toRead)) {
+					/* write failed for some reason ... disk full ? */
+					log_error_write(srv, __FILE__, __LINE__, "sbs",
+							"denying upload as writing to file failed:",
+							dst_c->file.name, strerror(errno));
+
+					con->http_status = 413; /* Request-Entity too large */
+					con->keep_alive = 0;
+					connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+
+					close(dst_c->file.fd);
+					dst_c->file.fd = -1;
+
+					break;
+				}
+
+				dst_c->file.length += toRead;
+
+				if (dst_cq->bytes_in + toRead == (off_t)con->request.content_length) {
+					/* we read everything, close the chunk */
+					close(dst_c->file.fd);
+					dst_c->file.fd = -1;
+				}
+			} else {
+				buffer *b;
+
+				if (dst_cq->last &&
+						dst_cq->last->type == MEM_CHUNK) {
+					b = dst_cq->last->mem;
+				} else {
+					b = chunkqueue_get_append_buffer(dst_cq);
+					/* prepare buffer size for remaining POST data; is < 64kb */
+					buffer_prepare_copy(b, con->request.content_length - dst_cq->bytes_in + 1);
+				}
+				buffer_append_string_len(b, c->mem->ptr + c->offset, toRead);
+			}
+
+			c->offset += toRead;
+			dst_cq->bytes_in += toRead;
+		}
+
+		/* Content is ready */
+		if (dst_cq->bytes_in == (off_t)con->request.content_length) {
+			connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+		}
+
+		break;
+	default: break;
+	}
+
+	/* the connection got closed and we didn't got enough data to leave one of the READ states
+	 * the only way is to leave here */
+	if (is_closed && ostate == con->state) {
+		connection_set_state(srv, con, CON_STATE_ERROR);
+	}
+
+	chunkqueue_remove_finished_chunks(cq);
+
+	return 0;
+}
+
+handler_t connection_handle_fdevent(void *s, void *context, int revents) {
+	server     *srv = (server *)s;
+	connection *con = context;
+
+	joblist_append(srv, con);
+
+	if (revents & FDEVENT_IN) {
+		con->is_readable = 1;
+#if 0
+		log_error_write(srv, __FILE__, __LINE__, "sd", "read-wait - done", con->fd);
+#endif
+	}
+	if (revents & FDEVENT_OUT) {
+		con->is_writable = 1;
+		/* we don't need the event twice */
+	}
+
+
+	if (revents & ~(FDEVENT_IN | FDEVENT_OUT)) {
+		/* looks like an error */
+
+		/* FIXME: revents = 0x19 still means that we should read from the queue */
+		if (revents & FDEVENT_HUP) {
+			if (con->state == CON_STATE_CLOSE) {
+				con->close_timeout_ts = 0;
+			} else {
+				/* sigio reports the wrong event here
+				 *
+				 * there was no HUP at all
+				 */
+#ifdef USE_LINUX_SIGIO
+				if (srv->ev->in_sigio == 1) {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+						"connection closed: poll() -> HUP", con->fd);
+				} else {
+					connection_set_state(srv, con, CON_STATE_ERROR);
+				}
+#else
+				connection_set_state(srv, con, CON_STATE_ERROR);
+#endif
+
+			}
+		} else if (revents & FDEVENT_ERR) {
+#ifndef USE_LINUX_SIGIO
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"connection closed: poll() -> ERR", con->fd);
+#endif
+			connection_set_state(srv, con, CON_STATE_ERROR);
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"connection closed: poll() -> ???", revents);
+		}
+	}
+
+	if (con->state == CON_STATE_READ ||
+	    con->state == CON_STATE_READ_POST) {
+		connection_handle_read_state(srv, con);
+	}
+
+	if (con->state == CON_STATE_WRITE &&
+	    !chunkqueue_is_empty(con->write_queue) &&
+	    con->is_writable) {
+
+		if (-1 == connection_handle_write(srv, con)) {
+			connection_set_state(srv, con, CON_STATE_ERROR);
+
+			log_error_write(srv, __FILE__, __LINE__, "ds",
+					con->fd,
+					"handle write failed.");
+		} else if (con->state == CON_STATE_WRITE) {
+			con->write_request_ts = srv->cur_ts;
+		}
+	}
+
+	if (con->state == CON_STATE_CLOSE) {
+		/* flush the read buffers */
+		int b;
+
+		if (ioctl(con->fd, FIONREAD, &b)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"ioctl() failed", strerror(errno));
+		}
+
+		if (b > 0) {
+			char buf[1024];
+			log_error_write(srv, __FILE__, __LINE__, "sdd",
+					"CLOSE-read()", con->fd, b);
+
+			/* */
+			read(con->fd, buf, sizeof(buf));
+		} else {
+			/* nothing to read */
+
+			con->close_timeout_ts = 0;
+		}
+	}
+
+	return HANDLER_FINISHED;
+}
+
+
+connection *connection_accept(server *srv, server_socket *srv_socket) {
+	/* accept everything */
+
+	/* search an empty place */
+	int cnt;
+	sock_addr cnt_addr;
+	socklen_t cnt_len;
+	/* accept it and register the fd */
+
+	/**
+	 * check if we can still open a new connections
+	 *
+	 * see #1216
+	 */
+
+	if (srv->conns->used >= srv->max_conns) {
+		return NULL;
+	}
+
+	cnt_len = sizeof(cnt_addr);
+
+	if (-1 == (cnt = accept(srv_socket->fd, (struct sockaddr *) &cnt_addr, &cnt_len))) {
+		switch (errno) {
+		case EAGAIN:
+#if EWOULDBLOCK != EAGAIN
+		case EWOULDBLOCK:
+#endif
+		case EINTR:
+			/* we were stopped _before_ we had a connection */
+		case ECONNABORTED: /* this is a FreeBSD thingy */
+			/* we were stopped _after_ we had a connection */
+			break;
+		case EMFILE:
+			/* out of fds */
+			break;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "ssd", "accept failed:", strerror(errno), errno);
+		}
+		return NULL;
+	} else {
+		connection *con;
+
+		srv->cur_fds++;
+
+		/* ok, we have the connection, register it */
+#if 0
+		log_error_write(srv, __FILE__, __LINE__, "sd",
+				"appected()", cnt);
+#endif
+		srv->con_opened++;
+
+		con = connections_get_new_connection(srv);
+
+		con->fd = cnt;
+		con->fde_ndx = -1;
+#if 0
+		gettimeofday(&(con->start_tv), NULL);
+#endif
+		fdevent_register(srv->ev, con->fd, connection_handle_fdevent, con);
+
+		connection_set_state(srv, con, CON_STATE_REQUEST_START);
+
+		con->connection_start = srv->cur_ts;
+		con->dst_addr = cnt_addr;
+		buffer_copy_string(con->dst_addr_buf, inet_ntop_cache_get_ip(srv, &(con->dst_addr)));
+		con->srv_socket = srv_socket;
+
+		if (-1 == (fdevent_fcntl_set(srv->ev, con->fd))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "fcntl failed: ", strerror(errno));
+			return NULL;
+		}
+#ifdef USE_OPENSSL
+		/* connect FD to SSL */
+		if (srv_socket->is_ssl) {
+			if (NULL == (con->ssl = SSL_new(srv_socket->ssl_ctx))) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
+						ERR_error_string(ERR_get_error(), NULL));
+
+				return NULL;
+			}
+
+			SSL_set_accept_state(con->ssl);
+			con->conf.is_ssl=1;
+
+			if (1 != (SSL_set_fd(con->ssl, cnt))) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
+						ERR_error_string(ERR_get_error(), NULL));
+				return NULL;
+			}
+		}
+#endif
+		return con;
+	}
+}
+
+
+int connection_state_machine(server *srv, connection *con) {
+	int done = 0, r;
+#ifdef USE_OPENSSL
+	server_socket *srv_sock = con->srv_socket;
+#endif
+
+	if (srv->srvconf.log_state_handling) {
+		log_error_write(srv, __FILE__, __LINE__, "sds",
+				"state at start",
+				con->fd,
+				connection_get_state(con->state));
+	}
+
+	while (done == 0) {
+		size_t ostate = con->state;
+		int b;
+
+		switch (con->state) {
+		case CON_STATE_REQUEST_START: /* transient */
+			if (srv->srvconf.log_state_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"state for fd", con->fd, connection_get_state(con->state));
+			}
+
+			con->request_start = srv->cur_ts;
+			con->read_idle_ts = srv->cur_ts;
+
+			con->request_count++;
+			con->loops_per_request = 0;
+
+			connection_set_state(srv, con, CON_STATE_READ);
+
+			/* patch con->conf.is_ssl if the connection is a ssl-socket already */
+
+#ifdef USE_OPENSSL
+			con->conf.is_ssl = srv_sock->is_ssl;
+#endif
+
+			break;
+		case CON_STATE_REQUEST_END: /* transient */
+			if (srv->srvconf.log_state_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"state for fd", con->fd, connection_get_state(con->state));
+			}
+
+			if (http_request_parse(srv, con)) {
+				/* we have to read some data from the POST request */
+
+				connection_set_state(srv, con, CON_STATE_READ_POST);
+
+				break;
+			}
+
+			connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+
+			break;
+		case CON_STATE_HANDLE_REQUEST:
+			/*
+			 * the request is parsed
+			 *
+			 * decided what to do with the request
+			 * -
+			 *
+			 *
+			 */
+
+			if (srv->srvconf.log_state_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"state for fd", con->fd, connection_get_state(con->state));
+			}
+
+			switch (r = http_response_prepare(srv, con)) {
+			case HANDLER_FINISHED:
+				if (con->mode == DIRECT) {
+					if (con->http_status == 404 ||
+					    con->http_status == 403) {
+						/* 404 error-handler */
+
+						if (con->in_error_handler == 0 &&
+						    (!buffer_is_empty(con->conf.error_handler) ||
+						     !buffer_is_empty(con->error_handler))) {
+							/* call error-handler */
+
+							con->error_handler_saved_status = con->http_status;
+							con->http_status = 0;
+
+							if (buffer_is_empty(con->error_handler)) {
+								buffer_copy_string_buffer(con->request.uri, con->conf.error_handler);
+							} else {
+								buffer_copy_string_buffer(con->request.uri, con->error_handler);
+							}
+							buffer_reset(con->physical.path);
+
+							con->in_error_handler = 1;
+
+							connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+
+							done = -1;
+							break;
+						} else if (con->in_error_handler) {
+							/* error-handler is a 404 */
+
+							con->http_status = con->error_handler_saved_status;
+						}
+					} else if (con->in_error_handler) {
+						/* error-handler is back and has generated content */
+						/* if Status: was set, take it otherwise use 200 */
+					}
+				}
+				if (con->http_status == 0) con->http_status = 200;
+
+				/* we have something to send, go on */
+				connection_set_state(srv, con, CON_STATE_RESPONSE_START);
+				break;
+			case HANDLER_WAIT_FOR_FD:
+				srv->want_fds++;
+
+				fdwaitqueue_append(srv, con);
+
+				connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+
+				break;
+			case HANDLER_COMEBACK:
+				done = -1;
+			case HANDLER_WAIT_FOR_EVENT:
+				/* come back here */
+				connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+
+				break;
+			case HANDLER_ERROR:
+				/* something went wrong */
+				connection_set_state(srv, con, CON_STATE_ERROR);
+				break;
+			default:
+				log_error_write(srv, __FILE__, __LINE__, "sdd", "unknown ret-value: ", con->fd, r);
+				break;
+			}
+
+			break;
+		case CON_STATE_RESPONSE_START:
+			/*
+			 * the decision is done
+			 * - create the HTTP-Response-Header
+			 *
+			 */
+
+			if (srv->srvconf.log_state_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"state for fd", con->fd, connection_get_state(con->state));
+			}
+
+			if (-1 == connection_handle_write_prepare(srv, con)) {
+				connection_set_state(srv, con, CON_STATE_ERROR);
+
+				break;
+			}
+
+			connection_set_state(srv, con, CON_STATE_WRITE);
+			break;
+		case CON_STATE_RESPONSE_END: /* transient */
+			/* log the request */
+
+			if (srv->srvconf.log_state_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"state for fd", con->fd, connection_get_state(con->state));
+			}
+
+			plugins_call_handle_request_done(srv, con);
+
+			srv->con_written++;
+
+			if (con->keep_alive) {
+				connection_set_state(srv, con, CON_STATE_REQUEST_START);
+
+#if 0
+				con->request_start = srv->cur_ts;
+				con->read_idle_ts = srv->cur_ts;
+#endif
+			} else {
+				switch(r = plugins_call_handle_connection_close(srv, con)) {
+				case HANDLER_GO_ON:
+				case HANDLER_FINISHED:
+					break;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "sd", "unhandling return value", r);
+					break;
+				}
+
+#ifdef USE_OPENSSL
+				if (srv_sock->is_ssl) {
+					switch (SSL_shutdown(con->ssl)) {
+					case 1:
+						/* done */
+						break;
+					case 0:
+						/* wait for fd-event
+						 *
+						 * FIXME: wait for fdevent and call SSL_shutdown again
+						 *
+						 */
+
+						break;
+					default:
+						log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
+								ERR_error_string(ERR_get_error(), NULL));
+					}
+				}
+#endif
+				connection_close(srv, con);
+
+				srv->con_closed++;
+			}
+
+			connection_reset(srv, con);
+
+			break;
+		case CON_STATE_CONNECT:
+			if (srv->srvconf.log_state_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"state for fd", con->fd, connection_get_state(con->state));
+			}
+
+			chunkqueue_reset(con->read_queue);
+
+			con->request_count = 0;
+
+			break;
+		case CON_STATE_CLOSE:
+			if (srv->srvconf.log_state_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"state for fd", con->fd, connection_get_state(con->state));
+			}
+
+			if (con->keep_alive) {
+				if (ioctl(con->fd, FIONREAD, &b)) {
+					log_error_write(srv, __FILE__, __LINE__, "ss",
+							"ioctl() failed", strerror(errno));
+				}
+				if (b > 0) {
+					char buf[1024];
+					log_error_write(srv, __FILE__, __LINE__, "sdd",
+							"CLOSE-read()", con->fd, b);
+
+					/* */
+					read(con->fd, buf, sizeof(buf));
+				} else {
+					/* nothing to read */
+
+					con->close_timeout_ts = 0;
+				}
+			} else {
+				con->close_timeout_ts = 0;
+			}
+
+			if (srv->cur_ts - con->close_timeout_ts > 1) {
+				connection_close(srv, con);
+
+				if (srv->srvconf.log_state_handling) {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+							"connection closed for fd", con->fd);
+				}
+			}
+
+			break;
+		case CON_STATE_READ_POST:
+		case CON_STATE_READ:
+			if (srv->srvconf.log_state_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"state for fd", con->fd, connection_get_state(con->state));
+			}
+
+			connection_handle_read_state(srv, con);
+			break;
+		case CON_STATE_WRITE:
+			if (srv->srvconf.log_state_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"state for fd", con->fd, connection_get_state(con->state));
+			}
+
+			/* only try to write if we have something in the queue */
+			if (!chunkqueue_is_empty(con->write_queue)) {
+#if 0
+				log_error_write(srv, __FILE__, __LINE__, "dsd",
+						con->fd,
+						"packets to write:",
+						con->write_queue->used);
+#endif
+			}
+			if (!chunkqueue_is_empty(con->write_queue) && con->is_writable) {
+				if (-1 == connection_handle_write(srv, con)) {
+					log_error_write(srv, __FILE__, __LINE__, "ds",
+							con->fd,
+							"handle write failed.");
+					connection_set_state(srv, con, CON_STATE_ERROR);
+				} else if (con->state == CON_STATE_WRITE) {
+					con->write_request_ts = srv->cur_ts;
+				}
+			}
+
+			break;
+		case CON_STATE_ERROR: /* transient */
+
+			/* even if the connection was drop we still have to write it to the access log */
+			if (con->http_status) {
+				plugins_call_handle_request_done(srv, con);
+			}
+#ifdef USE_OPENSSL
+			if (srv_sock->is_ssl) {
+				int ret;
+				switch ((ret = SSL_shutdown(con->ssl))) {
+				case 1:
+					/* ok */
+					break;
+				case 0:
+					SSL_shutdown(con->ssl);
+					break;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "sds", "SSL:",
+							SSL_get_error(con->ssl, ret),
+							ERR_error_string(ERR_get_error(), NULL));
+					return -1;
+				}
+			}
+#endif
+
+			switch(con->mode) {
+			case DIRECT:
+#if 0
+				log_error_write(srv, __FILE__, __LINE__, "sd",
+						"emergency exit: direct",
+						con->fd);
+#endif
+				break;
+			default:
+				switch(r = plugins_call_handle_connection_close(srv, con)) {
+				case HANDLER_GO_ON:
+				case HANDLER_FINISHED:
+					break;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "");
+					break;
+				}
+				break;
+			}
+
+			connection_reset(srv, con);
+
+			/* close the connection */
+			if ((con->keep_alive == 1) &&
+			    (0 == shutdown(con->fd, SHUT_WR))) {
+				con->close_timeout_ts = srv->cur_ts;
+				connection_set_state(srv, con, CON_STATE_CLOSE);
+
+				if (srv->srvconf.log_state_handling) {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+							"shutdown for fd", con->fd);
+				}
+			} else {
+				connection_close(srv, con);
+			}
+
+			con->keep_alive = 0;
+
+			srv->con_closed++;
+
+			break;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "sdd",
+					"unknown state:", con->fd, con->state);
+
+			break;
+		}
+
+		if (done == -1) {
+			done = 0;
+		} else if (ostate == con->state) {
+			done = 1;
+		}
+	}
+
+	if (srv->srvconf.log_state_handling) {
+		log_error_write(srv, __FILE__, __LINE__, "sds",
+				"state at exit:",
+				con->fd,
+				connection_get_state(con->state));
+	}
+
+	switch(con->state) {
+	case CON_STATE_READ_POST:
+	case CON_STATE_READ:
+	case CON_STATE_CLOSE:
+		fdevent_event_add(srv->ev, &(con->fde_ndx), con->fd, FDEVENT_IN);
+		break;
+	case CON_STATE_WRITE:
+		/* request write-fdevent only if we really need it
+		 * - if we have data to write
+		 * - if the socket is not writable yet
+		 */
+		if (!chunkqueue_is_empty(con->write_queue) &&
+		    (con->is_writable == 0) &&
+		    (con->traffic_limit_reached == 0)) {
+			fdevent_event_add(srv->ev, &(con->fde_ndx), con->fd, FDEVENT_OUT);
+		} else {
+			fdevent_event_del(srv->ev, &(con->fde_ndx), con->fd);
+		}
+		break;
+	default:
+		fdevent_event_del(srv->ev, &(con->fde_ndx), con->fd);
+		break;
+	}
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/connections.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/connections.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/connections.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,19 @@
+#ifndef _CONNECTIONS_H_
+#define _CONNECTIONS_H_
+
+#include "server.h"
+#include "fdevent.h"
+
+connection *connection_init(server *srv);
+int connection_reset(server *srv, connection *con);
+void connections_free(server *srv);
+
+connection * connection_accept(server *srv, server_socket *srv_sock);
+int connection_close(server *srv, connection *con);
+
+int connection_set_state(server *srv, connection *con, connection_state_t state);
+const char * connection_get_state(connection_state_t state);
+const char * connection_get_short_state(connection_state_t state);
+int connection_state_machine(server *srv, connection *con);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/crc32.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/crc32.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/crc32.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,82 @@
+#include "crc32.h"
+
+#define CRC32C(c,d) (c=(c>>8)^crc_c[(c^(d))&0xFF])
+
+static const unsigned int crc_c[256] = {
+	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
+	0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
+	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
+	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
+	0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
+	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
+	0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
+	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
+	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+	0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
+	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
+	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
+	0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
+	0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
+	0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
+	0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
+	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
+	0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+	0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
+	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
+	0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
+	0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
+	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+	0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
+	0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
+	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
+	0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
+	0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
+	0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
+	0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
+	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
+	0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+	0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
+	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
+	0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
+	0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
+	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+	0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
+	0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
+	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
+	0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
+	0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
+	0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
+	0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
+	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
+	0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+	0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
+	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
+	0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
+	0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
+	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+	0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
+	0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
+	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
+	0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
+	0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
+	0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
+	0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
+	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
+};
+
+
+uint32_t generate_crc32c(char *buffer, size_t length) {
+  size_t i;
+  uint32_t crc32 = ~0L;
+
+  for (i = 0; i < length; i++){
+      CRC32C(crc32, (unsigned char)buffer[i]);
+  }
+  return ~crc32;
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/crc32.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/crc32.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/crc32.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,18 @@
+#ifndef __crc32cr_table_h__
+#define __crc32cr_table_h__
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+
+#if defined HAVE_STDINT_H
+#include <stdint.h>
+#elif defined HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+uint32_t generate_crc32c(char *string, size_t length);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/data_array.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/data_array.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/data_array.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,65 @@
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "array.h"
+
+static data_unset *data_array_copy(const data_unset *s) {
+	data_array *src = (data_array *)s;
+	data_array *ds = data_array_init();
+
+	buffer_copy_string_buffer(ds->key, src->key);
+	array_free(ds->value);
+	ds->value = array_init_array(src->value);
+	ds->is_index_key = src->is_index_key;
+	return (data_unset *)ds;
+}
+
+static void data_array_free(data_unset *d) {
+	data_array *ds = (data_array *)d;
+
+	buffer_free(ds->key);
+	array_free(ds->value);
+
+	free(d);
+}
+
+static void data_array_reset(data_unset *d) {
+	data_array *ds = (data_array *)d;
+
+	/* reused array elements */
+	buffer_reset(ds->key);
+	array_reset(ds->value);
+}
+
+static int data_array_insert_dup(data_unset *dst, data_unset *src) {
+	UNUSED(dst);
+
+	src->free(src);
+
+	return 0;
+}
+
+static void data_array_print(const data_unset *d, int depth) {
+	data_array *ds = (data_array *)d;
+
+	array_print(ds->value, depth);
+}
+
+data_array *data_array_init(void) {
+	data_array *ds;
+
+	ds = calloc(1, sizeof(*ds));
+
+	ds->key = buffer_init();
+	ds->value = array_init();
+
+	ds->copy = data_array_copy;
+	ds->free = data_array_free;
+	ds->reset = data_array_reset;
+	ds->insert_dup = data_array_insert_dup;
+	ds->print = data_array_print;
+	ds->type = TYPE_ARRAY;
+
+	return ds;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/data_config.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/data_config.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/data_config.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,138 @@
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "array.h"
+
+static data_unset *data_config_copy(const data_unset *s) {
+	data_config *src = (data_config *)s;
+	data_config *ds = data_config_init();
+
+	buffer_copy_string_buffer(ds->key, src->key);
+	buffer_copy_string_buffer(ds->comp_key, src->comp_key);
+	array_free(ds->value);
+	ds->value = array_init_array(src->value);
+	return (data_unset *)ds;
+}
+
+static void data_config_free(data_unset *d) {
+	data_config *ds = (data_config *)d;
+
+	buffer_free(ds->key);
+	buffer_free(ds->op);
+	buffer_free(ds->comp_key);
+
+	array_free(ds->value);
+	array_free(ds->childs);
+
+	if (ds->string) buffer_free(ds->string);
+#ifdef HAVE_PCRE_H
+	if (ds->regex) pcre_free(ds->regex);
+	if (ds->regex_study) pcre_free(ds->regex_study);
+#endif
+
+	free(d);
+}
+
+static void data_config_reset(data_unset *d) {
+	data_config *ds = (data_config *)d;
+
+	/* reused array elements */
+	buffer_reset(ds->key);
+	buffer_reset(ds->comp_key);
+	array_reset(ds->value);
+}
+
+static int data_config_insert_dup(data_unset *dst, data_unset *src) {
+	UNUSED(dst);
+
+	src->free(src);
+
+	return 0;
+}
+
+static void data_config_print(const data_unset *d, int depth) {
+	data_config *ds = (data_config *)d;
+	array *a = (array *)ds->value;
+	size_t i;
+	size_t maxlen;
+
+	if (0 == ds->context_ndx) {
+		fprintf(stdout, "config {\n");
+	}
+	else {
+		fprintf(stdout, "$%s %s \"%s\" {\n",
+				ds->comp_key->ptr, ds->op->ptr, ds->string->ptr);
+		array_print_indent(depth + 1);
+		fprintf(stdout, "# block %d\n", ds->context_ndx);
+	}
+	depth ++;
+
+	maxlen = array_get_max_key_length(a);
+	for (i = 0; i < a->used; i ++) {
+		data_unset *du = a->data[i];
+		size_t len = strlen(du->key->ptr);
+		size_t j;
+
+		array_print_indent(depth);
+		fprintf(stdout, "%s", du->key->ptr);
+		for (j = maxlen - len; j > 0; j --) {
+			fprintf(stdout, " ");
+		}
+		fprintf(stdout, " = ");
+		du->print(du, depth);
+		fprintf(stdout, "\n");
+	}
+
+	if (ds->childs) {
+		fprintf(stdout, "\n");
+		for (i = 0; i < ds->childs->used; i ++) {
+			data_unset *du = ds->childs->data[i];
+
+			/* only the 1st block of chaining */
+			if (NULL == ((data_config *)du)->prev) {
+				fprintf(stdout, "\n");
+				array_print_indent(depth);
+				du->print(du, depth);
+				fprintf(stdout, "\n");
+			}
+		}
+	}
+
+	depth --;
+	array_print_indent(depth);
+	fprintf(stdout, "}");
+	if (0 != ds->context_ndx) {
+		fprintf(stdout, " # end of $%s %s \"%s\"",
+				ds->comp_key->ptr, ds->op->ptr, ds->string->ptr);
+	}
+
+	if (ds->next) {
+		fprintf(stdout, "\n");
+		array_print_indent(depth);
+		fprintf(stdout, "else ");
+		ds->next->print((data_unset *)ds->next, depth);
+	}
+}
+
+data_config *data_config_init(void) {
+	data_config *ds;
+
+	ds = calloc(1, sizeof(*ds));
+
+	ds->key = buffer_init();
+	ds->op = buffer_init();
+	ds->comp_key = buffer_init();
+	ds->value = array_init();
+	ds->childs = array_init();
+	ds->childs->is_weakref = 1;
+
+	ds->copy = data_config_copy;
+	ds->free = data_config_free;
+	ds->reset = data_config_reset;
+	ds->insert_dup = data_config_insert_dup;
+	ds->print = data_config_print;
+	ds->type = TYPE_CONFIG;
+
+	return ds;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/data_count.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/data_count.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/data_count.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,68 @@
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "array.h"
+
+static data_unset *data_count_copy(const data_unset *s) {
+	data_count *src = (data_count *)s;
+	data_count *ds = data_count_init();
+
+	buffer_copy_string_buffer(ds->key, src->key);
+	ds->count = src->count;
+	ds->is_index_key = src->is_index_key;
+	return (data_unset *)ds;
+}
+
+static void data_count_free(data_unset *d) {
+	data_count *ds = (data_count *)d;
+
+	buffer_free(ds->key);
+
+	free(d);
+}
+
+static void data_count_reset(data_unset *d) {
+	data_count *ds = (data_count *)d;
+
+	buffer_reset(ds->key);
+
+	ds->count = 0;
+}
+
+static int data_count_insert_dup(data_unset *dst, data_unset *src) {
+	data_count *ds_dst = (data_count *)dst;
+	data_count *ds_src = (data_count *)src;
+
+	ds_dst->count += ds_src->count;
+
+	src->free(src);
+
+	return 0;
+}
+
+static void data_count_print(const data_unset *d, int depth) {
+	data_count *ds = (data_count *)d;
+	UNUSED(depth);
+
+	fprintf(stdout, "count(%d)", ds->count);
+}
+
+
+data_count *data_count_init(void) {
+	data_count *ds;
+
+	ds = calloc(1, sizeof(*ds));
+
+	ds->key = buffer_init();
+	ds->count = 1;
+
+	ds->copy = data_count_copy;
+	ds->free = data_count_free;
+	ds->reset = data_count_reset;
+	ds->insert_dup = data_count_insert_dup;
+	ds->print = data_count_print;
+	ds->type = TYPE_COUNT;
+
+	return ds;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/data_fastcgi.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/data_fastcgi.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/data_fastcgi.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,69 @@
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "array.h"
+#include "fastcgi.h"
+
+static data_unset *data_fastcgi_copy(const data_unset *s) {
+	data_fastcgi *src = (data_fastcgi *)s;
+	data_fastcgi *ds = data_fastcgi_init();
+
+	buffer_copy_string_buffer(ds->key, src->key);
+	buffer_copy_string_buffer(ds->host, src->host);
+	ds->is_index_key = src->is_index_key;
+	return (data_unset *)ds;
+}
+
+static void data_fastcgi_free(data_unset *d) {
+	data_fastcgi *ds = (data_fastcgi *)d;
+
+	buffer_free(ds->key);
+	buffer_free(ds->host);
+
+	free(d);
+}
+
+static void data_fastcgi_reset(data_unset *d) {
+	data_fastcgi *ds = (data_fastcgi *)d;
+
+	buffer_reset(ds->key);
+	buffer_reset(ds->host);
+
+}
+
+static int data_fastcgi_insert_dup(data_unset *dst, data_unset *src) {
+	UNUSED(dst);
+
+	src->free(src);
+
+	return 0;
+}
+
+static void data_fastcgi_print(const data_unset *d, int depth) {
+	data_fastcgi *ds = (data_fastcgi *)d;
+	UNUSED(depth);
+
+	fprintf(stdout, "fastcgi(%s)", ds->host->ptr);
+}
+
+
+data_fastcgi *data_fastcgi_init(void) {
+	data_fastcgi *ds;
+
+	ds = calloc(1, sizeof(*ds));
+
+	ds->key = buffer_init();
+	ds->host = buffer_init();
+	ds->port = 0;
+	ds->is_disabled = 0;
+
+	ds->copy = data_fastcgi_copy;
+	ds->free = data_fastcgi_free;
+	ds->reset = data_fastcgi_reset;
+	ds->insert_dup = data_fastcgi_insert_dup;
+	ds->print = data_fastcgi_print;
+	ds->type = TYPE_FASTCGI;
+
+	return ds;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/data_integer.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/data_integer.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/data_integer.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "array.h"
+
+static data_unset *data_integer_copy(const data_unset *s) {
+	data_integer *src = (data_integer *)s;
+	data_integer *ds = data_integer_init();
+
+	buffer_copy_string_buffer(ds->key, src->key);
+	ds->is_index_key = src->is_index_key;
+	ds->value = src->value;
+	return (data_unset *)ds;
+}
+
+static void data_integer_free(data_unset *d) {
+	data_integer *ds = (data_integer *)d;
+
+	buffer_free(ds->key);
+
+	free(d);
+}
+
+static void data_integer_reset(data_unset *d) {
+	data_integer *ds = (data_integer *)d;
+
+	/* reused integer elements */
+	buffer_reset(ds->key);
+	ds->value = 0;
+}
+
+static int data_integer_insert_dup(data_unset *dst, data_unset *src) {
+	UNUSED(dst);
+
+	src->free(src);
+
+	return 0;
+}
+
+static void data_integer_print(const data_unset *d, int depth) {
+	data_integer *ds = (data_integer *)d;
+	UNUSED(depth);
+
+	fprintf(stdout, "%d", ds->value);
+}
+
+
+data_integer *data_integer_init(void) {
+	data_integer *ds;
+
+	ds = calloc(1, sizeof(*ds));
+
+	ds->key = buffer_init();
+	ds->value = 0;
+
+	ds->copy = data_integer_copy;
+	ds->free = data_integer_free;
+	ds->reset = data_integer_reset;
+	ds->insert_dup = data_integer_insert_dup;
+	ds->print = data_integer_print;
+	ds->type = TYPE_INTEGER;
+
+	return ds;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/data_string.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/data_string.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/data_string.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,104 @@
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "array.h"
+
+static data_unset *data_string_copy(const data_unset *s) {
+	data_string *src = (data_string *)s;
+	data_string *ds = data_string_init();
+
+	buffer_copy_string_buffer(ds->key, src->key);
+	buffer_copy_string_buffer(ds->value, src->value);
+	ds->is_index_key = src->is_index_key;
+	return (data_unset *)ds;
+}
+
+static void data_string_free(data_unset *d) {
+	data_string *ds = (data_string *)d;
+
+	buffer_free(ds->key);
+	buffer_free(ds->value);
+
+	free(d);
+}
+
+static void data_string_reset(data_unset *d) {
+	data_string *ds = (data_string *)d;
+
+	/* reused array elements */
+	buffer_reset(ds->key);
+	buffer_reset(ds->value);
+}
+
+static int data_string_insert_dup(data_unset *dst, data_unset *src) {
+	data_string *ds_dst = (data_string *)dst;
+	data_string *ds_src = (data_string *)src;
+
+	if (ds_dst->value->used) {
+		buffer_append_string(ds_dst->value, ", ");
+		buffer_append_string_buffer(ds_dst->value, ds_src->value);
+	} else {
+		buffer_copy_string_buffer(ds_dst->value, ds_src->value);
+	}
+
+	src->free(src);
+
+	return 0;
+}
+
+static int data_response_insert_dup(data_unset *dst, data_unset *src) {
+	data_string *ds_dst = (data_string *)dst;
+	data_string *ds_src = (data_string *)src;
+
+	if (ds_dst->value->used) {
+		buffer_append_string(ds_dst->value, "\r\n");
+		buffer_append_string_buffer(ds_dst->value, ds_dst->key);
+		buffer_append_string(ds_dst->value, ": ");
+		buffer_append_string_buffer(ds_dst->value, ds_src->value);
+	} else {
+		buffer_copy_string_buffer(ds_dst->value, ds_src->value);
+	}
+
+	src->free(src);
+
+	return 0;
+}
+
+
+static void data_string_print(const data_unset *d, int depth) {
+	data_string *ds = (data_string *)d;
+	UNUSED(depth);
+
+	fprintf(stdout, "\"%s\"", ds->value->used ? ds->value->ptr : "");
+}
+
+
+data_string *data_string_init(void) {
+	data_string *ds;
+
+	ds = calloc(1, sizeof(*ds));
+	assert(ds);
+
+	ds->key = buffer_init();
+	ds->value = buffer_init();
+
+	ds->copy = data_string_copy;
+	ds->free = data_string_free;
+	ds->reset = data_string_reset;
+	ds->insert_dup = data_string_insert_dup;
+	ds->print = data_string_print;
+	ds->type = TYPE_STRING;
+
+	return ds;
+}
+
+data_string *data_response_init(void) {
+	data_string *ds;
+
+	ds = data_string_init();
+	ds->insert_dup = data_response_insert_dup;
+
+	return ds;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/etag.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/etag.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/etag.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,55 @@
+#include <string.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#if defined HAVE_STDINT_H
+#include <stdint.h>
+#elif defined HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+#include "buffer.h"
+#include "etag.h"
+
+int etag_is_equal(buffer *etag, const char *matches) {
+	if (etag && !buffer_is_empty(etag) && 0 == strcmp(etag->ptr, matches)) return 1;
+	return 0;
+}
+
+int etag_create(buffer *etag, struct stat *st,etag_flags_t flags) {
+	if (0 == flags) return 0;
+
+	buffer_reset(etag);
+
+	if (flags & ETAG_USE_INODE) {
+		buffer_append_off_t(etag, st->st_ino);
+		buffer_append_string_len(etag, CONST_STR_LEN("-"));
+	}
+	
+	if (flags & ETAG_USE_SIZE) {
+		buffer_append_off_t(etag, st->st_size);
+		buffer_append_string_len(etag, CONST_STR_LEN("-"));
+	}
+	
+	if (flags & ETAG_USE_MTIME) {
+		buffer_append_long(etag, st->st_mtime);
+	}
+
+	return 0;
+}
+
+int etag_mutate(buffer *mut, buffer *etag) {
+	size_t i;
+	uint32_t h;
+
+	for (h=0, i=0; i < etag->used; ++i) h = (h<<5)^(h>>27)^(etag->ptr[i]);
+
+	buffer_reset(mut);
+	buffer_copy_string_len(mut, CONST_STR_LEN("\""));
+	buffer_append_long(mut, h);
+	buffer_append_string_len(mut, CONST_STR_LEN("\""));
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/etag.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/etag.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/etag.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,17 @@
+#ifndef ETAG_H
+#define ETAG_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "buffer.h"
+
+typedef enum { ETAG_USE_INODE = 1, ETAG_USE_MTIME = 2, ETAG_USE_SIZE = 4 } etag_flags_t;
+
+int etag_is_equal(buffer *etag, const char *matches);
+int etag_create(buffer *etag, struct stat *st, etag_flags_t flags);
+int etag_mutate(buffer *mut, buffer *etag);
+
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/fastcgi.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/fastcgi.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/fastcgi.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,136 @@
+/*
+ * fastcgi.h --
+ *
+ *	Defines for the FastCGI protocol.
+ *
+ *
+ * Copyright (c) 1995-1996 Open Market, Inc.
+ *
+ * See the file "LICENSE.TERMS" for information on usage and redistribution
+ * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+ *
+ * $Id: fastcgi.h,v 1.1.1.1 2003/10/18 09:54:10 weigon Exp $
+ */
+
+#ifndef _FASTCGI_H
+#define _FASTCGI_H
+
+/*
+ * Listening socket file number
+ */
+#define FCGI_LISTENSOCK_FILENO 0
+
+typedef struct {
+    unsigned char version;
+    unsigned char type;
+    unsigned char requestIdB1;
+    unsigned char requestIdB0;
+    unsigned char contentLengthB1;
+    unsigned char contentLengthB0;
+    unsigned char paddingLength;
+    unsigned char reserved;
+} FCGI_Header;
+
+#define FCGI_MAX_LENGTH 0xffff
+
+/*
+ * Number of bytes in a FCGI_Header.  Future versions of the protocol
+ * will not reduce this number.
+ */
+#define FCGI_HEADER_LEN  8
+
+/*
+ * Value for version component of FCGI_Header
+ */
+#define FCGI_VERSION_1           1
+
+/*
+ * Values for type component of FCGI_Header
+ */
+#define FCGI_BEGIN_REQUEST       1
+#define FCGI_ABORT_REQUEST       2
+#define FCGI_END_REQUEST         3
+#define FCGI_PARAMS              4
+#define FCGI_STDIN               5
+#define FCGI_STDOUT              6
+#define FCGI_STDERR              7
+#define FCGI_DATA                8
+#define FCGI_GET_VALUES          9
+#define FCGI_GET_VALUES_RESULT  10
+#define FCGI_UNKNOWN_TYPE       11
+#define FCGI_MAXTYPE (FCGI_UNKNOWN_TYPE)
+
+/*
+ * Value for requestId component of FCGI_Header
+ */
+#define FCGI_NULL_REQUEST_ID     0
+
+
+typedef struct {
+    unsigned char roleB1;
+    unsigned char roleB0;
+    unsigned char flags;
+    unsigned char reserved[5];
+} FCGI_BeginRequestBody;
+
+typedef struct {
+    FCGI_Header header;
+    FCGI_BeginRequestBody body;
+} FCGI_BeginRequestRecord;
+
+/*
+ * Mask for flags component of FCGI_BeginRequestBody
+ */
+#define FCGI_KEEP_CONN  1
+
+/*
+ * Values for role component of FCGI_BeginRequestBody
+ */
+#define FCGI_RESPONDER  1
+#define FCGI_AUTHORIZER 2
+#define FCGI_FILTER     3
+
+
+typedef struct {
+    unsigned char appStatusB3;
+    unsigned char appStatusB2;
+    unsigned char appStatusB1;
+    unsigned char appStatusB0;
+    unsigned char protocolStatus;
+    unsigned char reserved[3];
+} FCGI_EndRequestBody;
+
+typedef struct {
+    FCGI_Header header;
+    FCGI_EndRequestBody body;
+} FCGI_EndRequestRecord;
+
+/*
+ * Values for protocolStatus component of FCGI_EndRequestBody
+ */
+#define FCGI_REQUEST_COMPLETE 0
+#define FCGI_CANT_MPX_CONN    1
+#define FCGI_OVERLOADED       2
+#define FCGI_UNKNOWN_ROLE     3
+
+
+/*
+ * Variable names for FCGI_GET_VALUES / FCGI_GET_VALUES_RESULT records
+ */
+#define FCGI_MAX_CONNS  "FCGI_MAX_CONNS"
+#define FCGI_MAX_REQS   "FCGI_MAX_REQS"
+#define FCGI_MPXS_CONNS "FCGI_MPXS_CONNS"
+
+
+typedef struct {
+    unsigned char type;
+    unsigned char reserved[7];
+} FCGI_UnknownTypeBody;
+
+typedef struct {
+    FCGI_Header header;
+    FCGI_UnknownTypeBody body;
+} FCGI_UnknownTypeRecord;
+
+#endif	/* _FASTCGI_H */
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/fdevent.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/fdevent.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/fdevent.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,202 @@
+#include <sys/types.h>
+
+#include "settings.h"
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#include "fdevent.h"
+#include "buffer.h"
+
+fdevents *fdevent_init(size_t maxfds, fdevent_handler_t type) {
+	fdevents *ev;
+
+	ev = calloc(1, sizeof(*ev));
+	ev->fdarray = calloc(maxfds, sizeof(*ev->fdarray));
+	ev->maxfds = maxfds;
+
+	switch(type) {
+	case FDEVENT_HANDLER_POLL:
+		if (0 != fdevent_poll_init(ev)) {
+			fprintf(stderr, "%s.%d: event-handler poll failed\n",
+				__FILE__, __LINE__);
+
+			return NULL;
+		}
+		break;
+	case FDEVENT_HANDLER_SELECT:
+		if (0 != fdevent_select_init(ev)) {
+			fprintf(stderr, "%s.%d: event-handler select failed\n",
+				__FILE__, __LINE__);
+			return NULL;
+		}
+		break;
+	case FDEVENT_HANDLER_LINUX_RTSIG:
+		if (0 != fdevent_linux_rtsig_init(ev)) {
+			fprintf(stderr, "%s.%d: event-handler linux-rtsig failed, try to set server.event-handler = \"poll\" or \"select\"\n",
+				__FILE__, __LINE__);
+			return NULL;
+		}
+		break;
+	case FDEVENT_HANDLER_LINUX_SYSEPOLL:
+		if (0 != fdevent_linux_sysepoll_init(ev)) {
+			fprintf(stderr, "%s.%d: event-handler linux-sysepoll failed, try to set server.event-handler = \"poll\" or \"select\"\n",
+				__FILE__, __LINE__);
+			return NULL;
+		}
+		break;
+	case FDEVENT_HANDLER_SOLARIS_DEVPOLL:
+		if (0 != fdevent_solaris_devpoll_init(ev)) {
+			fprintf(stderr, "%s.%d: event-handler solaris-devpoll failed, try to set server.event-handler = \"poll\" or \"select\"\n",
+				__FILE__, __LINE__);
+			return NULL;
+		}
+		break;
+	case FDEVENT_HANDLER_FREEBSD_KQUEUE:
+		if (0 != fdevent_freebsd_kqueue_init(ev)) {
+			fprintf(stderr, "%s.%d: event-handler freebsd-kqueue failed, try to set server.event-handler = \"poll\" or \"select\"\n",
+				__FILE__, __LINE__);
+			return NULL;
+		}
+		break;
+	default:
+		fprintf(stderr, "%s.%d: event-handler is unknown, try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__);
+		return NULL;
+	}
+
+	return ev;
+}
+
+void fdevent_free(fdevents *ev) {
+	size_t i;
+	if (!ev) return;
+
+	if (ev->free) ev->free(ev);
+
+	for (i = 0; i < ev->maxfds; i++) {
+		if (ev->fdarray[i]) free(ev->fdarray[i]);
+	}
+
+	free(ev->fdarray);
+	free(ev);
+}
+
+int fdevent_reset(fdevents *ev) {
+	if (ev->reset) return ev->reset(ev);
+
+	return 0;
+}
+
+fdnode *fdnode_init() {
+	fdnode *fdn;
+
+	fdn = calloc(1, sizeof(*fdn));
+	fdn->fd = -1;
+	return fdn;
+}
+
+void fdnode_free(fdnode *fdn) {
+	free(fdn);
+}
+
+int fdevent_register(fdevents *ev, int fd, fdevent_handler handler, void *ctx) {
+	fdnode *fdn;
+
+	fdn = fdnode_init();
+	fdn->handler = handler;
+	fdn->fd      = fd;
+	fdn->ctx     = ctx;
+
+	ev->fdarray[fd] = fdn;
+
+	return 0;
+}
+
+int fdevent_unregister(fdevents *ev, int fd) {
+	fdnode *fdn;
+        if (!ev) return 0;
+	fdn = ev->fdarray[fd];
+
+	fdnode_free(fdn);
+
+	ev->fdarray[fd] = NULL;
+
+	return 0;
+}
+
+int fdevent_event_del(fdevents *ev, int *fde_ndx, int fd) {
+	int fde = fde_ndx ? *fde_ndx : -1;
+
+	if (ev->event_del) fde = ev->event_del(ev, fde, fd);
+
+	if (fde_ndx) *fde_ndx = fde;
+
+	return 0;
+}
+
+int fdevent_event_add(fdevents *ev, int *fde_ndx, int fd, int events) {
+	int fde = fde_ndx ? *fde_ndx : -1;
+
+	if (ev->event_add) fde = ev->event_add(ev, fde, fd, events);
+
+	if (fde_ndx) *fde_ndx = fde;
+
+	return 0;
+}
+
+int fdevent_poll(fdevents *ev, int timeout_ms) {
+	if (ev->poll == NULL) SEGFAULT();
+	return ev->poll(ev, timeout_ms);
+}
+
+int fdevent_event_get_revent(fdevents *ev, size_t ndx) {
+	if (ev->event_get_revent == NULL) SEGFAULT();
+
+	return ev->event_get_revent(ev, ndx);
+}
+
+int fdevent_event_get_fd(fdevents *ev, size_t ndx) {
+	if (ev->event_get_fd == NULL) SEGFAULT();
+
+	return ev->event_get_fd(ev, ndx);
+}
+
+fdevent_handler fdevent_get_handler(fdevents *ev, int fd) {
+	if (ev->fdarray[fd] == NULL) SEGFAULT();
+	if (ev->fdarray[fd]->fd != fd) SEGFAULT();
+
+	return ev->fdarray[fd]->handler;
+}
+
+void * fdevent_get_context(fdevents *ev, int fd) {
+	if (ev->fdarray[fd] == NULL) SEGFAULT();
+	if (ev->fdarray[fd]->fd != fd) SEGFAULT();
+
+	return ev->fdarray[fd]->ctx;
+}
+
+int fdevent_fcntl_set(fdevents *ev, int fd) {
+#ifdef FD_CLOEXEC
+	/* close fd on exec (cgi) */
+	fcntl(fd, F_SETFD, FD_CLOEXEC);
+#endif
+	if ((ev) && (ev->fcntl_set)) return ev->fcntl_set(ev, fd);
+#ifdef O_NONBLOCK
+	return fcntl(fd, F_SETFL, O_NONBLOCK | O_RDWR);
+#else
+	return 0;
+#endif
+}
+
+
+int fdevent_event_next_fdndx(fdevents *ev, int ndx) {
+	if (ev->event_next_fdndx) return ev->event_next_fdndx(ev, ndx);
+
+	return -1;
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/fdevent.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/fdevent.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/fdevent.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,222 @@
+#ifndef _FDEVENT_H_
+#define _FDEVENT_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "settings.h"
+#include "bitset.h"
+
+/* select event-system */
+
+#if defined(HAVE_EPOLL_CTL) && defined(HAVE_SYS_EPOLL_H)
+# if defined HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+# define USE_LINUX_EPOLL
+# include <sys/epoll.h>
+#endif
+
+/* MacOS 10.3.x has poll.h under /usr/include/, all other unixes
+ * under /usr/include/sys/ */
+#if defined HAVE_POLL && (defined(HAVE_SYS_POLL_H) || defined(HAVE_POLL_H))
+# define USE_POLL
+# ifdef HAVE_POLL_H
+#  include <poll.h>
+# else
+#  include <sys/poll.h>
+# endif
+# if defined HAVE_SIGTIMEDWAIT && defined(__linux__)
+#  define USE_LINUX_SIGIO
+#  include <signal.h>
+# endif
+#endif
+
+#if defined HAVE_SELECT
+# ifdef __WIN32
+#  include <winsock2.h>
+# endif
+# define USE_SELECT
+# ifdef HAVE_SYS_SELECT_H
+#  include <sys/select.h>
+# endif
+#endif
+
+#if defined HAVE_SYS_DEVPOLL_H && defined(__sun)
+# define USE_SOLARIS_DEVPOLL
+# include <sys/devpoll.h>
+#endif
+
+#if defined HAVE_SYS_EVENT_H && defined HAVE_KQUEUE
+# define USE_FREEBSD_KQUEUE
+# include <sys/event.h>
+#endif
+
+#if defined HAVE_SYS_PORT_H && defined HAVE_PORT_CREATE
+# define USE_SOLARIS_PORT
+# include <sys/port.h>
+#endif
+
+
+typedef handler_t (*fdevent_handler)(void *srv, void *ctx, int revents);
+
+#define FDEVENT_IN     BV(0)
+#define FDEVENT_PRI    BV(1)
+#define FDEVENT_OUT    BV(2)
+#define FDEVENT_ERR    BV(3)
+#define FDEVENT_HUP    BV(4)
+#define FDEVENT_NVAL   BV(5)
+
+typedef enum { FD_EVENT_TYPE_UNSET = -1,
+		FD_EVENT_TYPE_CONNECTION,
+		FD_EVENT_TYPE_FCGI_CONNECTION,
+		FD_EVENT_TYPE_DIRWATCH,
+		FD_EVENT_TYPE_CGI_CONNECTION
+} fd_event_t;
+
+typedef enum { FDEVENT_HANDLER_UNSET,
+		FDEVENT_HANDLER_SELECT,
+		FDEVENT_HANDLER_POLL,
+		FDEVENT_HANDLER_LINUX_RTSIG,
+		FDEVENT_HANDLER_LINUX_SYSEPOLL,
+		FDEVENT_HANDLER_SOLARIS_DEVPOLL,
+		FDEVENT_HANDLER_FREEBSD_KQUEUE,
+		FDEVENT_HANDLER_SOLARIS_PORT
+} fdevent_handler_t;
+
+/**
+ * a mapping from fd to connection structure
+ *
+ */
+typedef struct {
+	int fd;                  /**< the fd */
+	void *conn;              /**< a reference the corresponding data-structure */
+	fd_event_t fd_type;      /**< type of the fd */
+	int events;              /**< registered events */
+	int revents;
+} fd_conn;
+
+typedef struct {
+	fd_conn *ptr;
+
+	size_t size;
+	size_t used;
+} fd_conn_buffer;
+
+/**
+ * array of unused fd's
+ *
+ */
+
+typedef struct _fdnode {
+	fdevent_handler handler;
+	void *ctx;
+	int fd;
+
+	struct _fdnode *prev, *next;
+} fdnode;
+
+typedef struct {
+	int *ptr;
+
+	size_t used;
+	size_t size;
+} buffer_int;
+
+/**
+ * fd-event handler for select(), poll() and rt-signals on Linux 2.4
+ *
+ */
+typedef struct fdevents {
+	fdevent_handler_t type;
+
+	fdnode **fdarray;
+	size_t maxfds;
+
+#ifdef USE_LINUX_SIGIO
+	int in_sigio;
+	int signum;
+	sigset_t sigset;
+	siginfo_t siginfo;
+	bitset *sigbset;
+#endif
+#ifdef USE_LINUX_EPOLL
+	int epoll_fd;
+	struct epoll_event *epoll_events;
+#endif
+#ifdef USE_POLL
+	struct pollfd *pollfds;
+
+	size_t size;
+	size_t used;
+
+	buffer_int unused;
+#endif
+#ifdef USE_SELECT
+	fd_set select_read;
+	fd_set select_write;
+	fd_set select_error;
+
+	fd_set select_set_read;
+	fd_set select_set_write;
+	fd_set select_set_error;
+
+	int select_max_fd;
+#endif
+#ifdef USE_SOLARIS_DEVPOLL
+	int devpoll_fd;
+	struct pollfd *devpollfds;
+#endif
+#ifdef USE_FREEBSD_KQUEUE
+	int kq_fd;
+	struct kevent *kq_results;
+	bitset *kq_bevents;
+#endif
+#ifdef USE_SOLARIS_PORT
+	int port_fd;
+#endif
+	int (*reset)(struct fdevents *ev);
+	void (*free)(struct fdevents *ev);
+
+	int (*event_add)(struct fdevents *ev, int fde_ndx, int fd, int events);
+	int (*event_del)(struct fdevents *ev, int fde_ndx, int fd);
+	int (*event_get_revent)(struct fdevents *ev, size_t ndx);
+	int (*event_get_fd)(struct fdevents *ev, size_t ndx);
+
+	int (*event_next_fdndx)(struct fdevents *ev, int ndx);
+
+	int (*poll)(struct fdevents *ev, int timeout_ms);
+
+	int (*fcntl_set)(struct fdevents *ev, int fd);
+} fdevents;
+
+fdevents *fdevent_init(size_t maxfds, fdevent_handler_t type);
+int fdevent_reset(fdevents *ev);
+void fdevent_free(fdevents *ev);
+
+int fdevent_event_add(fdevents *ev, int *fde_ndx, int fd, int events);
+int fdevent_event_del(fdevents *ev, int *fde_ndx, int fd);
+int fdevent_event_get_revent(fdevents *ev, size_t ndx);
+int fdevent_event_get_fd(fdevents *ev, size_t ndx);
+fdevent_handler fdevent_get_handler(fdevents *ev, int fd);
+void * fdevent_get_context(fdevents *ev, int fd);
+
+int fdevent_event_next_fdndx(fdevents *ev, int ndx);
+
+int fdevent_poll(fdevents *ev, int timeout_ms);
+
+int fdevent_register(fdevents *ev, int fd, fdevent_handler handler, void *ctx);
+int fdevent_unregister(fdevents *ev, int fd);
+
+int fdevent_fcntl_set(fdevents *ev, int fd);
+
+int fdevent_select_init(fdevents *ev);
+int fdevent_poll_init(fdevents *ev);
+int fdevent_linux_rtsig_init(fdevents *ev);
+int fdevent_linux_sysepoll_init(fdevents *ev);
+int fdevent_solaris_devpoll_init(fdevents *ev);
+int fdevent_freebsd_kqueue_init(fdevents *ev);
+
+#endif
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/fdevent_freebsd_kqueue.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/fdevent_freebsd_kqueue.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/fdevent_freebsd_kqueue.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,207 @@
+#include <sys/types.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <signal.h>
+#include <fcntl.h>
+
+#include "fdevent.h"
+#include "settings.h"
+#include "buffer.h"
+#include "server.h"
+
+#ifdef USE_FREEBSD_KQUEUE
+#include <sys/event.h>
+#include <sys/time.h>
+
+static void fdevent_freebsd_kqueue_free(fdevents *ev) {
+	close(ev->kq_fd);
+	free(ev->kq_results);
+	bitset_free(ev->kq_bevents);
+}
+
+static int fdevent_freebsd_kqueue_event_del(fdevents *ev, int fde_ndx, int fd) {
+	int filter, ret;
+	struct kevent kev;
+	struct timespec ts;
+
+	if (fde_ndx < 0) return -1;
+
+	filter = bitset_test_bit(ev->kq_bevents, fd) ? EVFILT_READ : EVFILT_WRITE;
+
+	EV_SET(&kev, fd, filter, EV_DELETE, 0, 0, NULL);
+
+	ts.tv_sec  = 0;
+	ts.tv_nsec = 0;
+
+	ret = kevent(ev->kq_fd,
+		     &kev, 1,
+		     NULL, 0,
+		     &ts);
+
+	if (ret == -1) {
+		fprintf(stderr, "%s.%d: kqueue failed polling: %s\n",
+			__FILE__, __LINE__, strerror(errno));
+
+		return -1;
+	}
+
+	return -1;
+}
+
+static int fdevent_freebsd_kqueue_event_add(fdevents *ev, int fde_ndx, int fd, int events) {
+	int filter, ret;
+	struct kevent kev;
+	struct timespec ts;
+
+	UNUSED(fde_ndx);
+
+	filter = (events & FDEVENT_IN) ? EVFILT_READ : EVFILT_WRITE;
+
+	EV_SET(&kev, fd, filter, EV_ADD|EV_CLEAR, 0, 0, NULL);
+
+	ts.tv_sec  = 0;
+	ts.tv_nsec = 0;
+
+	ret = kevent(ev->kq_fd,
+		     &kev, 1,
+		     NULL, 0,
+		     &ts);
+
+	if (ret == -1) {
+		fprintf(stderr, "%s.%d: kqueue failed polling: %s\n",
+			__FILE__, __LINE__, strerror(errno));
+
+		return -1;
+	}
+
+	if (filter == EVFILT_READ) {
+		bitset_set_bit(ev->kq_bevents, fd);
+	} else {
+		bitset_clear_bit(ev->kq_bevents, fd);
+	}
+
+	return fd;
+}
+
+static int fdevent_freebsd_kqueue_poll(fdevents *ev, int timeout_ms) {
+	int ret;
+	struct timespec ts;
+
+	ts.tv_sec  = timeout_ms / 1000;
+	ts.tv_nsec = (timeout_ms % 1000) * 1000000;
+
+	ret = kevent(ev->kq_fd,
+		     NULL, 0,
+		     ev->kq_results, ev->maxfds,
+		     &ts);
+
+	if (ret == -1) {
+		switch(errno) {
+		case EINTR:
+			/* we got interrupted, perhaps just a SIGCHLD of a CGI script */
+			return 0;
+		default:
+			fprintf(stderr, "%s.%d: kqueue failed polling: %s\n",
+				__FILE__, __LINE__, strerror(errno));
+			break;
+		}
+	}
+
+	return ret;
+}
+
+static int fdevent_freebsd_kqueue_event_get_revent(fdevents *ev, size_t ndx) {
+	int events = 0, e;
+
+	e = ev->kq_results[ndx].filter;
+
+	if (e == EVFILT_READ) {
+		events |= FDEVENT_IN;
+	} else if (e == EVFILT_WRITE) {
+		events |= FDEVENT_OUT;
+	}
+
+	e = ev->kq_results[ndx].flags;
+
+	if (e & EV_EOF) {
+		events |= FDEVENT_HUP;
+	}
+
+	if (e & EV_ERROR) {
+		events |= FDEVENT_ERR;
+	}
+
+	return events;
+}
+
+static int fdevent_freebsd_kqueue_event_get_fd(fdevents *ev, size_t ndx) {
+	return ev->kq_results[ndx].ident;
+}
+
+static int fdevent_freebsd_kqueue_event_next_fdndx(fdevents *ev, int ndx) {
+	UNUSED(ev);
+
+	return (ndx < 0) ? 0 : ndx + 1;
+}
+
+static int fdevent_freebsd_kqueue_reset(fdevents *ev) {
+	if (-1 == (ev->kq_fd = kqueue())) {
+		fprintf(stderr, "%s.%d: kqueue failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__, strerror(errno));
+
+		return -1;
+	}
+
+	return 0;
+}
+
+
+int fdevent_freebsd_kqueue_init(fdevents *ev) {
+	ev->type = FDEVENT_HANDLER_FREEBSD_KQUEUE;
+#define SET(x) \
+	ev->x = fdevent_freebsd_kqueue_##x;
+
+	SET(free);
+	SET(poll);
+	SET(reset);
+
+	SET(event_del);
+	SET(event_add);
+
+	SET(event_next_fdndx);
+	SET(event_get_fd);
+	SET(event_get_revent);
+
+	ev->kq_fd = -1;
+
+	ev->kq_results = calloc(ev->maxfds, sizeof(*ev->kq_results));
+	ev->kq_bevents = bitset_init(ev->maxfds);
+
+	/* check that kqueue works */
+
+	if (-1 == (ev->kq_fd = kqueue())) {
+		fprintf(stderr, "%s.%d: kqueue failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__, strerror(errno));
+
+		return -1;
+	}
+
+	close(ev->kq_fd);
+	ev->kq_fd = -1;
+
+	return 0;
+}
+#else
+int fdevent_freebsd_kqueue_init(fdevents *ev) {
+	UNUSED(ev);
+
+	fprintf(stderr, "%s.%d: kqueue not available, try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__);
+
+	return -1;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/fdevent_linux_rtsig.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/fdevent_linux_rtsig.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/fdevent_linux_rtsig.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,260 @@
+#include <sys/types.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <signal.h>
+#include <limits.h>
+
+#define __USE_GNU
+#include <fcntl.h>
+
+#include "fdevent.h"
+#include "settings.h"
+#include "buffer.h"
+
+#ifdef USE_LINUX_SIGIO
+static void fdevent_linux_rtsig_free(fdevents *ev) {
+	free(ev->pollfds);
+	if (ev->unused.ptr) free(ev->unused.ptr);
+
+	bitset_free(ev->sigbset);
+}
+
+
+static int fdevent_linux_rtsig_event_del(fdevents *ev, int fde_ndx, int fd) {
+	if (fde_ndx < 0) return -1;
+
+	if ((size_t)fde_ndx >= ev->used) {
+		fprintf(stderr, "%s.%d: del! out of range %d %zu\n", __FILE__, __LINE__, fde_ndx, ev->used);
+		SEGFAULT();
+	}
+
+	if (ev->pollfds[fde_ndx].fd == fd) {
+		size_t k = fde_ndx;
+
+		ev->pollfds[k].fd = -1;
+
+		bitset_clear_bit(ev->sigbset, fd);
+
+		if (ev->unused.size == 0) {
+			ev->unused.size = 16;
+			ev->unused.ptr = malloc(sizeof(*(ev->unused.ptr)) * ev->unused.size);
+		} else if (ev->unused.size == ev->unused.used) {
+			ev->unused.size += 16;
+			ev->unused.ptr = realloc(ev->unused.ptr, sizeof(*(ev->unused.ptr)) * ev->unused.size);
+		}
+
+		ev->unused.ptr[ev->unused.used++] = k;
+	} else {
+		fprintf(stderr, "%s.%d: del! %d %d\n", __FILE__, __LINE__, ev->pollfds[fde_ndx].fd, fd);
+
+		SEGFAULT();
+	}
+
+	return -1;
+}
+
+#if 0
+static int fdevent_linux_rtsig_event_compress(fdevents *ev) {
+	size_t j;
+
+	if (ev->used == 0) return 0;
+	if (ev->unused.used != 0) return 0;
+
+	for (j = ev->used - 1; j + 1 > 0; j--) {
+		if (ev->pollfds[j].fd == -1) ev->used--;
+	}
+
+
+	return 0;
+}
+#endif
+
+static int fdevent_linux_rtsig_event_add(fdevents *ev, int fde_ndx, int fd, int events) {
+	/* known index */
+	if (fde_ndx != -1) {
+		if (ev->pollfds[fde_ndx].fd == fd) {
+			ev->pollfds[fde_ndx].events = events;
+
+			return fde_ndx;
+		}
+		fprintf(stderr, "%s.%d: add: (%d, %d)\n", __FILE__, __LINE__, fde_ndx, ev->pollfds[fde_ndx].fd);
+		SEGFAULT();
+	}
+
+	if (ev->unused.used > 0) {
+		int k = ev->unused.ptr[--ev->unused.used];
+
+		ev->pollfds[k].fd = fd;
+		ev->pollfds[k].events = events;
+
+		bitset_set_bit(ev->sigbset, fd);
+
+		return k;
+	} else {
+		if (ev->size == 0) {
+			ev->size = 16;
+			ev->pollfds = malloc(sizeof(*ev->pollfds) * ev->size);
+		} else if (ev->size == ev->used) {
+			ev->size += 16;
+			ev->pollfds = realloc(ev->pollfds, sizeof(*ev->pollfds) * ev->size);
+		}
+
+		ev->pollfds[ev->used].fd = fd;
+		ev->pollfds[ev->used].events = events;
+
+		bitset_set_bit(ev->sigbset, fd);
+
+		return ev->used++;
+	}
+}
+
+static int fdevent_linux_rtsig_poll(fdevents *ev, int timeout_ms) {
+	struct timespec ts;
+	int r;
+
+#if 0
+	fdevent_linux_rtsig_event_compress(ev);
+#endif
+
+	ev->in_sigio = 1;
+
+	ts.tv_sec =  timeout_ms / 1000;
+	ts.tv_nsec = (timeout_ms % 1000) * 1000000;
+	r = sigtimedwait(&(ev->sigset), &(ev->siginfo), &(ts));
+
+	if (r == -1) {
+		if (errno == EAGAIN) return 0;
+		return r;
+	} else if (r == SIGIO) {
+		struct sigaction act;
+
+		/* flush the signal queue */
+		memset(&act, 0, sizeof(act));
+		act.sa_handler = SIG_IGN;
+		sigaction(ev->signum, &act, NULL);
+
+		/* re-enable the signal queue */
+		act.sa_handler = SIG_DFL;
+		sigaction(ev->signum, &act, NULL);
+
+		ev->in_sigio = 0;
+		r = poll(ev->pollfds, ev->used, timeout_ms);
+
+		return r;
+	} else if (r == ev->signum) {
+#  if 0
+		fprintf(stderr, "event: %d %02lx\n", ev->siginfo.si_fd, ev->siginfo.si_band);
+#  endif
+		return bitset_test_bit(ev->sigbset, ev->siginfo.si_fd);
+	} else {
+		/* ? */
+		return -1;
+	}
+}
+
+static int fdevent_linux_rtsig_event_get_revent(fdevents *ev, size_t ndx) {
+	if (ev->in_sigio == 1) {
+#  if 0
+		if (ev->siginfo.si_band == POLLERR) {
+			fprintf(stderr, "event: %d %02lx %02x %s\n", ev->siginfo.si_fd, ev->siginfo.si_band, errno, strerror(errno));
+		}
+#  endif
+		if (ndx != 0) {
+			fprintf(stderr, "+\n");
+			return 0;
+		}
+
+		return ev->siginfo.si_band & 0x3f;
+	} else {
+		if (ndx >= ev->used) {
+			fprintf(stderr, "%s.%d: event: %zu %zu\n", __FILE__, __LINE__, ndx, ev->used);
+			return 0;
+		}
+		return ev->pollfds[ndx].revents;
+	}
+}
+
+static int fdevent_linux_rtsig_event_get_fd(fdevents *ev, size_t ndx) {
+	if (ev->in_sigio == 1) {
+		return ev->siginfo.si_fd;
+	} else {
+		return ev->pollfds[ndx].fd;
+	}
+}
+
+static int fdevent_linux_rtsig_fcntl_set(fdevents *ev, int fd) {
+	static pid_t pid = 0;
+
+	if (pid == 0) pid = getpid();
+
+	if (-1 == fcntl(fd, F_SETSIG, ev->signum)) return -1;
+
+	if (-1 == fcntl(fd, F_SETOWN, (int) pid)) return -1;
+
+	return fcntl(fd, F_SETFL, O_ASYNC | O_NONBLOCK | O_RDWR);
+}
+
+
+static int fdevent_linux_rtsig_event_next_fdndx(fdevents *ev, int ndx) {
+	if (ev->in_sigio == 1) {
+		if (ndx < 0) return 0;
+		return -1;
+	} else {
+		size_t i;
+
+		i = (ndx < 0) ? 0 : ndx + 1;
+		for (; i < ev->used; i++) {
+			if (ev->pollfds[i].revents) break;
+		}
+
+		return i;
+	}
+}
+
+int fdevent_linux_rtsig_init(fdevents *ev) {
+	ev->type = FDEVENT_HANDLER_LINUX_RTSIG;
+#define SET(x) \
+	ev->x = fdevent_linux_rtsig_##x;
+
+	SET(free);
+	SET(poll);
+
+	SET(event_del);
+	SET(event_add);
+
+	SET(event_next_fdndx);
+	SET(fcntl_set);
+	SET(event_get_fd);
+	SET(event_get_revent);
+
+	ev->signum = SIGRTMIN + 1;
+
+	sigemptyset(&(ev->sigset));
+	sigaddset(&(ev->sigset), ev->signum);
+	sigaddset(&(ev->sigset), SIGIO);
+	if (-1 == sigprocmask(SIG_BLOCK, &(ev->sigset), NULL)) {
+		fprintf(stderr, "%s.%d: sigprocmask failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__, strerror(errno));
+
+		return -1;
+	}
+
+	ev->in_sigio = 1;
+
+	ev->sigbset = bitset_init(ev->maxfds);
+
+	return 0;
+}
+#else
+int fdevent_linux_rtsig_init(fdevents *ev) {
+	UNUSED(ev);
+
+	fprintf(stderr, "%s.%d: linux-rtsig not supported, try to set server.event-handler = \"poll\" or \"select\"\n",
+		__FILE__, __LINE__);
+	return -1;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/fdevent_linux_sysepoll.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/fdevent_linux_sysepoll.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/fdevent_linux_sysepoll.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,160 @@
+#include <sys/types.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <signal.h>
+#include <fcntl.h>
+
+#include "fdevent.h"
+#include "settings.h"
+#include "buffer.h"
+
+#ifdef USE_LINUX_EPOLL
+static void fdevent_linux_sysepoll_free(fdevents *ev) {
+	close(ev->epoll_fd);
+	free(ev->epoll_events);
+}
+
+static int fdevent_linux_sysepoll_event_del(fdevents *ev, int fde_ndx, int fd) {
+	struct epoll_event ep;
+
+	if (fde_ndx < 0) return -1;
+
+	memset(&ep, 0, sizeof(ep));
+
+	ep.data.fd = fd;
+	ep.data.ptr = NULL;
+
+	if (0 != epoll_ctl(ev->epoll_fd, EPOLL_CTL_DEL, fd, &ep)) {
+		fprintf(stderr, "%s.%d: epoll_ctl failed: %s, dying\n", __FILE__, __LINE__, strerror(errno));
+
+		SEGFAULT();
+
+		return 0;
+	}
+
+
+	return -1;
+}
+
+static int fdevent_linux_sysepoll_event_add(fdevents *ev, int fde_ndx, int fd, int events) {
+	struct epoll_event ep;
+	int add = 0;
+
+	if (fde_ndx == -1) add = 1;
+
+	memset(&ep, 0, sizeof(ep));
+
+	ep.events = 0;
+
+	if (events & FDEVENT_IN)  ep.events |= EPOLLIN;
+	if (events & FDEVENT_OUT) ep.events |= EPOLLOUT;
+
+	/**
+	 *
+	 * with EPOLLET we don't get a FDEVENT_HUP
+	 * if the close is delay after everything has
+	 * sent.
+	 *
+	 */
+
+	ep.events |= EPOLLERR | EPOLLHUP /* | EPOLLET */;
+
+	ep.data.ptr = NULL;
+	ep.data.fd = fd;
+
+	if (0 != epoll_ctl(ev->epoll_fd, add ? EPOLL_CTL_ADD : EPOLL_CTL_MOD, fd, &ep)) {
+		fprintf(stderr, "%s.%d: epoll_ctl failed: %s, dying\n", __FILE__, __LINE__, strerror(errno));
+
+		SEGFAULT();
+
+		return 0;
+	}
+
+	return fd;
+}
+
+static int fdevent_linux_sysepoll_poll(fdevents *ev, int timeout_ms) {
+	return epoll_wait(ev->epoll_fd, ev->epoll_events, ev->maxfds, timeout_ms);
+}
+
+static int fdevent_linux_sysepoll_event_get_revent(fdevents *ev, size_t ndx) {
+	int events = 0, e;
+
+	e = ev->epoll_events[ndx].events;
+	if (e & EPOLLIN) events |= FDEVENT_IN;
+	if (e & EPOLLOUT) events |= FDEVENT_OUT;
+	if (e & EPOLLERR) events |= FDEVENT_ERR;
+	if (e & EPOLLHUP) events |= FDEVENT_HUP;
+	if (e & EPOLLPRI) events |= FDEVENT_PRI;
+
+	return e;
+}
+
+static int fdevent_linux_sysepoll_event_get_fd(fdevents *ev, size_t ndx) {
+# if 0
+	fprintf(stderr, "%s.%d: %d, %d\n", __FILE__, __LINE__, ndx, ev->epoll_events[ndx].data.fd);
+# endif
+
+	return ev->epoll_events[ndx].data.fd;
+}
+
+static int fdevent_linux_sysepoll_event_next_fdndx(fdevents *ev, int ndx) {
+	size_t i;
+
+	UNUSED(ev);
+
+	i = (ndx < 0) ? 0 : ndx + 1;
+
+	return i;
+}
+
+int fdevent_linux_sysepoll_init(fdevents *ev) {
+	ev->type = FDEVENT_HANDLER_LINUX_SYSEPOLL;
+#define SET(x) \
+	ev->x = fdevent_linux_sysepoll_##x;
+
+	SET(free);
+	SET(poll);
+
+	SET(event_del);
+	SET(event_add);
+
+	SET(event_next_fdndx);
+	SET(event_get_fd);
+	SET(event_get_revent);
+
+	if (-1 == (ev->epoll_fd = epoll_create(ev->maxfds))) {
+		fprintf(stderr, "%s.%d: epoll_create failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__, strerror(errno));
+
+		return -1;
+	}
+
+	if (-1 == fcntl(ev->epoll_fd, F_SETFD, FD_CLOEXEC)) {
+		fprintf(stderr, "%s.%d: epoll_create failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__, strerror(errno));
+
+		close(ev->epoll_fd);
+
+		return -1;
+	}
+
+	ev->epoll_events = malloc(ev->maxfds * sizeof(*ev->epoll_events));
+
+	return 0;
+}
+
+#else
+int fdevent_linux_sysepoll_init(fdevents *ev) {
+	UNUSED(ev);
+
+	fprintf(stderr, "%s.%d: linux-sysepoll not supported, try to set server.event-handler = \"poll\" or \"select\"\n",
+		__FILE__, __LINE__);
+
+	return -1;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/fdevent_poll.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/fdevent_poll.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/fdevent_poll.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,182 @@
+#include <sys/types.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <signal.h>
+#include <fcntl.h>
+
+#include "fdevent.h"
+#include "settings.h"
+#include "buffer.h"
+
+#ifdef USE_POLL
+static void fdevent_poll_free(fdevents *ev) {
+	free(ev->pollfds);
+	if (ev->unused.ptr) free(ev->unused.ptr);
+}
+
+static int fdevent_poll_event_del(fdevents *ev, int fde_ndx, int fd) {
+	if (fde_ndx < 0) return -1;
+
+	if ((size_t)fde_ndx >= ev->used) {
+		fprintf(stderr, "%s.%d: del! out of range %d %zd\n", __FILE__, __LINE__, fde_ndx, ev->used);
+		SEGFAULT();
+	}
+
+	if (ev->pollfds[fde_ndx].fd == fd) {
+		size_t k = fde_ndx;
+
+		ev->pollfds[k].fd = -1;
+		/* ev->pollfds[k].events = 0; */
+		/* ev->pollfds[k].revents = 0; */
+
+		if (ev->unused.size == 0) {
+			ev->unused.size = 16;
+			ev->unused.ptr = malloc(sizeof(*(ev->unused.ptr)) * ev->unused.size);
+		} else if (ev->unused.size == ev->unused.used) {
+			ev->unused.size += 16;
+			ev->unused.ptr = realloc(ev->unused.ptr, sizeof(*(ev->unused.ptr)) * ev->unused.size);
+		}
+
+		ev->unused.ptr[ev->unused.used++] = k;
+	} else {
+		SEGFAULT();
+	}
+
+	return -1;
+}
+
+#if 0
+static int fdevent_poll_event_compress(fdevents *ev) {
+	size_t j;
+
+	if (ev->used == 0) return 0;
+	if (ev->unused.used != 0) return 0;
+
+	for (j = ev->used - 1; j + 1 > 0 && ev->pollfds[j].fd == -1; j--) ev->used--;
+
+	return 0;
+}
+#endif
+
+static int fdevent_poll_event_add(fdevents *ev, int fde_ndx, int fd, int events) {
+	/* known index */
+
+	if (fde_ndx != -1) {
+		if (ev->pollfds[fde_ndx].fd == fd) {
+			ev->pollfds[fde_ndx].events = events;
+
+			return fde_ndx;
+		}
+		fprintf(stderr, "%s.%d: add: (%d, %d)\n", __FILE__, __LINE__, fde_ndx, ev->pollfds[fde_ndx].fd);
+		SEGFAULT();
+	}
+
+	if (ev->unused.used > 0) {
+		int k = ev->unused.ptr[--ev->unused.used];
+
+		ev->pollfds[k].fd = fd;
+		ev->pollfds[k].events = events;
+
+		return k;
+	} else {
+		if (ev->size == 0) {
+			ev->size = 16;
+			ev->pollfds = malloc(sizeof(*ev->pollfds) * ev->size);
+		} else if (ev->size == ev->used) {
+			ev->size += 16;
+			ev->pollfds = realloc(ev->pollfds, sizeof(*ev->pollfds) * ev->size);
+		}
+
+		ev->pollfds[ev->used].fd = fd;
+		ev->pollfds[ev->used].events = events;
+
+		return ev->used++;
+	}
+}
+
+static int fdevent_poll_poll(fdevents *ev, int timeout_ms) {
+#if 0
+	fdevent_poll_event_compress(ev);
+#endif
+	return poll(ev->pollfds, ev->used, timeout_ms);
+}
+
+static int fdevent_poll_event_get_revent(fdevents *ev, size_t ndx) {
+	int r, poll_r;
+	if (ndx >= ev->used) {
+		fprintf(stderr, "%s.%d: dying because: event: %zd >= %zd\n", __FILE__, __LINE__, ndx, ev->used);
+
+		SEGFAULT();
+
+		return 0;
+	}
+
+	if (ev->pollfds[ndx].revents & POLLNVAL) {
+		/* should never happen */
+		SEGFAULT();
+	}
+
+	r = 0;
+	poll_r = ev->pollfds[ndx].revents;
+
+	/* map POLL* to FDEVEN_* */
+
+	if (poll_r & POLLIN) r |= FDEVENT_IN;
+	if (poll_r & POLLOUT) r |= FDEVENT_OUT;
+	if (poll_r & POLLERR) r |= FDEVENT_ERR;
+	if (poll_r & POLLHUP) r |= FDEVENT_HUP;
+	if (poll_r & POLLNVAL) r |= FDEVENT_NVAL;
+	if (poll_r & POLLPRI) r |= FDEVENT_PRI;
+
+	return ev->pollfds[ndx].revents;
+}
+
+static int fdevent_poll_event_get_fd(fdevents *ev, size_t ndx) {
+	return ev->pollfds[ndx].fd;
+}
+
+static int fdevent_poll_event_next_fdndx(fdevents *ev, int ndx) {
+	size_t i;
+
+	i = (ndx < 0) ? 0 : ndx + 1;
+	for (; i < ev->used; i++) {
+		if (ev->pollfds[i].revents) break;
+	}
+
+	return i;
+}
+
+int fdevent_poll_init(fdevents *ev) {
+	ev->type = FDEVENT_HANDLER_POLL;
+#define SET(x) \
+	ev->x = fdevent_poll_##x;
+
+	SET(free);
+	SET(poll);
+
+	SET(event_del);
+	SET(event_add);
+
+	SET(event_next_fdndx);
+	SET(event_get_fd);
+	SET(event_get_revent);
+
+	return 0;
+}
+
+
+
+
+#else
+int fdevent_poll_init(fdevents *ev) {
+	UNUSED(ev);
+
+	fprintf(stderr, "%s.%d: poll is not supported, try to set server.event-handler = \"select\"\n",
+			__FILE__, __LINE__);
+	return -1;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/fdevent_select.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/fdevent_select.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/fdevent_select.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,131 @@
+#include <sys/time.h>
+#include <sys/types.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <signal.h>
+#include <fcntl.h>
+#include <assert.h>
+
+#include "fdevent.h"
+#include "settings.h"
+#include "buffer.h"
+
+#ifdef USE_SELECT
+
+static int fdevent_select_reset(fdevents *ev) {
+	FD_ZERO(&(ev->select_set_read));
+	FD_ZERO(&(ev->select_set_write));
+	FD_ZERO(&(ev->select_set_error));
+	ev->select_max_fd = -1;
+
+	return 0;
+}
+
+static int fdevent_select_event_del(fdevents *ev, int fde_ndx, int fd) {
+	if (fde_ndx < 0) return -1;
+
+	FD_CLR(fd, &(ev->select_set_read));
+	FD_CLR(fd, &(ev->select_set_write));
+	FD_CLR(fd, &(ev->select_set_error));
+
+	return -1;
+}
+
+static int fdevent_select_event_add(fdevents *ev, int fde_ndx, int fd, int events) {
+	UNUSED(fde_ndx);
+
+	/* we should be protected by max-fds, but you never know */
+	assert(fd < FD_SETSIZE);
+
+	if (events & FDEVENT_IN) {
+		FD_SET(fd, &(ev->select_set_read));
+		FD_CLR(fd, &(ev->select_set_write));
+	}
+	if (events & FDEVENT_OUT) {
+		FD_CLR(fd, &(ev->select_set_read));
+		FD_SET(fd, &(ev->select_set_write));
+	}
+	FD_SET(fd, &(ev->select_set_error));
+
+	if (fd > ev->select_max_fd) ev->select_max_fd = fd;
+
+	return fd;
+}
+
+static int fdevent_select_poll(fdevents *ev, int timeout_ms) {
+	struct timeval tv;
+
+	tv.tv_sec =  timeout_ms / 1000;
+	tv.tv_usec = (timeout_ms % 1000) * 1000;
+
+	ev->select_read = ev->select_set_read;
+	ev->select_write = ev->select_set_write;
+	ev->select_error = ev->select_set_error;
+
+	return select(ev->select_max_fd + 1, &(ev->select_read), &(ev->select_write), &(ev->select_error), &tv);
+}
+
+static int fdevent_select_event_get_revent(fdevents *ev, size_t ndx) {
+	int revents = 0;
+
+	if (FD_ISSET(ndx, &(ev->select_read))) {
+		revents |= FDEVENT_IN;
+	}
+	if (FD_ISSET(ndx, &(ev->select_write))) {
+		revents |= FDEVENT_OUT;
+	}
+	if (FD_ISSET(ndx, &(ev->select_error))) {
+		revents |= FDEVENT_ERR;
+	}
+
+	return revents;
+}
+
+static int fdevent_select_event_get_fd(fdevents *ev, size_t ndx) {
+	UNUSED(ev);
+
+	return ndx;
+}
+
+static int fdevent_select_event_next_fdndx(fdevents *ev, int ndx) {
+	int i;
+
+	i = (ndx < 0) ? 0 : ndx + 1;
+
+	for (; i < ev->select_max_fd + 1; i++) {
+		if (FD_ISSET(i, &(ev->select_read))) break;
+		if (FD_ISSET(i, &(ev->select_write))) break;
+		if (FD_ISSET(i, &(ev->select_error))) break;
+	}
+
+	return i;
+}
+
+int fdevent_select_init(fdevents *ev) {
+	ev->type = FDEVENT_HANDLER_SELECT;
+#define SET(x) \
+	ev->x = fdevent_select_##x;
+
+	SET(reset);
+	SET(poll);
+
+	SET(event_del);
+	SET(event_add);
+
+	SET(event_next_fdndx);
+	SET(event_get_fd);
+	SET(event_get_revent);
+
+	return 0;
+}
+
+#else
+int fdevent_select_init(fdevents *ev) {
+	UNUSED(ev);
+
+	return -1;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/fdevent_solaris_devpoll.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/fdevent_solaris_devpoll.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/fdevent_solaris_devpoll.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,158 @@
+#include <sys/types.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <signal.h>
+#include <fcntl.h>
+
+#include "fdevent.h"
+#include "settings.h"
+#include "buffer.h"
+
+#ifdef USE_SOLARIS_DEVPOLL
+
+static void fdevent_solaris_devpoll_free(fdevents *ev) {
+	free(ev->devpollfds);
+	close(ev->devpoll_fd);
+}
+
+/* return -1 is fine here */
+
+static int fdevent_solaris_devpoll_event_del(fdevents *ev, int fde_ndx, int fd) {
+	struct pollfd pfd;
+
+	if (fde_ndx < 0) return -1;
+
+	pfd.fd = fd;
+	pfd.events = POLLREMOVE;
+	pfd.revents = 0;
+
+	if (-1 == write(ev->devpoll_fd, &pfd, sizeof(pfd))) {
+		fprintf(stderr, "%s.%d: (del) write failed: (%d, %s)\n",
+			__FILE__, __LINE__,
+			fd, strerror(errno));
+
+		return -1;
+	}
+
+	return -1;
+}
+
+static int fdevent_solaris_devpoll_event_add(fdevents *ev, int fde_ndx, int fd, int events) {
+	struct pollfd pfd;
+	int add = 0;
+
+	if (fde_ndx == -1) add = 1;
+
+	pfd.fd = fd;
+	pfd.events = events;
+	pfd.revents = 0;
+
+	if (-1 == write(ev->devpoll_fd, &pfd, sizeof(pfd))) {
+		fprintf(stderr, "%s.%d: (del) write failed: (%d, %s)\n",
+			__FILE__, __LINE__,
+			fd, strerror(errno));
+
+		return -1;
+	}
+
+	return fd;
+}
+
+static int fdevent_solaris_devpoll_poll(fdevents *ev, int timeout_ms) {
+	struct dvpoll dopoll;
+	int ret;
+
+	dopoll.dp_timeout = timeout_ms;
+	dopoll.dp_nfds = ev->maxfds - 1;
+	dopoll.dp_fds = ev->devpollfds;
+
+	ret = ioctl(ev->devpoll_fd, DP_POLL, &dopoll);
+
+	return ret;
+}
+
+static int fdevent_solaris_devpoll_event_get_revent(fdevents *ev, size_t ndx) {
+	return ev->devpollfds[ndx].revents;
+}
+
+static int fdevent_solaris_devpoll_event_get_fd(fdevents *ev, size_t ndx) {
+	return ev->devpollfds[ndx].fd;
+}
+
+static int fdevent_solaris_devpoll_event_next_fdndx(fdevents *ev, int last_ndx) {
+	size_t i;
+
+	UNUSED(ev);
+
+	i = (last_ndx < 0) ? 0 : last_ndx + 1;
+
+	return i;
+}
+
+int fdevent_solaris_devpoll_reset(fdevents *ev) {
+	/* a forked process does only inherit the filedescriptor,
+	 * but every operation on the device will lead to a EACCES */
+	if ((ev->devpoll_fd = open("/dev/poll", O_RDWR)) < 0) {
+		fprintf(stderr, "%s.%d: opening /dev/poll failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__, strerror(errno));
+
+		return -1;
+	}
+
+	if (fcntl(ev->devpoll_fd, F_SETFD, FD_CLOEXEC) < 0) {
+		fprintf(stderr, "%s.%d: opening /dev/poll failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__, strerror(errno));
+
+		close(ev->devpoll_fd);
+
+		return -1;
+	}
+	return 0;
+}
+int fdevent_solaris_devpoll_init(fdevents *ev) {
+	ev->type = FDEVENT_HANDLER_SOLARIS_DEVPOLL;
+#define SET(x) \
+	ev->x = fdevent_solaris_devpoll_##x;
+
+	SET(free);
+	SET(poll);
+	SET(reset);
+
+	SET(event_del);
+	SET(event_add);
+
+	SET(event_next_fdndx);
+	SET(event_get_fd);
+	SET(event_get_revent);
+
+	ev->devpollfds = malloc(sizeof(*ev->devpollfds) * ev->maxfds);
+
+	if ((ev->devpoll_fd = open("/dev/poll", O_RDWR)) < 0) {
+		fprintf(stderr, "%s.%d: opening /dev/poll failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__, strerror(errno));
+
+		return -1;
+	}
+
+	/* we just wanted to check if it works */
+	close(ev->devpoll_fd);
+
+	ev->devpoll_fd = -1;
+
+	return 0;
+}
+
+#else
+int fdevent_solaris_devpoll_init(fdevents *ev) {
+	UNUSED(ev);
+
+	fprintf(stderr, "%s.%d: solaris-devpoll not supported, try to set server.event-handler = \"poll\" or \"select\"\n",
+			__FILE__, __LINE__);
+
+	return -1;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/http-header-glue.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/http-header-glue.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/http-header-glue.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,350 @@
+#define _GNU_SOURCE
+
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+
+#include "base.h"
+#include "array.h"
+#include "buffer.h"
+#include "log.h"
+#include "etag.h"
+
+/*
+ * This was 'borrowed' from tcpdump.
+ *
+ *
+ * This is fun.
+ *
+ * In older BSD systems, socket addresses were fixed-length, and
+ * "sizeof (struct sockaddr)" gave the size of the structure.
+ * All addresses fit within a "struct sockaddr".
+ *
+ * In newer BSD systems, the socket address is variable-length, and
+ * there's an "sa_len" field giving the length of the structure;
+ * this allows socket addresses to be longer than 2 bytes of family
+ * and 14 bytes of data.
+ *
+ * Some commercial UNIXes use the old BSD scheme, some use the RFC 2553
+ * variant of the old BSD scheme (with "struct sockaddr_storage" rather
+ * than "struct sockaddr"), and some use the new BSD scheme.
+ *
+ * Some versions of GNU libc use neither scheme, but has an "SA_LEN()"
+ * macro that determines the size based on the address family.  Other
+ * versions don't have "SA_LEN()" (as it was in drafts of RFC 2553
+ * but not in the final version).  On the latter systems, we explicitly
+ * check the AF_ type to determine the length; we assume that on
+ * all those systems we have "struct sockaddr_storage".
+ */
+
+#ifdef HAVE_IPV6
+# ifndef SA_LEN
+#  ifdef HAVE_SOCKADDR_SA_LEN
+#   define SA_LEN(addr)   ((addr)->sa_len)
+#  else /* HAVE_SOCKADDR_SA_LEN */
+#   ifdef HAVE_STRUCT_SOCKADDR_STORAGE
+static size_t get_sa_len(const struct sockaddr *addr) {
+	switch (addr->sa_family) {
+
+#    ifdef AF_INET
+	case AF_INET:
+		return (sizeof (struct sockaddr_in));
+#    endif
+
+#    ifdef AF_INET6
+	case AF_INET6:
+		return (sizeof (struct sockaddr_in6));
+#    endif
+
+	default:
+		return (sizeof (struct sockaddr));
+
+	}
+}
+#    define SA_LEN(addr)   (get_sa_len(addr))
+#   else /* HAVE_SOCKADDR_STORAGE */
+#    define SA_LEN(addr)   (sizeof (struct sockaddr))
+#   endif /* HAVE_SOCKADDR_STORAGE */
+#  endif /* HAVE_SOCKADDR_SA_LEN */
+# endif /* SA_LEN */
+#endif
+
+
+
+
+int response_header_insert(server *srv, connection *con, const char *key, size_t keylen, const char *value, size_t vallen) {
+	data_string *ds;
+
+	UNUSED(srv);
+
+	if (NULL == (ds = (data_string *)array_get_unused_element(con->response.headers, TYPE_STRING))) {
+		ds = data_response_init();
+	}
+	buffer_copy_string_len(ds->key, key, keylen);
+	buffer_copy_string_len(ds->value, value, vallen);
+
+	array_insert_unique(con->response.headers, (data_unset *)ds);
+
+	return 0;
+}
+
+int response_header_overwrite(server *srv, connection *con, const char *key, size_t keylen, const char *value, size_t vallen) {
+	data_string *ds;
+
+	UNUSED(srv);
+
+	/* if there already is a key by this name overwrite the value */
+	if (NULL != (ds = (data_string *)array_get_element(con->response.headers, key))) {
+		buffer_copy_string(ds->value, value);
+
+		return 0;
+	}
+
+	return response_header_insert(srv, con, key, keylen, value, vallen);
+}
+
+int http_response_redirect_to_directory(server *srv, connection *con) {
+	buffer *o;
+
+	o = buffer_init();
+
+	if (con->conf.is_ssl) {
+		buffer_copy_string(o, "https://");
+	} else {
+		buffer_copy_string(o, "http://");
+	}
+	if (con->uri.authority->used) {
+		buffer_append_string_buffer(o, con->uri.authority);
+	} else {
+		/* get the name of the currently connected socket */
+		struct hostent *he;
+#ifdef HAVE_IPV6
+		char hbuf[256];
+#endif
+		sock_addr our_addr;
+		socklen_t our_addr_len;
+
+		our_addr_len = sizeof(our_addr);
+
+		if (-1 == getsockname(con->fd, &(our_addr.plain), &our_addr_len)) {
+			con->http_status = 500;
+
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"can't get sockname", strerror(errno));
+
+			buffer_free(o);
+			return 0;
+		}
+
+
+		/* Lookup name: secondly try to get hostname for bind address */
+		switch(our_addr.plain.sa_family) {
+#ifdef HAVE_IPV6
+		case AF_INET6:
+			if (0 != getnameinfo((const struct sockaddr *)(&our_addr.ipv6),
+					     SA_LEN((const struct sockaddr *)&our_addr.ipv6),
+					     hbuf, sizeof(hbuf), NULL, 0, 0)) {
+
+				char dst[INET6_ADDRSTRLEN];
+
+				log_error_write(srv, __FILE__, __LINE__,
+						"SSS", "NOTICE: getnameinfo failed: ",
+						strerror(errno), ", using ip-address instead");
+
+				buffer_append_string(o,
+						     inet_ntop(AF_INET6, (char *)&our_addr.ipv6.sin6_addr,
+							       dst, sizeof(dst)));
+			} else {
+				buffer_append_string(o, hbuf);
+			}
+			break;
+#endif
+		case AF_INET:
+			if (NULL == (he = gethostbyaddr((char *)&our_addr.ipv4.sin_addr, sizeof(struct in_addr), AF_INET))) {
+				log_error_write(srv, __FILE__, __LINE__,
+						"SdS", "NOTICE: gethostbyaddr failed: ",
+						h_errno, ", using ip-address instead");
+
+				buffer_append_string(o, inet_ntoa(our_addr.ipv4.sin_addr));
+			} else {
+				buffer_append_string(o, he->h_name);
+			}
+			break;
+		default:
+			log_error_write(srv, __FILE__, __LINE__,
+					"S", "ERROR: unsupported address-type");
+
+			buffer_free(o);
+			return -1;
+		}
+
+		if (!((con->conf.is_ssl == 0 && srv->srvconf.port == 80) ||
+		      (con->conf.is_ssl == 1 && srv->srvconf.port == 443))) {
+			buffer_append_string(o, ":");
+			buffer_append_long(o, srv->srvconf.port);
+		}
+	}
+	buffer_append_string_buffer(o, con->uri.path);
+	buffer_append_string(o, "/");
+	if (!buffer_is_empty(con->uri.query)) {
+		buffer_append_string(o, "?");
+		buffer_append_string_buffer(o, con->uri.query);
+	}
+
+	response_header_insert(srv, con, CONST_STR_LEN("Location"), CONST_BUF_LEN(o));
+
+	con->http_status = 301;
+	con->file_finished = 1;
+
+	buffer_free(o);
+
+	return 0;
+}
+
+buffer * strftime_cache_get(server *srv, time_t last_mod) {
+	struct tm *tm;
+	size_t i;
+
+	for (i = 0; i < FILE_CACHE_MAX; i++) {
+		/* found cache-entry */
+		if (srv->mtime_cache[i].mtime == last_mod) return srv->mtime_cache[i].str;
+
+		/* found empty slot */
+		if (srv->mtime_cache[i].mtime == 0) break;
+	}
+
+	if (i == FILE_CACHE_MAX) {
+		i = 0;
+	}
+
+	srv->mtime_cache[i].mtime = last_mod;
+	buffer_prepare_copy(srv->mtime_cache[i].str, 1024);
+	tm = gmtime(&(srv->mtime_cache[i].mtime));
+	srv->mtime_cache[i].str->used = strftime(srv->mtime_cache[i].str->ptr,
+						 srv->mtime_cache[i].str->size - 1,
+						 "%a, %d %b %Y %H:%M:%S GMT", tm);
+	srv->mtime_cache[i].str->used++;
+
+	return srv->mtime_cache[i].str;
+}
+
+
+int http_response_handle_cachable(server *srv, connection *con, buffer *mtime) {
+	/*
+	 * 14.26 If-None-Match
+	 *    [...]
+	 *    If none of the entity tags match, then the server MAY perform the
+	 *    requested method as if the If-None-Match header field did not exist,
+	 *    but MUST also ignore any If-Modified-Since header field(s) in the
+	 *    request. That is, if no entity tags match, then the server MUST NOT
+	 *    return a 304 (Not Modified) response.
+	 */
+
+	/* last-modified handling */
+	if (con->request.http_if_none_match) {
+		if (etag_is_equal(con->physical.etag, con->request.http_if_none_match)) {
+			if (con->request.http_method == HTTP_METHOD_GET ||
+			    con->request.http_method == HTTP_METHOD_HEAD) {
+
+				/* check if etag + last-modified */
+				if (con->request.http_if_modified_since) {
+					size_t used_len;
+					char *semicolon;
+
+					if (NULL == (semicolon = strchr(con->request.http_if_modified_since, ';'))) {
+						used_len = strlen(con->request.http_if_modified_since);
+					} else {
+						used_len = semicolon - con->request.http_if_modified_since;
+					}
+
+					if (0 == strncmp(con->request.http_if_modified_since, mtime->ptr, used_len)) {
+						con->http_status = 304;
+						return HANDLER_FINISHED;
+					} else {
+						char buf[sizeof("Sat, 23 Jul 2005 21:20:01 GMT")];
+						time_t t_header, t_file;
+						struct tm tm;
+
+						/* check if we can safely copy the string */
+						if (used_len >= sizeof(buf)) {
+							log_error_write(srv, __FILE__, __LINE__, "ssdd",
+									"DEBUG: Last-Modified check failed as the received timestamp was too long:",
+									con->request.http_if_modified_since, used_len, sizeof(buf) - 1);
+
+							con->http_status = 412;
+							return HANDLER_FINISHED;
+						}
+
+
+						strncpy(buf, con->request.http_if_modified_since, used_len);
+						buf[used_len] = '\0';
+
+						if (NULL == strptime(buf, "%a, %d %b %Y %H:%M:%S GMT", &tm)) {
+							con->http_status = 412;
+							return HANDLER_FINISHED;
+						}
+						t_header = mktime(&tm);
+
+						strptime(mtime->ptr, "%a, %d %b %Y %H:%M:%S GMT", &tm);
+						t_file = mktime(&tm);
+
+						if (t_file > t_header) return HANDLER_GO_ON;
+
+						con->http_status = 304;
+						return HANDLER_FINISHED;
+					}
+				} else {
+					con->http_status = 304;
+					return HANDLER_FINISHED;
+				}
+			} else {
+				con->http_status = 412;
+				return HANDLER_FINISHED;
+			}
+		}
+	} else if (con->request.http_if_modified_since) {
+		size_t used_len;
+		char *semicolon;
+
+		if (NULL == (semicolon = strchr(con->request.http_if_modified_since, ';'))) {
+			used_len = strlen(con->request.http_if_modified_since);
+		} else {
+			used_len = semicolon - con->request.http_if_modified_since;
+		}
+
+		if (0 == strncmp(con->request.http_if_modified_since, mtime->ptr, used_len)) {
+			con->http_status = 304;
+			return HANDLER_FINISHED;
+		} else {
+			char buf[sizeof("Sat, 23 Jul 2005 21:20:01 GMT")];
+			time_t t_header, t_file;
+			struct tm tm;
+
+			/* convert to timestamp */
+			if (used_len >= sizeof(buf)) return HANDLER_GO_ON;
+
+			strncpy(buf, con->request.http_if_modified_since, used_len);
+			buf[used_len] = '\0';
+
+			if (NULL == strptime(buf, "%a, %d %b %Y %H:%M:%S GMT", &tm)) {
+				/**
+				 * parsing failed, let's get out of here 
+				 */
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"strptime() failed on", buf);
+				return HANDLER_GO_ON;
+			}
+			t_header = mktime(&tm);
+
+			strptime(mtime->ptr, "%a, %d %b %Y %H:%M:%S GMT", &tm);
+			t_file = mktime(&tm);
+
+			if (t_file > t_header) return HANDLER_GO_ON;
+
+			con->http_status = 304;
+			return HANDLER_FINISHED;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/http_auth.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/http_auth.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/http_auth.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1186 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_CRYPT_H
+# include <crypt.h>
+#elif defined(__linux__)
+/* linux needs _XOPEN_SOURCE */
+# define _XOPEN_SOURCE
+#endif
+
+#ifdef HAVE_LIBCRYPT
+# define HAVE_CRYPT
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <errno.h>
+#include <unistd.h>
+#include <ctype.h>
+
+#include "server.h"
+#include "log.h"
+#include "http_auth.h"
+#include "http_auth_digest.h"
+#include "inet_ntop_cache.h"
+#include "stream.h"
+
+#ifdef USE_OPENSSL
+# include <openssl/md5.h>
+#else
+# include "md5.h"
+#endif
+
+/**
+ * the $apr1$ handling is taken from apache 1.3.x
+ */
+
+/*
+ * The apr_md5_encode() routine uses much code obtained from the FreeBSD 3.0
+ * MD5 crypt() function, which is licenced as follows:
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <phk at login.dknet.dk> wrote this file.  As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
+ * ----------------------------------------------------------------------------
+ */
+
+handler_t auth_ldap_init(server *srv, mod_auth_plugin_config *s);
+
+static const char base64_pad = '=';
+
+static const short base64_reverse_table[256] = {
+	        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+		        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+		        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
+		        52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
+		        -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
+		        15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
+		        -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+		        41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1,
+		        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+		        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+		        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+		        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+		        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+		        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+		        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
+};
+
+
+static unsigned char * base64_decode(buffer *out, const char *in) {
+	unsigned char *result;
+	int ch, j = 0, k;
+	size_t i;
+
+	size_t in_len = strlen(in);
+
+	buffer_prepare_copy(out, in_len);
+
+	result = (unsigned char *)out->ptr;
+
+	ch = in[0];
+	/* run through the whole string, converting as we go */
+	for (i = 0; i < in_len; i++) {
+		ch = in[i];
+
+		if (ch == '\0') break;
+
+		if (ch == base64_pad) break;
+
+		ch = base64_reverse_table[ch];
+		if (ch < 0) continue;
+
+		switch(i % 4) {
+		case 0:
+			result[j] = ch << 2;
+			break;
+		case 1:
+			result[j++] |= ch >> 4;
+			result[j] = (ch & 0x0f) << 4;
+			break;
+		case 2:
+			result[j++] |= ch >>2;
+			result[j] = (ch & 0x03) << 6;
+			break;
+		case 3:
+			result[j++] |= ch;
+			break;
+		}
+	}
+	k = j;
+	/* mop things up if we ended on a boundary */
+	if (ch == base64_pad) {
+		switch(i % 4) {
+		case 0:
+		case 1:
+			return NULL;
+		case 2:
+			k++;
+		case 3:
+			result[k++] = 0;
+		}
+	}
+	result[k] = '\0';
+
+	out->used = k;
+
+	return result;
+}
+
+static int http_auth_get_password(server *srv, mod_auth_plugin_data *p, buffer *username, buffer *realm, buffer *password) {
+	int ret = -1;
+
+	if (!username->used|| !realm->used) return -1;
+
+	if (p->conf.auth_backend == AUTH_BACKEND_HTDIGEST) {
+		stream f;
+		char * f_line;
+
+		if (buffer_is_empty(p->conf.auth_htdigest_userfile)) return -1;
+
+		if (0 != stream_open(&f, p->conf.auth_htdigest_userfile)) {
+			log_error_write(srv, __FILE__, __LINE__, "sbss", "opening digest-userfile", p->conf.auth_htdigest_userfile, "failed:", strerror(errno));
+
+			return -1;
+		}
+
+		f_line = f.start;
+
+		while (f_line - f.start != f.size) {
+			char *f_user, *f_pwd, *e, *f_realm;
+			size_t u_len, pwd_len, r_len;
+
+			f_user = f_line;
+
+			/*
+			 * htdigest format
+			 *
+			 * user:realm:md5(user:realm:password)
+			 */
+
+			if (NULL == (f_realm = memchr(f_user, ':', f.size - (f_user - f.start) ))) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs",
+						"parsed error in", p->conf.auth_htdigest_userfile,
+						"expected 'username:realm:hashed password'");
+
+				stream_close(&f);
+
+				return -1;
+			}
+
+			if (NULL == (f_pwd = memchr(f_realm + 1, ':', f.size - (f_realm + 1 - f.start)))) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs",
+						"parsed error in", p->conf.auth_plain_userfile,
+						"expected 'username:realm:hashed password'");
+
+				stream_close(&f);
+
+				return -1;
+			}
+
+			/* get pointers to the fields */
+			u_len = f_realm - f_user;
+			f_realm++;
+			r_len = f_pwd - f_realm;
+			f_pwd++;
+
+			if (NULL != (e = memchr(f_pwd, '\n', f.size - (f_pwd - f.start)))) {
+				pwd_len = e - f_pwd;
+			} else {
+				pwd_len = f.size - (f_pwd - f.start);
+			}
+
+			if (username->used - 1 == u_len &&
+			    (realm->used - 1 == r_len) &&
+			    (0 == strncmp(username->ptr, f_user, u_len)) &&
+			    (0 == strncmp(realm->ptr, f_realm, r_len))) {
+				/* found */
+
+				buffer_copy_string_len(password, f_pwd, pwd_len);
+
+				ret = 0;
+				break;
+			}
+
+			/* EOL */
+			if (!e) break;
+
+			f_line = e + 1;
+		}
+
+		stream_close(&f);
+	} else if (p->conf.auth_backend == AUTH_BACKEND_HTPASSWD ||
+		   p->conf.auth_backend == AUTH_BACKEND_PLAIN) {
+		stream f;
+		char * f_line;
+		buffer *auth_fn;
+
+		auth_fn = (p->conf.auth_backend == AUTH_BACKEND_HTPASSWD) ? p->conf.auth_htpasswd_userfile : p->conf.auth_plain_userfile;
+
+		if (buffer_is_empty(auth_fn)) return -1;
+
+		if (0 != stream_open(&f, auth_fn)) {
+			log_error_write(srv, __FILE__, __LINE__, "sbss",
+					"opening plain-userfile", auth_fn, "failed:", strerror(errno));
+
+			return -1;
+		}
+
+		f_line = f.start;
+
+		while (f_line - f.start != f.size) {
+			char *f_user, *f_pwd, *e;
+			size_t u_len, pwd_len;
+
+			f_user = f_line;
+
+			/*
+			 * htpasswd format
+			 *
+			 * user:crypted passwd
+			 */
+
+			if (NULL == (f_pwd = memchr(f_user, ':', f.size - (f_user - f.start) ))) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs",
+						"parsed error in", auth_fn,
+						"expected 'username:hashed password'");
+
+				stream_close(&f);
+
+				return -1;
+			}
+
+			/* get pointers to the fields */
+			u_len = f_pwd - f_user;
+			f_pwd++;
+
+			if (NULL != (e = memchr(f_pwd, '\n', f.size - (f_pwd - f.start)))) {
+				pwd_len = e - f_pwd;
+			} else {
+				pwd_len = f.size - (f_pwd - f.start);
+			}
+
+			if (username->used - 1 == u_len &&
+			    (0 == strncmp(username->ptr, f_user, u_len))) {
+				/* found */
+
+				buffer_copy_string_len(password, f_pwd, pwd_len);
+
+				ret = 0;
+				break;
+			}
+
+			/* EOL */
+			if (!e) break;
+
+			f_line = e + 1;
+		}
+
+		stream_close(&f);
+	} else if (p->conf.auth_backend == AUTH_BACKEND_LDAP) {
+		ret = 0;
+	} else {
+		return -1;
+	}
+
+	return ret;
+}
+
+static int http_auth_match_rules(server *srv, mod_auth_plugin_data *p, const char *url, const char *username, const char *group, const char *host) {
+	const char *r = NULL, *rules = NULL;
+	size_t i;
+	int username_len;
+	data_string *require;
+	array *req;
+
+	UNUSED(group);
+	UNUSED(host);
+
+	/* check what has to be match to fullfil the request */
+	/* search auth-directives for path */
+	for (i = 0; i < p->conf.auth_require->used; i++) {
+		if (p->conf.auth_require->data[i]->key->used == 0) continue;
+
+		if (0 == strncmp(url, p->conf.auth_require->data[i]->key->ptr, p->conf.auth_require->data[i]->key->used - 1)) {
+			break;
+		}
+	}
+
+	if (i == p->conf.auth_require->used) {
+		return -1;
+	}
+
+	req = ((data_array *)(p->conf.auth_require->data[i]))->value;
+
+	require = (data_string *)array_get_element(req, "require");
+
+	/* if we get here, the user we got a authed user */
+	if (0 == strcmp(require->value->ptr, "valid-user")) {
+		return 0;
+	}
+
+	/* user=name1|group=name3|host=name4 */
+
+	/* seperate the string by | */
+#if 0
+	log_error_write(srv, __FILE__, __LINE__, "sb", "rules", require->value);
+#endif
+
+	username_len = username ? strlen(username) : 0;
+
+	r = rules = require->value->ptr;
+
+	while (1) {
+		const char *eq;
+		const char *k, *v, *e;
+		int k_len, v_len, r_len;
+
+		e = strchr(r, '|');
+
+		if (e) {
+			r_len = e - r;
+		} else {
+			r_len = strlen(rules) - (r - rules);
+		}
+
+		/* from r to r + r_len is a rule */
+
+		if (0 == strncmp(r, "valid-user", r_len)) {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"parsing the 'require' section in 'auth.require' failed: valid-user cannot be combined with other require rules",
+					require->value);
+			return -1;
+		}
+
+		/* search for = in the rules */
+		if (NULL == (eq = strchr(r, '='))) {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"parsing the 'require' section in 'auth.require' failed: a = is missing",
+					require->value);
+			return -1;
+		}
+
+		/* = out of range */
+		if (eq > r + r_len) {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"parsing the 'require' section in 'auth.require' failed: = out of range",
+					require->value);
+
+			return -1;
+		}
+
+		/* the part before the = is user|group|host */
+
+		k = r;
+		k_len = eq - r;
+		v = eq + 1;
+		v_len = r_len - k_len - 1;
+
+		if (k_len == 4) {
+			if (0 == strncmp(k, "user", k_len)) {
+				if (username &&
+				    username_len == v_len &&
+				    0 == strncmp(username, v, v_len)) {
+					return 0;
+				}
+			} else if (0 == strncmp(k, "host", k_len)) {
+				log_error_write(srv, __FILE__, __LINE__, "s", "host ... (not implemented)");
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "s", "unknown key");
+				return -1;
+			}
+		} else if (k_len == 5) {
+			if (0 == strncmp(k, "group", k_len)) {
+				log_error_write(srv, __FILE__, __LINE__, "s", "group ... (not implemented)");
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "unknown key", k);
+				return -1;
+			}
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "s", "unknown  key");
+			return -1;
+		}
+
+		if (!e) break;
+		r = e + 1;
+	}
+
+	log_error_write(srv, __FILE__, __LINE__, "s", "nothing matched");
+
+	return -1;
+}
+
+#define APR_MD5_DIGESTSIZE 16
+#define APR1_ID "$apr1$"
+
+/*
+ * The following MD5 password encryption code was largely borrowed from
+ * the FreeBSD 3.0 /usr/src/lib/libcrypt/crypt.c file, which is
+ * licenced as stated at the top of this file.
+ */
+
+static void to64(char *s, unsigned long v, int n)
+{
+    static unsigned char itoa64[] =         /* 0 ... 63 => ASCII - 64 */
+        "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+    while (--n >= 0) {
+        *s++ = itoa64[v&0x3f];
+        v >>= 6;
+    }
+}
+
+static void apr_md5_encode(const char *pw, const char *salt, char *result, size_t nbytes) {
+    /*
+     * Minimum size is 8 bytes for salt, plus 1 for the trailing NUL,
+     * plus 4 for the '$' separators, plus the password hash itself.
+     * Let's leave a goodly amount of leeway.
+     */
+
+    char passwd[120], *p;
+    const char *sp, *ep;
+    unsigned char final[APR_MD5_DIGESTSIZE];
+    ssize_t sl, pl, i;
+    MD5_CTX ctx, ctx1;
+    unsigned long l;
+
+    /*
+     * Refine the salt first.  It's possible we were given an already-hashed
+     * string as the salt argument, so extract the actual salt value from it
+     * if so.  Otherwise just use the string up to the first '$' as the salt.
+     */
+    sp = salt;
+
+    /*
+     * If it starts with the magic string, then skip that.
+     */
+    if (!strncmp(sp, APR1_ID, strlen(APR1_ID))) {
+        sp += strlen(APR1_ID);
+    }
+
+    /*
+     * It stops at the first '$' or 8 chars, whichever comes first
+     */
+    for (ep = sp; (*ep != '\0') && (*ep != '$') && (ep < (sp + 8)); ep++) {
+        continue;
+    }
+
+    /*
+     * Get the length of the true salt
+     */
+    sl = ep - sp;
+
+    /*
+     * 'Time to make the doughnuts..'
+     */
+    MD5_Init(&ctx);
+
+    /*
+     * The password first, since that is what is most unknown
+     */
+    MD5_Update(&ctx, pw, strlen(pw));
+
+    /*
+     * Then our magic string
+     */
+    MD5_Update(&ctx, APR1_ID, strlen(APR1_ID));
+
+    /*
+     * Then the raw salt
+     */
+    MD5_Update(&ctx, sp, sl);
+
+    /*
+     * Then just as many characters of the MD5(pw, salt, pw)
+     */
+    MD5_Init(&ctx1);
+    MD5_Update(&ctx1, pw, strlen(pw));
+    MD5_Update(&ctx1, sp, sl);
+    MD5_Update(&ctx1, pw, strlen(pw));
+    MD5_Final(final, &ctx1);
+    for (pl = strlen(pw); pl > 0; pl -= APR_MD5_DIGESTSIZE) {
+        MD5_Update(&ctx, final,
+                      (pl > APR_MD5_DIGESTSIZE) ? APR_MD5_DIGESTSIZE : pl);
+    }
+
+    /*
+     * Don't leave anything around in vm they could use.
+     */
+    memset(final, 0, sizeof(final));
+
+    /*
+     * Then something really weird...
+     */
+    for (i = strlen(pw); i != 0; i >>= 1) {
+        if (i & 1) {
+            MD5_Update(&ctx, final, 1);
+        }
+        else {
+            MD5_Update(&ctx, pw, 1);
+        }
+    }
+
+    /*
+     * Now make the output string.  We know our limitations, so we
+     * can use the string routines without bounds checking.
+     */
+    strcpy(passwd, APR1_ID);
+    strncat(passwd, sp, sl);
+    strcat(passwd, "$");
+
+    MD5_Final(final, &ctx);
+
+    /*
+     * And now, just to make sure things don't run too fast..
+     * On a 60 Mhz Pentium this takes 34 msec, so you would
+     * need 30 seconds to build a 1000 entry dictionary...
+     */
+    for (i = 0; i < 1000; i++) {
+        MD5_Init(&ctx1);
+        if (i & 1) {
+            MD5_Update(&ctx1, pw, strlen(pw));
+        }
+        else {
+            MD5_Update(&ctx1, final, APR_MD5_DIGESTSIZE);
+        }
+        if (i % 3) {
+            MD5_Update(&ctx1, sp, sl);
+        }
+
+        if (i % 7) {
+            MD5_Update(&ctx1, pw, strlen(pw));
+        }
+
+        if (i & 1) {
+            MD5_Update(&ctx1, final, APR_MD5_DIGESTSIZE);
+        }
+        else {
+            MD5_Update(&ctx1, pw, strlen(pw));
+        }
+        MD5_Final(final,&ctx1);
+    }
+
+    p = passwd + strlen(passwd);
+
+    l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; to64(p, l, 4); p += 4;
+    l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; to64(p, l, 4); p += 4;
+    l = (final[ 2]<<16) | (final[ 8]<<8) | final[14]; to64(p, l, 4); p += 4;
+    l = (final[ 3]<<16) | (final[ 9]<<8) | final[15]; to64(p, l, 4); p += 4;
+    l = (final[ 4]<<16) | (final[10]<<8) | final[ 5]; to64(p, l, 4); p += 4;
+    l =                    final[11]                ; to64(p, l, 2); p += 2;
+    *p = '\0';
+
+    /*
+     * Don't leave anything around in vm they could use.
+     */
+    memset(final, 0, sizeof(final));
+
+	/* FIXME
+	 */
+#define apr_cpystrn strncpy
+    apr_cpystrn(result, passwd, nbytes - 1);
+}
+
+
+/**
+ *
+ *
+ * @param password password-string from the auth-backend
+ * @param pw       password-string from the client
+ */
+
+static int http_auth_basic_password_compare(server *srv, mod_auth_plugin_data *p, array *req, buffer *username, buffer *realm, buffer *password, const char *pw) {
+	UNUSED(srv);
+	UNUSED(req);
+
+	if (p->conf.auth_backend == AUTH_BACKEND_HTDIGEST) {
+		/*
+		 * htdigest format
+		 *
+		 * user:realm:md5(user:realm:password)
+		 */
+
+		MD5_CTX Md5Ctx;
+		HASH HA1;
+		char a1[256];
+
+		MD5_Init(&Md5Ctx);
+		MD5_Update(&Md5Ctx, (unsigned char *)username->ptr, username->used - 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)realm->ptr, realm->used - 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)pw, strlen(pw));
+		MD5_Final(HA1, &Md5Ctx);
+
+		CvtHex(HA1, a1);
+
+		if (0 == strcmp(password->ptr, a1)) {
+			return 0;
+		}
+	} else if (p->conf.auth_backend == AUTH_BACKEND_HTPASSWD) {
+		char sample[120];
+		if (!strncmp(password->ptr, APR1_ID, strlen(APR1_ID))) {
+			/*
+			 * The hash was created using $apr1$ custom algorithm.
+			 */
+			apr_md5_encode(pw, password->ptr, sample, sizeof(sample));
+			return (strcmp(sample, password->ptr) == 0) ? 0 : 1;
+		} else {
+#ifdef HAVE_CRYPT
+		char salt[32];
+		char *crypted;
+		size_t salt_len = 0;
+		/*
+		 * htpasswd format
+		 *
+		 * user:crypted password
+		 */
+
+		/*
+		 *  Algorithm      Salt
+		 *  CRYPT_STD_DES   2-character (Default)
+		 *  CRYPT_EXT_DES   9-character
+		 *  CRYPT_MD5       12-character beginning with $1$
+		 *  CRYPT_BLOWFISH  16-character beginning with $2$
+		 */
+
+		if (password->used < 13 + 1) {
+			fprintf(stderr, "%s.%d\n", __FILE__, __LINE__);
+			return -1;
+		}
+
+		if (password->used == 13 + 1) {
+			/* a simple DES password is 2 + 11 characters */
+			salt_len = 2;
+		} else if (password->ptr[0] == '$' && password->ptr[2] == '$') {
+			char *dollar = NULL;
+
+			if (NULL == (dollar = strchr(password->ptr + 3, '$'))) {
+				fprintf(stderr, "%s.%d\n", __FILE__, __LINE__);
+				return -1;
+			}
+
+			salt_len = dollar - password->ptr;
+		}
+
+		if (salt_len > sizeof(salt) - 1) {
+			fprintf(stderr, "%s.%d\n", __FILE__, __LINE__);
+			return -1;
+		}
+
+		strncpy(salt, password->ptr, salt_len);
+
+		salt[salt_len] = '\0';
+
+		crypted = crypt(pw, salt);
+
+		if (0 == strcmp(password->ptr, crypted)) {
+			return 0;
+		} else {
+			fprintf(stderr, "%s.%d\n", __FILE__, __LINE__);
+		}
+
+#endif
+	}
+	} else if (p->conf.auth_backend == AUTH_BACKEND_PLAIN) {
+		if (0 == strcmp(password->ptr, pw)) {
+			return 0;
+		}
+	} else if (p->conf.auth_backend == AUTH_BACKEND_LDAP) {
+#ifdef USE_LDAP
+		LDAP *ldap;
+		LDAPMessage *lm, *first;
+		char *dn;
+		int ret;
+		char *attrs[] = { LDAP_NO_ATTRS, NULL };
+		size_t i;
+
+		/* for now we stay synchronous */
+
+		/*
+		 * 1. connect anonymously (done in plugin init)
+		 * 2. get DN for uid = username
+		 * 3. auth against ldap server
+		 * 4. (optional) check a field
+		 * 5. disconnect
+		 *
+		 */
+
+		/* check username
+		 *
+		 * we have to protect us againt username which modifies out filter in
+		 * a unpleasant way
+		 */
+
+		for (i = 0; i < username->used - 1; i++) {
+			char c = username->ptr[i];
+
+			if (!isalpha(c) &&
+			    !isdigit(c)) {
+
+				log_error_write(srv, __FILE__, __LINE__, "sbd",
+					"ldap: invalid character (a-zA-Z0-9 allowed) in username:", username, i);
+
+				return -1;
+			}
+		}
+
+		if (p->conf.auth_ldap_allow_empty_pw != 1 && pw[0] == '\0')
+			return -1;
+
+		/* build filter */
+		buffer_copy_string_buffer(p->ldap_filter, p->conf.ldap_filter_pre);
+		buffer_append_string_buffer(p->ldap_filter, username);
+		buffer_append_string_buffer(p->ldap_filter, p->conf.ldap_filter_post);
+
+
+		/* 2. */
+		if (p->conf.ldap == NULL ||
+		    LDAP_SUCCESS != (ret = ldap_search_s(p->conf.ldap, p->conf.auth_ldap_basedn->ptr, LDAP_SCOPE_SUBTREE, p->ldap_filter->ptr, attrs, 0, &lm))) {
+			if (auth_ldap_init(srv, &p->conf) != HANDLER_GO_ON)
+				return -1;
+			if (LDAP_SUCCESS != (ret = ldap_search_s(p->conf.ldap, p->conf.auth_ldap_basedn->ptr, LDAP_SCOPE_SUBTREE, p->ldap_filter->ptr, attrs, 0, &lm))) {
+
+			log_error_write(srv, __FILE__, __LINE__, "sssb",
+					"ldap:", ldap_err2string(ret), "filter:", p->ldap_filter);
+
+			return -1;
+			}
+		}
+
+		if (NULL == (first = ldap_first_entry(p->conf.ldap, lm))) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "ldap ...");
+
+			ldap_msgfree(lm);
+
+			return -1;
+		}
+
+		if (NULL == (dn = ldap_get_dn(p->conf.ldap, first))) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "ldap ...");
+
+			ldap_msgfree(lm);
+
+			return -1;
+		}
+
+		ldap_msgfree(lm);
+
+
+		/* 3. */
+		if (NULL == (ldap = ldap_init(p->conf.auth_ldap_hostname->ptr, LDAP_PORT))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "ldap ...", strerror(errno));
+			return -1;
+		}
+
+		ret = LDAP_VERSION3;
+		if (LDAP_OPT_SUCCESS != (ret = ldap_set_option(ldap, LDAP_OPT_PROTOCOL_VERSION, &ret))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "ldap:", ldap_err2string(ret));
+
+			ldap_unbind_s(ldap);
+
+			return -1;
+		}
+
+		if (p->conf.auth_ldap_starttls == 1) {
+	 		if (LDAP_OPT_SUCCESS != (ret = ldap_start_tls_s(ldap, NULL,  NULL))) {
+	 			log_error_write(srv, __FILE__, __LINE__, "ss", "ldap startTLS failed:", ldap_err2string(ret));
+
+				ldap_unbind_s(ldap);
+
+				return -1;
+	 		}
+ 		}
+
+
+		if (LDAP_SUCCESS != (ret = ldap_simple_bind_s(ldap, dn, pw))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "ldap:", ldap_err2string(ret));
+
+			ldap_unbind_s(ldap);
+
+			return -1;
+		}
+
+		/* 5. */
+		ldap_unbind_s(ldap);
+
+		/* everything worked, good, access granted */
+
+		return 0;
+#endif
+	}
+	return -1;
+}
+
+int http_auth_basic_check(server *srv, connection *con, mod_auth_plugin_data *p, array *req, buffer *url, const char *realm_str) {
+	buffer *username, *password;
+	char *pw;
+
+	data_string *realm;
+
+	realm = (data_string *)array_get_element(req, "realm");
+
+	username = buffer_init();
+
+	if (!base64_decode(username, realm_str)) {
+		log_error_write(srv, __FILE__, __LINE__, "sb", "decodeing base64-string failed", username);
+
+		buffer_free(username);
+		return 0;
+	}
+
+	/* r2 == user:password */
+	if (NULL == (pw = strchr(username->ptr, ':'))) {
+		log_error_write(srv, __FILE__, __LINE__, "sb", ": is missing in", username);
+
+		buffer_free(username);
+		return 0;
+	}
+
+	*pw++ = '\0';
+
+	username->used = pw - username->ptr;
+
+	password = buffer_init();
+	/* copy password to r1 */
+	if (http_auth_get_password(srv, p, username, realm->value, password)) {
+		buffer_free(username);
+		buffer_free(password);
+
+		log_error_write(srv, __FILE__, __LINE__, "s", "get_password failed");
+
+		return 0;
+	}
+
+	/* password doesn't match */
+	if (http_auth_basic_password_compare(srv, p, req, username, realm->value, password, pw)) {
+		log_error_write(srv, __FILE__, __LINE__, "sbbss", "password doesn't match for ", con->uri.path, username, ", IP:", inet_ntop_cache_get_ip(srv, &(con->dst_addr)));
+
+		buffer_free(username);
+		buffer_free(password);
+
+		return 0;
+	}
+
+	/* value is our allow-rules */
+	if (http_auth_match_rules(srv, p, url->ptr, username->ptr, NULL, NULL)) {
+		buffer_free(username);
+		buffer_free(password);
+
+		log_error_write(srv, __FILE__, __LINE__, "s", "rules didn't match");
+
+		return 0;
+	}
+
+	/* remember the username */
+	buffer_copy_string_buffer(p->auth_user, username);
+
+	buffer_free(username);
+	buffer_free(password);
+
+	return 1;
+}
+
+typedef struct {
+	const char *key;
+	int key_len;
+	char **ptr;
+} digest_kv;
+
+int http_auth_digest_check(server *srv, connection *con, mod_auth_plugin_data *p, array *req, buffer *url, const char *realm_str) {
+	char a1[256];
+	char a2[256];
+
+	char *username;
+	char *realm;
+	char *nonce;
+	char *uri;
+	char *algorithm;
+	char *qop;
+	char *cnonce;
+	char *nc;
+	char *respons;
+
+	char *e, *c;
+	const char *m = NULL;
+	int i;
+	buffer *password, *b, *username_buf, *realm_buf;
+
+	MD5_CTX Md5Ctx;
+	HASH HA1;
+	HASH HA2;
+	HASH RespHash;
+	HASHHEX HA2Hex;
+
+
+	/* init pointers */
+#define S(x) \
+	x, sizeof(x)-1, NULL
+	digest_kv dkv[10] = {
+		{ S("username=") },
+		{ S("realm=") },
+		{ S("nonce=") },
+		{ S("uri=") },
+		{ S("algorithm=") },
+		{ S("qop=") },
+		{ S("cnonce=") },
+		{ S("nc=") },
+		{ S("response=") },
+
+		{ NULL, 0, NULL }
+	};
+#undef S
+
+	dkv[0].ptr = &username;
+	dkv[1].ptr = &realm;
+	dkv[2].ptr = &nonce;
+	dkv[3].ptr = &uri;
+	dkv[4].ptr = &algorithm;
+	dkv[5].ptr = &qop;
+	dkv[6].ptr = &cnonce;
+	dkv[7].ptr = &nc;
+	dkv[8].ptr = &respons;
+	dkv[9].ptr = NULL;
+
+	UNUSED(req);
+
+	for (i = 0; dkv[i].key; i++) {
+		*(dkv[i].ptr) = NULL;
+	}
+
+
+	if (p->conf.auth_backend != AUTH_BACKEND_HTDIGEST &&
+	    p->conf.auth_backend != AUTH_BACKEND_PLAIN) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"digest: unsupported backend (only htdigest or plain)");
+
+		return -1;
+	}
+
+	b = buffer_init_string(realm_str);
+
+	/* parse credentials from client */
+	for (c = b->ptr; *c; c++) {
+		/* skip whitespaces */
+		while (*c == ' ' || *c == '\t') c++;
+		if (!*c) break;
+
+		for (i = 0; dkv[i].key; i++) {
+			if ((0 == strncmp(c, dkv[i].key, dkv[i].key_len))) {
+				if ((c[dkv[i].key_len] == '"') &&
+				    (NULL != (e = strchr(c + dkv[i].key_len + 1, '"')))) {
+					/* value with "..." */
+					*(dkv[i].ptr) = c + dkv[i].key_len + 1;
+					c = e;
+
+					*e = '\0';
+				} else if (NULL != (e = strchr(c + dkv[i].key_len, ','))) {
+					/* value without "...", terminated by ',' */
+					*(dkv[i].ptr) = c + dkv[i].key_len;
+					c = e;
+
+					*e = '\0';
+				} else {
+					/* value without "...", terminated by EOL */
+					*(dkv[i].ptr) = c + dkv[i].key_len;
+					c += strlen(c) - 1;
+				}
+			}
+		}
+	}
+
+	if (p->conf.auth_debug > 1) {
+		log_error_write(srv, __FILE__, __LINE__, "ss", "username", username);
+		log_error_write(srv, __FILE__, __LINE__, "ss", "realm", realm);
+		log_error_write(srv, __FILE__, __LINE__, "ss", "nonce", nonce);
+		log_error_write(srv, __FILE__, __LINE__, "ss", "uri", uri);
+		log_error_write(srv, __FILE__, __LINE__, "ss", "algorigthm", algorithm);
+		log_error_write(srv, __FILE__, __LINE__, "ss", "qop", qop);
+		log_error_write(srv, __FILE__, __LINE__, "ss", "cnonce", cnonce);
+		log_error_write(srv, __FILE__, __LINE__, "ss", "nc", nc);
+		log_error_write(srv, __FILE__, __LINE__, "ss", "response", respons);
+	}
+
+	/* check if everything is transmitted */
+	if (!username ||
+	    !realm ||
+	    !nonce ||
+	    !uri ||
+	    (qop && (!nc || !cnonce)) ||
+	    !respons ) {
+		/* missing field */
+
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"digest: missing field");
+
+		buffer_free(b);
+		return -1;
+	}
+
+	/**
+	 * protect the md5-sess against missing cnonce and nonce
+	 */
+	if (algorithm &&
+	    0 == strcasecmp(algorithm, "md5-sess") &&
+	    (!nonce || !cnonce)) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"digest: (md5-sess: missing field");
+
+		buffer_free(b);
+		return -1;
+	}
+
+	m = get_http_method_name(con->request.http_method);
+
+	/* password-string == HA1 */
+	password = buffer_init();
+	username_buf = buffer_init_string(username);
+	realm_buf = buffer_init_string(realm);
+	if (http_auth_get_password(srv, p, username_buf, realm_buf, password)) {
+		buffer_free(password);
+		buffer_free(b);
+		buffer_free(username_buf);
+		buffer_free(realm_buf);
+		return 0;
+	}
+
+	buffer_free(username_buf);
+	buffer_free(realm_buf);
+
+	if (p->conf.auth_backend == AUTH_BACKEND_PLAIN) {
+		/* generate password from plain-text */
+		MD5_Init(&Md5Ctx);
+		MD5_Update(&Md5Ctx, (unsigned char *)username, strlen(username));
+		MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)realm, strlen(realm));
+		MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)password->ptr, password->used - 1);
+		MD5_Final(HA1, &Md5Ctx);
+	} else if (p->conf.auth_backend == AUTH_BACKEND_HTDIGEST) {
+		/* HA1 */
+		/* transform the 32-byte-hex-md5 to a 16-byte-md5 */
+		for (i = 0; i < HASHLEN; i++) {
+			HA1[i] = hex2int(password->ptr[i*2]) << 4;
+			HA1[i] |= hex2int(password->ptr[i*2+1]);
+		}
+	} else {
+		/* we already check that above */
+		SEGFAULT();
+	}
+
+	buffer_free(password);
+
+	if (algorithm &&
+	    strcasecmp(algorithm, "md5-sess") == 0) {
+		MD5_Init(&Md5Ctx);
+		MD5_Update(&Md5Ctx, (unsigned char *)HA1, 16);
+		MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)nonce, strlen(nonce));
+		MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)cnonce, strlen(cnonce));
+		MD5_Final(HA1, &Md5Ctx);
+	}
+
+	CvtHex(HA1, a1);
+
+	/* calculate H(A2) */
+	MD5_Init(&Md5Ctx);
+	MD5_Update(&Md5Ctx, (unsigned char *)m, strlen(m));
+	MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+	MD5_Update(&Md5Ctx, (unsigned char *)uri, strlen(uri));
+	if (qop && strcasecmp(qop, "auth-int") == 0) {
+		MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)"", HASHHEXLEN);
+	}
+	MD5_Final(HA2, &Md5Ctx);
+	CvtHex(HA2, HA2Hex);
+
+	/* calculate response */
+	MD5_Init(&Md5Ctx);
+	MD5_Update(&Md5Ctx, (unsigned char *)a1, HASHHEXLEN);
+	MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+	MD5_Update(&Md5Ctx, (unsigned char *)nonce, strlen(nonce));
+	MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+	if (qop && *qop) {
+		MD5_Update(&Md5Ctx, (unsigned char *)nc, strlen(nc));
+		MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)cnonce, strlen(cnonce));
+		MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+		MD5_Update(&Md5Ctx, (unsigned char *)qop, strlen(qop));
+		MD5_Update(&Md5Ctx, (unsigned char *)":", 1);
+	};
+	MD5_Update(&Md5Ctx, (unsigned char *)HA2Hex, HASHHEXLEN);
+	MD5_Final(RespHash, &Md5Ctx);
+	CvtHex(RespHash, a2);
+
+	if (0 != strcmp(a2, respons)) {
+		/* digest not ok */
+
+		if (p->conf.auth_debug) {
+			log_error_write(srv, __FILE__, __LINE__, "sss",
+				"digest: digest mismatch", a2, respons);
+		}
+
+		log_error_write(srv, __FILE__, __LINE__, "sss",
+				"digest: auth failed for ", username, ": wrong password, IP:", inet_ntop_cache_get_ip(srv, &(con->dst_addr)));
+
+		buffer_free(b);
+		return 0;
+	}
+
+	/* value is our allow-rules */
+	if (http_auth_match_rules(srv, p, url->ptr, username, NULL, NULL)) {
+		buffer_free(b);
+
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"digest: rules did match");
+
+		return 0;
+	}
+
+	/* remember the username */
+	buffer_copy_string(p->auth_user, username);
+
+	buffer_free(b);
+
+	if (p->conf.auth_debug) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"digest: auth ok");
+	}
+	return 1;
+}
+
+
+int http_auth_digest_generate_nonce(server *srv, mod_auth_plugin_data *p, buffer *fn, char out[33]) {
+	HASH h;
+	MD5_CTX Md5Ctx;
+	char hh[32];
+
+	UNUSED(p);
+
+	/* generate shared-secret */
+	MD5_Init(&Md5Ctx);
+	MD5_Update(&Md5Ctx, (unsigned char *)fn->ptr, fn->used - 1);
+	MD5_Update(&Md5Ctx, (unsigned char *)"+", 1);
+
+	/* we assume sizeof(time_t) == 4 here, but if not it ain't a problem at all */
+	LI_ltostr(hh, srv->cur_ts);
+	MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
+	LI_ltostr(hh, rand());
+	MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
+
+	MD5_Final(h, &Md5Ctx);
+
+	CvtHex(h, out);
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/http_auth.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/http_auth.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/http_auth.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,73 @@
+#ifndef _HTTP_AUTH_H_
+#define _HTTP_AUTH_H_
+
+#include "server.h"
+#include "plugin.h"
+
+#if defined(HAVE_LDAP_H) && defined(HAVE_LBER_H) && defined(HAVE_LIBLDAP) && defined(HAVE_LIBLBER)
+# define USE_LDAP
+# include <ldap.h>
+#endif
+
+typedef enum {
+	AUTH_BACKEND_UNSET,
+	AUTH_BACKEND_PLAIN,
+	AUTH_BACKEND_LDAP,
+	AUTH_BACKEND_HTPASSWD,
+	AUTH_BACKEND_HTDIGEST
+} auth_backend_t;
+
+typedef struct {
+	/* auth */
+	array  *auth_require;
+
+	buffer *auth_plain_groupfile;
+	buffer *auth_plain_userfile;
+
+	buffer *auth_htdigest_userfile;
+	buffer *auth_htpasswd_userfile;
+
+	buffer *auth_backend_conf;
+
+	buffer *auth_ldap_hostname;
+	buffer *auth_ldap_basedn;
+	buffer *auth_ldap_binddn;
+	buffer *auth_ldap_bindpw;
+	buffer *auth_ldap_filter;
+	buffer *auth_ldap_cafile;
+	unsigned short auth_ldap_starttls;
+	unsigned short auth_ldap_allow_empty_pw;
+
+	unsigned short auth_debug;
+
+	/* generated */
+	auth_backend_t auth_backend;
+
+#ifdef USE_LDAP
+	LDAP *ldap;
+
+	buffer *ldap_filter_pre;
+	buffer *ldap_filter_post;
+#endif
+} mod_auth_plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+	buffer *tmp_buf;
+
+	buffer *auth_user;
+
+#ifdef USE_LDAP
+	buffer *ldap_filter;
+#endif
+
+	mod_auth_plugin_config **config_storage;
+
+	mod_auth_plugin_config conf; /* this is only used as long as no handler_ctx is setup */
+} mod_auth_plugin_data;
+
+int http_auth_basic_check(server *srv, connection *con, mod_auth_plugin_data *p, array *req, buffer *url, const char *realm_str);
+int http_auth_digest_check(server *srv, connection *con, mod_auth_plugin_data *p, array *req, buffer *url, const char *realm_str);
+int http_auth_digest_generate_nonce(server *srv, mod_auth_plugin_data *p, buffer *fn, char hh[33]);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/http_auth_digest.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/http_auth_digest.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/http_auth_digest.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,19 @@
+#include <string.h>
+#include "http_auth_digest.h"
+
+#include "buffer.h"
+
+#ifndef USE_OPENSSL
+# include "md5.h"
+#endif
+
+void CvtHex(IN HASH Bin, OUT HASHHEX Hex) {
+	unsigned short i;
+
+	for (i = 0; i < HASHLEN; i++) {
+		Hex[i*2] = int2hex((Bin[i] >> 4) & 0xf);
+		Hex[i*2+1] = int2hex(Bin[i] & 0xf);
+	}
+	Hex[HASHHEXLEN] = '\0';
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/http_auth_digest.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/http_auth_digest.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/http_auth_digest.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,24 @@
+#ifndef _DIGCALC_H_
+#define _DIGCALC_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#define HASHLEN 16
+typedef unsigned char HASH[HASHLEN];
+#define HASHHEXLEN 32
+typedef char HASHHEX[HASHHEXLEN+1];
+#ifdef USE_OPENSSL
+#define IN const
+#else
+#define IN
+#endif
+#define OUT
+
+void CvtHex(
+    IN HASH Bin,
+    OUT HASHHEX Hex
+    );
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/http_chunk.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/http_chunk.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/http_chunk.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,132 @@
+/**
+ * the HTTP chunk-API
+ *
+ *
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+
+#include "server.h"
+#include "chunk.h"
+#include "http_chunk.h"
+#include "log.h"
+
+static int http_chunk_append_len(server *srv, connection *con, size_t len) {
+	size_t i, olen = len, j;
+	buffer *b;
+
+	b = srv->tmp_chunk_len;
+
+	if (len == 0) {
+		buffer_copy_string(b, "0");
+	} else {
+		for (i = 0; i < 8 && len; i++) {
+			len >>= 4;
+		}
+
+		/* i is the number of hex digits we have */
+		buffer_prepare_copy(b, i + 1);
+
+		for (j = i-1, len = olen; j+1 > 0; j--) {
+			b->ptr[j] = (len & 0xf) + (((len & 0xf) <= 9) ? '0' : 'a' - 10);
+			len >>= 4;
+		}
+		b->used = i;
+		b->ptr[b->used++] = '\0';
+	}
+
+	buffer_append_string(b, "\r\n");
+	chunkqueue_append_buffer(con->write_queue, b);
+
+	return 0;
+}
+
+
+int http_chunk_append_file(server *srv, connection *con, buffer *fn, off_t offset, off_t len) {
+	chunkqueue *cq;
+
+	if (!con) return -1;
+
+	cq = con->write_queue;
+
+	if (con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED) {
+		http_chunk_append_len(srv, con, len);
+	}
+
+	chunkqueue_append_file(cq, fn, offset, len);
+
+	if (con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED && len > 0) {
+		chunkqueue_append_mem(cq, "\r\n", 2 + 1);
+	}
+
+	return 0;
+}
+
+int http_chunk_append_buffer(server *srv, connection *con, buffer *mem) {
+	chunkqueue *cq;
+
+	if (!con) return -1;
+
+	cq = con->write_queue;
+
+	if (con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED) {
+		http_chunk_append_len(srv, con, mem->used - 1);
+	}
+
+	chunkqueue_append_buffer(cq, mem);
+
+	if (con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED && mem->used > 0) {
+		chunkqueue_append_mem(cq, "\r\n", 2 + 1);
+	}
+
+	return 0;
+}
+
+int http_chunk_append_mem(server *srv, connection *con, const char * mem, size_t len) {
+	chunkqueue *cq;
+
+	if (!con) return -1;
+
+	cq = con->write_queue;
+
+	if (len == 0) {
+		if (con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED) {
+			chunkqueue_append_mem(cq, "0\r\n\r\n", 5 + 1);
+		} else {
+			chunkqueue_append_mem(cq, "", 1);
+		}
+		return 0;
+	}
+
+	if (con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED) {
+		http_chunk_append_len(srv, con, len - 1);
+	}
+
+	chunkqueue_append_mem(cq, mem, len);
+
+	if (con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED) {
+		chunkqueue_append_mem(cq, "\r\n", 2 + 1);
+	}
+
+	return 0;
+}
+
+
+off_t http_chunkqueue_length(server *srv, connection *con) {
+	if (!con) {
+		log_error_write(srv, __FILE__, __LINE__, "s", "connection is NULL!!");
+
+		return 0;
+	}
+
+	return chunkqueue_length(con->write_queue);
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/http_chunk.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/http_chunk.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/http_chunk.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,12 @@
+#ifndef _HTTP_CHUNK_H_
+#define _HTTP_CHUNK_H_
+
+#include "server.h"
+#include <sys/types.h>
+
+int http_chunk_append_mem(server *srv, connection *con, const char * mem, size_t len);
+int http_chunk_append_buffer(server *srv, connection *con, buffer *mem);
+int http_chunk_append_file(server *srv, connection *con, buffer *fn, off_t offset, off_t len);
+off_t http_chunkqueue_length(server *srv, connection *con);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/inet_ntop_cache.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/inet_ntop_cache.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/inet_ntop_cache.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,53 @@
+#include <sys/types.h>
+
+#include <string.h>
+
+
+#include "base.h"
+#include "inet_ntop_cache.h"
+#include "sys-socket.h"
+
+const char * inet_ntop_cache_get_ip(server *srv, sock_addr *addr) {
+#ifdef HAVE_IPV6
+	size_t ndx = 0, i;
+	for (i = 0; i < INET_NTOP_CACHE_MAX; i++) {
+		if (srv->inet_ntop_cache[i].ts != 0) {
+			if (srv->inet_ntop_cache[i].family == AF_INET6 &&
+			    0 == memcmp(srv->inet_ntop_cache[i].addr.ipv6.s6_addr, addr->ipv6.sin6_addr.s6_addr, 16)) {
+				/* IPv6 found in cache */
+				break;
+			} else if (srv->inet_ntop_cache[i].family == AF_INET &&
+				   srv->inet_ntop_cache[i].addr.ipv4.s_addr == addr->ipv4.sin_addr.s_addr) {
+				/* IPv4 found in cache */
+				break;
+
+			}
+		}
+	}
+
+	if (i == INET_NTOP_CACHE_MAX) {
+		/* not found in cache */
+
+		i = ndx;
+		inet_ntop(addr->plain.sa_family,
+			  addr->plain.sa_family == AF_INET6 ?
+			  (const void *) &(addr->ipv6.sin6_addr) :
+			  (const void *) &(addr->ipv4.sin_addr),
+			  srv->inet_ntop_cache[i].b2, INET6_ADDRSTRLEN);
+
+		srv->inet_ntop_cache[i].ts = srv->cur_ts;
+		srv->inet_ntop_cache[i].family = addr->plain.sa_family;
+
+		if (srv->inet_ntop_cache[i].family == AF_INET) {
+			srv->inet_ntop_cache[i].addr.ipv4.s_addr = addr->ipv4.sin_addr.s_addr;
+		} else if (srv->inet_ntop_cache[i].family == AF_INET6) {
+			memcpy(srv->inet_ntop_cache[i].addr.ipv6.s6_addr, addr->ipv6.sin6_addr.s6_addr, 16);
+		}
+	}
+
+	return srv->inet_ntop_cache[i].b2;
+#else
+	UNUSED(srv);
+	return inet_ntoa(addr->ipv4.sin_addr);
+#endif
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/inet_ntop_cache.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/inet_ntop_cache.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/inet_ntop_cache.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,7 @@
+#ifndef _INET_NTOP_CACHE_H_
+#define _INET_NTOP_CACHE_H_
+
+#include "base.h"
+const char * inet_ntop_cache_get_ip(server *srv, sock_addr *addr);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/joblist.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/joblist.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/joblist.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,63 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "joblist.h"
+#include "log.h"
+
+int joblist_append(server *srv, connection *con) {
+	if (con->in_joblist) return 0;
+
+	if (srv->joblist->size == 0) {
+		srv->joblist->size  = 16;
+		srv->joblist->ptr   = malloc(sizeof(*srv->joblist->ptr) * srv->joblist->size);
+	} else if (srv->joblist->used == srv->joblist->size) {
+		srv->joblist->size += 16;
+		srv->joblist->ptr   = realloc(srv->joblist->ptr, sizeof(*srv->joblist->ptr) * srv->joblist->size);
+	}
+
+	srv->joblist->ptr[srv->joblist->used++] = con;
+
+	return 0;
+}
+
+void joblist_free(server *srv, connections *joblist) {
+	UNUSED(srv);
+
+	free(joblist->ptr);
+	free(joblist);
+}
+
+connection *fdwaitqueue_unshift(server *srv, connections *fdwaitqueue) {
+	connection *con;
+	UNUSED(srv);
+
+
+	if (fdwaitqueue->used == 0) return NULL;
+
+	con = fdwaitqueue->ptr[0];
+
+	memmove(fdwaitqueue->ptr, &(fdwaitqueue->ptr[1]), --fdwaitqueue->used * sizeof(*(fdwaitqueue->ptr)));
+
+	return con;
+}
+
+int fdwaitqueue_append(server *srv, connection *con) {
+	if (srv->fdwaitqueue->size == 0) {
+		srv->fdwaitqueue->size  = 16;
+		srv->fdwaitqueue->ptr   = malloc(sizeof(*(srv->fdwaitqueue->ptr)) * srv->fdwaitqueue->size);
+	} else if (srv->fdwaitqueue->used == srv->fdwaitqueue->size) {
+		srv->fdwaitqueue->size += 16;
+		srv->fdwaitqueue->ptr   = realloc(srv->fdwaitqueue->ptr, sizeof(*(srv->fdwaitqueue->ptr)) * srv->fdwaitqueue->size);
+	}
+
+	srv->fdwaitqueue->ptr[srv->fdwaitqueue->used++] = con;
+
+	return 0;
+}
+
+void fdwaitqueue_free(server *srv, connections *fdwaitqueue) {
+	UNUSED(srv);
+	free(fdwaitqueue->ptr);
+	free(fdwaitqueue);
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/joblist.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/joblist.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/joblist.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,13 @@
+#ifndef _JOB_LIST_H_
+#define _JOB_LIST_H_
+
+#include "base.h"
+
+int joblist_append(server *srv, connection *con);
+void joblist_free(server *srv, connections *joblist);
+
+int fdwaitqueue_append(server *srv, connection *con);
+void fdwaitqueue_free(server *srv, connections *fdwaitqueue);
+connection *fdwaitqueue_unshift(server *srv, connections *fdwaitqueue);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/keyvalue.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/keyvalue.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/keyvalue.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,388 @@
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "server.h"
+#include "keyvalue.h"
+
+static keyvalue http_versions[] = {
+	{ HTTP_VERSION_1_1, "HTTP/1.1" },
+	{ HTTP_VERSION_1_0, "HTTP/1.0" },
+	{ HTTP_VERSION_UNSET, NULL }
+};
+
+static keyvalue http_methods[] = {
+	{ HTTP_METHOD_GET,  "GET" },
+	{ HTTP_METHOD_POST, "POST" },
+	{ HTTP_METHOD_HEAD, "HEAD" },
+	{ HTTP_METHOD_PROPFIND, "PROPFIND" },
+	{ HTTP_METHOD_PROPPATCH, "PROPPATCH" },
+	{ HTTP_METHOD_REPORT, "REPORT" },
+	{ HTTP_METHOD_OPTIONS, "OPTIONS" },
+	{ HTTP_METHOD_MKCOL, "MKCOL" },
+	{ HTTP_METHOD_PUT, "PUT" },
+	{ HTTP_METHOD_DELETE, "DELETE" },
+	{ HTTP_METHOD_COPY, "COPY" },
+	{ HTTP_METHOD_MOVE, "MOVE" },
+	{ HTTP_METHOD_LABEL, "LABEL" },
+	{ HTTP_METHOD_CHECKOUT, "CHECKOUT" },
+	{ HTTP_METHOD_CHECKIN, "CHECKIN" },
+	{ HTTP_METHOD_MERGE, "MERGE" },
+	{ HTTP_METHOD_LOCK, "LOCK" },
+	{ HTTP_METHOD_UNLOCK, "UNLOCK" },
+	{ HTTP_METHOD_MKACTIVITY, "MKACTIVITY" },
+	{ HTTP_METHOD_UNCHECKOUT, "UNCHECKOUT" },
+	{ HTTP_METHOD_VERSION_CONTROL, "VERSION-CONTROL" },
+	{ HTTP_METHOD_CONNECT, "CONNECT" },
+
+	{ HTTP_METHOD_UNSET, NULL }
+};
+
+static keyvalue http_status[] = {
+	{ 100, "Continue" },
+	{ 101, "Switching Protocols" },
+	{ 102, "Processing" }, /* WebDAV */
+	{ 200, "OK" },
+	{ 201, "Created" },
+	{ 202, "Accepted" },
+	{ 203, "Non-Authoritative Information" },
+	{ 204, "No Content" },
+	{ 205, "Reset Content" },
+	{ 206, "Partial Content" },
+	{ 207, "Multi-status" }, /* WebDAV */
+	{ 300, "Multiple Choices" },
+	{ 301, "Moved Permanently" },
+	{ 302, "Found" },
+	{ 303, "See Other" },
+	{ 304, "Not Modified" },
+	{ 305, "Use Proxy" },
+	{ 306, "(Unused)" },
+	{ 307, "Temporary Redirect" },
+	{ 400, "Bad Request" },
+	{ 401, "Unauthorized" },
+	{ 402, "Payment Required" },
+	{ 403, "Forbidden" },
+	{ 404, "Not Found" },
+	{ 405, "Method Not Allowed" },
+	{ 406, "Not Acceptable" },
+	{ 407, "Proxy Authentication Required" },
+	{ 408, "Request Timeout" },
+	{ 409, "Conflict" },
+	{ 410, "Gone" },
+	{ 411, "Length Required" },
+	{ 412, "Precondition Failed" },
+	{ 413, "Request Entity Too Large" },
+	{ 414, "Request-URI Too Long" },
+	{ 415, "Unsupported Media Type" },
+	{ 416, "Requested Range Not Satisfiable" },
+	{ 417, "Expectation Failed" },
+	{ 422, "Unprocessable Entity" }, /* WebDAV */
+	{ 423, "Locked" }, /* WebDAV */
+	{ 424, "Failed Dependency" }, /* WebDAV */
+	{ 426, "Upgrade Required" }, /* TLS */
+	{ 500, "Internal Server Error" },
+	{ 501, "Not Implemented" },
+	{ 502, "Bad Gateway" },
+	{ 503, "Service Not Available" },
+	{ 504, "Gateway Timeout" },
+	{ 505, "HTTP Version Not Supported" },
+	{ 507, "Insufficient Storage" }, /* WebDAV */
+
+	{ -1, NULL }
+};
+
+static keyvalue http_status_body[] = {
+	{ 400, "400.html" },
+	{ 401, "401.html" },
+	{ 403, "403.html" },
+	{ 404, "404.html" },
+	{ 411, "411.html" },
+	{ 416, "416.html" },
+	{ 500, "500.html" },
+	{ 501, "501.html" },
+	{ 503, "503.html" },
+	{ 505, "505.html" },
+
+	{ -1, NULL }
+};
+
+
+const char *keyvalue_get_value(keyvalue *kv, int k) {
+	int i;
+	for (i = 0; kv[i].value; i++) {
+		if (kv[i].key == k) return kv[i].value;
+	}
+	return NULL;
+}
+
+int keyvalue_get_key(keyvalue *kv, const char *s) {
+	int i;
+	for (i = 0; kv[i].value; i++) {
+		if (0 == strcmp(kv[i].value, s)) return kv[i].key;
+	}
+	return -1;
+}
+
+keyvalue_buffer *keyvalue_buffer_init(void) {
+	keyvalue_buffer *kvb;
+
+	kvb = calloc(1, sizeof(*kvb));
+
+	return kvb;
+}
+
+int keyvalue_buffer_append(keyvalue_buffer *kvb, int key, const char *value) {
+	size_t i;
+	if (kvb->size == 0) {
+		kvb->size = 4;
+
+		kvb->kv = malloc(kvb->size * sizeof(*kvb->kv));
+
+		for(i = 0; i < kvb->size; i++) {
+			kvb->kv[i] = calloc(1, sizeof(**kvb->kv));
+		}
+	} else if (kvb->used == kvb->size) {
+		kvb->size += 4;
+
+		kvb->kv = realloc(kvb->kv, kvb->size * sizeof(*kvb->kv));
+
+		for(i = kvb->used; i < kvb->size; i++) {
+			kvb->kv[i] = calloc(1, sizeof(**kvb->kv));
+		}
+	}
+
+	kvb->kv[kvb->used]->key = key;
+	kvb->kv[kvb->used]->value = strdup(value);
+
+	kvb->used++;
+
+	return 0;
+}
+
+void keyvalue_buffer_free(keyvalue_buffer *kvb) {
+	size_t i;
+
+	for (i = 0; i < kvb->size; i++) {
+		if (kvb->kv[i]->value) free(kvb->kv[i]->value);
+		free(kvb->kv[i]);
+	}
+
+	if (kvb->kv) free(kvb->kv);
+
+	free(kvb);
+}
+
+
+s_keyvalue_buffer *s_keyvalue_buffer_init(void) {
+	s_keyvalue_buffer *kvb;
+
+	kvb = calloc(1, sizeof(*kvb));
+
+	return kvb;
+}
+
+int s_keyvalue_buffer_append(s_keyvalue_buffer *kvb, const char *key, const char *value) {
+	size_t i;
+	if (kvb->size == 0) {
+		kvb->size = 4;
+		kvb->used = 0;
+
+		kvb->kv = malloc(kvb->size * sizeof(*kvb->kv));
+
+		for(i = 0; i < kvb->size; i++) {
+			kvb->kv[i] = calloc(1, sizeof(**kvb->kv));
+		}
+	} else if (kvb->used == kvb->size) {
+		kvb->size += 4;
+
+		kvb->kv = realloc(kvb->kv, kvb->size * sizeof(*kvb->kv));
+
+		for(i = kvb->used; i < kvb->size; i++) {
+			kvb->kv[i] = calloc(1, sizeof(**kvb->kv));
+		}
+	}
+
+	kvb->kv[kvb->used]->key = key ? strdup(key) : NULL;
+	kvb->kv[kvb->used]->value = strdup(value);
+
+	kvb->used++;
+
+	return 0;
+}
+
+void s_keyvalue_buffer_free(s_keyvalue_buffer *kvb) {
+	size_t i;
+
+	for (i = 0; i < kvb->size; i++) {
+		if (kvb->kv[i]->key) free(kvb->kv[i]->key);
+		if (kvb->kv[i]->value) free(kvb->kv[i]->value);
+		free(kvb->kv[i]);
+	}
+
+	if (kvb->kv) free(kvb->kv);
+
+	free(kvb);
+}
+
+
+httpauth_keyvalue_buffer *httpauth_keyvalue_buffer_init(void) {
+	httpauth_keyvalue_buffer *kvb;
+
+	kvb = calloc(1, sizeof(*kvb));
+
+	return kvb;
+}
+
+int httpauth_keyvalue_buffer_append(httpauth_keyvalue_buffer *kvb, const char *key, const char *realm, httpauth_type type) {
+	size_t i;
+	if (kvb->size == 0) {
+		kvb->size = 4;
+
+		kvb->kv = malloc(kvb->size * sizeof(*kvb->kv));
+
+		for(i = 0; i < kvb->size; i++) {
+			kvb->kv[i] = calloc(1, sizeof(**kvb->kv));
+		}
+	} else if (kvb->used == kvb->size) {
+		kvb->size += 4;
+
+		kvb->kv = realloc(kvb->kv, kvb->size * sizeof(*kvb->kv));
+
+		for(i = kvb->used; i < kvb->size; i++) {
+			kvb->kv[i] = calloc(1, sizeof(**kvb->kv));
+		}
+	}
+
+	kvb->kv[kvb->used]->key = strdup(key);
+	kvb->kv[kvb->used]->realm = strdup(realm);
+	kvb->kv[kvb->used]->type = type;
+
+	kvb->used++;
+
+	return 0;
+}
+
+void httpauth_keyvalue_buffer_free(httpauth_keyvalue_buffer *kvb) {
+	size_t i;
+
+	for (i = 0; i < kvb->size; i++) {
+		if (kvb->kv[i]->key) free(kvb->kv[i]->key);
+		if (kvb->kv[i]->realm) free(kvb->kv[i]->realm);
+		free(kvb->kv[i]);
+	}
+
+	if (kvb->kv) free(kvb->kv);
+
+	free(kvb);
+}
+
+
+const char *get_http_version_name(int i) {
+	return keyvalue_get_value(http_versions, i);
+}
+
+const char *get_http_status_name(int i) {
+	return keyvalue_get_value(http_status, i);
+}
+
+const char *get_http_method_name(http_method_t i) {
+	return keyvalue_get_value(http_methods, i);
+}
+
+const char *get_http_status_body_name(int i) {
+	return keyvalue_get_value(http_status_body, i);
+}
+
+int get_http_version_key(const char *s) {
+	return keyvalue_get_key(http_versions, s);
+}
+
+http_method_t get_http_method_key(const char *s) {
+	return (http_method_t)keyvalue_get_key(http_methods, s);
+}
+
+
+
+
+pcre_keyvalue_buffer *pcre_keyvalue_buffer_init(void) {
+	pcre_keyvalue_buffer *kvb;
+
+	kvb = calloc(1, sizeof(*kvb));
+
+	return kvb;
+}
+
+int pcre_keyvalue_buffer_append(pcre_keyvalue_buffer *kvb, const char *key, const char *value) {
+#ifdef HAVE_PCRE_H
+	size_t i;
+	const char *errptr;
+	int erroff;
+	pcre_keyvalue *kv;
+#endif
+
+	if (!key) return -1;
+
+#ifdef HAVE_PCRE_H
+	if (kvb->size == 0) {
+		kvb->size = 4;
+		kvb->used = 0;
+
+		kvb->kv = malloc(kvb->size * sizeof(*kvb->kv));
+
+		for(i = 0; i < kvb->size; i++) {
+			kvb->kv[i] = calloc(1, sizeof(**kvb->kv));
+		}
+	} else if (kvb->used == kvb->size) {
+		kvb->size += 4;
+
+		kvb->kv = realloc(kvb->kv, kvb->size * sizeof(*kvb->kv));
+
+		for(i = kvb->used; i < kvb->size; i++) {
+			kvb->kv[i] = calloc(1, sizeof(**kvb->kv));
+		}
+	}
+
+	kv = kvb->kv[kvb->used];
+	if (NULL == (kv->key = pcre_compile(key,
+					  0, &errptr, &erroff, NULL))) {
+
+		fprintf(stderr, "%s.%d: rexexp compilation error at %s\n", __FILE__, __LINE__, errptr);
+		return -1;
+	}
+
+	if (NULL == (kv->key_extra = pcre_study(kv->key, 0, &errptr)) &&
+			errptr != NULL) {
+		return -1;
+	}
+
+	kv->value = buffer_init_string(value);
+
+	kvb->used++;
+
+	return 0;
+#else
+	UNUSED(kvb);
+	UNUSED(value);
+
+	return -1;
+#endif
+}
+
+void pcre_keyvalue_buffer_free(pcre_keyvalue_buffer *kvb) {
+#ifdef HAVE_PCRE_H
+	size_t i;
+	pcre_keyvalue *kv;
+
+	for (i = 0; i < kvb->size; i++) {
+		kv = kvb->kv[i];
+		if (kv->key) pcre_free(kv->key);
+		if (kv->key_extra) pcre_free(kv->key_extra);
+		if (kv->value) buffer_free(kv->value);
+		free(kv);
+	}
+
+	if (kvb->kv) free(kvb->kv);
+#endif
+
+	free(kvb);
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/keyvalue.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/keyvalue.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/keyvalue.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,108 @@
+#ifndef _KEY_VALUE_H_
+#define _KEY_VALUE_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_PCRE_H
+# include <pcre.h>
+#endif
+
+typedef enum {
+	HTTP_METHOD_UNSET = -1,
+	HTTP_METHOD_GET,
+	HTTP_METHOD_POST,
+	HTTP_METHOD_HEAD,
+	HTTP_METHOD_OPTIONS,
+	HTTP_METHOD_PROPFIND,  /* WebDAV */
+	HTTP_METHOD_MKCOL,
+	HTTP_METHOD_PUT,
+	HTTP_METHOD_DELETE,
+	HTTP_METHOD_COPY,
+	HTTP_METHOD_MOVE,
+	HTTP_METHOD_PROPPATCH,
+	HTTP_METHOD_REPORT, /* DeltaV */
+	HTTP_METHOD_CHECKOUT,
+	HTTP_METHOD_CHECKIN,
+	HTTP_METHOD_VERSION_CONTROL,
+	HTTP_METHOD_UNCHECKOUT,
+	HTTP_METHOD_MKACTIVITY,
+	HTTP_METHOD_MERGE,
+	HTTP_METHOD_LOCK,
+	HTTP_METHOD_UNLOCK,
+	HTTP_METHOD_LABEL,
+	HTTP_METHOD_CONNECT
+} http_method_t;
+
+typedef enum { HTTP_VERSION_UNSET = -1, HTTP_VERSION_1_0, HTTP_VERSION_1_1 } http_version_t;
+
+typedef struct {
+	int key;
+
+	char *value;
+} keyvalue;
+
+typedef struct {
+	char *key;
+
+	char *value;
+} s_keyvalue;
+
+typedef struct {
+#ifdef HAVE_PCRE_H
+	pcre *key;
+	pcre_extra *key_extra;
+#endif
+
+	buffer *value;
+} pcre_keyvalue;
+
+typedef enum { HTTP_AUTH_BASIC, HTTP_AUTH_DIGEST } httpauth_type;
+
+typedef struct {
+	char *key;
+
+	char *realm;
+	httpauth_type type;
+} httpauth_keyvalue;
+
+#define KVB(x) \
+typedef struct {\
+	x **kv; \
+	size_t used;\
+	size_t size;\
+} x ## _buffer
+
+KVB(keyvalue);
+KVB(s_keyvalue);
+KVB(httpauth_keyvalue);
+KVB(pcre_keyvalue);
+
+const char *get_http_status_name(int i);
+const char *get_http_version_name(int i);
+const char *get_http_method_name(http_method_t i);
+const char *get_http_status_body_name(int i);
+int get_http_version_key(const char *s);
+http_method_t get_http_method_key(const char *s);
+
+const char *keyvalue_get_value(keyvalue *kv, int k);
+int keyvalue_get_key(keyvalue *kv, const char *s);
+
+keyvalue_buffer *keyvalue_buffer_init(void);
+int keyvalue_buffer_append(keyvalue_buffer *kvb, int k, const char *value);
+void keyvalue_buffer_free(keyvalue_buffer *kvb);
+
+s_keyvalue_buffer *s_keyvalue_buffer_init(void);
+int s_keyvalue_buffer_append(s_keyvalue_buffer *kvb, const char *key, const char *value);
+void s_keyvalue_buffer_free(s_keyvalue_buffer *kvb);
+
+httpauth_keyvalue_buffer *httpauth_keyvalue_buffer_init(void);
+int httpauth_keyvalue_buffer_append(httpauth_keyvalue_buffer *kvb, const char *key, const char *realm, httpauth_type type);
+void httpauth_keyvalue_buffer_free(httpauth_keyvalue_buffer *kvb);
+
+pcre_keyvalue_buffer *pcre_keyvalue_buffer_init(void);
+int pcre_keyvalue_buffer_append(pcre_keyvalue_buffer *kvb, const char *key, const char *value);
+void pcre_keyvalue_buffer_free(pcre_keyvalue_buffer *kvb);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/lemon.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/lemon.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/lemon.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,4396 @@
+/*
+** This file contains all sources (including headers) to the LEMON
+** LALR(1) parser generator.  The sources have been combined into a
+** single file to make it easy to include LEMON in the source tree
+** and Makefile of another program.
+**
+** The author of this program disclaims copyright.
+*/
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+
+extern void qsort();
+extern double strtod();
+extern long strtol();
+extern void free();
+extern int access();
+extern int atoi();
+
+#ifndef __WIN32__
+#   if defined(_WIN32) || defined(WIN32)
+#	define __WIN32__
+#   endif
+#endif
+
+/* #define PRIVATE static */
+#define PRIVATE
+
+#ifdef TEST
+#define MAXRHS 5       /* Set low to exercise exception code */
+#else
+#define MAXRHS 1000
+#endif
+
+char *msort();
+extern void *malloc();
+
+/******** From the file "action.h" *************************************/
+struct action *Action_new();
+struct action *Action_sort();
+void Action_add();
+
+/********* From the file "assert.h" ************************************/
+void myassert();
+#ifndef NDEBUG
+#  define assert(X) if(!(X))myassert(__FILE__,__LINE__)
+#else
+#  define assert(X)
+#endif
+
+/********** From the file "build.h" ************************************/
+void FindRulePrecedences();
+void FindFirstSets();
+void FindStates();
+void FindLinks();
+void FindFollowSets();
+void FindActions();
+
+/********* From the file "configlist.h" *********************************/
+void Configlist_init(/* void */);
+struct config *Configlist_add(/* struct rule *, int */);
+struct config *Configlist_addbasis(/* struct rule *, int */);
+void Configlist_closure(/* void */);
+void Configlist_sort(/* void */);
+void Configlist_sortbasis(/* void */);
+struct config *Configlist_return(/* void */);
+struct config *Configlist_basis(/* void */);
+void Configlist_eat(/* struct config * */);
+void Configlist_reset(/* void */);
+
+/********* From the file "error.h" ***************************************/
+void ErrorMsg(const char *, int,const char *, ...);
+
+/****** From the file "option.h" ******************************************/
+struct s_options {
+  enum { OPT_FLAG=1,  OPT_INT,  OPT_DBL,  OPT_STR,
+         OPT_FFLAG, OPT_FINT, OPT_FDBL, OPT_FSTR} type;
+  char *label;
+  char *arg;
+  char *message;
+};
+int    OptInit(/* char**,struct s_options*,FILE* */);
+int    OptNArgs(/* void */);
+char  *OptArg(/* int */);
+void   OptErr(/* int */);
+void   OptPrint(/* void */);
+
+/******** From the file "parse.h" *****************************************/
+void Parse(/* struct lemon *lemp */);
+
+/********* From the file "plink.h" ***************************************/
+struct plink *Plink_new(/* void */);
+void Plink_add(/* struct plink **, struct config * */);
+void Plink_copy(/* struct plink **, struct plink * */);
+void Plink_delete(/* struct plink * */);
+
+/********** From the file "report.h" *************************************/
+void Reprint(/* struct lemon * */);
+void ReportOutput(/* struct lemon * */);
+void ReportTable(/* struct lemon * */);
+void ReportHeader(/* struct lemon * */);
+void CompressTables(/* struct lemon * */);
+
+/********** From the file "set.h" ****************************************/
+void  SetSize(/* int N */);             /* All sets will be of size N */
+char *SetNew(/* void */);               /* A new set for element 0..N */
+void  SetFree(/* char* */);             /* Deallocate a set */
+
+int SetAdd(/* char*,int */);            /* Add element to a set */
+int SetUnion(/* char *A,char *B */);    /* A <- A U B, thru element N */
+
+#define SetFind(X,Y) (X[Y])       /* True if Y is in set X */
+
+/********** From the file "struct.h" *************************************/
+/*
+** Principal data structures for the LEMON parser generator.
+*/
+
+typedef enum {Bo_FALSE=0, Bo_TRUE} Boolean;
+
+/* Symbols (terminals and nonterminals) of the grammar are stored
+** in the following: */
+struct symbol {
+  char *name;              /* Name of the symbol */
+  int index;               /* Index number for this symbol */
+  enum {
+    TERMINAL,
+    NONTERMINAL
+  } type;                  /* Symbols are all either TERMINALS or NTs */
+  struct rule *rule;       /* Linked list of rules of this (if an NT) */
+  struct symbol *fallback; /* fallback token in case this token doesn't parse */
+  int prec;                /* Precedence if defined (-1 otherwise) */
+  enum e_assoc {
+    LEFT,
+    RIGHT,
+    NONE,
+    UNK
+  } assoc;                 /* Associativity if predecence is defined */
+  char *firstset;          /* First-set for all rules of this symbol */
+  Boolean lambda;          /* True if NT and can generate an empty string */
+  char *destructor;        /* Code which executes whenever this symbol is
+                           ** popped from the stack during error processing */
+  int destructorln;        /* Line number of destructor code */
+  char *datatype;          /* The data type of information held by this
+                           ** object. Only used if type==NONTERMINAL */
+  int dtnum;               /* The data type number.  In the parser, the value
+                           ** stack is a union.  The .yy%d element of this
+                           ** union is the correct data type for this object */
+};
+
+/* Each production rule in the grammar is stored in the following
+** structure.  */
+struct rule {
+  struct symbol *lhs;      /* Left-hand side of the rule */
+  char *lhsalias;          /* Alias for the LHS (NULL if none) */
+  int ruleline;            /* Line number for the rule */
+  int nrhs;                /* Number of RHS symbols */
+  struct symbol **rhs;     /* The RHS symbols */
+  char **rhsalias;         /* An alias for each RHS symbol (NULL if none) */
+  int line;                /* Line number at which code begins */
+  char *code;              /* The code executed when this rule is reduced */
+  struct symbol *precsym;  /* Precedence symbol for this rule */
+  int index;               /* An index number for this rule */
+  Boolean canReduce;       /* True if this rule is ever reduced */
+  struct rule *nextlhs;    /* Next rule with the same LHS */
+  struct rule *next;       /* Next rule in the global list */
+};
+
+/* A configuration is a production rule of the grammar together with
+** a mark (dot) showing how much of that rule has been processed so far.
+** Configurations also contain a follow-set which is a list of terminal
+** symbols which are allowed to immediately follow the end of the rule.
+** Every configuration is recorded as an instance of the following: */
+struct config {
+  struct rule *rp;         /* The rule upon which the configuration is based */
+  int dot;                 /* The parse point */
+  char *fws;               /* Follow-set for this configuration only */
+  struct plink *fplp;      /* Follow-set forward propagation links */
+  struct plink *bplp;      /* Follow-set backwards propagation links */
+  struct state *stp;       /* Pointer to state which contains this */
+  enum {
+    COMPLETE,              /* The status is used during followset and */
+    INCOMPLETE             /*    shift computations */
+  } status;
+  struct config *next;     /* Next configuration in the state */
+  struct config *bp;       /* The next basis configuration */
+};
+
+/* Every shift or reduce operation is stored as one of the following */
+struct action {
+  struct symbol *sp;       /* The look-ahead symbol */
+  enum e_action {
+    SHIFT,
+    ACCEPT,
+    REDUCE,
+    ERROR,
+    CONFLICT,                /* Was a reduce, but part of a conflict */
+    SH_RESOLVED,             /* Was a shift.  Precedence resolved conflict */
+    RD_RESOLVED,             /* Was reduce.  Precedence resolved conflict */
+    NOT_USED                 /* Deleted by compression */
+  } type;
+  union {
+    struct state *stp;     /* The new state, if a shift */
+    struct rule *rp;       /* The rule, if a reduce */
+  } x;
+  struct action *next;     /* Next action for this state */
+  struct action *collide;  /* Next action with the same hash */
+};
+
+/* Each state of the generated parser's finite state machine
+** is encoded as an instance of the following structure. */
+struct state {
+  struct config *bp;       /* The basis configurations for this state */
+  struct config *cfp;      /* All configurations in this set */
+  int index;               /* Sequencial number for this state */
+  struct action *ap;       /* Array of actions for this state */
+  int nTknAct, nNtAct;     /* Number of actions on terminals and nonterminals */
+  int iTknOfst, iNtOfst;   /* yy_action[] offset for terminals and nonterms */
+  int iDflt;               /* Default action */
+};
+#define NO_OFFSET (-2147483647)
+
+/* A followset propagation link indicates that the contents of one
+** configuration followset should be propagated to another whenever
+** the first changes. */
+struct plink {
+  struct config *cfp;      /* The configuration to which linked */
+  struct plink *next;      /* The next propagate link */
+};
+
+/* The state vector for the entire parser generator is recorded as
+** follows.  (LEMON uses no global variables and makes little use of
+** static variables.  Fields in the following structure can be thought
+** of as begin global variables in the program.) */
+struct lemon {
+  struct state **sorted;   /* Table of states sorted by state number */
+  struct rule *rule;       /* List of all rules */
+  int nstate;              /* Number of states */
+  int nrule;               /* Number of rules */
+  int nsymbol;             /* Number of terminal and nonterminal symbols */
+  int nterminal;           /* Number of terminal symbols */
+  struct symbol **symbols; /* Sorted array of pointers to symbols */
+  int errorcnt;            /* Number of errors */
+  struct symbol *errsym;   /* The error symbol */
+  char *name;              /* Name of the generated parser */
+  char *arg;               /* Declaration of the 3th argument to parser */
+  char *tokentype;         /* Type of terminal symbols in the parser stack */
+  char *vartype;           /* The default type of non-terminal symbols */
+  char *start;             /* Name of the start symbol for the grammar */
+  char *stacksize;         /* Size of the parser stack */
+  char *include;           /* Code to put at the start of the C file */
+  int  includeln;          /* Line number for start of include code */
+  char *error;             /* Code to execute when an error is seen */
+  int  errorln;            /* Line number for start of error code */
+  char *overflow;          /* Code to execute on a stack overflow */
+  int  overflowln;         /* Line number for start of overflow code */
+  char *failure;           /* Code to execute on parser failure */
+  int  failureln;          /* Line number for start of failure code */
+  char *accept;            /* Code to execute when the parser excepts */
+  int  acceptln;           /* Line number for the start of accept code */
+  char *extracode;         /* Code appended to the generated file */
+  int  extracodeln;        /* Line number for the start of the extra code */
+  char *tokendest;         /* Code to execute to destroy token data */
+  int  tokendestln;        /* Line number for token destroyer code */
+  char *vardest;           /* Code for the default non-terminal destructor */
+  int  vardestln;          /* Line number for default non-term destructor code*/
+  char *filename;          /* Name of the input file */
+  char *tmplname;          /* Name of the template file */
+  char *outname;           /* Name of the current output file */
+  char *tokenprefix;       /* A prefix added to token names in the .h file */
+  int nconflict;           /* Number of parsing conflicts */
+  int tablesize;           /* Size of the parse tables */
+  int basisflag;           /* Print only basis configurations */
+  int has_fallback;        /* True if any %fallback is seen in the grammer */
+  char *argv0;             /* Name of the program */
+};
+
+#define MemoryCheck(X) if((X)==0){ \
+  extern void memory_error(); \
+  memory_error(); \
+}
+
+/**************** From the file "table.h" *********************************/
+/*
+** All code in this file has been automatically generated
+** from a specification in the file
+**              "table.q"
+** by the associative array code building program "aagen".
+** Do not edit this file!  Instead, edit the specification
+** file, then rerun aagen.
+*/
+/*
+** Code for processing tables in the LEMON parser generator.
+*/
+
+/* Routines for handling a strings */
+
+char *Strsafe();
+
+void Strsafe_init(/* void */);
+int Strsafe_insert(/* char * */);
+char *Strsafe_find(/* char * */);
+
+/* Routines for handling symbols of the grammar */
+
+struct symbol *Symbol_new();
+int Symbolcmpp(/* struct symbol **, struct symbol ** */);
+void Symbol_init(/* void */);
+int Symbol_insert(/* struct symbol *, char * */);
+struct symbol *Symbol_find(/* char * */);
+struct symbol *Symbol_Nth(/* int */);
+int Symbol_count(/*  */);
+struct symbol **Symbol_arrayof(/*  */);
+
+/* Routines to manage the state table */
+
+int Configcmp(/* struct config *, struct config * */);
+struct state *State_new();
+void State_init(/* void */);
+int State_insert(/* struct state *, struct config * */);
+struct state *State_find(/* struct config * */);
+struct state **State_arrayof(/*  */);
+
+/* Routines used for efficiency in Configlist_add */
+
+void Configtable_init(/* void */);
+int Configtable_insert(/* struct config * */);
+struct config *Configtable_find(/* struct config * */);
+void Configtable_clear(/* int(*)(struct config *) */);
+/****************** From the file "action.c" *******************************/
+/*
+** Routines processing parser actions in the LEMON parser generator.
+*/
+
+/* Allocate a new parser action */
+struct action *Action_new(){
+  static struct action *freelist = 0;
+  struct action *new;
+
+  if( freelist==0 ){
+    int i;
+    int amt = 100;
+    freelist = (struct action *)malloc( sizeof(struct action)*amt );
+    if( freelist==0 ){
+      fprintf(stderr,"Unable to allocate memory for a new parser action.");
+      exit(1);
+    }
+    for(i=0; i<amt-1; i++) freelist[i].next = &freelist[i+1];
+    freelist[amt-1].next = 0;
+  }
+  new = freelist;
+  freelist = freelist->next;
+  return new;
+}
+
+/* Compare two actions */
+static int actioncmp(ap1,ap2)
+struct action *ap1;
+struct action *ap2;
+{
+  int rc;
+  rc = ap1->sp->index - ap2->sp->index;
+  if( rc==0 ) rc = (int)ap1->type - (int)ap2->type;
+  if( rc==0 ){
+    assert( ap1->type==REDUCE || ap1->type==RD_RESOLVED || ap1->type==CONFLICT);
+    assert( ap2->type==REDUCE || ap2->type==RD_RESOLVED || ap2->type==CONFLICT);
+    rc = ap1->x.rp->index - ap2->x.rp->index;
+  }
+  return rc;
+}
+
+/* Sort parser actions */
+struct action *Action_sort(ap)
+struct action *ap;
+{
+  ap = (struct action *)msort(ap,&ap->next,actioncmp);
+  return ap;
+}
+
+void Action_add(app,type,sp,arg)
+struct action **app;
+enum e_action type;
+struct symbol *sp;
+char *arg;
+{
+  struct action *new;
+  new = Action_new();
+  new->next = *app;
+  *app = new;
+  new->type = type;
+  new->sp = sp;
+  if( type==SHIFT ){
+    new->x.stp = (struct state *)arg;
+  }else{
+    new->x.rp = (struct rule *)arg;
+  }
+}
+/********************** New code to implement the "acttab" module ***********/
+/*
+** This module implements routines use to construct the yy_action[] table.
+*/
+
+/*
+** The state of the yy_action table under construction is an instance of
+** the following structure
+*/
+typedef struct acttab acttab;
+struct acttab {
+  int nAction;                 /* Number of used slots in aAction[] */
+  int nActionAlloc;            /* Slots allocated for aAction[] */
+  struct {
+    int lookahead;             /* Value of the lookahead token */
+    int action;                /* Action to take on the given lookahead */
+  } *aAction,                  /* The yy_action[] table under construction */
+    *aLookahead;               /* A single new transaction set */
+  int mnLookahead;             /* Minimum aLookahead[].lookahead */
+  int mnAction;                /* Action associated with mnLookahead */
+  int mxLookahead;             /* Maximum aLookahead[].lookahead */
+  int nLookahead;              /* Used slots in aLookahead[] */
+  int nLookaheadAlloc;         /* Slots allocated in aLookahead[] */
+};
+
+/* Return the number of entries in the yy_action table */
+#define acttab_size(X) ((X)->nAction)
+
+/* The value for the N-th entry in yy_action */
+#define acttab_yyaction(X,N)  ((X)->aAction[N].action)
+
+/* The value for the N-th entry in yy_lookahead */
+#define acttab_yylookahead(X,N)  ((X)->aAction[N].lookahead)
+
+/* Free all memory associated with the given acttab */
+void acttab_free(acttab *p){
+  free( p->aAction );
+  free( p->aLookahead );
+  free( p );
+}
+
+/* Allocate a new acttab structure */
+acttab *acttab_alloc(void){
+  acttab *p = malloc( sizeof(*p) );
+  if( p==0 ){
+    fprintf(stderr,"Unable to allocate memory for a new acttab.");
+    exit(1);
+  }
+  memset(p, 0, sizeof(*p));
+  return p;
+}
+
+/* Add a new action to the current transaction set
+*/
+void acttab_action(acttab *p, int lookahead, int action){
+  if( p->nLookahead>=p->nLookaheadAlloc ){
+    p->nLookaheadAlloc += 25;
+    p->aLookahead = realloc( p->aLookahead,
+                             sizeof(p->aLookahead[0])*p->nLookaheadAlloc );
+    if( p->aLookahead==0 ){
+      fprintf(stderr,"malloc failed\n");
+      exit(1);
+    }
+  }
+  if( p->nLookahead==0 ){
+    p->mxLookahead = lookahead;
+    p->mnLookahead = lookahead;
+    p->mnAction = action;
+  }else{
+    if( p->mxLookahead<lookahead ) p->mxLookahead = lookahead;
+    if( p->mnLookahead>lookahead ){
+      p->mnLookahead = lookahead;
+      p->mnAction = action;
+    }
+  }
+  p->aLookahead[p->nLookahead].lookahead = lookahead;
+  p->aLookahead[p->nLookahead].action = action;
+  p->nLookahead++;
+}
+
+/*
+** Add the transaction set built up with prior calls to acttab_action()
+** into the current action table.  Then reset the transaction set back
+** to an empty set in preparation for a new round of acttab_action() calls.
+**
+** Return the offset into the action table of the new transaction.
+*/
+int acttab_insert(acttab *p){
+  int i, j, k, n;
+  assert( p->nLookahead>0 );
+
+  /* Make sure we have enough space to hold the expanded action table
+  ** in the worst case.  The worst case occurs if the transaction set
+  ** must be appended to the current action table
+  */
+  n = p->mxLookahead + 1;
+  if( p->nAction + n >= p->nActionAlloc ){
+    int oldAlloc = p->nActionAlloc;
+    p->nActionAlloc = p->nAction + n + p->nActionAlloc + 20;
+    p->aAction = realloc( p->aAction,
+                          sizeof(p->aAction[0])*p->nActionAlloc);
+    if( p->aAction==0 ){
+      fprintf(stderr,"malloc failed\n");
+      exit(1);
+    }
+    for(i=oldAlloc; i<p->nActionAlloc; i++){
+      p->aAction[i].lookahead = -1;
+      p->aAction[i].action = -1;
+    }
+  }
+
+  /* Scan the existing action table looking for an offset where we can
+  ** insert the current transaction set.  Fall out of the loop when that
+  ** offset is found.  In the worst case, we fall out of the loop when
+  ** i reaches p->nAction, which means we append the new transaction set.
+  **
+  ** i is the index in p->aAction[] where p->mnLookahead is inserted.
+  */
+  for(i=0; i<p->nAction+p->mnLookahead; i++){
+    if( p->aAction[i].lookahead<0 ){
+      for(j=0; j<p->nLookahead; j++){
+        k = p->aLookahead[j].lookahead - p->mnLookahead + i;
+        if( k<0 ) break;
+        if( p->aAction[k].lookahead>=0 ) break;
+      }
+      if( j<p->nLookahead ) continue;
+      for(j=0; j<p->nAction; j++){
+        if( p->aAction[j].lookahead==j+p->mnLookahead-i ) break;
+      }
+      if( j==p->nAction ){
+        break;  /* Fits in empty slots */
+      }
+    }else if( p->aAction[i].lookahead==p->mnLookahead ){
+      if( p->aAction[i].action!=p->mnAction ) continue;
+      for(j=0; j<p->nLookahead; j++){
+        k = p->aLookahead[j].lookahead - p->mnLookahead + i;
+        if( k<0 || k>=p->nAction ) break;
+        if( p->aLookahead[j].lookahead!=p->aAction[k].lookahead ) break;
+        if( p->aLookahead[j].action!=p->aAction[k].action ) break;
+      }
+      if( j<p->nLookahead ) continue;
+      n = 0;
+      for(j=0; j<p->nAction; j++){
+        if( p->aAction[j].lookahead<0 ) continue;
+        if( p->aAction[j].lookahead==j+p->mnLookahead-i ) n++;
+      }
+      if( n==p->nLookahead ){
+        break;  /* Same as a prior transaction set */
+      }
+    }
+  }
+  /* Insert transaction set at index i. */
+  for(j=0; j<p->nLookahead; j++){
+    k = p->aLookahead[j].lookahead - p->mnLookahead + i;
+    p->aAction[k] = p->aLookahead[j];
+    if( k>=p->nAction ) p->nAction = k+1;
+  }
+  p->nLookahead = 0;
+
+  /* Return the offset that is added to the lookahead in order to get the
+  ** index into yy_action of the action */
+  return i - p->mnLookahead;
+}
+
+/********************** From the file "assert.c" ****************************/
+/*
+** A more efficient way of handling assertions.
+*/
+void myassert(file,line)
+char *file;
+int line;
+{
+  fprintf(stderr,"Assertion failed on line %d of file \"%s\"\n",line,file);
+  exit(1);
+}
+/********************** From the file "build.c" *****************************/
+/*
+** Routines to construction the finite state machine for the LEMON
+** parser generator.
+*/
+
+/* Find a precedence symbol of every rule in the grammar.
+**
+** Those rules which have a precedence symbol coded in the input
+** grammar using the "[symbol]" construct will already have the
+** rp->precsym field filled.  Other rules take as their precedence
+** symbol the first RHS symbol with a defined precedence.  If there
+** are not RHS symbols with a defined precedence, the precedence
+** symbol field is left blank.
+*/
+void FindRulePrecedences(xp)
+struct lemon *xp;
+{
+  struct rule *rp;
+  for(rp=xp->rule; rp; rp=rp->next){
+    if( rp->precsym==0 ){
+      int i;
+      for(i=0; i<rp->nrhs; i++){
+        if( rp->rhs[i]->prec>=0 ){
+          rp->precsym = rp->rhs[i];
+          break;
+	}
+      }
+    }
+  }
+  return;
+}
+
+/* Find all nonterminals which will generate the empty string.
+** Then go back and compute the first sets of every nonterminal.
+** The first set is the set of all terminal symbols which can begin
+** a string generated by that nonterminal.
+*/
+void FindFirstSets(lemp)
+struct lemon *lemp;
+{
+  int i;
+  struct rule *rp;
+  int progress;
+
+  for(i=0; i<lemp->nsymbol; i++){
+    lemp->symbols[i]->lambda = Bo_FALSE;
+  }
+  for(i=lemp->nterminal; i<lemp->nsymbol; i++){
+    lemp->symbols[i]->firstset = SetNew();
+  }
+
+  /* First compute all lambdas */
+  do{
+    progress = 0;
+    for(rp=lemp->rule; rp; rp=rp->next){
+      if( rp->lhs->lambda ) continue;
+      for(i=0; i<rp->nrhs; i++){
+         if( rp->rhs[i]->lambda==Bo_FALSE ) break;
+      }
+      if( i==rp->nrhs ){
+        rp->lhs->lambda = Bo_TRUE;
+        progress = 1;
+      }
+    }
+  }while( progress );
+
+  /* Now compute all first sets */
+  do{
+    struct symbol *s1, *s2;
+    progress = 0;
+    for(rp=lemp->rule; rp; rp=rp->next){
+      s1 = rp->lhs;
+      for(i=0; i<rp->nrhs; i++){
+        s2 = rp->rhs[i];
+        if( s2->type==TERMINAL ){
+          progress += SetAdd(s1->firstset,s2->index);
+          break;
+	}else if( s1==s2 ){
+          if( s1->lambda==Bo_FALSE ) break;
+	}else{
+          progress += SetUnion(s1->firstset,s2->firstset);
+          if( s2->lambda==Bo_FALSE ) break;
+	}
+      }
+    }
+  }while( progress );
+  return;
+}
+
+/* Compute all LR(0) states for the grammar.  Links
+** are added to between some states so that the LR(1) follow sets
+** can be computed later.
+*/
+PRIVATE struct state *getstate(/* struct lemon * */);  /* forward reference */
+void FindStates(lemp)
+struct lemon *lemp;
+{
+  struct symbol *sp;
+  struct rule *rp;
+
+  Configlist_init();
+
+  /* Find the start symbol */
+  if( lemp->start ){
+    sp = Symbol_find(lemp->start);
+    if( sp==0 ){
+      ErrorMsg(lemp->filename,0,
+"The specified start symbol \"%s\" is not \
+in a nonterminal of the grammar.  \"%s\" will be used as the start \
+symbol instead.",lemp->start,lemp->rule->lhs->name);
+      lemp->errorcnt++;
+      sp = lemp->rule->lhs;
+    }
+  }else{
+    sp = lemp->rule->lhs;
+  }
+
+  /* Make sure the start symbol doesn't occur on the right-hand side of
+  ** any rule.  Report an error if it does.  (YACC would generate a new
+  ** start symbol in this case.) */
+  for(rp=lemp->rule; rp; rp=rp->next){
+    int i;
+    for(i=0; i<rp->nrhs; i++){
+      if( rp->rhs[i]==sp ){
+        ErrorMsg(lemp->filename,0,
+"The start symbol \"%s\" occurs on the \
+right-hand side of a rule. This will result in a parser which \
+does not work properly.",sp->name);
+        lemp->errorcnt++;
+      }
+    }
+  }
+
+  /* The basis configuration set for the first state
+  ** is all rules which have the start symbol as their
+  ** left-hand side */
+  for(rp=sp->rule; rp; rp=rp->nextlhs){
+    struct config *newcfp;
+    newcfp = Configlist_addbasis(rp,0);
+    SetAdd(newcfp->fws,0);
+  }
+
+  /* Compute the first state.  All other states will be
+  ** computed automatically during the computation of the first one.
+  ** The returned pointer to the first state is not used. */
+  (void)getstate(lemp);
+  return;
+}
+
+/* Return a pointer to a state which is described by the configuration
+** list which has been built from calls to Configlist_add.
+*/
+PRIVATE void buildshifts(/* struct lemon *, struct state * */); /* Forwd ref */
+PRIVATE struct state *getstate(lemp)
+struct lemon *lemp;
+{
+  struct config *cfp, *bp;
+  struct state *stp;
+
+  /* Extract the sorted basis of the new state.  The basis was constructed
+  ** by prior calls to "Configlist_addbasis()". */
+  Configlist_sortbasis();
+  bp = Configlist_basis();
+
+  /* Get a state with the same basis */
+  stp = State_find(bp);
+  if( stp ){
+    /* A state with the same basis already exists!  Copy all the follow-set
+    ** propagation links from the state under construction into the
+    ** preexisting state, then return a pointer to the preexisting state */
+    struct config *x, *y;
+    for(x=bp, y=stp->bp; x && y; x=x->bp, y=y->bp){
+      Plink_copy(&y->bplp,x->bplp);
+      Plink_delete(x->fplp);
+      x->fplp = x->bplp = 0;
+    }
+    cfp = Configlist_return();
+    Configlist_eat(cfp);
+  }else{
+    /* This really is a new state.  Construct all the details */
+    Configlist_closure(lemp);    /* Compute the configuration closure */
+    Configlist_sort();           /* Sort the configuration closure */
+    cfp = Configlist_return();   /* Get a pointer to the config list */
+    stp = State_new();           /* A new state structure */
+    MemoryCheck(stp);
+    stp->bp = bp;                /* Remember the configuration basis */
+    stp->cfp = cfp;              /* Remember the configuration closure */
+    stp->index = lemp->nstate++; /* Every state gets a sequence number */
+    stp->ap = 0;                 /* No actions, yet. */
+    State_insert(stp,stp->bp);   /* Add to the state table */
+    buildshifts(lemp,stp);       /* Recursively compute successor states */
+  }
+  return stp;
+}
+
+/* Construct all successor states to the given state.  A "successor"
+** state is any state which can be reached by a shift action.
+*/
+PRIVATE void buildshifts(lemp,stp)
+struct lemon *lemp;
+struct state *stp;     /* The state from which successors are computed */
+{
+  struct config *cfp;  /* For looping thru the config closure of "stp" */
+  struct config *bcfp; /* For the inner loop on config closure of "stp" */
+  struct config *new;  /* */
+  struct symbol *sp;   /* Symbol following the dot in configuration "cfp" */
+  struct symbol *bsp;  /* Symbol following the dot in configuration "bcfp" */
+  struct state *newstp; /* A pointer to a successor state */
+
+  /* Each configuration becomes complete after it contibutes to a successor
+  ** state.  Initially, all configurations are incomplete */
+  for(cfp=stp->cfp; cfp; cfp=cfp->next) cfp->status = INCOMPLETE;
+
+  /* Loop through all configurations of the state "stp" */
+  for(cfp=stp->cfp; cfp; cfp=cfp->next){
+    if( cfp->status==COMPLETE ) continue;    /* Already used by inner loop */
+    if( cfp->dot>=cfp->rp->nrhs ) continue;  /* Can't shift this config */
+    Configlist_reset();                      /* Reset the new config set */
+    sp = cfp->rp->rhs[cfp->dot];             /* Symbol after the dot */
+
+    /* For every configuration in the state "stp" which has the symbol "sp"
+    ** following its dot, add the same configuration to the basis set under
+    ** construction but with the dot shifted one symbol to the right. */
+    for(bcfp=cfp; bcfp; bcfp=bcfp->next){
+      if( bcfp->status==COMPLETE ) continue;    /* Already used */
+      if( bcfp->dot>=bcfp->rp->nrhs ) continue; /* Can't shift this one */
+      bsp = bcfp->rp->rhs[bcfp->dot];           /* Get symbol after dot */
+      if( bsp!=sp ) continue;                   /* Must be same as for "cfp" */
+      bcfp->status = COMPLETE;                  /* Mark this config as used */
+      new = Configlist_addbasis(bcfp->rp,bcfp->dot+1);
+      Plink_add(&new->bplp,bcfp);
+    }
+
+    /* Get a pointer to the state described by the basis configuration set
+    ** constructed in the preceding loop */
+    newstp = getstate(lemp);
+
+    /* The state "newstp" is reached from the state "stp" by a shift action
+    ** on the symbol "sp" */
+    Action_add(&stp->ap,SHIFT,sp,newstp);
+  }
+}
+
+/*
+** Construct the propagation links
+*/
+void FindLinks(lemp)
+struct lemon *lemp;
+{
+  int i;
+  struct config *cfp, *other;
+  struct state *stp;
+  struct plink *plp;
+
+  /* Housekeeping detail:
+  ** Add to every propagate link a pointer back to the state to
+  ** which the link is attached. */
+  for(i=0; i<lemp->nstate; i++){
+    stp = lemp->sorted[i];
+    for(cfp=stp->cfp; cfp; cfp=cfp->next){
+      cfp->stp = stp;
+    }
+  }
+
+  /* Convert all backlinks into forward links.  Only the forward
+  ** links are used in the follow-set computation. */
+  for(i=0; i<lemp->nstate; i++){
+    stp = lemp->sorted[i];
+    for(cfp=stp->cfp; cfp; cfp=cfp->next){
+      for(plp=cfp->bplp; plp; plp=plp->next){
+        other = plp->cfp;
+        Plink_add(&other->fplp,cfp);
+      }
+    }
+  }
+}
+
+/* Compute all followsets.
+**
+** A followset is the set of all symbols which can come immediately
+** after a configuration.
+*/
+void FindFollowSets(lemp)
+struct lemon *lemp;
+{
+  int i;
+  struct config *cfp;
+  struct plink *plp;
+  int progress;
+  int change;
+
+  for(i=0; i<lemp->nstate; i++){
+    for(cfp=lemp->sorted[i]->cfp; cfp; cfp=cfp->next){
+      cfp->status = INCOMPLETE;
+    }
+  }
+
+  do{
+    progress = 0;
+    for(i=0; i<lemp->nstate; i++){
+      for(cfp=lemp->sorted[i]->cfp; cfp; cfp=cfp->next){
+        if( cfp->status==COMPLETE ) continue;
+        for(plp=cfp->fplp; plp; plp=plp->next){
+          change = SetUnion(plp->cfp->fws,cfp->fws);
+          if( change ){
+            plp->cfp->status = INCOMPLETE;
+            progress = 1;
+	  }
+	}
+        cfp->status = COMPLETE;
+      }
+    }
+  }while( progress );
+}
+
+static int resolve_conflict();
+
+/* Compute the reduce actions, and resolve conflicts.
+*/
+void FindActions(lemp)
+struct lemon *lemp;
+{
+  int i,j;
+  struct config *cfp;
+  struct symbol *sp;
+  struct rule *rp;
+
+  /* Add all of the reduce actions
+  ** A reduce action is added for each element of the followset of
+  ** a configuration which has its dot at the extreme right.
+  */
+  for(i=0; i<lemp->nstate; i++){   /* Loop over all states */
+    struct state *stp;
+    stp = lemp->sorted[i];
+    for(cfp=stp->cfp; cfp; cfp=cfp->next){  /* Loop over all configurations */
+      if( cfp->rp->nrhs==cfp->dot ){        /* Is dot at extreme right? */
+        for(j=0; j<lemp->nterminal; j++){
+          if( SetFind(cfp->fws,j) ){
+            /* Add a reduce action to the state "stp" which will reduce by the
+            ** rule "cfp->rp" if the lookahead symbol is "lemp->symbols[j]" */
+            Action_add(&stp->ap,REDUCE,lemp->symbols[j],cfp->rp);
+          }
+	}
+      }
+    }
+  }
+
+  /* Add the accepting token */
+  if( lemp->start ){
+    sp = Symbol_find(lemp->start);
+    if( sp==0 ) sp = lemp->rule->lhs;
+  }else{
+    sp = lemp->rule->lhs;
+  }
+  /* Add to the first state (which is always the starting state of the
+  ** finite state machine) an action to ACCEPT if the lookahead is the
+  ** start nonterminal.  */
+  Action_add(&lemp->sorted[0]->ap,ACCEPT,sp,0);
+
+  /* Resolve conflicts */
+  for(i=0; i<lemp->nstate; i++){
+    struct action *ap, *nap;
+    struct state *stp;
+    stp = lemp->sorted[i];
+    assert( stp->ap );
+    stp->ap = Action_sort(stp->ap);
+    for(ap=stp->ap; ap && ap->next; ap=ap->next){
+      for(nap=ap->next; nap && nap->sp==ap->sp; nap=nap->next){
+         /* The two actions "ap" and "nap" have the same lookahead.
+         ** Figure out which one should be used */
+         lemp->nconflict += resolve_conflict(ap,nap,lemp->errsym);
+      }
+    }
+  }
+
+  /* Report an error for each rule that can never be reduced. */
+  for(rp=lemp->rule; rp; rp=rp->next) rp->canReduce = Bo_FALSE;
+  for(i=0; i<lemp->nstate; i++){
+    struct action *ap;
+    for(ap=lemp->sorted[i]->ap; ap; ap=ap->next){
+      if( ap->type==REDUCE ) ap->x.rp->canReduce = Bo_TRUE;
+    }
+  }
+  for(rp=lemp->rule; rp; rp=rp->next){
+    if( rp->canReduce ) continue;
+    ErrorMsg(lemp->filename,rp->ruleline,"This rule can not be reduced.\n");
+    lemp->errorcnt++;
+  }
+}
+
+/* Resolve a conflict between the two given actions.  If the
+** conflict can't be resolve, return non-zero.
+**
+** NO LONGER TRUE:
+**   To resolve a conflict, first look to see if either action
+**   is on an error rule.  In that case, take the action which
+**   is not associated with the error rule.  If neither or both
+**   actions are associated with an error rule, then try to
+**   use precedence to resolve the conflict.
+**
+** If either action is a SHIFT, then it must be apx.  This
+** function won't work if apx->type==REDUCE and apy->type==SHIFT.
+*/
+static int resolve_conflict(apx,apy,errsym)
+struct action *apx;
+struct action *apy;
+struct symbol *errsym;   /* The error symbol (if defined.  NULL otherwise) */
+{
+  struct symbol *spx, *spy;
+  int errcnt = 0;
+  assert( apx->sp==apy->sp );  /* Otherwise there would be no conflict */
+  if( apx->type==SHIFT && apy->type==REDUCE ){
+    spx = apx->sp;
+    spy = apy->x.rp->precsym;
+    if( spy==0 || spx->prec<0 || spy->prec<0 ){
+      /* Not enough precedence information. */
+      apy->type = CONFLICT;
+      errcnt++;
+    }else if( spx->prec>spy->prec ){    /* Lower precedence wins */
+      apy->type = RD_RESOLVED;
+    }else if( spx->prec<spy->prec ){
+      apx->type = SH_RESOLVED;
+    }else if( spx->prec==spy->prec && spx->assoc==RIGHT ){ /* Use operator */
+      apy->type = RD_RESOLVED;                             /* associativity */
+    }else if( spx->prec==spy->prec && spx->assoc==LEFT ){  /* to break tie */
+      apx->type = SH_RESOLVED;
+    }else{
+      assert( spx->prec==spy->prec && spx->assoc==NONE );
+      apy->type = CONFLICT;
+      errcnt++;
+    }
+  }else if( apx->type==REDUCE && apy->type==REDUCE ){
+    spx = apx->x.rp->precsym;
+    spy = apy->x.rp->precsym;
+    if( spx==0 || spy==0 || spx->prec<0 ||
+    spy->prec<0 || spx->prec==spy->prec ){
+      apy->type = CONFLICT;
+      errcnt++;
+    }else if( spx->prec>spy->prec ){
+      apy->type = RD_RESOLVED;
+    }else if( spx->prec<spy->prec ){
+      apx->type = RD_RESOLVED;
+    }
+  }else{
+    assert(
+      apx->type==SH_RESOLVED ||
+      apx->type==RD_RESOLVED ||
+      apx->type==CONFLICT ||
+      apy->type==SH_RESOLVED ||
+      apy->type==RD_RESOLVED ||
+      apy->type==CONFLICT
+    );
+    /* The REDUCE/SHIFT case cannot happen because SHIFTs come before
+    ** REDUCEs on the list.  If we reach this point it must be because
+    ** the parser conflict had already been resolved. */
+  }
+  return errcnt;
+}
+/********************* From the file "configlist.c" *************************/
+/*
+** Routines to processing a configuration list and building a state
+** in the LEMON parser generator.
+*/
+
+static struct config *freelist = 0;      /* List of free configurations */
+static struct config *current = 0;       /* Top of list of configurations */
+static struct config **currentend = 0;   /* Last on list of configs */
+static struct config *basis = 0;         /* Top of list of basis configs */
+static struct config **basisend = 0;     /* End of list of basis configs */
+
+/* Return a pointer to a new configuration */
+PRIVATE struct config *newconfig(){
+  struct config *new;
+  if( freelist==0 ){
+    int i;
+    int amt = 3;
+    freelist = (struct config *)malloc( sizeof(struct config)*amt );
+    if( freelist==0 ){
+      fprintf(stderr,"Unable to allocate memory for a new configuration.");
+      exit(1);
+    }
+    for(i=0; i<amt-1; i++) freelist[i].next = &freelist[i+1];
+    freelist[amt-1].next = 0;
+  }
+  new = freelist;
+  freelist = freelist->next;
+  return new;
+}
+
+/* The configuration "old" is no longer used */
+PRIVATE void deleteconfig(old)
+struct config *old;
+{
+  old->next = freelist;
+  freelist = old;
+}
+
+/* Initialized the configuration list builder */
+void Configlist_init(){
+  current = 0;
+  currentend = ¤t;
+  basis = 0;
+  basisend = &basis;
+  Configtable_init();
+  return;
+}
+
+/* Initialized the configuration list builder */
+void Configlist_reset(){
+  current = 0;
+  currentend = ¤t;
+  basis = 0;
+  basisend = &basis;
+  Configtable_clear(0);
+  return;
+}
+
+/* Add another configuration to the configuration list */
+struct config *Configlist_add(rp,dot)
+struct rule *rp;    /* The rule */
+int dot;            /* Index into the RHS of the rule where the dot goes */
+{
+  struct config *cfp, model;
+
+  assert( currentend!=0 );
+  model.rp = rp;
+  model.dot = dot;
+  cfp = Configtable_find(&model);
+  if( cfp==0 ){
+    cfp = newconfig();
+    cfp->rp = rp;
+    cfp->dot = dot;
+    cfp->fws = SetNew();
+    cfp->stp = 0;
+    cfp->fplp = cfp->bplp = 0;
+    cfp->next = 0;
+    cfp->bp = 0;
+    *currentend = cfp;
+    currentend = &cfp->next;
+    Configtable_insert(cfp);
+  }
+  return cfp;
+}
+
+/* Add a basis configuration to the configuration list */
+struct config *Configlist_addbasis(rp,dot)
+struct rule *rp;
+int dot;
+{
+  struct config *cfp, model;
+
+  assert( basisend!=0 );
+  assert( currentend!=0 );
+  model.rp = rp;
+  model.dot = dot;
+  cfp = Configtable_find(&model);
+  if( cfp==0 ){
+    cfp = newconfig();
+    cfp->rp = rp;
+    cfp->dot = dot;
+    cfp->fws = SetNew();
+    cfp->stp = 0;
+    cfp->fplp = cfp->bplp = 0;
+    cfp->next = 0;
+    cfp->bp = 0;
+    *currentend = cfp;
+    currentend = &cfp->next;
+    *basisend = cfp;
+    basisend = &cfp->bp;
+    Configtable_insert(cfp);
+  }
+  return cfp;
+}
+
+/* Compute the closure of the configuration list */
+void Configlist_closure(lemp)
+struct lemon *lemp;
+{
+  struct config *cfp, *newcfp;
+  struct rule *rp, *newrp;
+  struct symbol *sp, *xsp;
+  int i, dot;
+
+  assert( currentend!=0 );
+  for(cfp=current; cfp; cfp=cfp->next){
+    rp = cfp->rp;
+    dot = cfp->dot;
+    if( dot>=rp->nrhs ) continue;
+    sp = rp->rhs[dot];
+    if( sp->type==NONTERMINAL ){
+      if( sp->rule==0 && sp!=lemp->errsym ){
+        ErrorMsg(lemp->filename,rp->line,"Nonterminal \"%s\" has no rules.",
+          sp->name);
+        lemp->errorcnt++;
+      }
+      for(newrp=sp->rule; newrp; newrp=newrp->nextlhs){
+        newcfp = Configlist_add(newrp,0);
+        for(i=dot+1; i<rp->nrhs; i++){
+          xsp = rp->rhs[i];
+          if( xsp->type==TERMINAL ){
+            SetAdd(newcfp->fws,xsp->index);
+            break;
+	  }else{
+            SetUnion(newcfp->fws,xsp->firstset);
+            if( xsp->lambda==Bo_FALSE ) break;
+	  }
+	}
+        if( i==rp->nrhs ) Plink_add(&cfp->fplp,newcfp);
+      }
+    }
+  }
+  return;
+}
+
+/* Sort the configuration list */
+void Configlist_sort(){
+  current = (struct config *)msort(current,&(current->next),Configcmp);
+  currentend = 0;
+  return;
+}
+
+/* Sort the basis configuration list */
+void Configlist_sortbasis(){
+  basis = (struct config *)msort(current,&(current->bp),Configcmp);
+  basisend = 0;
+  return;
+}
+
+/* Return a pointer to the head of the configuration list and
+** reset the list */
+struct config *Configlist_return(){
+  struct config *old;
+  old = current;
+  current = 0;
+  currentend = 0;
+  return old;
+}
+
+/* Return a pointer to the head of the configuration list and
+** reset the list */
+struct config *Configlist_basis(){
+  struct config *old;
+  old = basis;
+  basis = 0;
+  basisend = 0;
+  return old;
+}
+
+/* Free all elements of the given configuration list */
+void Configlist_eat(cfp)
+struct config *cfp;
+{
+  struct config *nextcfp;
+  for(; cfp; cfp=nextcfp){
+    nextcfp = cfp->next;
+    assert( cfp->fplp==0 );
+    assert( cfp->bplp==0 );
+    if( cfp->fws ) SetFree(cfp->fws);
+    deleteconfig(cfp);
+  }
+  return;
+}
+/***************** From the file "error.c" *********************************/
+/*
+** Code for printing error message.
+*/
+
+/* Find a good place to break "msg" so that its length is at least "min"
+** but no more than "max".  Make the point as close to max as possible.
+*/
+static int findbreak(msg,min,max)
+char *msg;
+int min;
+int max;
+{
+  int i,spot;
+  char c;
+  for(i=spot=min; i<=max; i++){
+    c = msg[i];
+    if( c=='\t' ) msg[i] = ' ';
+    if( c=='\n' ){ msg[i] = ' '; spot = i; break; }
+    if( c==0 ){ spot = i; break; }
+    if( c=='-' && i<max-1 ) spot = i+1;
+    if( c==' ' ) spot = i;
+  }
+  return spot;
+}
+
+/*
+** The error message is split across multiple lines if necessary.  The
+** splits occur at a space, if there is a space available near the end
+** of the line.
+*/
+#define ERRMSGSIZE  10000 /* Hope this is big enough.  No way to error check */
+#define LINEWIDTH      79 /* Max width of any output line */
+#define PREFIXLIMIT    30 /* Max width of the prefix on each line */
+void ErrorMsg(const char *filename, int lineno, const char *format, ...){
+  char errmsg[ERRMSGSIZE];
+  char prefix[PREFIXLIMIT+10];
+  int errmsgsize;
+  int prefixsize;
+  int availablewidth;
+  va_list ap;
+  int end, restart, base;
+
+  va_start(ap, format);
+  /* Prepare a prefix to be prepended to every output line */
+  if( lineno>0 ){
+    sprintf(prefix,"%.*s:%d: ",PREFIXLIMIT-10,filename,lineno);
+  }else{
+    sprintf(prefix,"%.*s: ",PREFIXLIMIT-10,filename);
+  }
+  prefixsize = strlen(prefix);
+  availablewidth = LINEWIDTH - prefixsize;
+
+  /* Generate the error message */
+  vsprintf(errmsg,format,ap);
+  va_end(ap);
+  errmsgsize = strlen(errmsg);
+  /* Remove trailing '\n's from the error message. */
+  while( errmsgsize>0 && errmsg[errmsgsize-1]=='\n' ){
+     errmsg[--errmsgsize] = 0;
+  }
+
+  /* Print the error message */
+  base = 0;
+  while( errmsg[base]!=0 ){
+    end = restart = findbreak(&errmsg[base],0,availablewidth);
+    restart += base;
+    while( errmsg[restart]==' ' ) restart++;
+    fprintf(stdout,"%s%.*s\n",prefix,end,&errmsg[base]);
+    base = restart;
+  }
+}
+/**************** From the file "main.c" ************************************/
+/*
+** Main program file for the LEMON parser generator.
+*/
+
+/* Report an out-of-memory condition and abort.  This function
+** is used mostly by the "MemoryCheck" macro in struct.h
+*/
+void memory_error(){
+  fprintf(stderr,"Out of memory.  Aborting...\n");
+  exit(1);
+}
+
+
+/* The main program.  Parse the command line and do it... */
+int main(argc,argv)
+int argc;
+char **argv;
+{
+  static int version = 0;
+  static int rpflag = 0;
+  static int basisflag = 0;
+  static int compress = 0;
+  static int quiet = 0;
+  static int statistics = 0;
+  static int mhflag = 0;
+  static struct s_options options[] = {
+    {OPT_FLAG, "b", (char*)&basisflag, "Print only the basis in report."},
+    {OPT_FLAG, "c", (char*)&compress, "Don't compress the action table."},
+    {OPT_FLAG, "g", (char*)&rpflag, "Print grammar without actions."},
+    {OPT_FLAG, "m", (char*)&mhflag, "Output a makeheaders compatible file"},
+    {OPT_FLAG, "q", (char*)&quiet, "(Quiet) Don't print the report file."},
+    {OPT_FLAG, "s", (char*)&statistics, "Print parser stats to standard output."},
+    {OPT_FLAG, "x", (char*)&version, "Print the version number."},
+    {OPT_FLAG,0,0,0}
+  };
+  int i;
+  struct lemon lem;
+  char *def_tmpl_name = "lempar.c";
+
+  OptInit(argv,options,stderr);
+  if( version ){
+     printf("Lemon version 1.0\n");
+     exit(0);
+  }
+  if( OptNArgs() < 1 ){
+    fprintf(stderr,"Exactly one filename argument is required.\n");
+    exit(1);
+  }
+  lem.errorcnt = 0;
+
+  /* Initialize the machine */
+  Strsafe_init();
+  Symbol_init();
+  State_init();
+  lem.argv0 = argv[0];
+  lem.filename = OptArg(0);
+  lem.tmplname = (OptNArgs() == 2) ? OptArg(1) : def_tmpl_name;
+  lem.basisflag = basisflag;
+  lem.has_fallback = 0;
+  lem.nconflict = 0;
+  lem.name = lem.include = lem.arg = lem.tokentype = lem.start = 0;
+  lem.vartype = 0;
+  lem.stacksize = 0;
+  lem.error = lem.overflow = lem.failure = lem.accept = lem.tokendest =
+  lem.tokenprefix = lem.outname = lem.extracode = 0;
+  lem.vardest = 0;
+  lem.tablesize = 0;
+  Symbol_new("$");
+  lem.errsym = Symbol_new("error");
+
+  /* Parse the input file */
+  Parse(&lem);
+  if( lem.errorcnt ) exit(lem.errorcnt);
+  if( lem.rule==0 ){
+    fprintf(stderr,"Empty grammar.\n");
+    exit(1);
+  }
+
+  /* Count and index the symbols of the grammar */
+  lem.nsymbol = Symbol_count();
+  Symbol_new("{default}");
+  lem.symbols = Symbol_arrayof();
+  for(i=0; i<=lem.nsymbol; i++) lem.symbols[i]->index = i;
+  qsort(lem.symbols,lem.nsymbol+1,sizeof(struct symbol*),
+        (int(*)())Symbolcmpp);
+  for(i=0; i<=lem.nsymbol; i++) lem.symbols[i]->index = i;
+  for(i=1; isupper(lem.symbols[i]->name[0]); i++);
+  lem.nterminal = i;
+
+  /* Generate a reprint of the grammar, if requested on the command line */
+  if( rpflag ){
+    Reprint(&lem);
+  }else{
+    /* Initialize the size for all follow and first sets */
+    SetSize(lem.nterminal);
+
+    /* Find the precedence for every production rule (that has one) */
+    FindRulePrecedences(&lem);
+
+    /* Compute the lambda-nonterminals and the first-sets for every
+    ** nonterminal */
+    FindFirstSets(&lem);
+
+    /* Compute all LR(0) states.  Also record follow-set propagation
+    ** links so that the follow-set can be computed later */
+    lem.nstate = 0;
+    FindStates(&lem);
+    lem.sorted = State_arrayof();
+
+    /* Tie up loose ends on the propagation links */
+    FindLinks(&lem);
+
+    /* Compute the follow set of every reducible configuration */
+    FindFollowSets(&lem);
+
+    /* Compute the action tables */
+    FindActions(&lem);
+
+    /* Compress the action tables */
+    if( compress==0 ) CompressTables(&lem);
+
+    /* Generate a report of the parser generated.  (the "y.output" file) */
+    if( !quiet ) ReportOutput(&lem);
+
+    /* Generate the source code for the parser */
+    ReportTable(&lem, mhflag);
+
+    /* Produce a header file for use by the scanner.  (This step is
+    ** omitted if the "-m" option is used because makeheaders will
+    ** generate the file for us.) */
+    if( !mhflag ) ReportHeader(&lem);
+  }
+  if( statistics ){
+    printf("Parser statistics: %d terminals, %d nonterminals, %d rules\n",
+      lem.nterminal, lem.nsymbol - lem.nterminal, lem.nrule);
+    printf("                   %d states, %d parser table entries, %d conflicts\n",
+      lem.nstate, lem.tablesize, lem.nconflict);
+  }
+  if( lem.nconflict ){
+    fprintf(stderr,"%d parsing conflicts.\n",lem.nconflict);
+  }
+  exit(lem.errorcnt + lem.nconflict);
+}
+/******************** From the file "msort.c" *******************************/
+/*
+** A generic merge-sort program.
+**
+** USAGE:
+** Let "ptr" be a pointer to some structure which is at the head of
+** a null-terminated list.  Then to sort the list call:
+**
+**     ptr = msort(ptr,&(ptr->next),cmpfnc);
+**
+** In the above, "cmpfnc" is a pointer to a function which compares
+** two instances of the structure and returns an integer, as in
+** strcmp.  The second argument is a pointer to the pointer to the
+** second element of the linked list.  This address is used to compute
+** the offset to the "next" field within the structure.  The offset to
+** the "next" field must be constant for all structures in the list.
+**
+** The function returns a new pointer which is the head of the list
+** after sorting.
+**
+** ALGORITHM:
+** Merge-sort.
+*/
+
+/*
+** Return a pointer to the next structure in the linked list.
+*/
+#define NEXT(A) (*(char**)(((unsigned long)A)+offset))
+
+/*
+** Inputs:
+**   a:       A sorted, null-terminated linked list.  (May be null).
+**   b:       A sorted, null-terminated linked list.  (May be null).
+**   cmp:     A pointer to the comparison function.
+**   offset:  Offset in the structure to the "next" field.
+**
+** Return Value:
+**   A pointer to the head of a sorted list containing the elements
+**   of both a and b.
+**
+** Side effects:
+**   The "next" pointers for elements in the lists a and b are
+**   changed.
+*/
+static char *merge(a,b,cmp,offset)
+char *a;
+char *b;
+int (*cmp)();
+int offset;
+{
+  char *ptr, *head;
+
+  if( a==0 ){
+    head = b;
+  }else if( b==0 ){
+    head = a;
+  }else{
+    if( (*cmp)(a,b)<0 ){
+      ptr = a;
+      a = NEXT(a);
+    }else{
+      ptr = b;
+      b = NEXT(b);
+    }
+    head = ptr;
+    while( a && b ){
+      if( (*cmp)(a,b)<0 ){
+        NEXT(ptr) = a;
+        ptr = a;
+        a = NEXT(a);
+      }else{
+        NEXT(ptr) = b;
+        ptr = b;
+        b = NEXT(b);
+      }
+    }
+    if( a ) NEXT(ptr) = a;
+    else    NEXT(ptr) = b;
+  }
+  return head;
+}
+
+/*
+** Inputs:
+**   list:      Pointer to a singly-linked list of structures.
+**   next:      Pointer to pointer to the second element of the list.
+**   cmp:       A comparison function.
+**
+** Return Value:
+**   A pointer to the head of a sorted list containing the elements
+**   orginally in list.
+**
+** Side effects:
+**   The "next" pointers for elements in list are changed.
+*/
+#define LISTSIZE 30
+char *msort(list,next,cmp)
+char *list;
+char **next;
+int (*cmp)();
+{
+  unsigned long offset;
+  char *ep;
+  char *set[LISTSIZE];
+  int i;
+  offset = (unsigned long)next - (unsigned long)list;
+  for(i=0; i<LISTSIZE; i++) set[i] = 0;
+  while( list ){
+    ep = list;
+    list = NEXT(list);
+    NEXT(ep) = 0;
+    for(i=0; i<LISTSIZE-1 && set[i]!=0; i++){
+      ep = merge(ep,set[i],cmp,offset);
+      set[i] = 0;
+    }
+    set[i] = ep;
+  }
+  ep = 0;
+  for(i=0; i<LISTSIZE; i++) if( set[i] ) ep = merge(ep,set[i],cmp,offset);
+  return ep;
+}
+/************************ From the file "option.c" **************************/
+static char **argv;
+static struct s_options *op;
+static FILE *errstream;
+
+#define ISOPT(X) ((X)[0]=='-'||(X)[0]=='+'||strchr((X),'=')!=0)
+
+/*
+** Print the command line with a carrot pointing to the k-th character
+** of the n-th field.
+*/
+static void errline(n,k,err)
+int n;
+int k;
+FILE *err;
+{
+  int spcnt, i;
+  spcnt = 0;
+  if( argv[0] ) fprintf(err,"%s",argv[0]);
+  spcnt = strlen(argv[0]) + 1;
+  for(i=1; i<n && argv[i]; i++){
+    fprintf(err," %s",argv[i]);
+    spcnt += strlen(argv[i]+1);
+  }
+  spcnt += k;
+  for(; argv[i]; i++) fprintf(err," %s",argv[i]);
+  if( spcnt<20 ){
+    fprintf(err,"\n%*s^-- here\n",spcnt,"");
+  }else{
+    fprintf(err,"\n%*shere --^\n",spcnt-7,"");
+  }
+}
+
+/*
+** Return the index of the N-th non-switch argument.  Return -1
+** if N is out of range.
+*/
+static int argindex(n)
+int n;
+{
+  int i;
+  int dashdash = 0;
+  if( argv!=0 && *argv!=0 ){
+    for(i=1; argv[i]; i++){
+      if( dashdash || !ISOPT(argv[i]) ){
+        if( n==0 ) return i;
+        n--;
+      }
+      if( strcmp(argv[i],"--")==0 ) dashdash = 1;
+    }
+  }
+  return -1;
+}
+
+static char emsg[] = "Command line syntax error: ";
+
+/*
+** Process a flag command line argument.
+*/
+static int handleflags(i,err)
+int i;
+FILE *err;
+{
+  int v;
+  int errcnt = 0;
+  int j;
+  for(j=0; op[j].label; j++){
+    if( strcmp(&argv[i][1],op[j].label)==0 ) break;
+  }
+  v = argv[i][0]=='-' ? 1 : 0;
+  if( op[j].label==0 ){
+    if( err ){
+      fprintf(err,"%sundefined option.\n",emsg);
+      errline(i,1,err);
+    }
+    errcnt++;
+  }else if( op[j].type==OPT_FLAG ){
+    *((int*)op[j].arg) = v;
+  }else if( op[j].type==OPT_FFLAG ){
+    (*(void(*)())(op[j].arg))(v);
+  }else{
+    if( err ){
+      fprintf(err,"%smissing argument on switch.\n",emsg);
+      errline(i,1,err);
+    }
+    errcnt++;
+  }
+  return errcnt;
+}
+
+/*
+** Process a command line switch which has an argument.
+*/
+static int handleswitch(i,err)
+int i;
+FILE *err;
+{
+  int lv = 0;
+  double dv = 0.0;
+  char *sv = 0, *end;
+  char *cp;
+  int j;
+  int errcnt = 0;
+  cp = strchr(argv[i],'=');
+  *cp = 0;
+  for(j=0; op[j].label; j++){
+    if( strcmp(argv[i],op[j].label)==0 ) break;
+  }
+  *cp = '=';
+  if( op[j].label==0 ){
+    if( err ){
+      fprintf(err,"%sundefined option.\n",emsg);
+      errline(i,0,err);
+    }
+    errcnt++;
+  }else{
+    cp++;
+    switch( op[j].type ){
+      case OPT_FLAG:
+      case OPT_FFLAG:
+        if( err ){
+          fprintf(err,"%soption requires an argument.\n",emsg);
+          errline(i,0,err);
+        }
+        errcnt++;
+        break;
+      case OPT_DBL:
+      case OPT_FDBL:
+        dv = strtod(cp,&end);
+        if( *end ){
+          if( err ){
+            fprintf(err,"%sillegal character in floating-point argument.\n",emsg);
+            errline(i,((unsigned long)end)-(unsigned long)argv[i],err);
+          }
+          errcnt++;
+        }
+        break;
+      case OPT_INT:
+      case OPT_FINT:
+        lv = strtol(cp,&end,0);
+        if( *end ){
+          if( err ){
+            fprintf(err,"%sillegal character in integer argument.\n",emsg);
+            errline(i,((unsigned long)end)-(unsigned long)argv[i],err);
+          }
+          errcnt++;
+        }
+        break;
+      case OPT_STR:
+      case OPT_FSTR:
+        sv = cp;
+        break;
+    }
+    switch( op[j].type ){
+      case OPT_FLAG:
+      case OPT_FFLAG:
+        break;
+      case OPT_DBL:
+        *(double*)(op[j].arg) = dv;
+        break;
+      case OPT_FDBL:
+        (*(void(*)())(op[j].arg))(dv);
+        break;
+      case OPT_INT:
+        *(int*)(op[j].arg) = lv;
+        break;
+      case OPT_FINT:
+        (*(void(*)())(op[j].arg))((int)lv);
+        break;
+      case OPT_STR:
+        *(char**)(op[j].arg) = sv;
+        break;
+      case OPT_FSTR:
+        (*(void(*)())(op[j].arg))(sv);
+        break;
+    }
+  }
+  return errcnt;
+}
+
+int OptInit(a,o,err)
+char **a;
+struct s_options *o;
+FILE *err;
+{
+  int errcnt = 0;
+  argv = a;
+  op = o;
+  errstream = err;
+  if( argv && *argv && op ){
+    int i;
+    for(i=1; argv[i]; i++){
+      if( argv[i][0]=='+' || argv[i][0]=='-' ){
+        errcnt += handleflags(i,err);
+      }else if( strchr(argv[i],'=') ){
+        errcnt += handleswitch(i,err);
+      }
+    }
+  }
+  if( errcnt>0 ){
+    fprintf(err,"Valid command line options for \"%s\" are:\n",*a);
+    OptPrint();
+    exit(1);
+  }
+  return 0;
+}
+
+int OptNArgs(){
+  int cnt = 0;
+  int dashdash = 0;
+  int i;
+  if( argv!=0 && argv[0]!=0 ){
+    for(i=1; argv[i]; i++){
+      if( dashdash || !ISOPT(argv[i]) ) cnt++;
+      if( strcmp(argv[i],"--")==0 ) dashdash = 1;
+    }
+  }
+  return cnt;
+}
+
+char *OptArg(n)
+int n;
+{
+  int i;
+  i = argindex(n);
+  return i>=0 ? argv[i] : 0;
+}
+
+void OptErr(n)
+int n;
+{
+  int i;
+  i = argindex(n);
+  if( i>=0 ) errline(i,0,errstream);
+}
+
+void OptPrint(){
+  int i;
+  int max, len;
+  max = 0;
+  for(i=0; op[i].label; i++){
+    len = strlen(op[i].label) + 1;
+    switch( op[i].type ){
+      case OPT_FLAG:
+      case OPT_FFLAG:
+        break;
+      case OPT_INT:
+      case OPT_FINT:
+        len += 9;       /* length of "<integer>" */
+        break;
+      case OPT_DBL:
+      case OPT_FDBL:
+        len += 6;       /* length of "<real>" */
+        break;
+      case OPT_STR:
+      case OPT_FSTR:
+        len += 8;       /* length of "<string>" */
+        break;
+    }
+    if( len>max ) max = len;
+  }
+  for(i=0; op[i].label; i++){
+    switch( op[i].type ){
+      case OPT_FLAG:
+      case OPT_FFLAG:
+        fprintf(errstream,"  -%-*s  %s\n",max,op[i].label,op[i].message);
+        break;
+      case OPT_INT:
+      case OPT_FINT:
+        fprintf(errstream,"  %s=<integer>%*s  %s\n",op[i].label,
+          (int)(max-strlen(op[i].label)-9),"",op[i].message);
+        break;
+      case OPT_DBL:
+      case OPT_FDBL:
+        fprintf(errstream,"  %s=<real>%*s  %s\n",op[i].label,
+          (int)(max-strlen(op[i].label)-6),"",op[i].message);
+        break;
+      case OPT_STR:
+      case OPT_FSTR:
+        fprintf(errstream,"  %s=<string>%*s  %s\n",op[i].label,
+          (int)(max-strlen(op[i].label)-8),"",op[i].message);
+        break;
+    }
+  }
+}
+/*********************** From the file "parse.c" ****************************/
+/*
+** Input file parser for the LEMON parser generator.
+*/
+
+/* The state of the parser */
+struct pstate {
+  char *filename;       /* Name of the input file */
+  int tokenlineno;      /* Linenumber at which current token starts */
+  int errorcnt;         /* Number of errors so far */
+  char *tokenstart;     /* Text of current token */
+  struct lemon *gp;     /* Global state vector */
+  enum e_state {
+    INITIALIZE,
+    WAITING_FOR_DECL_OR_RULE,
+    WAITING_FOR_DECL_KEYWORD,
+    WAITING_FOR_DECL_ARG,
+    WAITING_FOR_PRECEDENCE_SYMBOL,
+    WAITING_FOR_ARROW,
+    IN_RHS,
+    LHS_ALIAS_1,
+    LHS_ALIAS_2,
+    LHS_ALIAS_3,
+    RHS_ALIAS_1,
+    RHS_ALIAS_2,
+    PRECEDENCE_MARK_1,
+    PRECEDENCE_MARK_2,
+    RESYNC_AFTER_RULE_ERROR,
+    RESYNC_AFTER_DECL_ERROR,
+    WAITING_FOR_DESTRUCTOR_SYMBOL,
+    WAITING_FOR_DATATYPE_SYMBOL,
+    WAITING_FOR_FALLBACK_ID
+  } state;                   /* The state of the parser */
+  struct symbol *fallback;   /* The fallback token */
+  struct symbol *lhs;        /* Left-hand side of current rule */
+  char *lhsalias;            /* Alias for the LHS */
+  int nrhs;                  /* Number of right-hand side symbols seen */
+  struct symbol *rhs[MAXRHS];  /* RHS symbols */
+  char *alias[MAXRHS];       /* Aliases for each RHS symbol (or NULL) */
+  struct rule *prevrule;     /* Previous rule parsed */
+  char *declkeyword;         /* Keyword of a declaration */
+  char **declargslot;        /* Where the declaration argument should be put */
+  int *decllnslot;           /* Where the declaration linenumber is put */
+  enum e_assoc declassoc;    /* Assign this association to decl arguments */
+  int preccounter;           /* Assign this precedence to decl arguments */
+  struct rule *firstrule;    /* Pointer to first rule in the grammar */
+  struct rule *lastrule;     /* Pointer to the most recently parsed rule */
+};
+
+/* Parse a single token */
+static void parseonetoken(psp)
+struct pstate *psp;
+{
+  char *x;
+  x = Strsafe(psp->tokenstart);     /* Save the token permanently */
+#if 0
+  printf("%s:%d: Token=[%s] state=%d\n",psp->filename,psp->tokenlineno,
+    x,psp->state);
+#endif
+  switch( psp->state ){
+    case INITIALIZE:
+      psp->prevrule = 0;
+      psp->preccounter = 0;
+      psp->firstrule = psp->lastrule = 0;
+      psp->gp->nrule = 0;
+      /* Fall thru to next case */
+    case WAITING_FOR_DECL_OR_RULE:
+      if( x[0]=='%' ){
+        psp->state = WAITING_FOR_DECL_KEYWORD;
+      }else if( islower(x[0]) ){
+        psp->lhs = Symbol_new(x);
+        psp->nrhs = 0;
+        psp->lhsalias = 0;
+        psp->state = WAITING_FOR_ARROW;
+      }else if( x[0]=='{' ){
+        if( psp->prevrule==0 ){
+          ErrorMsg(psp->filename,psp->tokenlineno,
+"There is not prior rule opon which to attach the code \
+fragment which begins on this line.");
+          psp->errorcnt++;
+	}else if( psp->prevrule->code!=0 ){
+          ErrorMsg(psp->filename,psp->tokenlineno,
+"Code fragment beginning on this line is not the first \
+to follow the previous rule.");
+          psp->errorcnt++;
+        }else{
+          psp->prevrule->line = psp->tokenlineno;
+          psp->prevrule->code = &x[1];
+	}
+      }else if( x[0]=='[' ){
+        psp->state = PRECEDENCE_MARK_1;
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Token \"%s\" should be either \"%%\" or a nonterminal name.",
+          x);
+        psp->errorcnt++;
+      }
+      break;
+    case PRECEDENCE_MARK_1:
+      if( !isupper(x[0]) ){
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "The precedence symbol must be a terminal.");
+        psp->errorcnt++;
+      }else if( psp->prevrule==0 ){
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "There is no prior rule to assign precedence \"[%s]\".",x);
+        psp->errorcnt++;
+      }else if( psp->prevrule->precsym!=0 ){
+        ErrorMsg(psp->filename,psp->tokenlineno,
+"Precedence mark on this line is not the first \
+to follow the previous rule.");
+        psp->errorcnt++;
+      }else{
+        psp->prevrule->precsym = Symbol_new(x);
+      }
+      psp->state = PRECEDENCE_MARK_2;
+      break;
+    case PRECEDENCE_MARK_2:
+      if( x[0]!=']' ){
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Missing \"]\" on precedence mark.");
+        psp->errorcnt++;
+      }
+      psp->state = WAITING_FOR_DECL_OR_RULE;
+      break;
+    case WAITING_FOR_ARROW:
+      if( x[0]==':' && x[1]==':' && x[2]=='=' ){
+        psp->state = IN_RHS;
+      }else if( x[0]=='(' ){
+        psp->state = LHS_ALIAS_1;
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Expected to see a \":\" following the LHS symbol \"%s\".",
+          psp->lhs->name);
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_RULE_ERROR;
+      }
+      break;
+    case LHS_ALIAS_1:
+      if( isalpha(x[0]) ){
+        psp->lhsalias = x;
+        psp->state = LHS_ALIAS_2;
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "\"%s\" is not a valid alias for the LHS \"%s\"\n",
+          x,psp->lhs->name);
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_RULE_ERROR;
+      }
+      break;
+    case LHS_ALIAS_2:
+      if( x[0]==')' ){
+        psp->state = LHS_ALIAS_3;
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Missing \")\" following LHS alias name \"%s\".",psp->lhsalias);
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_RULE_ERROR;
+      }
+      break;
+    case LHS_ALIAS_3:
+      if( x[0]==':' && x[1]==':' && x[2]=='=' ){
+        psp->state = IN_RHS;
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Missing \"->\" following: \"%s(%s)\".",
+           psp->lhs->name,psp->lhsalias);
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_RULE_ERROR;
+      }
+      break;
+    case IN_RHS:
+      if( x[0]=='.' ){
+        struct rule *rp;
+        rp = (struct rule *)malloc( sizeof(struct rule) +
+             sizeof(struct symbol*)*psp->nrhs + sizeof(char*)*psp->nrhs );
+        if( rp==0 ){
+          ErrorMsg(psp->filename,psp->tokenlineno,
+            "Can't allocate enough memory for this rule.");
+          psp->errorcnt++;
+          psp->prevrule = 0;
+	}else{
+          int i;
+          rp->ruleline = psp->tokenlineno;
+          rp->rhs = (struct symbol**)&rp[1];
+          rp->rhsalias = (char**)&(rp->rhs[psp->nrhs]);
+          for(i=0; i<psp->nrhs; i++){
+            rp->rhs[i] = psp->rhs[i];
+            rp->rhsalias[i] = psp->alias[i];
+	  }
+          rp->lhs = psp->lhs;
+          rp->lhsalias = psp->lhsalias;
+          rp->nrhs = psp->nrhs;
+          rp->code = 0;
+          rp->precsym = 0;
+          rp->index = psp->gp->nrule++;
+          rp->nextlhs = rp->lhs->rule;
+          rp->lhs->rule = rp;
+          rp->next = 0;
+          if( psp->firstrule==0 ){
+            psp->firstrule = psp->lastrule = rp;
+	  }else{
+            psp->lastrule->next = rp;
+            psp->lastrule = rp;
+	  }
+          psp->prevrule = rp;
+	}
+        psp->state = WAITING_FOR_DECL_OR_RULE;
+      }else if( isalpha(x[0]) ){
+        if( psp->nrhs>=MAXRHS ){
+          ErrorMsg(psp->filename,psp->tokenlineno,
+            "Too many symbol on RHS or rule beginning at \"%s\".",
+            x);
+          psp->errorcnt++;
+          psp->state = RESYNC_AFTER_RULE_ERROR;
+	}else{
+          psp->rhs[psp->nrhs] = Symbol_new(x);
+          psp->alias[psp->nrhs] = 0;
+          psp->nrhs++;
+	}
+      }else if( x[0]=='(' && psp->nrhs>0 ){
+        psp->state = RHS_ALIAS_1;
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Illegal character on RHS of rule: \"%s\".",x);
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_RULE_ERROR;
+      }
+      break;
+    case RHS_ALIAS_1:
+      if( isalpha(x[0]) ){
+        psp->alias[psp->nrhs-1] = x;
+        psp->state = RHS_ALIAS_2;
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "\"%s\" is not a valid alias for the RHS symbol \"%s\"\n",
+          x,psp->rhs[psp->nrhs-1]->name);
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_RULE_ERROR;
+      }
+      break;
+    case RHS_ALIAS_2:
+      if( x[0]==')' ){
+        psp->state = IN_RHS;
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Missing \")\" following LHS alias name \"%s\".",psp->lhsalias);
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_RULE_ERROR;
+      }
+      break;
+    case WAITING_FOR_DECL_KEYWORD:
+      if( isalpha(x[0]) ){
+        psp->declkeyword = x;
+        psp->declargslot = 0;
+        psp->decllnslot = 0;
+        psp->state = WAITING_FOR_DECL_ARG;
+        if( strcmp(x,"name")==0 ){
+          psp->declargslot = &(psp->gp->name);
+	}else if( strcmp(x,"include")==0 ){
+          psp->declargslot = &(psp->gp->include);
+          psp->decllnslot = &psp->gp->includeln;
+	}else if( strcmp(x,"code")==0 ){
+          psp->declargslot = &(psp->gp->extracode);
+          psp->decllnslot = &psp->gp->extracodeln;
+	}else if( strcmp(x,"token_destructor")==0 ){
+          psp->declargslot = &psp->gp->tokendest;
+          psp->decllnslot = &psp->gp->tokendestln;
+	}else if( strcmp(x,"default_destructor")==0 ){
+          psp->declargslot = &psp->gp->vardest;
+          psp->decllnslot = &psp->gp->vardestln;
+	}else if( strcmp(x,"token_prefix")==0 ){
+          psp->declargslot = &psp->gp->tokenprefix;
+	}else if( strcmp(x,"syntax_error")==0 ){
+          psp->declargslot = &(psp->gp->error);
+          psp->decllnslot = &psp->gp->errorln;
+	}else if( strcmp(x,"parse_accept")==0 ){
+          psp->declargslot = &(psp->gp->accept);
+          psp->decllnslot = &psp->gp->acceptln;
+	}else if( strcmp(x,"parse_failure")==0 ){
+          psp->declargslot = &(psp->gp->failure);
+          psp->decllnslot = &psp->gp->failureln;
+	}else if( strcmp(x,"stack_overflow")==0 ){
+          psp->declargslot = &(psp->gp->overflow);
+          psp->decllnslot = &psp->gp->overflowln;
+        }else if( strcmp(x,"extra_argument")==0 ){
+          psp->declargslot = &(psp->gp->arg);
+        }else if( strcmp(x,"token_type")==0 ){
+          psp->declargslot = &(psp->gp->tokentype);
+        }else if( strcmp(x,"default_type")==0 ){
+          psp->declargslot = &(psp->gp->vartype);
+        }else if( strcmp(x,"stack_size")==0 ){
+          psp->declargslot = &(psp->gp->stacksize);
+        }else if( strcmp(x,"start_symbol")==0 ){
+          psp->declargslot = &(psp->gp->start);
+        }else if( strcmp(x,"left")==0 ){
+          psp->preccounter++;
+          psp->declassoc = LEFT;
+          psp->state = WAITING_FOR_PRECEDENCE_SYMBOL;
+        }else if( strcmp(x,"right")==0 ){
+          psp->preccounter++;
+          psp->declassoc = RIGHT;
+          psp->state = WAITING_FOR_PRECEDENCE_SYMBOL;
+        }else if( strcmp(x,"nonassoc")==0 ){
+          psp->preccounter++;
+          psp->declassoc = NONE;
+          psp->state = WAITING_FOR_PRECEDENCE_SYMBOL;
+	}else if( strcmp(x,"destructor")==0 ){
+          psp->state = WAITING_FOR_DESTRUCTOR_SYMBOL;
+	}else if( strcmp(x,"type")==0 ){
+          psp->state = WAITING_FOR_DATATYPE_SYMBOL;
+        }else if( strcmp(x,"fallback")==0 ){
+          psp->fallback = 0;
+          psp->state = WAITING_FOR_FALLBACK_ID;
+        }else{
+          ErrorMsg(psp->filename,psp->tokenlineno,
+            "Unknown declaration keyword: \"%%%s\".",x);
+          psp->errorcnt++;
+          psp->state = RESYNC_AFTER_DECL_ERROR;
+	}
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Illegal declaration keyword: \"%s\".",x);
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_DECL_ERROR;
+      }
+      break;
+    case WAITING_FOR_DESTRUCTOR_SYMBOL:
+      if( !isalpha(x[0]) ){
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Symbol name missing after %destructor keyword");
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_DECL_ERROR;
+      }else{
+        struct symbol *sp = Symbol_new(x);
+        psp->declargslot = &sp->destructor;
+        psp->decllnslot = &sp->destructorln;
+        psp->state = WAITING_FOR_DECL_ARG;
+      }
+      break;
+    case WAITING_FOR_DATATYPE_SYMBOL:
+      if( !isalpha(x[0]) ){
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Symbol name missing after %destructor keyword");
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_DECL_ERROR;
+      }else{
+        struct symbol *sp = Symbol_new(x);
+        psp->declargslot = &sp->datatype;
+        psp->decllnslot = 0;
+        psp->state = WAITING_FOR_DECL_ARG;
+      }
+      break;
+    case WAITING_FOR_PRECEDENCE_SYMBOL:
+      if( x[0]=='.' ){
+        psp->state = WAITING_FOR_DECL_OR_RULE;
+      }else if( isupper(x[0]) ){
+        struct symbol *sp;
+        sp = Symbol_new(x);
+        if( sp->prec>=0 ){
+          ErrorMsg(psp->filename,psp->tokenlineno,
+            "Symbol \"%s\" has already be given a precedence.",x);
+          psp->errorcnt++;
+	}else{
+          sp->prec = psp->preccounter;
+          sp->assoc = psp->declassoc;
+	}
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Can't assign a precedence to \"%s\".",x);
+        psp->errorcnt++;
+      }
+      break;
+    case WAITING_FOR_DECL_ARG:
+      if( (x[0]=='{' || x[0]=='\"' || isalnum(x[0])) ){
+        if( *(psp->declargslot)!=0 ){
+          ErrorMsg(psp->filename,psp->tokenlineno,
+            "The argument \"%s\" to declaration \"%%%s\" is not the first.",
+            x[0]=='\"' ? &x[1] : x,psp->declkeyword);
+          psp->errorcnt++;
+          psp->state = RESYNC_AFTER_DECL_ERROR;
+	}else{
+          *(psp->declargslot) = (x[0]=='\"' || x[0]=='{') ? &x[1] : x;
+          if( psp->decllnslot ) *psp->decllnslot = psp->tokenlineno;
+          psp->state = WAITING_FOR_DECL_OR_RULE;
+	}
+      }else{
+        ErrorMsg(psp->filename,psp->tokenlineno,
+          "Illegal argument to %%%s: %s",psp->declkeyword,x);
+        psp->errorcnt++;
+        psp->state = RESYNC_AFTER_DECL_ERROR;
+      }
+      break;
+    case WAITING_FOR_FALLBACK_ID:
+      if( x[0]=='.' ){
+        psp->state = WAITING_FOR_DECL_OR_RULE;
+      }else if( !isupper(x[0]) ){
+        ErrorMsg(psp->filename, psp->tokenlineno,
+          "%%fallback argument \"%s\" should be a token", x);
+        psp->errorcnt++;
+      }else{
+        struct symbol *sp = Symbol_new(x);
+        if( psp->fallback==0 ){
+          psp->fallback = sp;
+        }else if( sp->fallback ){
+          ErrorMsg(psp->filename, psp->tokenlineno,
+            "More than one fallback assigned to token %s", x);
+          psp->errorcnt++;
+        }else{
+          sp->fallback = psp->fallback;
+          psp->gp->has_fallback = 1;
+        }
+      }
+      break;
+    case RESYNC_AFTER_RULE_ERROR:
+/*      if( x[0]=='.' ) psp->state = WAITING_FOR_DECL_OR_RULE;
+**      break; */
+    case RESYNC_AFTER_DECL_ERROR:
+      if( x[0]=='.' ) psp->state = WAITING_FOR_DECL_OR_RULE;
+      if( x[0]=='%' ) psp->state = WAITING_FOR_DECL_KEYWORD;
+      break;
+  }
+}
+
+/* In spite of its name, this function is really a scanner.  It read
+** in the entire input file (all at once) then tokenizes it.  Each
+** token is passed to the function "parseonetoken" which builds all
+** the appropriate data structures in the global state vector "gp".
+*/
+void Parse(gp)
+struct lemon *gp;
+{
+  struct pstate ps;
+  FILE *fp;
+  char *filebuf;
+  size_t filesize;
+  int lineno;
+  int c;
+  char *cp, *nextcp;
+  int startline = 0;
+
+  ps.gp = gp;
+  ps.filename = gp->filename;
+  ps.errorcnt = 0;
+  ps.state = INITIALIZE;
+
+  /* Begin by reading the input file */
+  fp = fopen(ps.filename,"rb");
+  if( fp==0 ){
+    ErrorMsg(ps.filename,0,"Can't open this file for reading.");
+    gp->errorcnt++;
+    return;
+  }
+  fseek(fp,0,2);
+  filesize = ftell(fp);
+  rewind(fp);
+  filebuf = (char *)malloc( filesize+1 );
+  if( filebuf==0 ){
+    ErrorMsg(ps.filename,0,"Can't allocate %d of memory to hold this file.",
+      filesize+1);
+    gp->errorcnt++;
+    return;
+  }
+  if( fread(filebuf,1,filesize,fp)!=filesize ){
+    ErrorMsg(ps.filename,0,"Can't read in all %d bytes of this file.",
+      filesize);
+    free(filebuf);
+    gp->errorcnt++;
+    return;
+  }
+  fclose(fp);
+  filebuf[filesize] = 0;
+
+  /* Now scan the text of the input file */
+  lineno = 1;
+  for(cp=filebuf; (c= *cp)!=0; ){
+    if( c=='\n' ) lineno++;              /* Keep track of the line number */
+    if( isspace(c) ){ cp++; continue; }  /* Skip all white space */
+    if( c=='/' && cp[1]=='/' ){          /* Skip C++ style comments */
+      cp+=2;
+      while( (c= *cp)!=0 && c!='\n' ) cp++;
+      continue;
+    }
+    if( c=='/' && cp[1]=='*' ){          /* Skip C style comments */
+      cp+=2;
+      while( (c= *cp)!=0 && (c!='/' || cp[-1]!='*') ){
+        if( c=='\n' ) lineno++;
+        cp++;
+      }
+      if( c ) cp++;
+      continue;
+    }
+    ps.tokenstart = cp;                /* Mark the beginning of the token */
+    ps.tokenlineno = lineno;           /* Linenumber on which token begins */
+    if( c=='\"' ){                     /* String literals */
+      cp++;
+      while( (c= *cp)!=0 && c!='\"' ){
+        if( c=='\n' ) lineno++;
+        cp++;
+      }
+      if( c==0 ){
+        ErrorMsg(ps.filename,startline,
+"String starting on this line is not terminated before the end of the file.");
+        ps.errorcnt++;
+        nextcp = cp;
+      }else{
+        nextcp = cp+1;
+      }
+    }else if( c=='{' ){               /* A block of C code */
+      int level;
+      cp++;
+      for(level=1; (c= *cp)!=0 && (level>1 || c!='}'); cp++){
+        if( c=='\n' ) lineno++;
+        else if( c=='{' ) level++;
+        else if( c=='}' ) level--;
+        else if( c=='/' && cp[1]=='*' ){  /* Skip comments */
+          int prevc;
+          cp = &cp[2];
+          prevc = 0;
+          while( (c= *cp)!=0 && (c!='/' || prevc!='*') ){
+            if( c=='\n' ) lineno++;
+            prevc = c;
+            cp++;
+	  }
+	}else if( c=='/' && cp[1]=='/' ){  /* Skip C++ style comments too */
+          cp = &cp[2];
+          while( (c= *cp)!=0 && c!='\n' ) cp++;
+          if( c ) lineno++;
+	}else if( c=='\'' || c=='\"' ){    /* String a character literals */
+          int startchar, prevc;
+          startchar = c;
+          prevc = 0;
+          for(cp++; (c= *cp)!=0 && (c!=startchar || prevc=='\\'); cp++){
+            if( c=='\n' ) lineno++;
+            if( prevc=='\\' ) prevc = 0;
+            else              prevc = c;
+	  }
+	}
+      }
+      if( c==0 ){
+        ErrorMsg(ps.filename,ps.tokenlineno,
+"C code starting on this line is not terminated before the end of the file.");
+        ps.errorcnt++;
+        nextcp = cp;
+      }else{
+        nextcp = cp+1;
+      }
+    }else if( isalnum(c) ){          /* Identifiers */
+      while( (c= *cp)!=0 && (isalnum(c) || c=='_') ) cp++;
+      nextcp = cp;
+    }else if( c==':' && cp[1]==':' && cp[2]=='=' ){ /* The operator "::=" */
+      cp += 3;
+      nextcp = cp;
+    }else{                          /* All other (one character) operators */
+      cp++;
+      nextcp = cp;
+    }
+    c = *cp;
+    *cp = 0;                        /* Null terminate the token */
+    parseonetoken(&ps);             /* Parse the token */
+    *cp = c;                        /* Restore the buffer */
+    cp = nextcp;
+  }
+  free(filebuf);                    /* Release the buffer after parsing */
+  gp->rule = ps.firstrule;
+  gp->errorcnt = ps.errorcnt;
+}
+/*************************** From the file "plink.c" *********************/
+/*
+** Routines processing configuration follow-set propagation links
+** in the LEMON parser generator.
+*/
+static struct plink *plink_freelist = 0;
+
+/* Allocate a new plink */
+struct plink *Plink_new(){
+  struct plink *new;
+
+  if( plink_freelist==0 ){
+    int i;
+    int amt = 100;
+    plink_freelist = (struct plink *)malloc( sizeof(struct plink)*amt );
+    if( plink_freelist==0 ){
+      fprintf(stderr,
+      "Unable to allocate memory for a new follow-set propagation link.\n");
+      exit(1);
+    }
+    for(i=0; i<amt-1; i++) plink_freelist[i].next = &plink_freelist[i+1];
+    plink_freelist[amt-1].next = 0;
+  }
+  new = plink_freelist;
+  plink_freelist = plink_freelist->next;
+  return new;
+}
+
+/* Add a plink to a plink list */
+void Plink_add(plpp,cfp)
+struct plink **plpp;
+struct config *cfp;
+{
+  struct plink *new;
+  new = Plink_new();
+  new->next = *plpp;
+  *plpp = new;
+  new->cfp = cfp;
+}
+
+/* Transfer every plink on the list "from" to the list "to" */
+void Plink_copy(to,from)
+struct plink **to;
+struct plink *from;
+{
+  struct plink *nextpl;
+  while( from ){
+    nextpl = from->next;
+    from->next = *to;
+    *to = from;
+    from = nextpl;
+  }
+}
+
+/* Delete every plink on the list */
+void Plink_delete(plp)
+struct plink *plp;
+{
+  struct plink *nextpl;
+
+  while( plp ){
+    nextpl = plp->next;
+    plp->next = plink_freelist;
+    plink_freelist = plp;
+    plp = nextpl;
+  }
+}
+/*********************** From the file "report.c" **************************/
+/*
+** Procedures for generating reports and tables in the LEMON parser generator.
+*/
+
+/* Generate a filename with the given suffix.  Space to hold the
+** name comes from malloc() and must be freed by the calling
+** function.
+*/
+PRIVATE char *file_makename(lemp,suffix)
+struct lemon *lemp;
+char *suffix;
+{
+  char *name;
+  char *cp;
+
+  name = malloc( strlen(lemp->filename) + strlen(suffix) + 5 );
+  if( name==0 ){
+    fprintf(stderr,"Can't allocate space for a filename.\n");
+    exit(1);
+  }
+	/* skip directory, JK */
+	if (NULL == (cp = strrchr(lemp->filename, '/'))) {
+		cp = lemp->filename;
+	} else {
+		cp++;
+	}
+  strcpy(name,cp);
+  cp = strrchr(name,'.');
+  if( cp ) *cp = 0;
+  strcat(name,suffix);
+  return name;
+}
+
+/* Open a file with a name based on the name of the input file,
+** but with a different (specified) suffix, and return a pointer
+** to the stream */
+PRIVATE FILE *file_open(lemp,suffix,mode)
+struct lemon *lemp;
+char *suffix;
+char *mode;
+{
+  FILE *fp;
+
+  if( lemp->outname ) free(lemp->outname);
+  lemp->outname = file_makename(lemp, suffix);
+  fp = fopen(lemp->outname,mode);
+  if( fp==0 && *mode=='w' ){
+    fprintf(stderr,"Can't open file \"%s\".\n",lemp->outname);
+    lemp->errorcnt++;
+    return 0;
+  }
+  return fp;
+}
+
+/* Duplicate the input file without comments and without actions
+** on rules */
+void Reprint(lemp)
+struct lemon *lemp;
+{
+  struct rule *rp;
+  struct symbol *sp;
+  int i, j, maxlen, len, ncolumns, skip;
+  printf("// Reprint of input file \"%s\".\n// Symbols:\n",lemp->filename);
+  maxlen = 10;
+  for(i=0; i<lemp->nsymbol; i++){
+    sp = lemp->symbols[i];
+    len = strlen(sp->name);
+    if( len>maxlen ) maxlen = len;
+  }
+  ncolumns = 76/(maxlen+5);
+  if( ncolumns<1 ) ncolumns = 1;
+  skip = (lemp->nsymbol + ncolumns - 1)/ncolumns;
+  for(i=0; i<skip; i++){
+    printf("//");
+    for(j=i; j<lemp->nsymbol; j+=skip){
+      sp = lemp->symbols[j];
+      assert( sp->index==j );
+      printf(" %3d %-*.*s",j,maxlen,maxlen,sp->name);
+    }
+    printf("\n");
+  }
+  for(rp=lemp->rule; rp; rp=rp->next){
+    printf("%s",rp->lhs->name);
+/*    if( rp->lhsalias ) printf("(%s)",rp->lhsalias); */
+    printf(" ::=");
+    for(i=0; i<rp->nrhs; i++){
+      printf(" %s",rp->rhs[i]->name);
+/*      if( rp->rhsalias[i] ) printf("(%s)",rp->rhsalias[i]); */
+    }
+    printf(".");
+    if( rp->precsym ) printf(" [%s]",rp->precsym->name);
+/*    if( rp->code ) printf("\n    %s",rp->code); */
+    printf("\n");
+  }
+}
+
+void ConfigPrint(fp,cfp)
+FILE *fp;
+struct config *cfp;
+{
+  struct rule *rp;
+  int i;
+  rp = cfp->rp;
+  fprintf(fp,"%s ::=",rp->lhs->name);
+  for(i=0; i<=rp->nrhs; i++){
+    if( i==cfp->dot ) fprintf(fp," *");
+    if( i==rp->nrhs ) break;
+    fprintf(fp," %s",rp->rhs[i]->name);
+  }
+}
+
+/* #define TEST */
+#ifdef TEST
+/* Print a set */
+PRIVATE void SetPrint(out,set,lemp)
+FILE *out;
+char *set;
+struct lemon *lemp;
+{
+  int i;
+  char *spacer;
+  spacer = "";
+  fprintf(out,"%12s[","");
+  for(i=0; i<lemp->nterminal; i++){
+    if( SetFind(set,i) ){
+      fprintf(out,"%s%s",spacer,lemp->symbols[i]->name);
+      spacer = " ";
+    }
+  }
+  fprintf(out,"]\n");
+}
+
+/* Print a plink chain */
+PRIVATE void PlinkPrint(out,plp,tag)
+FILE *out;
+struct plink *plp;
+char *tag;
+{
+  while( plp ){
+    fprintf(out,"%12s%s (state %2d) ","",tag,plp->cfp->stp->index);
+    ConfigPrint(out,plp->cfp);
+    fprintf(out,"\n");
+    plp = plp->next;
+  }
+}
+#endif
+
+/* Print an action to the given file descriptor.  Return FALSE if
+** nothing was actually printed.
+*/
+int PrintAction(struct action *ap, FILE *fp, int indent){
+  int result = 1;
+  switch( ap->type ){
+    case SHIFT:
+      fprintf(fp,"%*s shift  %d",indent,ap->sp->name,ap->x.stp->index);
+      break;
+    case REDUCE:
+      fprintf(fp,"%*s reduce %d",indent,ap->sp->name,ap->x.rp->index);
+      break;
+    case ACCEPT:
+      fprintf(fp,"%*s accept",indent,ap->sp->name);
+      break;
+    case ERROR:
+      fprintf(fp,"%*s error",indent,ap->sp->name);
+      break;
+    case CONFLICT:
+      fprintf(fp,"%*s reduce %-3d ** Parsing conflict **",
+        indent,ap->sp->name,ap->x.rp->index);
+      break;
+    case SH_RESOLVED:
+    case RD_RESOLVED:
+    case NOT_USED:
+      result = 0;
+      break;
+  }
+  return result;
+}
+
+/* Generate the "y.output" log file */
+void ReportOutput(lemp)
+struct lemon *lemp;
+{
+  int i;
+  struct state *stp;
+  struct config *cfp;
+  struct action *ap;
+  FILE *fp;
+
+  fp = file_open(lemp,".out","w");
+  if( fp==0 ) return;
+  fprintf(fp," \b");
+  for(i=0; i<lemp->nstate; i++){
+    stp = lemp->sorted[i];
+    fprintf(fp,"State %d:\n",stp->index);
+    if( lemp->basisflag ) cfp=stp->bp;
+    else                  cfp=stp->cfp;
+    while( cfp ){
+      char buf[20];
+      if( cfp->dot==cfp->rp->nrhs ){
+        sprintf(buf,"(%d)",cfp->rp->index);
+        fprintf(fp,"    %5s ",buf);
+      }else{
+        fprintf(fp,"          ");
+      }
+      ConfigPrint(fp,cfp);
+      fprintf(fp,"\n");
+#ifdef TEST
+      SetPrint(fp,cfp->fws,lemp);
+      PlinkPrint(fp,cfp->fplp,"To  ");
+      PlinkPrint(fp,cfp->bplp,"From");
+#endif
+      if( lemp->basisflag ) cfp=cfp->bp;
+      else                  cfp=cfp->next;
+    }
+    fprintf(fp,"\n");
+    for(ap=stp->ap; ap; ap=ap->next){
+      if( PrintAction(ap,fp,30) ) fprintf(fp,"\n");
+    }
+    fprintf(fp,"\n");
+  }
+  fclose(fp);
+  return;
+}
+
+/* Search for the file "name" which is in the same directory as
+** the exacutable */
+PRIVATE char *pathsearch(argv0,name,modemask)
+char *argv0;
+char *name;
+int modemask;
+{
+  char *pathlist;
+  char *path,*cp;
+  char c;
+  extern int access();
+
+#ifdef __WIN32__
+  cp = strrchr(argv0,'\\');
+#else
+  cp = strrchr(argv0,'/');
+#endif
+  if( cp ){
+    c = *cp;
+    *cp = 0;
+    path = (char *)malloc( strlen(argv0) + strlen(name) + 2 );
+    if( path ) sprintf(path,"%s/%s",argv0,name);
+    *cp = c;
+  }else{
+    extern char *getenv();
+    pathlist = getenv("PATH");
+    if( pathlist==0 ) pathlist = ".:/bin:/usr/bin";
+    path = (char *)malloc( strlen(pathlist)+strlen(name)+2 );
+    if( path!=0 ){
+      while( *pathlist ){
+        cp = strchr(pathlist,':');
+        if( cp==0 ) cp = &pathlist[strlen(pathlist)];
+        c = *cp;
+        *cp = 0;
+        sprintf(path,"%s/%s",pathlist,name);
+        *cp = c;
+        if( c==0 ) pathlist = "";
+        else pathlist = &cp[1];
+        if( access(path,modemask)==0 ) break;
+      }
+    }
+  }
+  return path;
+}
+
+/* Given an action, compute the integer value for that action
+** which is to be put in the action table of the generated machine.
+** Return negative if no action should be generated.
+*/
+PRIVATE int compute_action(lemp,ap)
+struct lemon *lemp;
+struct action *ap;
+{
+  int act;
+  switch( ap->type ){
+    case SHIFT:  act = ap->x.stp->index;               break;
+    case REDUCE: act = ap->x.rp->index + lemp->nstate; break;
+    case ERROR:  act = lemp->nstate + lemp->nrule;     break;
+    case ACCEPT: act = lemp->nstate + lemp->nrule + 1; break;
+    default:     act = -1; break;
+  }
+  return act;
+}
+
+#define LINESIZE 1000
+/* The next cluster of routines are for reading the template file
+** and writing the results to the generated parser */
+/* The first function transfers data from "in" to "out" until
+** a line is seen which begins with "%%".  The line number is
+** tracked.
+**
+** if name!=0, then any word that begin with "Parse" is changed to
+** begin with *name instead.
+*/
+PRIVATE void tplt_xfer(name,in,out,lineno)
+char *name;
+FILE *in;
+FILE *out;
+int *lineno;
+{
+  int i, iStart;
+  char line[LINESIZE];
+  while( fgets(line,LINESIZE,in) && (line[0]!='%' || line[1]!='%') ){
+    (*lineno)++;
+    iStart = 0;
+    if( name ){
+      for(i=0; line[i]; i++){
+        if( line[i]=='P' && strncmp(&line[i],"Parse",5)==0
+          && (i==0 || !isalpha(line[i-1]))
+        ){
+          if( i>iStart ) fprintf(out,"%.*s",i-iStart,&line[iStart]);
+          fprintf(out,"%s",name);
+          i += 4;
+          iStart = i+1;
+        }
+      }
+    }
+    fprintf(out,"%s",&line[iStart]);
+  }
+}
+
+/* The next function finds the template file and opens it, returning
+** a pointer to the opened file. */
+PRIVATE FILE *tplt_open(lemp)
+struct lemon *lemp;
+{
+
+  char buf[1000];
+  FILE *in;
+  char *tpltname;
+  char *cp;
+
+  cp = strrchr(lemp->filename,'.');
+  if( cp ){
+    sprintf(buf,"%.*s.lt",(int)(cp-lemp->filename),lemp->filename);
+  }else{
+    sprintf(buf,"%s.lt",lemp->filename);
+  }
+  if( access(buf,004)==0 ){
+    tpltname = buf;
+  }else if( access(lemp->tmplname,004)==0 ){
+    tpltname = lemp->tmplname;
+  }else{
+    tpltname = pathsearch(lemp->argv0,lemp->tmplname,0);
+  }
+  if( tpltname==0 ){
+    fprintf(stderr,"Can't find the parser driver template file \"%s\".\n",
+    lemp->tmplname);
+    lemp->errorcnt++;
+    return 0;
+  }
+  in = fopen(tpltname,"r");
+  if( in==0 ){
+    fprintf(stderr,"Can't open the template file \"%s\".\n",lemp->tmplname);
+    lemp->errorcnt++;
+    return 0;
+  }
+  return in;
+}
+
+/* Print a string to the file and keep the linenumber up to date */
+PRIVATE void tplt_print(out,lemp,str,strln,lineno)
+FILE *out;
+struct lemon *lemp;
+char *str;
+int strln;
+int *lineno;
+{
+  if( str==0 ) return;
+  fprintf(out,"#line %d \"%s\"\n",strln,lemp->filename); (*lineno)++;
+  while( *str ){
+    if( *str=='\n' ) (*lineno)++;
+    putc(*str,out);
+    str++;
+  }
+  fprintf(out,"\n#line %d \"%s\"\n",*lineno+2,lemp->outname); (*lineno)+=2;
+  return;
+}
+
+/*
+** The following routine emits code for the destructor for the
+** symbol sp
+*/
+void emit_destructor_code(out,sp,lemp,lineno)
+FILE *out;
+struct symbol *sp;
+struct lemon *lemp;
+int *lineno;
+{
+ char *cp = 0;
+
+ int linecnt = 0;
+ if( sp->type==TERMINAL ){
+   cp = lemp->tokendest;
+   if( cp==0 ) return;
+   fprintf(out,"#line %d \"%s\"\n{",lemp->tokendestln,lemp->filename);
+ }else if( sp->destructor ){
+   cp = sp->destructor;
+   fprintf(out,"#line %d \"%s\"\n{",sp->destructorln,lemp->filename);
+ }else if( lemp->vardest ){
+   cp = lemp->vardest;
+   if( cp==0 ) return;
+   fprintf(out,"#line %d \"%s\"\n{",lemp->vardestln,lemp->filename);
+ }
+ for(; *cp; cp++){
+   if( *cp=='$' && cp[1]=='$' ){
+     fprintf(out,"(yypminor->yy%d)",sp->dtnum);
+     cp++;
+     continue;
+   }
+   if( *cp=='\n' ) linecnt++;
+   fputc(*cp,out);
+ }
+ (*lineno) += 3 + linecnt;
+ fprintf(out,"}\n#line %d \"%s\"\n",*lineno,lemp->outname);
+ return;
+}
+
+/*
+** Return TRUE (non-zero) if the given symbol has a destructor.
+*/
+int has_destructor(sp, lemp)
+struct symbol *sp;
+struct lemon *lemp;
+{
+  int ret;
+  if( sp->type==TERMINAL ){
+    ret = lemp->tokendest!=0;
+  }else{
+    ret = lemp->vardest!=0 || sp->destructor!=0;
+  }
+  return ret;
+}
+
+/*
+** Generate code which executes when the rule "rp" is reduced.  Write
+** the code to "out".  Make sure lineno stays up-to-date.
+*/
+PRIVATE void emit_code(out,rp,lemp,lineno)
+FILE *out;
+struct rule *rp;
+struct lemon *lemp;
+int *lineno;
+{
+ char *cp, *xp;
+ int linecnt = 0;
+ int i;
+ char lhsused = 0;    /* True if the LHS element has been used */
+ char used[MAXRHS];   /* True for each RHS element which is used */
+
+ for(i=0; i<rp->nrhs; i++) used[i] = 0;
+ lhsused = 0;
+
+ /* Generate code to do the reduce action */
+ if( rp->code ){
+   fprintf(out,"#line %d \"%s\"\n{",rp->line,lemp->filename);
+   for(cp=rp->code; *cp; cp++){
+     if( isalpha(*cp) && (cp==rp->code || (!isalnum(cp[-1]) && cp[-1]!='_')) ){
+       char saved;
+       for(xp= &cp[1]; isalnum(*xp) || *xp=='_'; xp++);
+       saved = *xp;
+       *xp = 0;
+       if( rp->lhsalias && strcmp(cp,rp->lhsalias)==0 ){
+         fprintf(out,"yygotominor.yy%d",rp->lhs->dtnum);
+         cp = xp;
+         lhsused = 1;
+       }else{
+         for(i=0; i<rp->nrhs; i++){
+           if( rp->rhsalias[i] && strcmp(cp,rp->rhsalias[i])==0 ){
+             fprintf(out,"yymsp[%d].minor.yy%d",i-rp->nrhs+1,rp->rhs[i]->dtnum);
+             cp = xp;
+             used[i] = 1;
+             break;
+           }
+         }
+       }
+       *xp = saved;
+     }
+     if( *cp=='\n' ) linecnt++;
+     fputc(*cp,out);
+   } /* End loop */
+   (*lineno) += 3 + linecnt;
+   fprintf(out,"}\n#line %d \"%s\"\n",*lineno,lemp->outname);
+ } /* End if( rp->code ) */
+
+ /* Check to make sure the LHS has been used */
+ if( rp->lhsalias && !lhsused ){
+   ErrorMsg(lemp->filename,rp->ruleline,
+     "Label \"%s\" for \"%s(%s)\" is never used.",
+       rp->lhsalias,rp->lhs->name,rp->lhsalias);
+   lemp->errorcnt++;
+ }
+
+ /* Generate destructor code for RHS symbols which are not used in the
+ ** reduce code */
+ for(i=0; i<rp->nrhs; i++){
+   if( rp->rhsalias[i] && !used[i] ){
+     ErrorMsg(lemp->filename,rp->ruleline,
+       "Label %s for \"%s(%s)\" is never used.",
+       rp->rhsalias[i],rp->rhs[i]->name,rp->rhsalias[i]);
+     lemp->errorcnt++;
+   }else if( rp->rhsalias[i]==0 ){
+     if( has_destructor(rp->rhs[i],lemp) ){
+       fprintf(out,"  yy_destructor(%d,&yymsp[%d].minor);\n",
+          rp->rhs[i]->index,i-rp->nrhs+1); (*lineno)++;
+     }else{
+       fprintf(out,"        /* No destructor defined for %s */\n",
+        rp->rhs[i]->name);
+        (*lineno)++;
+     }
+   }
+ }
+ return;
+}
+
+/*
+** Print the definition of the union used for the parser's data stack.
+** This union contains fields for every possible data type for tokens
+** and nonterminals.  In the process of computing and printing this
+** union, also set the ".dtnum" field of every terminal and nonterminal
+** symbol.
+*/
+void print_stack_union(out,lemp,plineno,mhflag)
+FILE *out;                  /* The output stream */
+struct lemon *lemp;         /* The main info structure for this parser */
+int *plineno;               /* Pointer to the line number */
+int mhflag;                 /* True if generating makeheaders output */
+{
+  int lineno = *plineno;    /* The line number of the output */
+  char **types;             /* A hash table of datatypes */
+  int arraysize;            /* Size of the "types" array */
+  int maxdtlength;          /* Maximum length of any ".datatype" field. */
+  char *stddt;              /* Standardized name for a datatype */
+  int i,j;                  /* Loop counters */
+  int hash;                 /* For hashing the name of a type */
+  char *name;               /* Name of the parser */
+
+  /* Allocate and initialize types[] and allocate stddt[] */
+  arraysize = lemp->nsymbol * 2;
+  types = (char**)malloc( arraysize * sizeof(char*) );
+  for(i=0; i<arraysize; i++) types[i] = 0;
+  maxdtlength = 0;
+  if( lemp->vartype ){
+    maxdtlength = strlen(lemp->vartype);
+  }
+  for(i=0; i<lemp->nsymbol; i++){
+    int len;
+    struct symbol *sp = lemp->symbols[i];
+    if( sp->datatype==0 ) continue;
+    len = strlen(sp->datatype);
+    if( len>maxdtlength ) maxdtlength = len;
+  }
+  stddt = (char*)malloc( maxdtlength*2 + 1 );
+  if( types==0 || stddt==0 ){
+    fprintf(stderr,"Out of memory.\n");
+    exit(1);
+  }
+
+  /* Build a hash table of datatypes. The ".dtnum" field of each symbol
+  ** is filled in with the hash index plus 1.  A ".dtnum" value of 0 is
+  ** used for terminal symbols.  If there is no %default_type defined then
+  ** 0 is also used as the .dtnum value for nonterminals which do not specify
+  ** a datatype using the %type directive.
+  */
+  for(i=0; i<lemp->nsymbol; i++){
+    struct symbol *sp = lemp->symbols[i];
+    char *cp;
+    if( sp==lemp->errsym ){
+      sp->dtnum = arraysize+1;
+      continue;
+    }
+    if( sp->type!=NONTERMINAL || (sp->datatype==0 && lemp->vartype==0) ){
+      sp->dtnum = 0;
+      continue;
+    }
+    cp = sp->datatype;
+    if( cp==0 ) cp = lemp->vartype;
+    j = 0;
+    while( isspace(*cp) ) cp++;
+    while( *cp ) stddt[j++] = *cp++;
+    while( j>0 && isspace(stddt[j-1]) ) j--;
+    stddt[j] = 0;
+    hash = 0;
+    for(j=0; stddt[j]; j++){
+      hash = hash*53 + stddt[j];
+    }
+    hash = (hash & 0x7fffffff)%arraysize;
+    while( types[hash] ){
+      if( strcmp(types[hash],stddt)==0 ){
+        sp->dtnum = hash + 1;
+        break;
+      }
+      hash++;
+      if( hash>=arraysize ) hash = 0;
+    }
+    if( types[hash]==0 ){
+      sp->dtnum = hash + 1;
+      types[hash] = (char*)malloc( strlen(stddt)+1 );
+      if( types[hash]==0 ){
+        fprintf(stderr,"Out of memory.\n");
+        exit(1);
+      }
+      strcpy(types[hash],stddt);
+    }
+  }
+
+  /* Print out the definition of YYTOKENTYPE and YYMINORTYPE */
+  name = lemp->name ? lemp->name : "Parse";
+  lineno = *plineno;
+  if( mhflag ){ fprintf(out,"#if INTERFACE\n"); lineno++; }
+  fprintf(out,"#define %sTOKENTYPE %s\n",name,
+    lemp->tokentype?lemp->tokentype:"void*");  lineno++;
+  if( mhflag ){ fprintf(out,"#endif\n"); lineno++; }
+  fprintf(out,"typedef union {\n"); lineno++;
+  fprintf(out,"  %sTOKENTYPE yy0;\n",name); lineno++;
+  for(i=0; i<arraysize; i++){
+    if( types[i]==0 ) continue;
+    fprintf(out,"  %s yy%d;\n",types[i],i+1); lineno++;
+    free(types[i]);
+  }
+  fprintf(out,"  int yy%d;\n",lemp->errsym->dtnum); lineno++;
+  free(stddt);
+  free(types);
+  fprintf(out,"} YYMINORTYPE;\n"); lineno++;
+  *plineno = lineno;
+}
+
+/*
+** Return the name of a C datatype able to represent values between
+** lwr and upr, inclusive.
+*/
+static const char *minimum_size_type(int lwr, int upr){
+  if( lwr>=0 ){
+    if( upr<=255 ){
+      return "unsigned char";
+    }else if( upr<65535 ){
+      return "unsigned short int";
+    }else{
+      return "unsigned int";
+    }
+  }else if( lwr>=-127 && upr<=127 ){
+    return "signed char";
+  }else if( lwr>=-32767 && upr<32767 ){
+    return "short";
+  }else{
+    return "int";
+  }
+}
+
+/*
+** Each state contains a set of token transaction and a set of
+** nonterminal transactions.  Each of these sets makes an instance
+** of the following structure.  An array of these structures is used
+** to order the creation of entries in the yy_action[] table.
+*/
+struct axset {
+  struct state *stp;   /* A pointer to a state */
+  int isTkn;           /* True to use tokens.  False for non-terminals */
+  int nAction;         /* Number of actions */
+};
+
+/*
+** Compare to axset structures for sorting purposes
+*/
+static int axset_compare(const void *a, const void *b){
+  struct axset *p1 = (struct axset*)a;
+  struct axset *p2 = (struct axset*)b;
+  return p2->nAction - p1->nAction;
+}
+
+/* Generate C source code for the parser */
+void ReportTable(lemp, mhflag)
+struct lemon *lemp;
+int mhflag;     /* Output in makeheaders format if true */
+{
+  FILE *out, *in;
+  char line[LINESIZE];
+  int  lineno;
+  struct state *stp;
+  struct action *ap;
+  struct rule *rp;
+  struct acttab *pActtab;
+  int i, j, n;
+  int mnTknOfst, mxTknOfst;
+  int mnNtOfst, mxNtOfst;
+  struct axset *ax;
+  char *name;
+
+  in = tplt_open(lemp);
+  if( in==0 ) return;
+  out = file_open(lemp,".c","w");
+  if( out==0 ){
+    fclose(in);
+    return;
+  }
+  lineno = 1;
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate the include code, if any */
+  tplt_print(out,lemp,lemp->include,lemp->includeln,&lineno);
+  if( mhflag ){
+    name = file_makename(lemp, ".h");
+    fprintf(out,"#include \"%s\"\n", name); lineno++;
+    free(name);
+  }
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate #defines for all tokens */
+  if( mhflag ){
+    char *prefix;
+    fprintf(out,"#if INTERFACE\n"); lineno++;
+    if( lemp->tokenprefix ) prefix = lemp->tokenprefix;
+    else                    prefix = "";
+    for(i=1; i<lemp->nterminal; i++){
+      fprintf(out,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i);
+      lineno++;
+    }
+    fprintf(out,"#endif\n"); lineno++;
+  }
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate the defines */
+  fprintf(out,"/* \001 */\n");
+  fprintf(out,"#define YYCODETYPE %s\n",
+    minimum_size_type(0, lemp->nsymbol+5)); lineno++;
+  fprintf(out,"#define YYNOCODE %d\n",lemp->nsymbol+1);  lineno++;
+  fprintf(out,"#define YYACTIONTYPE %s\n",
+    minimum_size_type(0, lemp->nstate+lemp->nrule+5));  lineno++;
+  print_stack_union(out,lemp,&lineno,mhflag);
+  if( lemp->stacksize ){
+    if( atoi(lemp->stacksize)<=0 ){
+      ErrorMsg(lemp->filename,0,
+"Illegal stack size: [%s].  The stack size should be an integer constant.",
+        lemp->stacksize);
+      lemp->errorcnt++;
+      lemp->stacksize = "100";
+    }
+    fprintf(out,"#define YYSTACKDEPTH %s\n",lemp->stacksize);  lineno++;
+  }else{
+    fprintf(out,"#define YYSTACKDEPTH 100\n");  lineno++;
+  }
+  if( mhflag ){
+    fprintf(out,"#if INTERFACE\n"); lineno++;
+  }
+  name = lemp->name ? lemp->name : "Parse";
+  if( lemp->arg && lemp->arg[0] ){
+    i = strlen(lemp->arg);
+    while( i>=1 && isspace(lemp->arg[i-1]) ) i--;
+    while( i>=1 && (isalnum(lemp->arg[i-1]) || lemp->arg[i-1]=='_') ) i--;
+    fprintf(out,"#define %sARG_SDECL %s;\n",name,lemp->arg);  lineno++;
+    fprintf(out,"#define %sARG_PDECL ,%s\n",name,lemp->arg);  lineno++;
+    fprintf(out,"#define %sARG_FETCH %s = yypParser->%s\n",
+                 name,lemp->arg,&lemp->arg[i]);  lineno++;
+    fprintf(out,"#define %sARG_STORE yypParser->%s = %s\n",
+                 name,&lemp->arg[i],&lemp->arg[i]);  lineno++;
+  }else{
+    fprintf(out,"#define %sARG_SDECL\n",name);  lineno++;
+    fprintf(out,"#define %sARG_PDECL\n",name);  lineno++;
+    fprintf(out,"#define %sARG_FETCH\n",name); lineno++;
+    fprintf(out,"#define %sARG_STORE\n",name); lineno++;
+  }
+  if( mhflag ){
+    fprintf(out,"#endif\n"); lineno++;
+  }
+  fprintf(out,"#define YYNSTATE %d\n",lemp->nstate);  lineno++;
+  fprintf(out,"#define YYNRULE %d\n",lemp->nrule);  lineno++;
+  fprintf(out,"#define YYERRORSYMBOL %d\n",lemp->errsym->index);  lineno++;
+  fprintf(out,"#define YYERRSYMDT yy%d\n",lemp->errsym->dtnum);  lineno++;
+  if( lemp->has_fallback ){
+    fprintf(out,"#define YYFALLBACK 1\n");  lineno++;
+  }
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate the action table and its associates:
+  **
+  **  yy_action[]        A single table containing all actions.
+  **  yy_lookahead[]     A table containing the lookahead for each entry in
+  **                     yy_action.  Used to detect hash collisions.
+  **  yy_shift_ofst[]    For each state, the offset into yy_action for
+  **                     shifting terminals.
+  **  yy_reduce_ofst[]   For each state, the offset into yy_action for
+  **                     shifting non-terminals after a reduce.
+  **  yy_default[]       Default action for each state.
+  */
+
+  /* Compute the actions on all states and count them up */
+  ax = malloc( sizeof(ax[0])*lemp->nstate*2 );
+  if( ax==0 ){
+    fprintf(stderr,"malloc failed\n");
+    exit(1);
+  }
+  for(i=0; i<lemp->nstate; i++){
+    stp = lemp->sorted[i];
+    stp->nTknAct = stp->nNtAct = 0;
+    stp->iDflt = lemp->nstate + lemp->nrule;
+    stp->iTknOfst = NO_OFFSET;
+    stp->iNtOfst = NO_OFFSET;
+    for(ap=stp->ap; ap; ap=ap->next){
+      if( compute_action(lemp,ap)>=0 ){
+        if( ap->sp->index<lemp->nterminal ){
+          stp->nTknAct++;
+        }else if( ap->sp->index<lemp->nsymbol ){
+          stp->nNtAct++;
+        }else{
+          stp->iDflt = compute_action(lemp, ap);
+        }
+      }
+    }
+    ax[i*2].stp = stp;
+    ax[i*2].isTkn = 1;
+    ax[i*2].nAction = stp->nTknAct;
+    ax[i*2+1].stp = stp;
+    ax[i*2+1].isTkn = 0;
+    ax[i*2+1].nAction = stp->nNtAct;
+  }
+  mxTknOfst = mnTknOfst = 0;
+  mxNtOfst = mnNtOfst = 0;
+
+  /* Compute the action table.  In order to try to keep the size of the
+  ** action table to a minimum, the heuristic of placing the largest action
+  ** sets first is used.
+  */
+  qsort(ax, lemp->nstate*2, sizeof(ax[0]), axset_compare);
+  pActtab = acttab_alloc();
+  for(i=0; i<lemp->nstate*2 && ax[i].nAction>0; i++){
+    stp = ax[i].stp;
+    if( ax[i].isTkn ){
+      for(ap=stp->ap; ap; ap=ap->next){
+        int action;
+        if( ap->sp->index>=lemp->nterminal ) continue;
+        action = compute_action(lemp, ap);
+        if( action<0 ) continue;
+        acttab_action(pActtab, ap->sp->index, action);
+      }
+      stp->iTknOfst = acttab_insert(pActtab);
+      if( stp->iTknOfst<mnTknOfst ) mnTknOfst = stp->iTknOfst;
+      if( stp->iTknOfst>mxTknOfst ) mxTknOfst = stp->iTknOfst;
+    }else{
+      for(ap=stp->ap; ap; ap=ap->next){
+        int action;
+        if( ap->sp->index<lemp->nterminal ) continue;
+        if( ap->sp->index==lemp->nsymbol ) continue;
+        action = compute_action(lemp, ap);
+        if( action<0 ) continue;
+        acttab_action(pActtab, ap->sp->index, action);
+      }
+      stp->iNtOfst = acttab_insert(pActtab);
+      if( stp->iNtOfst<mnNtOfst ) mnNtOfst = stp->iNtOfst;
+      if( stp->iNtOfst>mxNtOfst ) mxNtOfst = stp->iNtOfst;
+    }
+  }
+  free(ax);
+
+  /* Output the yy_action table */
+  fprintf(out,"static YYACTIONTYPE yy_action[] = {\n"); lineno++;
+  n = acttab_size(pActtab);
+  for(i=j=0; i<n; i++){
+    int action = acttab_yyaction(pActtab, i);
+    if( action<0 ) action = lemp->nsymbol + lemp->nrule + 2;
+    if( j==0 ) fprintf(out," /* %5d */ ", i);
+    fprintf(out, " %4d,", action);
+    if( j==9 || i==n-1 ){
+      fprintf(out, "\n"); lineno++;
+      j = 0;
+    }else{
+      j++;
+    }
+  }
+  fprintf(out, "};\n"); lineno++;
+
+  /* Output the yy_lookahead table */
+  fprintf(out,"static YYCODETYPE yy_lookahead[] = {\n"); lineno++;
+  for(i=j=0; i<n; i++){
+    int la = acttab_yylookahead(pActtab, i);
+    if( la<0 ) la = lemp->nsymbol;
+    if( j==0 ) fprintf(out," /* %5d */ ", i);
+    fprintf(out, " %4d,", la);
+    if( j==9 || i==n-1 ){
+      fprintf(out, "\n"); lineno++;
+      j = 0;
+    }else{
+      j++;
+    }
+  }
+  fprintf(out, "};\n"); lineno++;
+
+  /* Output the yy_shift_ofst[] table */
+  fprintf(out, "#define YY_SHIFT_USE_DFLT (%d)\n", mnTknOfst-1); lineno++;
+  fprintf(out, "static %s yy_shift_ofst[] = {\n",
+          minimum_size_type(mnTknOfst-1, mxTknOfst)); lineno++;
+  n = lemp->nstate;
+  for(i=j=0; i<n; i++){
+    int ofst;
+    stp = lemp->sorted[i];
+    ofst = stp->iTknOfst;
+    if( ofst==NO_OFFSET ) ofst = mnTknOfst - 1;
+    if( j==0 ) fprintf(out," /* %5d */ ", i);
+    fprintf(out, " %4d,", ofst);
+    if( j==9 || i==n-1 ){
+      fprintf(out, "\n"); lineno++;
+      j = 0;
+    }else{
+      j++;
+    }
+  }
+  fprintf(out, "};\n"); lineno++;
+
+  /* Output the yy_reduce_ofst[] table */
+  fprintf(out, "#define YY_REDUCE_USE_DFLT (%d)\n", mnNtOfst-1); lineno++;
+  fprintf(out, "static %s yy_reduce_ofst[] = {\n",
+          minimum_size_type(mnNtOfst-1, mxNtOfst)); lineno++;
+  n = lemp->nstate;
+  for(i=j=0; i<n; i++){
+    int ofst;
+    stp = lemp->sorted[i];
+    ofst = stp->iNtOfst;
+    if( ofst==NO_OFFSET ) ofst = mnNtOfst - 1;
+    if( j==0 ) fprintf(out," /* %5d */ ", i);
+    fprintf(out, " %4d,", ofst);
+    if( j==9 || i==n-1 ){
+      fprintf(out, "\n"); lineno++;
+      j = 0;
+    }else{
+      j++;
+    }
+  }
+  fprintf(out, "};\n"); lineno++;
+
+  /* Output the default action table */
+  fprintf(out, "static YYACTIONTYPE yy_default[] = {\n"); lineno++;
+  n = lemp->nstate;
+  for(i=j=0; i<n; i++){
+    stp = lemp->sorted[i];
+    if( j==0 ) fprintf(out," /* %5d */ ", i);
+    fprintf(out, " %4d,", stp->iDflt);
+    if( j==9 || i==n-1 ){
+      fprintf(out, "\n"); lineno++;
+      j = 0;
+    }else{
+      j++;
+    }
+  }
+  fprintf(out, "};\n"); lineno++;
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate the table of fallback tokens.
+  */
+  if( lemp->has_fallback ){
+    for(i=0; i<lemp->nterminal; i++){
+      struct symbol *p = lemp->symbols[i];
+      if( p->fallback==0 ){
+        fprintf(out, "    0,  /* %10s => nothing */\n", p->name);
+      }else{
+        fprintf(out, "  %3d,  /* %10s => %s */\n", p->fallback->index,
+          p->name, p->fallback->name);
+      }
+      lineno++;
+    }
+  }
+  tplt_xfer(lemp->name, in, out, &lineno);
+
+  /* Generate a table containing the symbolic name of every symbol
+  */
+  for(i=0; i<lemp->nsymbol; i++){
+    sprintf(line,"\"%s\",",lemp->symbols[i]->name);
+    fprintf(out,"  %-15s",line);
+    if( (i&3)==3 ){ fprintf(out,"\n"); lineno++; }
+  }
+  if( (i&3)!=0 ){ fprintf(out,"\n"); lineno++; }
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate a table containing a text string that describes every
+  ** rule in the rule set of the grammer.  This information is used
+  ** when tracing REDUCE actions.
+  */
+  for(i=0, rp=lemp->rule; rp; rp=rp->next, i++){
+    assert( rp->index==i );
+    fprintf(out," /* %3d */ \"%s ::=", i, rp->lhs->name);
+    for(j=0; j<rp->nrhs; j++) fprintf(out," %s",rp->rhs[j]->name);
+    fprintf(out,"\",\n"); lineno++;
+  }
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate code which executes every time a symbol is popped from
+  ** the stack while processing errors or while destroying the parser.
+  ** (In other words, generate the %destructor actions)
+  */
+  if( lemp->tokendest ){
+    for(i=0; i<lemp->nsymbol; i++){
+      struct symbol *sp = lemp->symbols[i];
+      if( sp==0 || sp->type!=TERMINAL ) continue;
+      fprintf(out,"    case %d:\n",sp->index); lineno++;
+    }
+    for(i=0; i<lemp->nsymbol && lemp->symbols[i]->type!=TERMINAL; i++);
+    if( i<lemp->nsymbol ){
+      emit_destructor_code(out,lemp->symbols[i],lemp,&lineno);
+      fprintf(out,"      break;\n"); lineno++;
+    }
+  }
+  for(i=0; i<lemp->nsymbol; i++){
+    struct symbol *sp = lemp->symbols[i];
+    if( sp==0 || sp->type==TERMINAL || sp->destructor==0 ) continue;
+    fprintf(out,"    case %d:\n",sp->index); lineno++;
+    emit_destructor_code(out,lemp->symbols[i],lemp,&lineno);
+    fprintf(out,"      break;\n"); lineno++;
+  }
+  if( lemp->vardest ){
+    struct symbol *dflt_sp = 0;
+    for(i=0; i<lemp->nsymbol; i++){
+      struct symbol *sp = lemp->symbols[i];
+      if( sp==0 || sp->type==TERMINAL ||
+          sp->index<=0 || sp->destructor!=0 ) continue;
+      fprintf(out,"    case %d:\n",sp->index); lineno++;
+      dflt_sp = sp;
+    }
+    if( dflt_sp!=0 ){
+      emit_destructor_code(out,dflt_sp,lemp,&lineno);
+      fprintf(out,"      break;\n"); lineno++;
+    }
+  }
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate code which executes whenever the parser stack overflows */
+  tplt_print(out,lemp,lemp->overflow,lemp->overflowln,&lineno);
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate the table of rule information
+  **
+  ** Note: This code depends on the fact that rules are number
+  ** sequentually beginning with 0.
+  */
+  for(rp=lemp->rule; rp; rp=rp->next){
+    fprintf(out,"  { %d, %d },\n",rp->lhs->index,rp->nrhs); lineno++;
+  }
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate code which execution during each REDUCE action */
+  for(rp=lemp->rule; rp; rp=rp->next){
+    fprintf(out,"      case %d:\n",rp->index); lineno++;
+    emit_code(out,rp,lemp,&lineno);
+    fprintf(out,"        break;\n"); lineno++;
+  }
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate code which executes if a parse fails */
+  tplt_print(out,lemp,lemp->failure,lemp->failureln,&lineno);
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate code which executes when a syntax error occurs */
+  tplt_print(out,lemp,lemp->error,lemp->errorln,&lineno);
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Generate code which executes when the parser accepts its input */
+  tplt_print(out,lemp,lemp->accept,lemp->acceptln,&lineno);
+  tplt_xfer(lemp->name,in,out,&lineno);
+
+  /* Append any addition code the user desires */
+  tplt_print(out,lemp,lemp->extracode,lemp->extracodeln,&lineno);
+
+  fclose(in);
+  fclose(out);
+  return;
+}
+
+/* Generate a header file for the parser */
+void ReportHeader(lemp)
+struct lemon *lemp;
+{
+  FILE *out, *in;
+  char *prefix;
+  char line[LINESIZE];
+  char pattern[LINESIZE];
+  int i;
+
+  if( lemp->tokenprefix ) prefix = lemp->tokenprefix;
+  else                    prefix = "";
+  in = file_open(lemp,".h","r");
+  if( in ){
+    for(i=1; i<lemp->nterminal && fgets(line,LINESIZE,in); i++){
+      sprintf(pattern,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i);
+      if( strcmp(line,pattern) ) break;
+    }
+    fclose(in);
+    if( i==lemp->nterminal ){
+      /* No change in the file.  Don't rewrite it. */
+      return;
+    }
+  }
+  out = file_open(lemp,".h","w");
+  if( out ){
+    for(i=1; i<lemp->nterminal; i++){
+      fprintf(out,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i);
+    }
+    fclose(out);
+  }
+  return;
+}
+
+/* Reduce the size of the action tables, if possible, by making use
+** of defaults.
+**
+** In this version, we take the most frequent REDUCE action and make
+** it the default.  Only default a reduce if there are more than one.
+*/
+void CompressTables(lemp)
+struct lemon *lemp;
+{
+  struct state *stp;
+  struct action *ap, *ap2;
+  struct rule *rp, *rp2, *rbest;
+  int nbest, n;
+  int i;
+
+  for(i=0; i<lemp->nstate; i++){
+    stp = lemp->sorted[i];
+    nbest = 0;
+    rbest = 0;
+
+    for(ap=stp->ap; ap; ap=ap->next){
+      if( ap->type!=REDUCE ) continue;
+      rp = ap->x.rp;
+      if( rp==rbest ) continue;
+      n = 1;
+      for(ap2=ap->next; ap2; ap2=ap2->next){
+        if( ap2->type!=REDUCE ) continue;
+        rp2 = ap2->x.rp;
+        if( rp2==rbest ) continue;
+        if( rp2==rp ) n++;
+      }
+      if( n>nbest ){
+        nbest = n;
+        rbest = rp;
+      }
+    }
+
+    /* Do not make a default if the number of rules to default
+    ** is not at least 2 */
+    if( nbest<2 ) continue;
+
+
+    /* Combine matching REDUCE actions into a single default */
+    for(ap=stp->ap; ap; ap=ap->next){
+      if( ap->type==REDUCE && ap->x.rp==rbest ) break;
+    }
+    assert( ap );
+    ap->sp = Symbol_new("{default}");
+    for(ap=ap->next; ap; ap=ap->next){
+      if( ap->type==REDUCE && ap->x.rp==rbest ) ap->type = NOT_USED;
+    }
+    stp->ap = Action_sort(stp->ap);
+  }
+}
+
+/***************** From the file "set.c" ************************************/
+/*
+** Set manipulation routines for the LEMON parser generator.
+*/
+
+static int global_size = 0;
+
+/* Set the set size */
+void SetSize(n)
+int n;
+{
+  global_size = n+1;
+}
+
+/* Allocate a new set */
+char *SetNew(){
+  char *s;
+  int i;
+  s = (char*)malloc( global_size );
+  if( s==0 ){
+    extern void memory_error();
+    memory_error();
+  }
+  for(i=0; i<global_size; i++) s[i] = 0;
+  return s;
+}
+
+/* Deallocate a set */
+void SetFree(s)
+char *s;
+{
+  free(s);
+}
+
+/* Add a new element to the set.  Return TRUE if the element was added
+** and FALSE if it was already there. */
+int SetAdd(s,e)
+char *s;
+int e;
+{
+  int rv;
+  rv = s[e];
+  s[e] = 1;
+  return !rv;
+}
+
+/* Add every element of s2 to s1.  Return TRUE if s1 changes. */
+int SetUnion(s1,s2)
+char *s1;
+char *s2;
+{
+  int i, progress;
+  progress = 0;
+  for(i=0; i<global_size; i++){
+    if( s2[i]==0 ) continue;
+    if( s1[i]==0 ){
+      progress = 1;
+      s1[i] = 1;
+    }
+  }
+  return progress;
+}
+/********************** From the file "table.c" ****************************/
+/*
+** All code in this file has been automatically generated
+** from a specification in the file
+**              "table.q"
+** by the associative array code building program "aagen".
+** Do not edit this file!  Instead, edit the specification
+** file, then rerun aagen.
+*/
+/*
+** Code for processing tables in the LEMON parser generator.
+*/
+
+PRIVATE int strhash(x)
+char *x;
+{
+  int h = 0;
+  while( *x) h = h*13 + *(x++);
+  return h;
+}
+
+/* Works like strdup, sort of.  Save a string in malloced memory, but
+** keep strings in a table so that the same string is not in more
+** than one place.
+*/
+char *Strsafe(y)
+char *y;
+{
+  char *z;
+
+  z = Strsafe_find(y);
+  if( z==0 && (z=malloc( strlen(y)+1 ))!=0 ){
+    strcpy(z,y);
+    Strsafe_insert(z);
+  }
+  MemoryCheck(z);
+  return z;
+}
+
+/* There is one instance of the following structure for each
+** associative array of type "x1".
+*/
+struct s_x1 {
+  int size;               /* The number of available slots. */
+                          /*   Must be a power of 2 greater than or */
+                          /*   equal to 1 */
+  int count;              /* Number of currently slots filled */
+  struct s_x1node *tbl;  /* The data stored here */
+  struct s_x1node **ht;  /* Hash table for lookups */
+};
+
+/* There is one instance of this structure for every data element
+** in an associative array of type "x1".
+*/
+typedef struct s_x1node {
+  char *data;                  /* The data */
+  struct s_x1node *next;   /* Next entry with the same hash */
+  struct s_x1node **from;  /* Previous link */
+} x1node;
+
+/* There is only one instance of the array, which is the following */
+static struct s_x1 *x1a;
+
+/* Allocate a new associative array */
+void Strsafe_init(){
+  if( x1a ) return;
+  x1a = (struct s_x1*)malloc( sizeof(struct s_x1) );
+  if( x1a ){
+    x1a->size = 1024;
+    x1a->count = 0;
+    x1a->tbl = (x1node*)malloc(
+      (sizeof(x1node) + sizeof(x1node*))*1024 );
+    if( x1a->tbl==0 ){
+      free(x1a);
+      x1a = 0;
+    }else{
+      int i;
+      x1a->ht = (x1node**)&(x1a->tbl[1024]);
+      for(i=0; i<1024; i++) x1a->ht[i] = 0;
+    }
+  }
+}
+/* Insert a new record into the array.  Return TRUE if successful.
+** Prior data with the same key is NOT overwritten */
+int Strsafe_insert(data)
+char *data;
+{
+  x1node *np;
+  int h;
+  int ph;
+
+  if( x1a==0 ) return 0;
+  ph = strhash(data);
+  h = ph & (x1a->size-1);
+  np = x1a->ht[h];
+  while( np ){
+    if( strcmp(np->data,data)==0 ){
+      /* An existing entry with the same key is found. */
+      /* Fail because overwrite is not allows. */
+      return 0;
+    }
+    np = np->next;
+  }
+  if( x1a->count>=x1a->size ){
+    /* Need to make the hash table bigger */
+    int i,size;
+    struct s_x1 array;
+    array.size = size = x1a->size*2;
+    array.count = x1a->count;
+    array.tbl = (x1node*)malloc(
+      (sizeof(x1node) + sizeof(x1node*))*size );
+    if( array.tbl==0 ) return 0;  /* Fail due to malloc failure */
+    array.ht = (x1node**)&(array.tbl[size]);
+    for(i=0; i<size; i++) array.ht[i] = 0;
+    for(i=0; i<x1a->count; i++){
+      x1node *oldnp, *newnp;
+      oldnp = &(x1a->tbl[i]);
+      h = strhash(oldnp->data) & (size-1);
+      newnp = &(array.tbl[i]);
+      if( array.ht[h] ) array.ht[h]->from = &(newnp->next);
+      newnp->next = array.ht[h];
+      newnp->data = oldnp->data;
+      newnp->from = &(array.ht[h]);
+      array.ht[h] = newnp;
+    }
+    free(x1a->tbl);
+    *x1a = array;
+  }
+  /* Insert the new data */
+  h = ph & (x1a->size-1);
+  np = &(x1a->tbl[x1a->count++]);
+  np->data = data;
+  if( x1a->ht[h] ) x1a->ht[h]->from = &(np->next);
+  np->next = x1a->ht[h];
+  x1a->ht[h] = np;
+  np->from = &(x1a->ht[h]);
+  return 1;
+}
+
+/* Return a pointer to data assigned to the given key.  Return NULL
+** if no such key. */
+char *Strsafe_find(key)
+char *key;
+{
+  int h;
+  x1node *np;
+
+  if( x1a==0 ) return 0;
+  h = strhash(key) & (x1a->size-1);
+  np = x1a->ht[h];
+  while( np ){
+    if( strcmp(np->data,key)==0 ) break;
+    np = np->next;
+  }
+  return np ? np->data : 0;
+}
+
+/* Return a pointer to the (terminal or nonterminal) symbol "x".
+** Create a new symbol if this is the first time "x" has been seen.
+*/
+struct symbol *Symbol_new(x)
+char *x;
+{
+  struct symbol *sp;
+
+  sp = Symbol_find(x);
+  if( sp==0 ){
+    sp = (struct symbol *)malloc( sizeof(struct symbol) );
+    MemoryCheck(sp);
+    sp->name = Strsafe(x);
+    sp->type = isupper(*x) ? TERMINAL : NONTERMINAL;
+    sp->rule = 0;
+    sp->fallback = 0;
+    sp->prec = -1;
+    sp->assoc = UNK;
+    sp->firstset = 0;
+    sp->lambda = Bo_FALSE;
+    sp->destructor = 0;
+    sp->datatype = 0;
+    Symbol_insert(sp,sp->name);
+  }
+  return sp;
+}
+
+/* Compare two symbols for working purposes
+**
+** Symbols that begin with upper case letters (terminals or tokens)
+** must sort before symbols that begin with lower case letters
+** (non-terminals).  Other than that, the order does not matter.
+**
+** We find experimentally that leaving the symbols in their original
+** order (the order they appeared in the grammar file) gives the
+** smallest parser tables in SQLite.
+*/
+int Symbolcmpp(struct symbol **a, struct symbol **b){
+  int i1 = (**a).index + 10000000*((**a).name[0]>'Z');
+  int i2 = (**b).index + 10000000*((**b).name[0]>'Z');
+  return i1-i2;
+}
+
+/* There is one instance of the following structure for each
+** associative array of type "x2".
+*/
+struct s_x2 {
+  int size;               /* The number of available slots. */
+                          /*   Must be a power of 2 greater than or */
+                          /*   equal to 1 */
+  int count;              /* Number of currently slots filled */
+  struct s_x2node *tbl;  /* The data stored here */
+  struct s_x2node **ht;  /* Hash table for lookups */
+};
+
+/* There is one instance of this structure for every data element
+** in an associative array of type "x2".
+*/
+typedef struct s_x2node {
+  struct symbol *data;                  /* The data */
+  char *key;                   /* The key */
+  struct s_x2node *next;   /* Next entry with the same hash */
+  struct s_x2node **from;  /* Previous link */
+} x2node;
+
+/* There is only one instance of the array, which is the following */
+static struct s_x2 *x2a;
+
+/* Allocate a new associative array */
+void Symbol_init(){
+  if( x2a ) return;
+  x2a = (struct s_x2*)malloc( sizeof(struct s_x2) );
+  if( x2a ){
+    x2a->size = 128;
+    x2a->count = 0;
+    x2a->tbl = (x2node*)malloc(
+      (sizeof(x2node) + sizeof(x2node*))*128 );
+    if( x2a->tbl==0 ){
+      free(x2a);
+      x2a = 0;
+    }else{
+      int i;
+      x2a->ht = (x2node**)&(x2a->tbl[128]);
+      for(i=0; i<128; i++) x2a->ht[i] = 0;
+    }
+  }
+}
+/* Insert a new record into the array.  Return TRUE if successful.
+** Prior data with the same key is NOT overwritten */
+int Symbol_insert(data,key)
+struct symbol *data;
+char *key;
+{
+  x2node *np;
+  int h;
+  int ph;
+
+  if( x2a==0 ) return 0;
+  ph = strhash(key);
+  h = ph & (x2a->size-1);
+  np = x2a->ht[h];
+  while( np ){
+    if( strcmp(np->key,key)==0 ){
+      /* An existing entry with the same key is found. */
+      /* Fail because overwrite is not allows. */
+      return 0;
+    }
+    np = np->next;
+  }
+  if( x2a->count>=x2a->size ){
+    /* Need to make the hash table bigger */
+    int i,size;
+    struct s_x2 array;
+    array.size = size = x2a->size*2;
+    array.count = x2a->count;
+    array.tbl = (x2node*)malloc(
+      (sizeof(x2node) + sizeof(x2node*))*size );
+    if( array.tbl==0 ) return 0;  /* Fail due to malloc failure */
+    array.ht = (x2node**)&(array.tbl[size]);
+    for(i=0; i<size; i++) array.ht[i] = 0;
+    for(i=0; i<x2a->count; i++){
+      x2node *oldnp, *newnp;
+      oldnp = &(x2a->tbl[i]);
+      h = strhash(oldnp->key) & (size-1);
+      newnp = &(array.tbl[i]);
+      if( array.ht[h] ) array.ht[h]->from = &(newnp->next);
+      newnp->next = array.ht[h];
+      newnp->key = oldnp->key;
+      newnp->data = oldnp->data;
+      newnp->from = &(array.ht[h]);
+      array.ht[h] = newnp;
+    }
+    free(x2a->tbl);
+    *x2a = array;
+  }
+  /* Insert the new data */
+  h = ph & (x2a->size-1);
+  np = &(x2a->tbl[x2a->count++]);
+  np->key = key;
+  np->data = data;
+  if( x2a->ht[h] ) x2a->ht[h]->from = &(np->next);
+  np->next = x2a->ht[h];
+  x2a->ht[h] = np;
+  np->from = &(x2a->ht[h]);
+  return 1;
+}
+
+/* Return a pointer to data assigned to the given key.  Return NULL
+** if no such key. */
+struct symbol *Symbol_find(key)
+char *key;
+{
+  int h;
+  x2node *np;
+
+  if( x2a==0 ) return 0;
+  h = strhash(key) & (x2a->size-1);
+  np = x2a->ht[h];
+  while( np ){
+    if( strcmp(np->key,key)==0 ) break;
+    np = np->next;
+  }
+  return np ? np->data : 0;
+}
+
+/* Return the n-th data.  Return NULL if n is out of range. */
+struct symbol *Symbol_Nth(n)
+int n;
+{
+  struct symbol *data;
+  if( x2a && n>0 && n<=x2a->count ){
+    data = x2a->tbl[n-1].data;
+  }else{
+    data = 0;
+  }
+  return data;
+}
+
+/* Return the size of the array */
+int Symbol_count()
+{
+  return x2a ? x2a->count : 0;
+}
+
+/* Return an array of pointers to all data in the table.
+** The array is obtained from malloc.  Return NULL if memory allocation
+** problems, or if the array is empty. */
+struct symbol **Symbol_arrayof()
+{
+  struct symbol **array;
+  int i,size;
+  if( x2a==0 ) return 0;
+  size = x2a->count;
+  array = (struct symbol **)malloc( sizeof(struct symbol *)*size );
+  if( array ){
+    for(i=0; i<size; i++) array[i] = x2a->tbl[i].data;
+  }
+  return array;
+}
+
+/* Compare two configurations */
+int Configcmp(a,b)
+struct config *a;
+struct config *b;
+{
+  int x;
+  x = a->rp->index - b->rp->index;
+  if( x==0 ) x = a->dot - b->dot;
+  return x;
+}
+
+/* Compare two states */
+PRIVATE int statecmp(a,b)
+struct config *a;
+struct config *b;
+{
+  int rc;
+  for(rc=0; rc==0 && a && b;  a=a->bp, b=b->bp){
+    rc = a->rp->index - b->rp->index;
+    if( rc==0 ) rc = a->dot - b->dot;
+  }
+  if( rc==0 ){
+    if( a ) rc = 1;
+    if( b ) rc = -1;
+  }
+  return rc;
+}
+
+/* Hash a state */
+PRIVATE int statehash(a)
+struct config *a;
+{
+  int h=0;
+  while( a ){
+    h = h*571 + a->rp->index*37 + a->dot;
+    a = a->bp;
+  }
+  return h;
+}
+
+/* Allocate a new state structure */
+struct state *State_new()
+{
+  struct state *new;
+  new = (struct state *)malloc( sizeof(struct state) );
+  MemoryCheck(new);
+  return new;
+}
+
+/* There is one instance of the following structure for each
+** associative array of type "x3".
+*/
+struct s_x3 {
+  int size;               /* The number of available slots. */
+                          /*   Must be a power of 2 greater than or */
+                          /*   equal to 1 */
+  int count;              /* Number of currently slots filled */
+  struct s_x3node *tbl;  /* The data stored here */
+  struct s_x3node **ht;  /* Hash table for lookups */
+};
+
+/* There is one instance of this structure for every data element
+** in an associative array of type "x3".
+*/
+typedef struct s_x3node {
+  struct state *data;                  /* The data */
+  struct config *key;                   /* The key */
+  struct s_x3node *next;   /* Next entry with the same hash */
+  struct s_x3node **from;  /* Previous link */
+} x3node;
+
+/* There is only one instance of the array, which is the following */
+static struct s_x3 *x3a;
+
+/* Allocate a new associative array */
+void State_init(){
+  if( x3a ) return;
+  x3a = (struct s_x3*)malloc( sizeof(struct s_x3) );
+  if( x3a ){
+    x3a->size = 128;
+    x3a->count = 0;
+    x3a->tbl = (x3node*)malloc(
+      (sizeof(x3node) + sizeof(x3node*))*128 );
+    if( x3a->tbl==0 ){
+      free(x3a);
+      x3a = 0;
+    }else{
+      int i;
+      x3a->ht = (x3node**)&(x3a->tbl[128]);
+      for(i=0; i<128; i++) x3a->ht[i] = 0;
+    }
+  }
+}
+/* Insert a new record into the array.  Return TRUE if successful.
+** Prior data with the same key is NOT overwritten */
+int State_insert(data,key)
+struct state *data;
+struct config *key;
+{
+  x3node *np;
+  int h;
+  int ph;
+
+  if( x3a==0 ) return 0;
+  ph = statehash(key);
+  h = ph & (x3a->size-1);
+  np = x3a->ht[h];
+  while( np ){
+    if( statecmp(np->key,key)==0 ){
+      /* An existing entry with the same key is found. */
+      /* Fail because overwrite is not allows. */
+      return 0;
+    }
+    np = np->next;
+  }
+  if( x3a->count>=x3a->size ){
+    /* Need to make the hash table bigger */
+    int i,size;
+    struct s_x3 array;
+    array.size = size = x3a->size*2;
+    array.count = x3a->count;
+    array.tbl = (x3node*)malloc(
+      (sizeof(x3node) + sizeof(x3node*))*size );
+    if( array.tbl==0 ) return 0;  /* Fail due to malloc failure */
+    array.ht = (x3node**)&(array.tbl[size]);
+    for(i=0; i<size; i++) array.ht[i] = 0;
+    for(i=0; i<x3a->count; i++){
+      x3node *oldnp, *newnp;
+      oldnp = &(x3a->tbl[i]);
+      h = statehash(oldnp->key) & (size-1);
+      newnp = &(array.tbl[i]);
+      if( array.ht[h] ) array.ht[h]->from = &(newnp->next);
+      newnp->next = array.ht[h];
+      newnp->key = oldnp->key;
+      newnp->data = oldnp->data;
+      newnp->from = &(array.ht[h]);
+      array.ht[h] = newnp;
+    }
+    free(x3a->tbl);
+    *x3a = array;
+  }
+  /* Insert the new data */
+  h = ph & (x3a->size-1);
+  np = &(x3a->tbl[x3a->count++]);
+  np->key = key;
+  np->data = data;
+  if( x3a->ht[h] ) x3a->ht[h]->from = &(np->next);
+  np->next = x3a->ht[h];
+  x3a->ht[h] = np;
+  np->from = &(x3a->ht[h]);
+  return 1;
+}
+
+/* Return a pointer to data assigned to the given key.  Return NULL
+** if no such key. */
+struct state *State_find(key)
+struct config *key;
+{
+  int h;
+  x3node *np;
+
+  if( x3a==0 ) return 0;
+  h = statehash(key) & (x3a->size-1);
+  np = x3a->ht[h];
+  while( np ){
+    if( statecmp(np->key,key)==0 ) break;
+    np = np->next;
+  }
+  return np ? np->data : 0;
+}
+
+/* Return an array of pointers to all data in the table.
+** The array is obtained from malloc.  Return NULL if memory allocation
+** problems, or if the array is empty. */
+struct state **State_arrayof()
+{
+  struct state **array;
+  int i,size;
+  if( x3a==0 ) return 0;
+  size = x3a->count;
+  array = (struct state **)malloc( sizeof(struct state *)*size );
+  if( array ){
+    for(i=0; i<size; i++) array[i] = x3a->tbl[i].data;
+  }
+  return array;
+}
+
+/* Hash a configuration */
+PRIVATE int confighash(a)
+struct config *a;
+{
+  int h=0;
+  h = h*571 + a->rp->index*37 + a->dot;
+  return h;
+}
+
+/* There is one instance of the following structure for each
+** associative array of type "x4".
+*/
+struct s_x4 {
+  int size;               /* The number of available slots. */
+                          /*   Must be a power of 2 greater than or */
+                          /*   equal to 1 */
+  int count;              /* Number of currently slots filled */
+  struct s_x4node *tbl;  /* The data stored here */
+  struct s_x4node **ht;  /* Hash table for lookups */
+};
+
+/* There is one instance of this structure for every data element
+** in an associative array of type "x4".
+*/
+typedef struct s_x4node {
+  struct config *data;                  /* The data */
+  struct s_x4node *next;   /* Next entry with the same hash */
+  struct s_x4node **from;  /* Previous link */
+} x4node;
+
+/* There is only one instance of the array, which is the following */
+static struct s_x4 *x4a;
+
+/* Allocate a new associative array */
+void Configtable_init(){
+  if( x4a ) return;
+  x4a = (struct s_x4*)malloc( sizeof(struct s_x4) );
+  if( x4a ){
+    x4a->size = 64;
+    x4a->count = 0;
+    x4a->tbl = (x4node*)malloc(
+      (sizeof(x4node) + sizeof(x4node*))*64 );
+    if( x4a->tbl==0 ){
+      free(x4a);
+      x4a = 0;
+    }else{
+      int i;
+      x4a->ht = (x4node**)&(x4a->tbl[64]);
+      for(i=0; i<64; i++) x4a->ht[i] = 0;
+    }
+  }
+}
+/* Insert a new record into the array.  Return TRUE if successful.
+** Prior data with the same key is NOT overwritten */
+int Configtable_insert(data)
+struct config *data;
+{
+  x4node *np;
+  int h;
+  int ph;
+
+  if( x4a==0 ) return 0;
+  ph = confighash(data);
+  h = ph & (x4a->size-1);
+  np = x4a->ht[h];
+  while( np ){
+    if( Configcmp(np->data,data)==0 ){
+      /* An existing entry with the same key is found. */
+      /* Fail because overwrite is not allows. */
+      return 0;
+    }
+    np = np->next;
+  }
+  if( x4a->count>=x4a->size ){
+    /* Need to make the hash table bigger */
+    int i,size;
+    struct s_x4 array;
+    array.size = size = x4a->size*2;
+    array.count = x4a->count;
+    array.tbl = (x4node*)malloc(
+      (sizeof(x4node) + sizeof(x4node*))*size );
+    if( array.tbl==0 ) return 0;  /* Fail due to malloc failure */
+    array.ht = (x4node**)&(array.tbl[size]);
+    for(i=0; i<size; i++) array.ht[i] = 0;
+    for(i=0; i<x4a->count; i++){
+      x4node *oldnp, *newnp;
+      oldnp = &(x4a->tbl[i]);
+      h = confighash(oldnp->data) & (size-1);
+      newnp = &(array.tbl[i]);
+      if( array.ht[h] ) array.ht[h]->from = &(newnp->next);
+      newnp->next = array.ht[h];
+      newnp->data = oldnp->data;
+      newnp->from = &(array.ht[h]);
+      array.ht[h] = newnp;
+    }
+    free(x4a->tbl);
+    *x4a = array;
+  }
+  /* Insert the new data */
+  h = ph & (x4a->size-1);
+  np = &(x4a->tbl[x4a->count++]);
+  np->data = data;
+  if( x4a->ht[h] ) x4a->ht[h]->from = &(np->next);
+  np->next = x4a->ht[h];
+  x4a->ht[h] = np;
+  np->from = &(x4a->ht[h]);
+  return 1;
+}
+
+/* Return a pointer to data assigned to the given key.  Return NULL
+** if no such key. */
+struct config *Configtable_find(key)
+struct config *key;
+{
+  int h;
+  x4node *np;
+
+  if( x4a==0 ) return 0;
+  h = confighash(key) & (x4a->size-1);
+  np = x4a->ht[h];
+  while( np ){
+    if( Configcmp(np->data,key)==0 ) break;
+    np = np->next;
+  }
+  return np ? np->data : 0;
+}
+
+/* Remove all data from the table.  Pass each data to the function "f"
+** as it is removed.  ("f" may be null to avoid this step.) */
+void Configtable_clear(f)
+int(*f)(/* struct config * */);
+{
+  int i;
+  if( x4a==0 || x4a->count==0 ) return;
+  if( f ) for(i=0; i<x4a->count; i++) (*f)(x4a->tbl[i].data);
+  for(i=0; i<x4a->size; i++) x4a->ht[i] = 0;
+  x4a->count = 0;
+  return;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/lempar.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/lempar.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/lempar.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,687 @@
+/* Driver template for the LEMON parser generator.
+** The author disclaims copyright to this source code.
+*/
+/* First off, code is include which follows the "include" declaration
+** in the input file. */
+#include <stdio.h>
+%%
+/* Next is all token values, in a form suitable for use by makeheaders.
+** This section will be null unless lemon is run with the -m switch.
+*/
+/*
+** These constants (all generated automatically by the parser generator)
+** specify the various kinds of tokens (terminals) that the parser
+** understands.
+**
+** Each symbol here is a terminal symbol in the grammar.
+*/
+%%
+/* Make sure the INTERFACE macro is defined.
+*/
+#ifndef INTERFACE
+# define INTERFACE 1
+#endif
+/* The next thing included is series of defines which control
+** various aspects of the generated parser.
+**    YYCODETYPE         is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 terminals
+**                       and nonterminals.  "int" is used otherwise.
+**    YYNOCODE           is a number of type YYCODETYPE which corresponds
+**                       to no legal terminal or nonterminal number.  This
+**                       number is used to fill in empty slots of the hash
+**                       table.
+**    YYFALLBACK         If defined, this indicates that one or more tokens
+**                       have fall-back values which should be used if the
+**                       original value of the token will not parse.
+**    YYACTIONTYPE       is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 rules and
+**                       states combined.  "int" is used otherwise.
+**    ParseTOKENTYPE     is the data type used for minor tokens given
+**                       directly to the parser from the tokenizer.
+**    YYMINORTYPE        is the data type used for all minor tokens.
+**                       This is typically a union of many types, one of
+**                       which is ParseTOKENTYPE.  The entry in the union
+**                       for base tokens is called "yy0".
+**    YYSTACKDEPTH       is the maximum depth of the parser's stack.
+**    ParseARG_SDECL     A static variable declaration for the %extra_argument
+**    ParseARG_PDECL     A parameter declaration for the %extra_argument
+**    ParseARG_STORE     Code to store %extra_argument into yypParser
+**    ParseARG_FETCH     Code to extract %extra_argument from yypParser
+**    YYNSTATE           the combined number of states.
+**    YYNRULE            the number of rules in the grammar
+**    YYERRORSYMBOL      is the code number of the error symbol.  If not
+**                       defined, then do no error processing.
+*/
+%%
+#define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
+#define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
+#define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
+
+/* Next are that tables used to determine what action to take based on the
+** current state and lookahead token.  These tables are used to implement
+** functions that take a state number and lookahead value and return an
+** action integer.
+**
+** Suppose the action integer is N.  Then the action is determined as
+** follows
+**
+**   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
+**                                      token onto the stack and goto state N.
+**
+**   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
+**
+**   N == YYNSTATE+YYNRULE              A syntax error has occurred.
+**
+**   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
+**
+**   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
+**                                      slots in the yy_action[] table.
+**
+** The action table is constructed as a single large table named yy_action[].
+** Given state S and lookahead X, the action is computed as
+**
+**      yy_action[ yy_shift_ofst[S] + X ]
+**
+** If the index value yy_shift_ofst[S]+X is out of range or if the value
+** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
+** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
+** and that yy_default[S] should be used instead.
+**
+** The formula above is for computing the action when the lookahead is
+** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
+** a reduce action) then the yy_reduce_ofst[] array is used in place of
+** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
+** YY_SHIFT_USE_DFLT.
+**
+** The following are the tables generated in this section:
+**
+**  yy_action[]        A single table containing all actions.
+**  yy_lookahead[]     A table containing the lookahead for each entry in
+**                     yy_action.  Used to detect hash collisions.
+**  yy_shift_ofst[]    For each state, the offset into yy_action for
+**                     shifting terminals.
+**  yy_reduce_ofst[]   For each state, the offset into yy_action for
+**                     shifting non-terminals after a reduce.
+**  yy_default[]       Default action for each state.
+*/
+%%
+#define YY_SZ_ACTTAB (sizeof(yy_action)/sizeof(yy_action[0]))
+
+/* The next table maps tokens into fallback tokens.  If a construct
+** like the following:
+**
+**      %fallback ID X Y Z.
+**
+** appears in the grammer, then ID becomes a fallback token for X, Y,
+** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
+** but it does not parse, the type of the token is changed to ID and
+** the parse is retried before an error is thrown.
+*/
+#ifdef YYFALLBACK
+static const YYCODETYPE yyFallback[] = {
+%%
+};
+#endif /* YYFALLBACK */
+
+/* The following structure represents a single element of the
+** parser's stack.  Information stored includes:
+**
+**   +  The state number for the parser at this level of the stack.
+**
+**   +  The value of the token stored at this level of the stack.
+**      (In other words, the "major" token.)
+**
+**   +  The semantic value stored at this level of the stack.  This is
+**      the information used by the action routines in the grammar.
+**      It is sometimes called the "minor" token.
+*/
+struct yyStackEntry {
+  int stateno;       /* The state-number */
+  int major;         /* The major token value.  This is the code
+                     ** number for the token at this stack level */
+  YYMINORTYPE minor; /* The user-supplied minor token value.  This
+                     ** is the value of the token  */
+};
+typedef struct yyStackEntry yyStackEntry;
+
+/* The state of the parser is completely contained in an instance of
+** the following structure */
+struct yyParser {
+  int yyidx;                    /* Index of top element in stack */
+  int yyerrcnt;                 /* Shifts left before out of the error */
+  ParseARG_SDECL                /* A place to hold %extra_argument */
+  yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
+};
+typedef struct yyParser yyParser;
+
+#ifndef NDEBUG
+#include <stdio.h>
+static FILE *yyTraceFILE = 0;
+static char *yyTracePrompt = 0;
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/*
+** Turn parser tracing on by giving a stream to which to write the trace
+** and a prompt to preface each trace message.  Tracing is turned off
+** by making either argument NULL
+**
+** Inputs:
+** <ul>
+** <li> A FILE* to which trace output should be written.
+**      If NULL, then tracing is turned off.
+** <li> A prefix string written at the beginning of every
+**      line of trace output.  If NULL, then tracing is
+**      turned off.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void ParseTrace(FILE *TraceFILE, char *zTracePrompt){
+  yyTraceFILE = TraceFILE;
+  yyTracePrompt = zTracePrompt;
+  if( yyTraceFILE==0 ) yyTracePrompt = 0;
+  else if( yyTracePrompt==0 ) yyTraceFILE = 0;
+}
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing shifts, the names of all terminals and nonterminals
+** are required.  The following table supplies these names */
+static const char *yyTokenName[] = {
+%%
+};
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing reduce actions, the names of all rules are required.
+*/
+static const char *yyRuleName[] = {
+%%
+};
+#endif /* NDEBUG */
+
+/*
+** This function returns the symbolic name associated with a token
+** value.
+*/
+const char *ParseTokenName(int tokenType){
+#ifndef NDEBUG
+  if( tokenType>0 && tokenType<(sizeof(yyTokenName)/sizeof(yyTokenName[0])) ){
+    return yyTokenName[tokenType];
+  }else{
+    return "Unknown";
+  }
+#else
+  return "";
+#endif
+}
+
+/*
+** This function allocates a new parser.
+** The only argument is a pointer to a function which works like
+** malloc.
+**
+** Inputs:
+** A pointer to the function used to allocate memory.
+**
+** Outputs:
+** A pointer to a parser.  This pointer is used in subsequent calls
+** to Parse and ParseFree.
+*/
+void *ParseAlloc(void *(*mallocProc)(size_t)){
+  yyParser *pParser;
+  pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
+  if( pParser ){
+    pParser->yyidx = -1;
+  }
+  return pParser;
+}
+
+/* The following function deletes the value associated with a
+** symbol.  The symbol can be either a terminal or nonterminal.
+** "yymajor" is the symbol code, and "yypminor" is a pointer to
+** the value.
+*/
+static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
+  switch( yymajor ){
+    /* Here is inserted the actions which take place when a
+    ** terminal or non-terminal is destroyed.  This can happen
+    ** when the symbol is popped from the stack during a
+    ** reduce or during error processing or when a parser is
+    ** being destroyed before it is finished parsing.
+    **
+    ** Note: during a reduce, the only symbols destroyed are those
+    ** which appear on the RHS of the rule, but which are not used
+    ** inside the C code.
+    */
+%%
+    default:  break;   /* If no destructor action specified: do nothing */
+  }
+}
+
+/*
+** Pop the parser's stack once.
+**
+** If there is a destructor routine associated with the token which
+** is popped from the stack, then call it.
+**
+** Return the major token number for the symbol popped.
+*/
+static int yy_pop_parser_stack(yyParser *pParser){
+  YYCODETYPE yymajor;
+  yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
+
+  if( pParser->yyidx<0 ) return 0;
+#ifndef NDEBUG
+  if( yyTraceFILE && pParser->yyidx>=0 ){
+    fprintf(yyTraceFILE,"%sPopping %s\n",
+      yyTracePrompt,
+      yyTokenName[yytos->major]);
+  }
+#endif
+  yymajor = yytos->major;
+  yy_destructor( yymajor, &yytos->minor);
+  pParser->yyidx--;
+  return yymajor;
+}
+
+/*
+** Deallocate and destroy a parser.  Destructors are all called for
+** all stack elements before shutting the parser down.
+**
+** Inputs:
+** <ul>
+** <li>  A pointer to the parser.  This should be a pointer
+**       obtained from ParseAlloc.
+** <li>  A pointer to a function used to reclaim memory obtained
+**       from malloc.
+** </ul>
+*/
+void ParseFree(
+  void *p,                    /* The parser to be deleted */
+  void (*freeProc)(void*)     /* Function used to reclaim memory */
+){
+  yyParser *pParser = (yyParser*)p;
+  if( pParser==0 ) return;
+  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
+  (*freeProc)((void*)pParser);
+}
+
+/*
+** Find the appropriate action for a parser given the terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_shift_action(
+  yyParser *pParser,        /* The parser */
+  int iLookAhead            /* The look-ahead token */
+){
+  int i;
+  int stateno = pParser->yystack[pParser->yyidx].stateno;
+
+  /* if( pParser->yyidx<0 ) return YY_NO_ACTION;  */
+  i = yy_shift_ofst[stateno];
+  if( i==YY_SHIFT_USE_DFLT ){
+    return yy_default[stateno];
+  }
+  if( iLookAhead==YYNOCODE ){
+    return YY_NO_ACTION;
+  }
+  i += iLookAhead;
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+#ifdef YYFALLBACK
+    int iFallback;            /* Fallback token */
+    if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
+           && (iFallback = yyFallback[iLookAhead])!=0 ){
+#ifndef NDEBUG
+      if( yyTraceFILE ){
+        fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
+           yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
+      }
+#endif
+      return yy_find_shift_action(pParser, iFallback);
+    }
+#endif
+    return yy_default[stateno];
+  }else{
+    return yy_action[i];
+  }
+}
+
+/*
+** Find the appropriate action for a parser given the non-terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_reduce_action(
+  yyParser *pParser,        /* The parser */
+  int iLookAhead            /* The look-ahead token */
+){
+  int i;
+  int stateno = pParser->yystack[pParser->yyidx].stateno;
+
+  i = yy_reduce_ofst[stateno];
+  if( i==YY_REDUCE_USE_DFLT ){
+    return yy_default[stateno];
+  }
+  if( iLookAhead==YYNOCODE ){
+    return YY_NO_ACTION;
+  }
+  i += iLookAhead;
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    return yy_default[stateno];
+  }else{
+    return yy_action[i];
+  }
+}
+
+/*
+** Perform a shift action.
+*/
+static void yy_shift(
+  yyParser *yypParser,          /* The parser to be shifted */
+  int yyNewState,               /* The new state to shift in */
+  int yyMajor,                  /* The major token to shift in */
+  YYMINORTYPE *yypMinor         /* Pointer ot the minor token to shift in */
+){
+  yyStackEntry *yytos;
+  yypParser->yyidx++;
+  if( yypParser->yyidx>=YYSTACKDEPTH ){
+     ParseARG_FETCH;
+     yypParser->yyidx--;
+#ifndef NDEBUG
+     if( yyTraceFILE ){
+       fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
+     }
+#endif
+     while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+     /* Here code is inserted which will execute if the parser
+     ** stack every overflows */
+%%
+     ParseARG_STORE; /* Suppress warning about unused %extra_argument var */
+     return;
+  }
+  yytos = &yypParser->yystack[yypParser->yyidx];
+  yytos->stateno = yyNewState;
+  yytos->major = yyMajor;
+  yytos->minor = *yypMinor;
+#ifndef NDEBUG
+  if( yyTraceFILE && yypParser->yyidx>0 ){
+    int i;
+    fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
+    fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
+    for(i=1; i<=yypParser->yyidx; i++)
+      fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
+    fprintf(yyTraceFILE,"\n");
+  }
+#endif
+}
+
+/* The following table contains information about every rule that
+** is used during the reduce.
+*/
+static struct {
+  YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
+  unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
+} yyRuleInfo[] = {
+%%
+};
+
+static void yy_accept(yyParser*);  /* Forward Declaration */
+
+/*
+** Perform a reduce action and the shift that must immediately
+** follow the reduce.
+*/
+static void yy_reduce(
+  yyParser *yypParser,         /* The parser */
+  int yyruleno                 /* Number of the rule by which to reduce */
+){
+  int yygoto;                     /* The next state */
+  int yyact;                      /* The next action */
+  YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
+  yyStackEntry *yymsp;            /* The top of the parser's stack */
+  int yysize;                     /* Amount to pop the stack */
+  ParseARG_FETCH;
+  yymsp = &yypParser->yystack[yypParser->yyidx];
+#ifndef NDEBUG
+  if( yyTraceFILE && yyruleno>=0
+        && yyruleno<sizeof(yyRuleName)/sizeof(yyRuleName[0]) ){
+    fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
+      yyRuleName[yyruleno]);
+  }
+#endif /* NDEBUG */
+
+  switch( yyruleno ){
+  /* Beginning here are the reduction cases.  A typical example
+  ** follows:
+  **   case 0:
+  **  #line <lineno> <grammarfile>
+  **     { ... }           // User supplied code
+  **  #line <lineno> <thisfile>
+  **     break;
+  */
+%%
+  };
+  yygoto = yyRuleInfo[yyruleno].lhs;
+  yysize = yyRuleInfo[yyruleno].nrhs;
+  yypParser->yyidx -= yysize;
+  yyact = yy_find_reduce_action(yypParser,yygoto);
+  if( yyact < YYNSTATE ){
+    yy_shift(yypParser,yyact,yygoto,&yygotominor);
+  }else if( yyact == YYNSTATE + YYNRULE + 1 ){
+    yy_accept(yypParser);
+  }
+}
+
+/*
+** The following code executes when the parse fails
+*/
+static void yy_parse_failed(
+  yyParser *yypParser           /* The parser */
+){
+  ParseARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser fails */
+%%
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following code executes when a syntax error first occurs.
+*/
+static void yy_syntax_error(
+  yyParser *yypParser,           /* The parser */
+  int yymajor,                   /* The major type of the error token */
+  YYMINORTYPE yyminor            /* The minor type of the error token */
+){
+  ParseARG_FETCH;
+#define TOKEN (yyminor.yy0)
+%%
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following is executed when the parser accepts
+*/
+static void yy_accept(
+  yyParser *yypParser           /* The parser */
+){
+  ParseARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser accepts */
+%%
+  ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/* The main parser program.
+** The first argument is a pointer to a structure obtained from
+** "ParseAlloc" which describes the current state of the parser.
+** The second argument is the major token number.  The third is
+** the minor token.  The fourth optional argument is whatever the
+** user wants (and specified in the grammar) and is available for
+** use by the action routines.
+**
+** Inputs:
+** <ul>
+** <li> A pointer to the parser (an opaque structure.)
+** <li> The major token number.
+** <li> The minor token number.
+** <li> An option argument of a grammar-specified type.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void Parse(
+  void *yyp,                   /* The parser */
+  int yymajor,                 /* The major token code number */
+  ParseTOKENTYPE yyminor       /* The value for the token */
+  ParseARG_PDECL               /* Optional %extra_argument parameter */
+){
+  YYMINORTYPE yyminorunion;
+  int yyact;            /* The parser action. */
+  int yyendofinput;     /* True if we are at the end of input */
+  int yyerrorhit = 0;   /* True if yymajor has invoked an error */
+  yyParser *yypParser;  /* The parser */
+
+  /* (re)initialize the parser, if necessary */
+  yypParser = (yyParser*)yyp;
+  if( yypParser->yyidx<0 ){
+    if( yymajor==0 ) return;
+    yypParser->yyidx = 0;
+    yypParser->yyerrcnt = -1;
+    yypParser->yystack[0].stateno = 0;
+    yypParser->yystack[0].major = 0;
+  }
+  yyminorunion.yy0 = yyminor;
+  yyendofinput = (yymajor==0);
+  ParseARG_STORE;
+
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
+  }
+#endif
+
+  do{
+    yyact = yy_find_shift_action(yypParser,yymajor);
+    if( yyact<YYNSTATE ){
+      yy_shift(yypParser,yyact,yymajor,&yyminorunion);
+      yypParser->yyerrcnt--;
+      if( yyendofinput && yypParser->yyidx>=0 ){
+        yymajor = 0;
+      }else{
+        yymajor = YYNOCODE;
+      }
+    }else if( yyact < YYNSTATE + YYNRULE ){
+      yy_reduce(yypParser,yyact-YYNSTATE);
+    }else if( yyact == YY_ERROR_ACTION ){
+      int yymx;
+#ifndef NDEBUG
+      if( yyTraceFILE ){
+        fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
+      }
+#endif
+#ifdef YYERRORSYMBOL
+      /* A syntax error has occurred.
+      ** The response to an error depends upon whether or not the
+      ** grammar defines an error token "ERROR".
+      **
+      ** This is what we do if the grammar does define ERROR:
+      **
+      **  * Call the %syntax_error function.
+      **
+      **  * Begin popping the stack until we enter a state where
+      **    it is legal to shift the error symbol, then shift
+      **    the error symbol.
+      **
+      **  * Set the error count to three.
+      **
+      **  * Begin accepting and shifting new tokens.  No new error
+      **    processing will occur until three tokens have been
+      **    shifted successfully.
+      **
+      */
+      if( yypParser->yyerrcnt<0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yymx = yypParser->yystack[yypParser->yyidx].major;
+      if( yymx==YYERRORSYMBOL || yyerrorhit ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE,"%sDiscard input token %s\n",
+             yyTracePrompt,yyTokenName[yymajor]);
+        }
+#endif
+        yy_destructor(yymajor,&yyminorunion);
+        yymajor = YYNOCODE;
+      }else{
+         while(
+          yypParser->yyidx >= 0 &&
+          yymx != YYERRORSYMBOL &&
+          (yyact = yy_find_shift_action(yypParser,YYERRORSYMBOL)) >= YYNSTATE
+        ){
+          yy_pop_parser_stack(yypParser);
+        }
+        if( yypParser->yyidx < 0 || yymajor==0 ){
+          yy_destructor(yymajor,&yyminorunion);
+          yy_parse_failed(yypParser);
+          yymajor = YYNOCODE;
+        }else if( yymx!=YYERRORSYMBOL ){
+          YYMINORTYPE u2;
+          u2.YYERRSYMDT = 0;
+          yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
+        }
+      }
+      yypParser->yyerrcnt = 3;
+      yyerrorhit = 1;
+#else  /* YYERRORSYMBOL is not defined */
+      /* This is what we do if the grammar does not define ERROR:
+      **
+      **  * Report an error message, and throw away the input token.
+      **
+      **  * If the input token is $, then fail the parse.
+      **
+      ** As before, subsequent error messages are suppressed until
+      ** three input tokens have been successfully shifted.
+      */
+      if( yypParser->yyerrcnt<=0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yypParser->yyerrcnt = 3;
+      yy_destructor(yymajor,&yyminorunion);
+      if( yyendofinput ){
+        yy_parse_failed(yypParser);
+      }
+      yymajor = YYNOCODE;
+#endif
+    }else{
+      yy_accept(yypParser);
+      yymajor = YYNOCODE;
+    }
+  }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
+  return;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/lighttpd-angel.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/lighttpd-angel.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/lighttpd-angel.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,154 @@
+/**
+ * angel process for lighttpd 
+ *
+ * the purpose is the run as root all the time and handle:
+ * - restart on crash
+ * - spawn on HUP to allow graceful restart
+ * - ...
+ *
+ * it has to stay safe and small to be trustable
+ */
+
+#include <sys/wait.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <time.h>
+#include <signal.h>
+
+#define BINPATH SBIN_DIR"/lighttpd"
+
+static siginfo_t last_sigterm_info;
+static siginfo_t last_sighup_info;
+
+static volatile sig_atomic_t start_process    = 1;
+static volatile sig_atomic_t graceful_restart = 0;
+static volatile pid_t pid = -1;
+
+static void sigaction_handler(int sig, siginfo_t *si, void *context) {
+	int exitcode;
+
+	switch (sig) {
+	case SIGINT: 
+	case SIGTERM:
+		memcpy(&last_sigterm_info, si, sizeof(*si));
+
+		/** forward the sig to the child */
+		kill(pid, sig);
+		break;
+	case SIGHUP: /** do a graceful restart */
+		memcpy(&last_sighup_info, si, sizeof(*si));
+
+		/** do a graceful shutdown on the main process and start a new child */
+		kill(pid, SIGINT);
+
+		usleep(5 * 1000); /** wait 5 microsec */
+		
+		start_process = 1;
+		break;
+	case SIGCHLD:
+		/** a child died, de-combie it */
+		wait(&exitcode);
+		break;
+	}
+}
+
+int main(int argc, char **argv) {
+	int is_shutdown = 0;
+	struct sigaction act;
+
+	/**
+	 * we are running as root BEWARE
+	 */
+
+	memset(&act, 0, sizeof(act));
+	act.sa_handler = SIG_IGN;
+	sigaction(SIGPIPE, &act, NULL);
+	sigaction(SIGUSR1, &act, NULL);
+
+	act.sa_sigaction = sigaction_handler;
+	sigemptyset(&act.sa_mask);
+	act.sa_flags = SA_SIGINFO;
+
+	sigaction(SIGINT,  &act, NULL);
+	sigaction(SIGTERM, &act, NULL);
+	sigaction(SIGHUP,  &act, NULL);
+	sigaction(SIGALRM, &act, NULL);
+	sigaction(SIGCHLD, &act, NULL);
+
+	/* check that the compiled in path has the right user,
+	 *
+	 * BEWARE: there is a race between the check here and the exec later
+	 */
+
+	while (!is_shutdown) {
+		int exitcode = 0;
+
+		if (start_process) {
+			pid = fork();
+
+			if (0 == pid) {
+				/* i'm the child */
+
+				argv[0] = BINPATH;
+
+				execvp(BINPATH, argv);
+
+				exit(1);
+			} else if (-1 == pid) {
+				/** error */
+
+				return -1;
+			}
+
+			/* I'm the angel */
+			start_process = 0;
+		}
+	       
+		if ((pid_t)-1 == waitpid(pid, &exitcode, 0)) {
+			switch (errno) {
+			case EINTR:
+				/* someone sent a signal ... 
+				 * do we have to shutdown or restart the process */
+				break;
+			case ECHILD:
+				/** 
+				 * make sure we are not in a race between the signal handler
+				 * and the process restart */
+				if (!start_process) is_shutdown = 1;
+				break;
+			default:
+				break;
+			}
+		} else {
+			/** process went away */
+
+			if (WIFEXITED(exitcode)) {
+				/** normal exit */
+
+				is_shutdown = 1;
+
+				fprintf(stderr, "%s.%d: child (pid=%d) exited normally with exitcode: %d\n", 
+						__FILE__, __LINE__,
+						pid,
+						WEXITSTATUS(exitcode));
+
+			} else if (WIFSIGNALED(exitcode)) {
+				/** got a signal */
+
+				fprintf(stderr, "%s.%d: child (pid=%d) exited unexpectedly with signal %d, restarting\n", 
+						__FILE__, __LINE__,
+						pid,
+						WTERMSIG(exitcode));
+
+				start_process = 1;
+			}
+		}
+	}
+
+	return 0;
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/log.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/log.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/log.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,252 @@
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <time.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_SYSLOG_H
+#include <syslog.h>
+#endif
+
+#include "log.h"
+#include "array.h"
+
+#ifdef HAVE_VALGRIND_VALGRIND_H
+#include <valgrind/valgrind.h>
+#endif
+
+#ifndef O_LARGEFILE
+# define O_LARGEFILE 0
+#endif
+
+/**
+ * open the errorlog
+ *
+ * we have 3 possibilities:
+ * - stderr (default)
+ * - syslog
+ * - logfile
+ *
+ * if the open failed, report to the user and die
+ *
+ */
+
+int log_error_open(server *srv) {
+	int fd;
+	int close_stderr = 1;
+
+#ifdef HAVE_SYSLOG_H
+	/* perhaps someone wants to use syslog() */
+	openlog("lighttpd", LOG_CONS | LOG_PID, LOG_DAEMON);
+#endif
+	srv->errorlog_mode = ERRORLOG_STDERR;
+
+	if (srv->srvconf.errorlog_use_syslog) {
+		srv->errorlog_mode = ERRORLOG_SYSLOG;
+	} else if (!buffer_is_empty(srv->srvconf.errorlog_file)) {
+		const char *logfile = srv->srvconf.errorlog_file->ptr;
+
+		if (-1 == (srv->errorlog_fd = open(logfile, O_APPEND | O_WRONLY | O_CREAT | O_LARGEFILE, 0644))) {
+			log_error_write(srv, __FILE__, __LINE__, "SSSS",
+					"opening errorlog '", logfile,
+					"' failed: ", strerror(errno));
+
+			return -1;
+		}
+#ifdef FD_CLOEXEC
+		/* close fd on exec (cgi) */
+		fcntl(srv->errorlog_fd, F_SETFD, FD_CLOEXEC);
+#endif
+		srv->errorlog_mode = ERRORLOG_FILE;
+	}
+
+	log_error_write(srv, __FILE__, __LINE__, "s", "server started");
+
+#ifdef HAVE_VALGRIND_VALGRIND_H
+	/* don't close stderr for debugging purposes if run in valgrind */
+	if (RUNNING_ON_VALGRIND) close_stderr = 0;
+#endif
+	if (srv->errorlog_mode == ERRORLOG_STDERR) close_stderr = 0;
+
+	/* move stderr to /dev/null */
+	if (close_stderr &&
+	    -1 != (fd = open("/dev/null", O_WRONLY))) {
+		close(STDERR_FILENO);
+		dup2(fd, STDERR_FILENO);
+		close(fd);
+	}
+	return 0;
+}
+
+/**
+ * open the errorlog
+ *
+ * if the open failed, report to the user and die
+ * if no filename is given, use syslog instead
+ *
+ */
+
+int log_error_cycle(server *srv) {
+	/* only cycle if we are not in syslog-mode */
+
+	if (srv->errorlog_mode == ERRORLOG_FILE) {
+		const char *logfile = srv->srvconf.errorlog_file->ptr;
+		/* already check of opening time */
+
+		int new_fd;
+
+		if (-1 == (new_fd = open(logfile, O_APPEND | O_WRONLY | O_CREAT | O_LARGEFILE, 0644))) {
+			/* write to old log */
+			log_error_write(srv, __FILE__, __LINE__, "SSSSS",
+					"cycling errorlog '", logfile,
+					"' failed: ", strerror(errno),
+					", falling back to syslog()");
+
+			close(srv->errorlog_fd);
+			srv->errorlog_fd = -1;
+#ifdef HAVE_SYSLOG_H
+			srv->errorlog_mode = ERRORLOG_SYSLOG;
+#endif
+		} else {
+			/* ok, new log is open, close the old one */
+			close(srv->errorlog_fd);
+			srv->errorlog_fd = new_fd;
+		}
+	}
+
+	return 0;
+}
+
+int log_error_close(server *srv) {
+	switch(srv->errorlog_mode) {
+	case ERRORLOG_FILE:
+		close(srv->errorlog_fd);
+		break;
+	case ERRORLOG_SYSLOG:
+#ifdef HAVE_SYSLOG_H
+		closelog();
+#endif
+		break;
+	case ERRORLOG_STDERR:
+		break;
+	}
+
+	return 0;
+}
+
+int log_error_write(server *srv, const char *filename, unsigned int line, const char *fmt, ...) {
+	va_list ap;
+
+	switch(srv->errorlog_mode) {
+	case ERRORLOG_FILE:
+	case ERRORLOG_STDERR:
+		/* cache the generated timestamp */
+		if (srv->cur_ts != srv->last_generated_debug_ts) {
+			buffer_prepare_copy(srv->ts_debug_str, 255);
+			strftime(srv->ts_debug_str->ptr, srv->ts_debug_str->size - 1, "%Y-%m-%d %H:%M:%S", localtime(&(srv->cur_ts)));
+			srv->ts_debug_str->used = strlen(srv->ts_debug_str->ptr) + 1;
+
+			srv->last_generated_debug_ts = srv->cur_ts;
+		}
+
+		buffer_copy_string_buffer(srv->errorlog_buf, srv->ts_debug_str);
+		BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, ": (");
+		break;
+	case ERRORLOG_SYSLOG:
+		/* syslog is generating its own timestamps */
+		BUFFER_COPY_STRING_CONST(srv->errorlog_buf, "(");
+		break;
+	}
+
+	buffer_append_string(srv->errorlog_buf, filename);
+	BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, ".");
+	buffer_append_long(srv->errorlog_buf, line);
+	BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, ") ");
+
+
+	for(va_start(ap, fmt); *fmt; fmt++) {
+		int d;
+		char *s;
+		buffer *b;
+		off_t o;
+
+		switch(*fmt) {
+		case 's':           /* string */
+			s = va_arg(ap, char *);
+			buffer_append_string(srv->errorlog_buf, s);
+			BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, " ");
+			break;
+		case 'b':           /* buffer */
+			b = va_arg(ap, buffer *);
+			buffer_append_string_buffer(srv->errorlog_buf, b);
+			BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, " ");
+			break;
+		case 'd':           /* int */
+			d = va_arg(ap, int);
+			buffer_append_long(srv->errorlog_buf, d);
+			BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, " ");
+			break;
+		case 'o':           /* off_t */
+			o = va_arg(ap, off_t);
+			buffer_append_off_t(srv->errorlog_buf, o);
+			BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, " ");
+			break;
+		case 'x':           /* int (hex) */
+			d = va_arg(ap, int);
+			BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, "0x");
+			buffer_append_long_hex(srv->errorlog_buf, d);
+			BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, " ");
+			break;
+		case 'S':           /* string */
+			s = va_arg(ap, char *);
+			buffer_append_string(srv->errorlog_buf, s);
+			break;
+		case 'B':           /* buffer */
+			b = va_arg(ap, buffer *);
+			buffer_append_string_buffer(srv->errorlog_buf, b);
+			break;
+		case 'D':           /* int */
+			d = va_arg(ap, int);
+			buffer_append_long(srv->errorlog_buf, d);
+			break;
+		case '(':
+		case ')':
+		case '<':
+		case '>':
+		case ',':
+		case ' ':
+			buffer_append_string_len(srv->errorlog_buf, fmt, 1);
+			break;
+		}
+	}
+	va_end(ap);
+
+	switch(srv->errorlog_mode) {
+	case ERRORLOG_FILE:
+		BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, "\n");
+		write(srv->errorlog_fd, srv->errorlog_buf->ptr, srv->errorlog_buf->used - 1);
+		break;
+	case ERRORLOG_STDERR:
+		BUFFER_APPEND_STRING_CONST(srv->errorlog_buf, "\n");
+		write(STDERR_FILENO, srv->errorlog_buf->ptr, srv->errorlog_buf->used - 1);
+		break;
+	case ERRORLOG_SYSLOG:
+		syslog(LOG_ERR, "%s", srv->errorlog_buf->ptr);
+		break;
+	}
+
+	return 0;
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/log.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/log.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/log.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,13 @@
+#ifndef _LOG_H_
+#define _LOG_H_
+
+#include "server.h"
+
+#define WP() log_error_write(srv, __FILE__, __LINE__, "");
+
+int log_error_open(server *srv);
+int log_error_close(server *srv);
+int log_error_write(server *srv, const char *filename, unsigned int line, const char *fmt, ...);
+int log_error_cycle(server *srv);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/md5.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/md5.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/md5.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,355 @@
+/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef USE_OPENSSL
+#include <string.h>
+
+#include "md5.h"
+
+/* Constants for MD5Transform routine.
+ */
+
+#define S11 7
+#define S12 12
+#define S13 17
+#define S14 22
+#define S21 5
+#define S22 9
+#define S23 14
+#define S24 20
+#define S31 4
+#define S32 11
+#define S33 16
+#define S34 23
+#define S41 6
+#define S42 10
+#define S43 15
+#define S44 21
+
+static void MD5Transform (UINT4 [4], unsigned char [64]);
+static void Encode (unsigned char *, UINT4 *, unsigned int);
+static void Decode (UINT4 *, unsigned char *, unsigned int);
+
+#ifdef HAVE_MEMCPY
+#define MD5_memcpy(output, input, len) memcpy((output), (input), (len))
+#else
+static void MD5_memcpy (POINTER, POINTER, unsigned int);
+#endif
+#ifdef HAVE_MEMSET
+#define MD5_memset(output, value, len) memset((output), (value), (len))
+#else
+static void MD5_memset (POINTER, int, unsigned int);
+#endif
+
+static unsigned char PADDING[64] = {
+  0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/* F, G, H and I are basic MD5 functions.
+ */
+#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
+#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define I(x, y, z) ((y) ^ ((x) | (~z)))
+
+/* ROTATE_LEFT rotates x left n bits.
+ */
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
+
+/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
+Rotation is separate from addition to prevent recomputation.
+ */
+#define FF(a, b, c, d, x, s, ac) { \
+ (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+  }
+#define GG(a, b, c, d, x, s, ac) { \
+ (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+  }
+#define HH(a, b, c, d, x, s, ac) { \
+ (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+  }
+#define II(a, b, c, d, x, s, ac) { \
+ (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+  }
+
+/* MD5 initialization. Begins an MD5 operation, writing a new context.
+ */
+void MD5_Init (context)
+MD5_CTX *context;                                        /* context */
+{
+  context->count[0] = context->count[1] = 0;
+  /* Load magic initialization constants.
+*/
+  context->state[0] = 0x67452301;
+  context->state[1] = 0xefcdab89;
+  context->state[2] = 0x98badcfe;
+  context->state[3] = 0x10325476;
+}
+
+/* MD5 block update operation. Continues an MD5 message-digest
+  operation, processing another message block, and updating the
+  context.
+ */
+void MD5_Update (context, input, inputLen)
+MD5_CTX *context;                                        /* context */
+unsigned char *input;                                /* input block */
+unsigned int inputLen;                     /* length of input block */
+{
+  unsigned int i, ndx, partLen;
+
+  /* Compute number of bytes mod 64 */
+  ndx = (unsigned int)((context->count[0] >> 3) & 0x3F);
+
+  /* Update number of bits */
+  if ((context->count[0] += ((UINT4)inputLen << 3))
+
+   < ((UINT4)inputLen << 3))
+ context->count[1]++;
+  context->count[1] += ((UINT4)inputLen >> 29);
+
+  partLen = 64 - ndx;
+
+  /* Transform as many times as possible.
+*/
+  if (inputLen >= partLen) {
+ MD5_memcpy
+   ((POINTER)&context->buffer[ndx], (POINTER)input, partLen);
+ MD5Transform (context->state, context->buffer);
+
+ for (i = partLen; i + 63 < inputLen; i += 64)
+   MD5Transform (context->state, &input[i]);
+
+ ndx = 0;
+  }
+  else
+ i = 0;
+
+  /* Buffer remaining input */
+  MD5_memcpy
+ ((POINTER)&context->buffer[ndx], (POINTER)&input[i],
+  inputLen-i);
+}
+
+/* MD5 finalization. Ends an MD5 message-digest operation, writing the
+  the message digest and zeroizing the context.
+ */
+void MD5_Final (digest, context)
+unsigned char digest[16];                         /* message digest */
+MD5_CTX *context;                                       /* context */
+{
+  unsigned char bits[8];
+  unsigned int ndx, padLen;
+
+  /* Save number of bits */
+  Encode (bits, context->count, 8);
+
+  /* Pad out to 56 mod 64.
+*/
+  ndx = (unsigned int)((context->count[0] >> 3) & 0x3f);
+  padLen = (ndx < 56) ? (56 - ndx) : (120 - ndx);
+  MD5_Update (context, PADDING, padLen);
+
+  /* Append length (before padding) */
+  MD5_Update (context, bits, 8);
+
+  /* Store state in digest */
+  Encode (digest, context->state, 16);
+
+  /* Zeroize sensitive information.
+*/
+  MD5_memset ((POINTER)context, 0, sizeof (*context));
+}
+
+/* MD5 basic transformation. Transforms state based on block.
+ */
+static void MD5Transform (state, block)
+UINT4 state[4];
+unsigned char block[64];
+{
+  UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
+
+  Decode (x, block, 64);
+
+  /* Round 1 */
+  FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
+  FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
+  FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
+  FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
+  FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
+  FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
+  FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
+  FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
+  FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
+  FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
+  FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+  FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+  FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+  FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+  FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+  FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
+
+ /* Round 2 */
+  GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
+  GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
+  GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+  GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
+  GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
+  GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
+  GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
+  GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
+  GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
+  GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+  GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
+
+  GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
+  GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+  GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
+  GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
+  GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+
+  /* Round 3 */
+  HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
+  HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
+  HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+  HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+  HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
+  HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
+  HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
+  HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+  HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+  HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
+  HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
+  HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
+  HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
+  HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+  HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
+  HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
+
+  /* Round 4 */
+  II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
+  II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
+  II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+  II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
+  II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+  II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
+  II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+  II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
+  II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
+  II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
+  II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
+  II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+  II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
+  II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+  II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
+  II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
+
+  state[0] += a;
+  state[1] += b;
+  state[2] += c;
+  state[3] += d;
+
+  /* Zeroize sensitive information.
+
+*/
+  MD5_memset ((POINTER)x, 0, sizeof (x));
+}
+
+/* Encodes input (UINT4) into output (unsigned char). Assumes len is
+  a multiple of 4.
+ */
+static void Encode (output, input, len)
+unsigned char *output;
+UINT4 *input;
+unsigned int len;
+{
+  unsigned int i, j;
+
+  for (i = 0, j = 0; j < len; i++, j += 4) {
+ output[j] = (unsigned char)(input[i] & 0xff);
+ output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
+ output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
+ output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
+  }
+}
+
+/* Decodes input (unsigned char) into output (UINT4). Assumes len is
+  a multiple of 4.
+ */
+static void Decode (output, input, len)
+UINT4 *output;
+unsigned char *input;
+unsigned int len;
+{
+  unsigned int i, j;
+
+  for (i = 0, j = 0; j < len; i++, j += 4)
+ output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
+   (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
+}
+
+/* Note: Replace "for loop" with standard memcpy if possible.
+ */
+#ifndef HAVE_MEMCPY
+static void MD5_memcpy (output, input, len)
+POINTER output;
+POINTER input;
+unsigned int len;
+{
+  unsigned int i;
+
+  for (i = 0; i < len; i++)
+
+ output[i] = input[i];
+}
+#endif
+/* Note: Replace "for loop" with standard memset if possible.
+ */
+#ifndef HAVE_MEMSET
+static void MD5_memset (output, value, len)
+POINTER output;
+int value;
+unsigned int len;
+{
+  unsigned int i;
+
+  for (i = 0; i < len; i++)
+ ((char *)output)[i] = (char)value;
+}
+#endif
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/md5.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/md5.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/md5.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,47 @@
+/* MD5.H - header file for MD5C.C
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+ */
+#include <limits.h>
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+
+#define UINT4 uint32_t
+#define UINT2 uint16_t
+#define POINTER unsigned char *
+
+/* MD5 context. */
+typedef struct {
+  UINT4 state[4];                                   /* state (ABCD) */
+  UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */
+  unsigned char buffer[64];                         /* input buffer */
+} MD5_CTX;
+
+void MD5_Init (MD5_CTX *);
+void MD5_Update (MD5_CTX *, unsigned char *, unsigned int);
+void MD5_Final (unsigned char [16], MD5_CTX *);
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_access.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_access.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_access.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,190 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+typedef struct {
+	array *access_deny;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+INIT_FUNC(mod_access_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	return p;
+}
+
+FREE_FUNC(mod_access_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			array_free(s->access_deny);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+SETDEFAULTS_FUNC(mod_access_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "url.access-deny",             NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },
+		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->access_deny    = array_init();
+
+		cv[0].destination = s->access_deny;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_access_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(access_deny);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("url.access-deny"))) {
+				PATCH(access_deny);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+/**
+ * URI handler
+ *
+ * we will get called twice:
+ * - after the clean up of the URL and 
+ * - after the pathinfo checks are done
+ *
+ * this handles the issue of trailing slashes
+ */
+URIHANDLER_FUNC(mod_access_uri_handler) {
+	plugin_data *p = p_d;
+	int s_len;
+	size_t k;
+
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+
+	mod_access_patch_connection(srv, con, p);
+
+	s_len = con->uri.path->used - 1;
+
+	if (con->conf.log_request_handling) {
+ 		log_error_write(srv, __FILE__, __LINE__, "s", 
+				"-- mod_access_uri_handler called");
+	}
+
+	for (k = 0; k < p->conf.access_deny->used; k++) {
+		data_string *ds = (data_string *)p->conf.access_deny->data[k];
+		int ct_len = ds->value->used - 1;
+		int denied = 0;
+
+
+		if (ct_len > s_len) continue;
+		if (ds->value->used == 0) continue;
+
+		/* if we have a case-insensitive FS we have to lower-case the URI here too */
+
+		if (con->conf.force_lowercase_filenames) {
+			if (0 == strncasecmp(con->uri.path->ptr + s_len - ct_len, ds->value->ptr, ct_len)) {
+				denied = 1;
+			}
+		} else {
+			if (0 == strncmp(con->uri.path->ptr + s_len - ct_len, ds->value->ptr, ct_len)) {
+				denied = 1;
+			}
+		}
+
+		if (denied) {
+			con->http_status = 403;
+
+			if (con->conf.log_request_handling) {
+	 			log_error_write(srv, __FILE__, __LINE__, "sb", 
+					"url denied as we match:", ds->value);
+			}
+
+			return HANDLER_FINISHED;
+		}
+	}
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+
+
+int mod_access_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("access");
+
+	p->init        = mod_access_init;
+	p->set_defaults = mod_access_set_defaults;
+	p->handle_uri_clean = mod_access_uri_handler;
+	p->handle_subrequest_start  = mod_access_uri_handler;
+	p->cleanup     = mod_access_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_accesslog.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_accesslog.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_accesslog.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,877 @@
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <time.h>
+
+#include <stdio.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#include "inet_ntop_cache.h"
+
+#include "sys-socket.h"
+
+#ifdef HAVE_SYSLOG_H
+# include <syslog.h>
+#endif
+
+typedef struct {
+	char key;
+	enum {
+		FORMAT_UNSET,
+			FORMAT_UNSUPPORTED,
+			FORMAT_PERCENT,
+			FORMAT_REMOTE_HOST,
+			FORMAT_REMOTE_IDENT,
+			FORMAT_REMOTE_USER,
+			FORMAT_TIMESTAMP,
+			FORMAT_REQUEST_LINE,
+			FORMAT_STATUS,
+			FORMAT_BYTES_OUT_NO_HEADER,
+			FORMAT_HEADER,
+
+			FORMAT_REMOTE_ADDR,
+			FORMAT_LOCAL_ADDR,
+			FORMAT_COOKIE,
+			FORMAT_TIME_USED_MS,
+			FORMAT_ENV,
+			FORMAT_FILENAME,
+			FORMAT_REQUEST_PROTOCOL,
+			FORMAT_REQUEST_METHOD,
+			FORMAT_SERVER_PORT,
+			FORMAT_QUERY_STRING,
+			FORMAT_TIME_USED,
+			FORMAT_URL,
+			FORMAT_SERVER_NAME,
+			FORMAT_HTTP_HOST,
+			FORMAT_CONNECTION_STATUS,
+			FORMAT_BYTES_IN,
+			FORMAT_BYTES_OUT,
+
+			FORMAT_RESPONSE_HEADER
+	} type;
+} format_mapping;
+
+/**
+ *
+ *
+ * "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
+ *
+ */
+
+const format_mapping fmap[] =
+{
+	{ '%', FORMAT_PERCENT },
+	{ 'h', FORMAT_REMOTE_HOST },
+	{ 'l', FORMAT_REMOTE_IDENT },
+	{ 'u', FORMAT_REMOTE_USER },
+	{ 't', FORMAT_TIMESTAMP },
+	{ 'r', FORMAT_REQUEST_LINE },
+	{ 's', FORMAT_STATUS },
+	{ 'b', FORMAT_BYTES_OUT_NO_HEADER },
+	{ 'i', FORMAT_HEADER },
+
+	{ 'a', FORMAT_REMOTE_ADDR },
+	{ 'A', FORMAT_LOCAL_ADDR },
+	{ 'B', FORMAT_BYTES_OUT_NO_HEADER },
+	{ 'C', FORMAT_COOKIE },
+	{ 'D', FORMAT_TIME_USED_MS },
+	{ 'e', FORMAT_ENV },
+	{ 'f', FORMAT_FILENAME },
+	{ 'H', FORMAT_REQUEST_PROTOCOL },
+	{ 'm', FORMAT_REQUEST_METHOD },
+	{ 'n', FORMAT_UNSUPPORTED }, /* we have no notes */
+	{ 'p', FORMAT_SERVER_PORT },
+	{ 'P', FORMAT_UNSUPPORTED }, /* we are only one process */
+	{ 'q', FORMAT_QUERY_STRING },
+	{ 'T', FORMAT_TIME_USED },
+	{ 'U', FORMAT_URL }, /* w/o querystring */
+	{ 'v', FORMAT_SERVER_NAME },
+	{ 'V', FORMAT_HTTP_HOST },
+	{ 'X', FORMAT_CONNECTION_STATUS },
+	{ 'I', FORMAT_BYTES_IN },
+	{ 'O', FORMAT_BYTES_OUT },
+
+	{ 'o', FORMAT_RESPONSE_HEADER },
+
+	{ '\0', FORMAT_UNSET }
+};
+
+
+typedef struct {
+	enum { FIELD_UNSET, FIELD_STRING, FIELD_FORMAT } type;
+
+	buffer *string;
+	int field;
+} format_field;
+
+typedef struct {
+	format_field **ptr;
+
+	size_t used;
+	size_t size;
+} format_fields;
+
+typedef struct {
+	buffer *access_logfile;
+	buffer *format;
+	unsigned short use_syslog;
+
+
+	int    log_access_fd;
+	time_t last_generated_accesslog_ts;
+	time_t *last_generated_accesslog_ts_ptr;
+
+
+	buffer *access_logbuffer;
+	buffer *ts_accesslog_str;
+
+	format_fields *parsed_format;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	plugin_config **config_storage;
+	plugin_config conf;
+} plugin_data;
+
+INIT_FUNC(mod_accesslog_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	return p;
+}
+
+int accesslog_parse_format(server *srv, format_fields *fields, buffer *format) {
+	size_t i, j, k = 0, start = 0;
+
+	if (format->used == 0) return -1;
+
+	for (i = 0; i < format->used - 1; i++) {
+		switch(format->ptr[i]) {
+		case '%':
+			if (i > 0 && start != i) {
+				/* copy the string before this % */
+				if (fields->size == 0) {
+					fields->size = 16;
+					fields->used = 0;
+					fields->ptr = malloc(fields->size * sizeof(format_fields * ));
+				} else if (fields->used == fields->size) {
+					fields->size += 16;
+					fields->ptr = realloc(fields->ptr, fields->size * sizeof(format_fields * ));
+				}
+
+				fields->ptr[fields->used] = malloc(sizeof(format_fields));
+				fields->ptr[fields->used]->type = FIELD_STRING;
+				fields->ptr[fields->used]->string = buffer_init();
+
+				buffer_copy_string_len(fields->ptr[fields->used]->string, format->ptr + start, i - start);
+
+				fields->used++;
+			}
+
+			/* we need a new field */
+
+			if (fields->size == 0) {
+				fields->size = 16;
+				fields->used = 0;
+				fields->ptr = malloc(fields->size * sizeof(format_fields * ));
+			} else if (fields->used == fields->size) {
+				fields->size += 16;
+				fields->ptr = realloc(fields->ptr, fields->size * sizeof(format_fields * ));
+			}
+
+			/* search for the terminating command */
+			switch (format->ptr[i+1]) {
+			case '>':
+			case '<':
+				/* after the } has to be a character */
+				if (format->ptr[i+2] == '\0') {
+					log_error_write(srv, __FILE__, __LINE__, "s", "%< and %> have to be followed by a format-specifier");
+					return -1;
+				}
+
+
+				for (j = 0; fmap[j].key != '\0'; j++) {
+					if (fmap[j].key != format->ptr[i+2]) continue;
+
+					/* found key */
+
+					fields->ptr[fields->used] = malloc(sizeof(format_fields));
+					fields->ptr[fields->used]->type = FIELD_FORMAT;
+					fields->ptr[fields->used]->field = fmap[j].type;
+					fields->ptr[fields->used]->string = NULL;
+
+					fields->used++;
+
+					break;
+				}
+
+				if (fmap[j].key == '\0') {
+					log_error_write(srv, __FILE__, __LINE__, "s", "%< and %> have to be followed by a valid format-specifier");
+					return -1;
+				}
+
+				start = i + 3;
+				i = start - 1; /* skip the string */
+
+				break;
+			case '{':
+				/* go forward to } */
+
+				for (k = i+2; k < format->used - 1; k++) {
+					if (format->ptr[k] == '}') break;
+				}
+
+				if (k == format->used - 1) {
+					log_error_write(srv, __FILE__, __LINE__, "s", "%{ has to be terminated by a }");
+					return -1;
+				}
+
+				/* after the } has to be a character */
+				if (format->ptr[k+1] == '\0') {
+					log_error_write(srv, __FILE__, __LINE__, "s", "%{...} has to be followed by a format-specifier");
+					return -1;
+				}
+
+				if (k == i + 2) {
+					log_error_write(srv, __FILE__, __LINE__, "s", "%{...} has to be contain a string");
+					return -1;
+				}
+
+				for (j = 0; fmap[j].key != '\0'; j++) {
+					if (fmap[j].key != format->ptr[k+1]) continue;
+
+					/* found key */
+
+					fields->ptr[fields->used] = malloc(sizeof(format_fields));
+					fields->ptr[fields->used]->type = FIELD_FORMAT;
+					fields->ptr[fields->used]->field = fmap[j].type;
+					fields->ptr[fields->used]->string = buffer_init();
+
+					buffer_copy_string_len(fields->ptr[fields->used]->string, format->ptr + i + 2, k - (i + 2));
+
+					fields->used++;
+
+					break;
+				}
+
+				if (fmap[j].key == '\0') {
+					log_error_write(srv, __FILE__, __LINE__, "s", "%{...} has to be followed by a valid format-specifier");
+					return -1;
+				}
+
+				start = k + 2;
+				i = start - 1; /* skip the string */
+
+				break;
+			default:
+				/* after the % has to be a character */
+				if (format->ptr[i+1] == '\0') {
+					log_error_write(srv, __FILE__, __LINE__, "s", "% has to be followed by a format-specifier");
+					return -1;
+				}
+
+				for (j = 0; fmap[j].key != '\0'; j++) {
+					if (fmap[j].key != format->ptr[i+1]) continue;
+
+					/* found key */
+
+					fields->ptr[fields->used] = malloc(sizeof(format_fields));
+					fields->ptr[fields->used]->type = FIELD_FORMAT;
+					fields->ptr[fields->used]->field = fmap[j].type;
+					fields->ptr[fields->used]->string = NULL;
+
+					fields->used++;
+
+					break;
+				}
+
+				if (fmap[j].key == '\0') {
+					log_error_write(srv, __FILE__, __LINE__, "s", "% has to be followed by a valid format-specifier");
+					return -1;
+				}
+
+				start = i + 2;
+				i = start - 1; /* skip the string */
+
+				break;
+			}
+
+			break;
+		}
+	}
+
+	if (start < i) {
+		/* copy the string */
+		if (fields->size == 0) {
+			fields->size = 16;
+			fields->used = 0;
+			fields->ptr = malloc(fields->size * sizeof(format_fields * ));
+		} else if (fields->used == fields->size) {
+			fields->size += 16;
+			fields->ptr = realloc(fields->ptr, fields->size * sizeof(format_fields * ));
+		}
+
+		fields->ptr[fields->used] = malloc(sizeof(format_fields));
+		fields->ptr[fields->used]->type = FIELD_STRING;
+		fields->ptr[fields->used]->string = buffer_init();
+
+		buffer_copy_string_len(fields->ptr[fields->used]->string, format->ptr + start, i - start);
+
+		fields->used++;
+	}
+
+	return 0;
+}
+
+FREE_FUNC(mod_accesslog_free) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			if (s->access_logbuffer->used) {
+				if (s->use_syslog) {
+# ifdef HAVE_SYSLOG_H
+					if (s->access_logbuffer->used > 2) {
+						syslog(LOG_INFO, "%*s", s->access_logbuffer->used - 2, s->access_logbuffer->ptr);
+					}
+# endif
+				} else if (s->log_access_fd != -1) {
+					write(s->log_access_fd, s->access_logbuffer->ptr, s->access_logbuffer->used - 1);
+				}
+			}
+
+			if (s->log_access_fd != -1) close(s->log_access_fd);
+
+			buffer_free(s->ts_accesslog_str);
+			buffer_free(s->access_logbuffer);
+			buffer_free(s->format);
+			buffer_free(s->access_logfile);
+
+			if (s->parsed_format) {
+				size_t j;
+				for (j = 0; j < s->parsed_format->used; j++) {
+					if (s->parsed_format->ptr[j]->string) buffer_free(s->parsed_format->ptr[j]->string);
+					free(s->parsed_format->ptr[j]);
+				}
+				free(s->parsed_format->ptr);
+				free(s->parsed_format);
+			}
+
+			free(s);
+		}
+
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+SETDEFAULTS_FUNC(log_access_open) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "accesslog.filename",             NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "accesslog.use-syslog",           NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },
+		{ "accesslog.format",               NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ NULL,                             NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->access_logfile = buffer_init();
+		s->format = buffer_init();
+		s->access_logbuffer = buffer_init();
+		s->ts_accesslog_str = buffer_init();
+		s->log_access_fd = -1;
+		s->last_generated_accesslog_ts = 0;
+		s->last_generated_accesslog_ts_ptr = &(s->last_generated_accesslog_ts);
+
+
+		cv[0].destination = s->access_logfile;
+		cv[1].destination = &(s->use_syslog);
+		cv[2].destination = s->format;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		if (i == 0 && buffer_is_empty(s->format)) {
+			/* set a default logfile string */
+
+			buffer_copy_string(s->format, "%h %V %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"");
+		}
+
+		/* parse */
+
+		if (s->format->used) {
+			s->parsed_format = calloc(1, sizeof(*(s->parsed_format)));
+
+			if (-1 == accesslog_parse_format(srv, s->parsed_format, s->format)) {
+
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"parsing accesslog-definition failed:", s->format);
+
+				return HANDLER_ERROR;
+			}
+#if 0
+			/* debugging */
+			for (j = 0; j < s->parsed_format->used; j++) {
+				switch (s->parsed_format->ptr[j]->type) {
+				case FIELD_FORMAT:
+					log_error_write(srv, __FILE__, __LINE__, "ssds",
+							"config:", "format", s->parsed_format->ptr[j]->field,
+							s->parsed_format->ptr[j]->string ?
+							s->parsed_format->ptr[j]->string->ptr : "" );
+					break;
+				case FIELD_STRING:
+					log_error_write(srv, __FILE__, __LINE__, "ssbs", "config:", "string '", s->parsed_format->ptr[j]->string, "'");
+					break;
+				default:
+					break;
+				}
+			}
+#endif
+		}
+
+		if (s->use_syslog) {
+			/* ignore the next checks */
+			continue;
+		}
+
+		if (buffer_is_empty(s->access_logfile)) continue;
+
+		if (s->access_logfile->ptr[0] == '|') {
+#ifdef HAVE_FORK
+			/* create write pipe and spawn process */
+
+			int to_log_fds[2];
+			pid_t pid;
+
+			if (pipe(to_log_fds)) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "pipe failed: ", strerror(errno));
+				return HANDLER_ERROR;
+			}
+
+			/* fork, execve */
+			switch (pid = fork()) {
+			case 0:
+				/* child */
+
+				close(STDIN_FILENO);
+				dup2(to_log_fds[0], STDIN_FILENO);
+				close(to_log_fds[0]);
+				/* not needed */
+				close(to_log_fds[1]);
+
+				/* we don't need the client socket */
+				for (i = 3; i < 256; i++) {
+					close(i);
+				}
+
+				/* exec the log-process (skip the | )
+				 *
+				 */
+
+				execl("/bin/sh", "sh", "-c", s->access_logfile->ptr + 1, (char *)NULL);
+
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"spawning log-process failed: ", strerror(errno),
+						s->access_logfile->ptr + 1);
+
+				exit(-1);
+				break;
+			case -1:
+				/* error */
+				log_error_write(srv, __FILE__, __LINE__, "ss", "fork failed: ", strerror(errno));
+				break;
+			default:
+				close(to_log_fds[0]);
+
+				s->log_access_fd = to_log_fds[1];
+
+				break;
+			}
+#else
+			return -1;
+#endif
+		} else if (-1 == (s->log_access_fd =
+				  open(s->access_logfile->ptr, O_APPEND | O_WRONLY | O_CREAT | O_LARGEFILE, 0644))) {
+
+			log_error_write(srv, __FILE__, __LINE__, "ssb",
+					"opening access-log failed:",
+					strerror(errno), s->access_logfile);
+
+			return HANDLER_ERROR;
+		}
+		fcntl(s->log_access_fd, F_SETFD, FD_CLOEXEC);
+
+	}
+
+	return HANDLER_GO_ON;
+}
+
+SIGHUP_FUNC(log_access_cycle) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	if (!p->config_storage) return HANDLER_GO_ON;
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s = p->config_storage[i];
+
+		if (s->access_logbuffer->used) {
+			if (s->use_syslog) {
+#ifdef HAVE_SYSLOG_H
+				if (s->access_logbuffer->used > 2) {
+					/* syslog appends a \n on its own */
+					syslog(LOG_INFO, "%*s", s->access_logbuffer->used - 2, s->access_logbuffer->ptr);
+				}
+#endif
+			} else if (s->log_access_fd != -1) {
+				write(s->log_access_fd, s->access_logbuffer->ptr, s->access_logbuffer->used - 1);
+			}
+
+			buffer_reset(s->access_logbuffer);
+		}
+
+		if (s->use_syslog == 0 &&
+		    !buffer_is_empty(s->access_logfile) &&
+		    s->access_logfile->ptr[0] != '|') {
+
+			close(s->log_access_fd);
+
+			if (-1 == (s->log_access_fd =
+				   open(s->access_logfile->ptr, O_APPEND | O_WRONLY | O_CREAT | O_LARGEFILE, 0644))) {
+
+				log_error_write(srv, __FILE__, __LINE__, "ss", "cycling access-log failed:", strerror(errno));
+
+				return HANDLER_ERROR;
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_accesslog_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(access_logfile);
+	PATCH(format);
+	PATCH(log_access_fd);
+	PATCH(last_generated_accesslog_ts_ptr);
+	PATCH(access_logbuffer);
+	PATCH(ts_accesslog_str);
+	PATCH(parsed_format);
+	PATCH(use_syslog);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("accesslog.filename"))) {
+				PATCH(access_logfile);
+				PATCH(log_access_fd);
+				PATCH(last_generated_accesslog_ts_ptr);
+				PATCH(access_logbuffer);
+				PATCH(ts_accesslog_str);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("accesslog.format"))) {
+				PATCH(format);
+				PATCH(parsed_format);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("accesslog.use-syslog"))) {
+				PATCH(use_syslog);
+				PATCH(last_generated_accesslog_ts_ptr);
+				PATCH(access_logbuffer);
+				PATCH(ts_accesslog_str);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+REQUESTDONE_FUNC(log_access_write) {
+	plugin_data *p = p_d;
+	buffer *b;
+	size_t j;
+
+	int newts = 0;
+	data_string *ds;
+
+	mod_accesslog_patch_connection(srv, con, p);
+
+	b = p->conf.access_logbuffer;
+	if (b->used == 0) {
+		buffer_copy_string(b, "");
+	}
+
+	for (j = 0; j < p->conf.parsed_format->used; j++) {
+		switch(p->conf.parsed_format->ptr[j]->type) {
+		case FIELD_STRING:
+			buffer_append_string_buffer(b, p->conf.parsed_format->ptr[j]->string);
+			break;
+		case FIELD_FORMAT:
+			switch(p->conf.parsed_format->ptr[j]->field) {
+			case FORMAT_TIMESTAMP:
+
+				/* cache the generated timestamp */
+				if (srv->cur_ts != *(p->conf.last_generated_accesslog_ts_ptr)) {
+					struct tm tm;
+#if defined(HAVE_STRUCT_TM_GMTOFF)
+					long scd, hrs, min;
+#endif
+
+					buffer_prepare_copy(p->conf.ts_accesslog_str, 255);
+#if defined(HAVE_STRUCT_TM_GMTOFF)
+# ifdef HAVE_LOCALTIME_R
+					localtime_r(&(srv->cur_ts), &tm);
+					strftime(p->conf.ts_accesslog_str->ptr, p->conf.ts_accesslog_str->size - 1, "[%d/%b/%Y:%H:%M:%S ", &tm);
+# else
+					strftime(p->conf.ts_accesslog_str->ptr, p->conf.ts_accesslog_str->size - 1, "[%d/%b/%Y:%H:%M:%S ", localtime_r(&(srv->cur_ts)));
+# endif
+					p->conf.ts_accesslog_str->used = strlen(p->conf.ts_accesslog_str->ptr) + 1;
+
+					buffer_append_string(p->conf.ts_accesslog_str, tm.tm_gmtoff >= 0 ? "+" : "-");
+
+					scd = abs(tm.tm_gmtoff);
+					hrs = scd / 3600;
+					min = (scd % 3600) / 60;
+
+					/* hours */
+					if (hrs < 10) buffer_append_string(p->conf.ts_accesslog_str, "0");
+					buffer_append_long(p->conf.ts_accesslog_str, hrs);
+
+					if (min < 10) buffer_append_string(p->conf.ts_accesslog_str, "0");
+					buffer_append_long(p->conf.ts_accesslog_str, min);
+					BUFFER_APPEND_STRING_CONST(p->conf.ts_accesslog_str, "]");
+#else
+#ifdef HAVE_GMTIME_R
+					gmtime_r(&(srv->cur_ts), &tm);
+					strftime(p->conf.ts_accesslog_str->ptr, p->conf.ts_accesslog_str->size - 1, "[%d/%b/%Y:%H:%M:%S +0000]", &tm);
+#else
+					strftime(p->conf.ts_accesslog_str->ptr, p->conf.ts_accesslog_str->size - 1, "[%d/%b/%Y:%H:%M:%S +0000]", gmtime(&(srv->cur_ts)));
+#endif
+					p->conf.ts_accesslog_str->used = strlen(p->conf.ts_accesslog_str->ptr) + 1;
+#endif
+
+					*(p->conf.last_generated_accesslog_ts_ptr) = srv->cur_ts;
+					newts = 1;
+				}
+
+				buffer_append_string_buffer(b, p->conf.ts_accesslog_str);
+
+				break;
+			case FORMAT_REMOTE_HOST:
+
+				/* handle inet_ntop cache */
+
+				buffer_append_string(b, inet_ntop_cache_get_ip(srv, &(con->dst_addr)));
+
+				break;
+			case FORMAT_REMOTE_IDENT:
+				/* ident */
+				BUFFER_APPEND_STRING_CONST(b, "-");
+				break;
+			case FORMAT_REMOTE_USER:
+				if (con->authed_user->used > 1) {
+					buffer_append_string_buffer(b, con->authed_user);
+				} else {
+					BUFFER_APPEND_STRING_CONST(b, "-");
+				}
+				break;
+			case FORMAT_REQUEST_LINE:
+				if (con->request.request_line->used) {
+					buffer_append_string_buffer(b, con->request.request_line);
+				}
+				break;
+			case FORMAT_STATUS:
+				buffer_append_long(b, con->http_status);
+				break;
+
+			case FORMAT_BYTES_OUT_NO_HEADER:
+				if (con->bytes_written > 0) {
+					buffer_append_off_t(b,
+							    con->bytes_written - con->bytes_header <= 0 ? 0 : con->bytes_written - con->bytes_header);
+				} else {
+					BUFFER_APPEND_STRING_CONST(b, "-");
+				}
+				break;
+			case FORMAT_HEADER:
+				if (NULL != (ds = (data_string *)array_get_element(con->request.headers, p->conf.parsed_format->ptr[j]->string->ptr))) {
+					buffer_append_string_buffer(b, ds->value);
+				} else {
+					BUFFER_APPEND_STRING_CONST(b, "-");
+				}
+				break;
+			case FORMAT_RESPONSE_HEADER:
+				if (NULL != (ds = (data_string *)array_get_element(con->response.headers, p->conf.parsed_format->ptr[j]->string->ptr))) {
+					buffer_append_string_buffer(b, ds->value);
+				} else {
+					BUFFER_APPEND_STRING_CONST(b, "-");
+				}
+				break;
+			case FORMAT_FILENAME:
+				if (con->physical.path->used > 1) {
+					buffer_append_string_buffer(b, con->physical.path);
+				} else {
+					BUFFER_APPEND_STRING_CONST(b, "-");
+				}
+				break;
+			case FORMAT_BYTES_OUT:
+				if (con->bytes_written > 0) {
+					buffer_append_off_t(b, con->bytes_written);
+				} else {
+					BUFFER_APPEND_STRING_CONST(b, "-");
+				}
+				break;
+			case FORMAT_BYTES_IN:
+				if (con->bytes_read > 0) {
+					buffer_append_off_t(b, con->bytes_read);
+				} else {
+					BUFFER_APPEND_STRING_CONST(b, "-");
+				}
+				break;
+			case FORMAT_TIME_USED:
+				buffer_append_long(b, srv->cur_ts - con->request_start);
+				break;
+			case FORMAT_SERVER_NAME:
+				if (con->server_name->used > 1) {
+					buffer_append_string_buffer(b, con->server_name);
+				} else {
+					BUFFER_APPEND_STRING_CONST(b, "-");
+				}
+				break;
+			case FORMAT_HTTP_HOST:
+				if (con->uri.authority->used > 1) {
+					buffer_append_string_buffer(b, con->uri.authority);
+				} else {
+					BUFFER_APPEND_STRING_CONST(b, "-");
+				}
+				break;
+			case FORMAT_REQUEST_PROTOCOL:
+				buffer_append_string(b,
+						     con->request.http_version == HTTP_VERSION_1_1 ? "HTTP/1.1" : "HTTP/1.0");
+				break;
+			case FORMAT_REQUEST_METHOD:
+				buffer_append_string(b, get_http_method_name(con->request.http_method));
+				break;
+			case FORMAT_PERCENT:
+				buffer_append_string(b, "%");
+				break;
+			case FORMAT_SERVER_PORT:
+				buffer_append_long(b, srv->srvconf.port);
+				break;
+			case FORMAT_QUERY_STRING:
+				buffer_append_string_buffer(b, con->uri.query);
+				break;
+			case FORMAT_URL:
+				buffer_append_string_buffer(b, con->uri.path_raw);
+				break;
+			case FORMAT_CONNECTION_STATUS:
+				switch(con->keep_alive) {
+				case 0: buffer_append_string(b, "-"); break;
+				default: buffer_append_string(b, "+"); break;
+				}
+				break;
+			default:
+				/*
+				 { 'a', FORMAT_REMOTE_ADDR },
+				 { 'A', FORMAT_LOCAL_ADDR },
+				 { 'C', FORMAT_COOKIE },
+				 { 'D', FORMAT_TIME_USED_MS },
+				 { 'e', FORMAT_ENV },
+				 */
+
+				break;
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
+	BUFFER_APPEND_STRING_CONST(b, "\n");
+
+	if (p->conf.use_syslog ||  /* syslog doesn't cache */
+	    (p->conf.access_logfile->used && p->conf.access_logfile->ptr[0] == '|') || /* pipes don't cache */
+	    newts ||
+	    b->used > BUFFER_MAX_REUSE_SIZE) {
+		if (p->conf.use_syslog) {
+#ifdef HAVE_SYSLOG_H
+			if (b->used > 2) {
+				/* syslog appends a \n on its own */
+				syslog(LOG_INFO, "%*s", b->used - 2, b->ptr);
+			}
+#endif
+		} else if (p->conf.log_access_fd != -1) {
+			write(p->conf.log_access_fd, b->ptr, b->used - 1);
+		}
+		buffer_reset(b);
+	}
+
+	return HANDLER_GO_ON;
+}
+
+
+int mod_accesslog_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("accesslog");
+
+	p->init        = mod_accesslog_init;
+	p->set_defaults= log_access_open;
+	p->cleanup     = mod_accesslog_free;
+
+	p->handle_request_done  = log_access_write;
+	p->handle_sighup        = log_access_cycle;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_alias.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_alias.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_alias.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,203 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+/* plugin config for all request/connections */
+typedef struct {
+	array *alias;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_alias_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_alias_free) {
+	plugin_data *p = p_d;
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if(!s) continue;
+
+			array_free(s->alias);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_alias_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "alias.url",                  NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ NULL,                         NULL, T_CONFIG_UNSET,  T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->alias = array_init();
+		cv[0].destination = s->alias;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+		if (s->alias->used >= 2) {
+			const array *a = s->alias;
+			size_t j, k;
+
+			for (j = 0; j < a->used; j ++) {
+				const buffer *prefix = a->data[a->sorted[j]]->key;
+				for (k = j + 1; k < a->used; k ++) {
+					const buffer *key = a->data[a->sorted[k]]->key;
+
+					if (key->used < prefix->used) {
+						break;
+					}
+					if (memcmp(key->ptr, prefix->ptr, prefix->used - 1) != 0) {
+						break;
+					}
+					/* ok, they have same prefix. check position */
+					if (a->sorted[j] < a->sorted[k]) {
+						fprintf(stderr, "url.alias: `%s' will never match as `%s' matched first\n",
+								key->ptr,
+								prefix->ptr);
+						return HANDLER_ERROR;
+					}
+				}
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_alias_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(alias);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("alias.url"))) {
+				PATCH(alias);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+PHYSICALPATH_FUNC(mod_alias_physical_handler) {
+	plugin_data *p = p_d;
+	int uri_len, basedir_len;
+	char *uri_ptr;
+	size_t k;
+
+	if (con->physical.path->used == 0) return HANDLER_GO_ON;
+
+	mod_alias_patch_connection(srv, con, p);
+
+	/* not to include the tailing slash */
+	basedir_len = (con->physical.basedir->used - 1) - 1;
+	uri_len = con->physical.path->used - 1 - basedir_len;
+	uri_ptr = con->physical.path->ptr + basedir_len;
+
+	for (k = 0; k < p->conf.alias->used; k++) {
+		data_string *ds = (data_string *)p->conf.alias->data[k];
+		int alias_len = ds->key->used - 1;
+
+		if (alias_len > uri_len) continue;
+		if (ds->key->used == 0) continue;
+
+		if (0 == (con->conf.force_lowercase_filenames ?
+					strncasecmp(uri_ptr, ds->key->ptr, alias_len) :
+					strncmp(uri_ptr, ds->key->ptr, alias_len))) {
+			/* matched */
+
+			buffer_copy_string_buffer(con->physical.basedir, ds->value);
+			buffer_copy_string_buffer(srv->tmp_buf, ds->value);
+			buffer_append_string(srv->tmp_buf, uri_ptr + alias_len);
+			buffer_copy_string_buffer(con->physical.path, srv->tmp_buf);
+
+			return HANDLER_GO_ON;
+		}
+	}
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_alias_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("alias");
+
+	p->init           = mod_alias_init;
+	p->handle_physical= mod_alias_physical_handler;
+	p->set_defaults   = mod_alias_set_defaults;
+	p->cleanup        = mod_alias_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_auth.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_auth.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_auth.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,614 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "plugin.h"
+#include "http_auth.h"
+#include "log.h"
+#include "response.h"
+
+handler_t auth_ldap_init(server *srv, mod_auth_plugin_config *s);
+
+
+/**
+ * the basic and digest auth framework
+ *
+ * - config handling
+ * - protocol handling
+ *
+ * http_auth.c
+ * http_auth_digest.c
+ *
+ * do the real work
+ */
+
+INIT_FUNC(mod_auth_init) {
+	mod_auth_plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->tmp_buf = buffer_init();
+
+	p->auth_user = buffer_init();
+#ifdef USE_LDAP
+	p->ldap_filter = buffer_init();
+#endif
+
+	return p;
+}
+
+FREE_FUNC(mod_auth_free) {
+	mod_auth_plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	buffer_free(p->tmp_buf);
+	buffer_free(p->auth_user);
+#ifdef USE_LDAP
+	buffer_free(p->ldap_filter);
+#endif
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			mod_auth_plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			array_free(s->auth_require);
+			buffer_free(s->auth_plain_groupfile);
+			buffer_free(s->auth_plain_userfile);
+			buffer_free(s->auth_htdigest_userfile);
+			buffer_free(s->auth_htpasswd_userfile);
+			buffer_free(s->auth_backend_conf);
+
+			buffer_free(s->auth_ldap_hostname);
+			buffer_free(s->auth_ldap_basedn);
+			buffer_free(s->auth_ldap_binddn);
+			buffer_free(s->auth_ldap_bindpw);
+			buffer_free(s->auth_ldap_filter);
+			buffer_free(s->auth_ldap_cafile);
+
+#ifdef USE_LDAP
+			buffer_free(s->ldap_filter_pre);
+			buffer_free(s->ldap_filter_post);
+
+			if (s->ldap) ldap_unbind_s(s->ldap);
+#endif
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_auth_patch_connection(server *srv, connection *con, mod_auth_plugin_data *p) {
+	size_t i, j;
+	mod_auth_plugin_config *s = p->config_storage[0];
+
+	PATCH(auth_backend);
+	PATCH(auth_plain_groupfile);
+	PATCH(auth_plain_userfile);
+	PATCH(auth_htdigest_userfile);
+	PATCH(auth_htpasswd_userfile);
+	PATCH(auth_require);
+	PATCH(auth_debug);
+	PATCH(auth_ldap_hostname);
+	PATCH(auth_ldap_basedn);
+	PATCH(auth_ldap_binddn);
+	PATCH(auth_ldap_bindpw);
+	PATCH(auth_ldap_filter);
+	PATCH(auth_ldap_cafile);
+	PATCH(auth_ldap_starttls);
+	PATCH(auth_ldap_allow_empty_pw);
+#ifdef USE_LDAP
+	PATCH(ldap);
+	PATCH(ldap_filter_pre);
+	PATCH(ldap_filter_post);
+#endif
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend"))) {
+				PATCH(auth_backend);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.plain.groupfile"))) {
+				PATCH(auth_plain_groupfile);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.plain.userfile"))) {
+				PATCH(auth_plain_userfile);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.htdigest.userfile"))) {
+				PATCH(auth_htdigest_userfile);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.htpasswd.userfile"))) {
+				PATCH(auth_htpasswd_userfile);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.require"))) {
+				PATCH(auth_require);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.debug"))) {
+				PATCH(auth_debug);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.hostname"))) {
+				PATCH(auth_ldap_hostname);
+#ifdef USE_LDAP
+				PATCH(ldap);
+				PATCH(ldap_filter_pre);
+				PATCH(ldap_filter_post);
+#endif
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.base-dn"))) {
+				PATCH(auth_ldap_basedn);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.filter"))) {
+				PATCH(auth_ldap_filter);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.ca-file"))) {
+				PATCH(auth_ldap_cafile);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.starttls"))) {
+				PATCH(auth_ldap_starttls);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("auth.backend.ldap.allow-empty-pw"))) {
+				PATCH(auth_ldap_allow_empty_pw);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+static handler_t mod_auth_uri_handler(server *srv, connection *con, void *p_d) {
+	size_t k;
+	int auth_required = 0, auth_satisfied = 0;
+	char *http_authorization = NULL;
+	data_string *ds;
+	mod_auth_plugin_data *p = p_d;
+	array *req;
+
+	/* select the right config */
+	mod_auth_patch_connection(srv, con, p);
+
+	if (p->conf.auth_require == NULL) return HANDLER_GO_ON;
+
+	/*
+	 * AUTH
+	 *
+	 */
+
+	/* do we have to ask for auth ? */
+
+	auth_required = 0;
+	auth_satisfied = 0;
+
+	/* search auth-directives for path */
+	for (k = 0; k < p->conf.auth_require->used; k++) {
+		buffer *require = p->conf.auth_require->data[k]->key;
+
+		if (require->used == 0) continue;
+		if (con->uri.path->used < require->used) continue;
+
+		/* if we have a case-insensitive FS we have to lower-case the URI here too */
+
+		if (con->conf.force_lowercase_filenames) {
+			if (0 == strncasecmp(con->uri.path->ptr, require->ptr, require->used - 1)) {
+				auth_required = 1;
+				break;
+			}
+		} else {
+			if (0 == strncmp(con->uri.path->ptr, require->ptr, require->used - 1)) {
+				auth_required = 1;
+				break;
+			}
+		}
+	}
+
+	/* nothing to do for us */
+	if (auth_required == 0) return HANDLER_GO_ON;
+
+	req = ((data_array *)(p->conf.auth_require->data[k]))->value;
+
+	/* try to get Authorization-header */
+
+	if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Authorization"))) {
+		http_authorization = ds->value->ptr;
+	}
+
+	if (ds && ds->value && ds->value->used) {
+		char *auth_realm;
+		data_string *method;
+
+		method = (data_string *)array_get_element(req, "method");
+
+		/* parse auth-header */
+		if (NULL != (auth_realm = strchr(http_authorization, ' '))) {
+			int auth_type_len = auth_realm - http_authorization;
+
+			if ((auth_type_len == 5) &&
+			    (0 == strncasecmp(http_authorization, "Basic", auth_type_len))) {
+
+				if (0 == strcmp(method->value->ptr, "basic")) {
+					auth_satisfied = http_auth_basic_check(srv, con, p, req, con->uri.path, auth_realm+1);
+				}
+			} else if ((auth_type_len == 6) &&
+				   (0 == strncasecmp(http_authorization, "Digest", auth_type_len))) {
+				if (0 == strcmp(method->value->ptr, "digest")) {
+					if (-1 == (auth_satisfied = http_auth_digest_check(srv, con, p, req, con->uri.path, auth_realm+1))) {
+						con->http_status = 400;
+
+						/* a field was missing */
+
+						return HANDLER_FINISHED;
+					}
+				}
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"unknown authentification type:",
+						http_authorization);
+			}
+		}
+	}
+
+	if (!auth_satisfied) {
+		data_string *method, *realm;
+		method = (data_string *)array_get_element(req, "method");
+		realm = (data_string *)array_get_element(req, "realm");
+
+		con->http_status = 401;
+
+		if (0 == strcmp(method->value->ptr, "basic")) {
+			buffer_copy_string(p->tmp_buf, "Basic realm=\"");
+			buffer_append_string_buffer(p->tmp_buf, realm->value);
+			buffer_append_string(p->tmp_buf, "\"");
+
+			response_header_insert(srv, con, CONST_STR_LEN("WWW-Authenticate"), CONST_BUF_LEN(p->tmp_buf));
+		} else if (0 == strcmp(method->value->ptr, "digest")) {
+			char hh[33];
+			http_auth_digest_generate_nonce(srv, p, srv->tmp_buf, hh);
+
+			buffer_copy_string(p->tmp_buf, "Digest realm=\"");
+			buffer_append_string_buffer(p->tmp_buf, realm->value);
+			buffer_append_string(p->tmp_buf, "\", nonce=\"");
+			buffer_append_string(p->tmp_buf, hh);
+			buffer_append_string(p->tmp_buf, "\", qop=\"auth\"");
+
+			response_header_insert(srv, con, CONST_STR_LEN("WWW-Authenticate"), CONST_BUF_LEN(p->tmp_buf));
+		} else {
+			/* evil */
+		}
+		return HANDLER_FINISHED;
+	} else {
+		/* the REMOTE_USER header */
+
+		buffer_copy_string_buffer(con->authed_user, p->auth_user);
+	}
+
+	return HANDLER_GO_ON;
+}
+
+SETDEFAULTS_FUNC(mod_auth_set_defaults) {
+	mod_auth_plugin_data *p = p_d;
+	size_t i;
+
+	config_values_t cv[] = {
+		{ "auth.backend",                   NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 0 */
+		{ "auth.backend.plain.groupfile",   NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "auth.backend.plain.userfile",    NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "auth.require",                   NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION },
+		{ "auth.backend.ldap.hostname",     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "auth.backend.ldap.base-dn",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "auth.backend.ldap.filter",       NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "auth.backend.ldap.ca-file",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "auth.backend.ldap.starttls",     NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },
+ 		{ "auth.backend.ldap.bind-dn",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+ 		{ "auth.backend.ldap.bind-pw",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 10 */
+		{ "auth.backend.ldap.allow-empty-pw",     NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },
+		{ "auth.backend.htdigest.userfile", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "auth.backend.htpasswd.userfile", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "auth.debug",                     NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },  /* 13 */
+		{ NULL,                             NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		mod_auth_plugin_config *s;
+		size_t n;
+		data_array *da;
+		array *ca;
+
+		s = calloc(1, sizeof(mod_auth_plugin_config));
+		s->auth_plain_groupfile = buffer_init();
+		s->auth_plain_userfile = buffer_init();
+		s->auth_htdigest_userfile = buffer_init();
+		s->auth_htpasswd_userfile = buffer_init();
+		s->auth_backend_conf = buffer_init();
+
+		s->auth_ldap_hostname = buffer_init();
+		s->auth_ldap_basedn = buffer_init();
+		s->auth_ldap_binddn = buffer_init();
+		s->auth_ldap_bindpw = buffer_init();
+		s->auth_ldap_filter = buffer_init();
+		s->auth_ldap_cafile = buffer_init();
+		s->auth_ldap_starttls = 0;
+		s->auth_debug = 0;
+
+		s->auth_require = array_init();
+
+#ifdef USE_LDAP
+		s->ldap_filter_pre = buffer_init();
+		s->ldap_filter_post = buffer_init();
+		s->ldap = NULL;
+#endif
+
+		cv[0].destination = s->auth_backend_conf;
+		cv[1].destination = s->auth_plain_groupfile;
+		cv[2].destination = s->auth_plain_userfile;
+		cv[3].destination = s->auth_require;
+		cv[4].destination = s->auth_ldap_hostname;
+		cv[5].destination = s->auth_ldap_basedn;
+		cv[6].destination = s->auth_ldap_filter;
+		cv[7].destination = s->auth_ldap_cafile;
+		cv[8].destination = &(s->auth_ldap_starttls);
+		cv[9].destination = s->auth_ldap_binddn;
+		cv[10].destination = s->auth_ldap_bindpw;
+		cv[11].destination = &(s->auth_ldap_allow_empty_pw);
+		cv[12].destination = s->auth_htdigest_userfile;
+		cv[13].destination = s->auth_htpasswd_userfile;
+		cv[14].destination = &(s->auth_debug);
+
+		p->config_storage[i] = s;
+		ca = ((data_config *)srv->config_context->data[i])->value;
+
+		if (0 != config_insert_values_global(srv, ca, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		if (s->auth_backend_conf->used) {
+			if (0 == strcmp(s->auth_backend_conf->ptr, "htpasswd")) {
+				s->auth_backend = AUTH_BACKEND_HTPASSWD;
+			} else if (0 == strcmp(s->auth_backend_conf->ptr, "htdigest")) {
+				s->auth_backend = AUTH_BACKEND_HTDIGEST;
+			} else if (0 == strcmp(s->auth_backend_conf->ptr, "plain")) {
+				s->auth_backend = AUTH_BACKEND_PLAIN;
+			} else if (0 == strcmp(s->auth_backend_conf->ptr, "ldap")) {
+				s->auth_backend = AUTH_BACKEND_LDAP;
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sb", "auth.backend not supported:", s->auth_backend_conf);
+
+				return HANDLER_ERROR;
+			}
+		}
+
+		/* no auth.require for this section */
+		if (NULL == (da = (data_array *)array_get_element(ca, "auth.require"))) continue;
+
+		if (da->type != TYPE_ARRAY) continue;
+
+		for (n = 0; n < da->value->used; n++) {
+			size_t m;
+			data_array *da_file = (data_array *)da->value->data[n];
+			const char *method, *realm, *require;
+
+			if (da->value->data[n]->type != TYPE_ARRAY) {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"auth.require should contain an array as in:",
+						"auth.require = ( \"...\" => ( ..., ...) )");
+
+				return HANDLER_ERROR;
+			}
+
+			method = realm = require = NULL;
+
+			for (m = 0; m < da_file->value->used; m++) {
+				if (da_file->value->data[m]->type == TYPE_STRING) {
+					if (0 == strcmp(da_file->value->data[m]->key->ptr, "method")) {
+						method = ((data_string *)(da_file->value->data[m]))->value->ptr;
+					} else if (0 == strcmp(da_file->value->data[m]->key->ptr, "realm")) {
+						realm = ((data_string *)(da_file->value->data[m]))->value->ptr;
+					} else if (0 == strcmp(da_file->value->data[m]->key->ptr, "require")) {
+						require = ((data_string *)(da_file->value->data[m]))->value->ptr;
+					} else {
+						log_error_write(srv, __FILE__, __LINE__, "ssbs",
+							"the field is unknown in:",
+							"auth.require = ( \"...\" => ( ..., -> \"",
+							da_file->value->data[m]->key,
+							"\" <- => \"...\" ) )");
+
+						return HANDLER_ERROR;
+					}
+				} else {
+					log_error_write(srv, __FILE__, __LINE__, "ssbs",
+						"a string was expected for:",
+						"auth.require = ( \"...\" => ( ..., -> \"",
+						da_file->value->data[m]->key,
+						"\" <- => \"...\" ) )");
+
+					return HANDLER_ERROR;
+				}
+			}
+
+			if (method == NULL) {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"the require field is missing in:",
+						"auth.require = ( \"...\" => ( ..., \"method\" => \"...\" ) )");
+				return HANDLER_ERROR;
+			} else {
+				if (0 != strcmp(method, "basic") &&
+				    0 != strcmp(method, "digest")) {
+					log_error_write(srv, __FILE__, __LINE__, "ss",
+							"method has to be either \"basic\" or \"digest\" in",
+							"auth.require = ( \"...\" => ( ..., \"method\" => \"...\") )");
+					return HANDLER_ERROR;
+				}
+			}
+
+			if (realm == NULL) {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"the require field is missing in:",
+						"auth.require = ( \"...\" => ( ..., \"realm\" => \"...\" ) )");
+				return HANDLER_ERROR;
+			}
+
+			if (require == NULL) {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"the require field is missing in:",
+						"auth.require = ( \"...\" => ( ..., \"require\" => \"...\" ) )");
+				return HANDLER_ERROR;
+			}
+
+			if (method && realm && require) {
+				data_string *ds;
+				data_array *a;
+
+				a = data_array_init();
+				buffer_copy_string_buffer(a->key, da_file->key);
+
+				ds = data_string_init();
+
+				buffer_copy_string(ds->key, "method");
+				buffer_copy_string(ds->value, method);
+
+				array_insert_unique(a->value, (data_unset *)ds);
+
+				ds = data_string_init();
+
+				buffer_copy_string(ds->key, "realm");
+				buffer_copy_string(ds->value, realm);
+
+				array_insert_unique(a->value, (data_unset *)ds);
+
+				ds = data_string_init();
+
+				buffer_copy_string(ds->key, "require");
+				buffer_copy_string(ds->value, require);
+
+				array_insert_unique(a->value, (data_unset *)ds);
+
+				array_insert_unique(s->auth_require, (data_unset *)a);
+			}
+		}
+
+		switch(s->auth_backend) {
+		case AUTH_BACKEND_LDAP: {
+			handler_t ret = auth_ldap_init(srv, s);
+			if (ret == HANDLER_ERROR)
+				return (ret);
+                        break;
+		}
+                default:
+                        break;
+                }
+        }
+
+        return HANDLER_GO_ON;
+}
+
+handler_t auth_ldap_init(server *srv, mod_auth_plugin_config *s) {
+#ifdef USE_LDAP
+			int ret;
+#if 0
+			if (s->auth_ldap_basedn->used == 0) {
+				log_error_write(srv, __FILE__, __LINE__, "s", "ldap: auth.backend.ldap.base-dn has to be set");
+
+				return HANDLER_ERROR;
+			}
+#endif
+
+			if (s->auth_ldap_filter->used) {
+				char *dollar;
+
+				/* parse filter */
+
+				if (NULL == (dollar = strchr(s->auth_ldap_filter->ptr, '$'))) {
+					log_error_write(srv, __FILE__, __LINE__, "s", "ldap: auth.backend.ldap.filter is missing a replace-operator '$'");
+
+					return HANDLER_ERROR;
+				}
+
+				buffer_copy_string_len(s->ldap_filter_pre, s->auth_ldap_filter->ptr, dollar - s->auth_ldap_filter->ptr);
+				buffer_copy_string(s->ldap_filter_post, dollar+1);
+			}
+
+			if (s->auth_ldap_hostname->used) {
+				if (NULL == (s->ldap = ldap_init(s->auth_ldap_hostname->ptr, LDAP_PORT))) {
+					log_error_write(srv, __FILE__, __LINE__, "ss", "ldap ...", strerror(errno));
+
+					return HANDLER_ERROR;
+				}
+
+				ret = LDAP_VERSION3;
+				if (LDAP_OPT_SUCCESS != (ret = ldap_set_option(s->ldap, LDAP_OPT_PROTOCOL_VERSION, &ret))) {
+					log_error_write(srv, __FILE__, __LINE__, "ss", "ldap:", ldap_err2string(ret));
+
+					return HANDLER_ERROR;
+				}
+
+				if (s->auth_ldap_starttls) {
+					/* if no CA file is given, it is ok, as we will use encryption
+					 * if the server requires a CAfile it will tell us */
+					if (!buffer_is_empty(s->auth_ldap_cafile)) {
+						if (LDAP_OPT_SUCCESS != (ret = ldap_set_option(NULL, LDAP_OPT_X_TLS_CACERTFILE,
+										s->auth_ldap_cafile->ptr))) {
+							log_error_write(srv, __FILE__, __LINE__, "ss",
+									"Loading CA certificate failed:", ldap_err2string(ret));
+
+							return HANDLER_ERROR;
+						}
+					}
+
+					if (LDAP_OPT_SUCCESS != (ret = ldap_start_tls_s(s->ldap, NULL,  NULL))) {
+						log_error_write(srv, __FILE__, __LINE__, "ss", "ldap startTLS failed:", ldap_err2string(ret));
+
+						return HANDLER_ERROR;
+					}
+				}
+
+
+				/* 1. */
+				if (s->auth_ldap_binddn->used) {
+					if (LDAP_SUCCESS != (ret = ldap_simple_bind_s(s->ldap, s->auth_ldap_binddn->ptr, s->auth_ldap_bindpw->ptr))) {
+						log_error_write(srv, __FILE__, __LINE__, "ss", "ldap:", ldap_err2string(ret));
+
+						return HANDLER_ERROR;
+					}
+				} else {
+					if (LDAP_SUCCESS != (ret = ldap_simple_bind_s(s->ldap, NULL, NULL))) {
+						log_error_write(srv, __FILE__, __LINE__, "ss", "ldap:", ldap_err2string(ret));
+
+						return HANDLER_ERROR;
+					}
+				}
+			}
+#else
+			log_error_write(srv, __FILE__, __LINE__, "s", "no ldap support available");
+			return HANDLER_ERROR;
+#endif
+		return HANDLER_GO_ON;
+}
+
+int mod_auth_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("auth");
+	p->init        = mod_auth_init;
+	p->set_defaults = mod_auth_set_defaults;
+	p->handle_uri_clean = mod_auth_uri_handler;
+	p->cleanup     = mod_auth_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_auth.h
===================================================================
Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_cgi.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_cgi.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_cgi.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1357 @@
+#include <sys/types.h>
+#ifdef __WIN32
+#include <winsock2.h>
+#else
+#include <sys/socket.h>
+#include <sys/wait.h>
+#include <sys/mman.h>
+
+#include <netinet/in.h>
+
+#include <arpa/inet.h>
+#endif
+
+#include <unistd.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fdevent.h>
+#include <signal.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include <stdio.h>
+#include <fcntl.h>
+
+#include "server.h"
+#include "keyvalue.h"
+#include "log.h"
+#include "connections.h"
+#include "joblist.h"
+#include "http_chunk.h"
+
+#include "plugin.h"
+
+#ifdef HAVE_SYS_FILIO_H
+# include <sys/filio.h>
+#endif
+
+enum {EOL_UNSET, EOL_N, EOL_RN};
+
+typedef struct {
+	char **ptr;
+
+	size_t size;
+	size_t used;
+} char_array;
+
+typedef struct {
+	pid_t *ptr;
+	size_t used;
+	size_t size;
+} buffer_pid_t;
+
+typedef struct {
+	array *cgi;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+	buffer_pid_t cgi_pid;
+
+	buffer *tmp_buf;
+	buffer *parse_response;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+typedef struct {
+	pid_t pid;
+	int fd;
+	int fde_ndx; /* index into the fd-event buffer */
+
+	connection *remote_conn;  /* dumb pointer */
+	plugin_data *plugin_data; /* dumb pointer */
+
+	buffer *response;
+	buffer *response_header;
+} handler_ctx;
+
+static handler_ctx * cgi_handler_ctx_init() {
+	handler_ctx *hctx = calloc(1, sizeof(*hctx));
+
+	assert(hctx);
+
+	hctx->response = buffer_init();
+	hctx->response_header = buffer_init();
+
+	return hctx;
+}
+
+static void cgi_handler_ctx_free(handler_ctx *hctx) {
+	buffer_free(hctx->response);
+	buffer_free(hctx->response_header);
+
+	free(hctx);
+}
+
+enum {FDEVENT_HANDLED_UNSET, FDEVENT_HANDLED_FINISHED, FDEVENT_HANDLED_NOT_FINISHED, FDEVENT_HANDLED_ERROR};
+
+INIT_FUNC(mod_cgi_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	assert(p);
+
+	p->tmp_buf = buffer_init();
+	p->parse_response = buffer_init();
+
+	return p;
+}
+
+
+FREE_FUNC(mod_cgi_free) {
+	plugin_data *p = p_d;
+	buffer_pid_t *r = &(p->cgi_pid);
+
+	UNUSED(srv);
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			array_free(s->cgi);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+
+	if (r->ptr) free(r->ptr);
+
+	buffer_free(p->tmp_buf);
+	buffer_free(p->parse_response);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+SETDEFAULTS_FUNC(mod_fastcgi_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "cgi.assign",                  NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET}
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		assert(s);
+
+		s->cgi    = array_init();
+
+		cv[0].destination = s->cgi;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+
+static int cgi_pid_add(server *srv, plugin_data *p, pid_t pid) {
+	int m = -1;
+	size_t i;
+	buffer_pid_t *r = &(p->cgi_pid);
+
+	UNUSED(srv);
+
+	for (i = 0; i < r->used; i++) {
+		if (r->ptr[i] > m) m = r->ptr[i];
+	}
+
+	if (r->size == 0) {
+		r->size = 16;
+		r->ptr = malloc(sizeof(*r->ptr) * r->size);
+	} else if (r->used == r->size) {
+		r->size += 16;
+		r->ptr = realloc(r->ptr, sizeof(*r->ptr) * r->size);
+	}
+
+	r->ptr[r->used++] = pid;
+
+	return m;
+}
+
+static int cgi_pid_del(server *srv, plugin_data *p, pid_t pid) {
+	size_t i;
+	buffer_pid_t *r = &(p->cgi_pid);
+
+	UNUSED(srv);
+
+	for (i = 0; i < r->used; i++) {
+		if (r->ptr[i] == pid) break;
+	}
+
+	if (i != r->used) {
+		/* found */
+
+		if (i != r->used - 1) {
+			r->ptr[i] = r->ptr[r->used - 1];
+		}
+		r->used--;
+	}
+
+	return 0;
+}
+
+static int cgi_response_parse(server *srv, connection *con, plugin_data *p, buffer *in) {
+	char *ns;
+	const char *s;
+	int line = 0;
+
+	UNUSED(srv);
+
+	buffer_copy_string_buffer(p->parse_response, in);
+
+	for (s = p->parse_response->ptr;
+	     NULL != (ns = strchr(s, '\n'));
+	     s = ns + 1, line++) {
+		const char *key, *value;
+		int key_len;
+		data_string *ds;
+
+		/* strip the \n */
+		ns[0] = '\0';
+
+		if (ns > s && ns[-1] == '\r') ns[-1] = '\0';
+
+		if (line == 0 &&
+		    0 == strncmp(s, "HTTP/1.", 7)) {
+			/* non-parsed header ... we parse them anyway */
+
+			if ((s[7] == '1' ||
+			     s[7] == '0') &&
+			    s[8] == ' ') {
+				int status;
+				/* after the space should be a status code for us */
+
+				status = strtol(s+9, NULL, 10);
+
+				if (status >= 100 &&
+				    status < 1000) {
+					/* we expected 3 digits and didn't got them */
+					con->parsed_response |= HTTP_STATUS;
+					con->http_status = status;
+				}
+			}
+		} else {
+			/* parse the headers */
+			key = s;
+			if (NULL == (value = strchr(s, ':'))) {
+				/* we expect: "<key>: <value>\r\n" */
+				continue;
+			}
+
+			key_len = value - key;
+			value += 1;
+
+			/* skip LWS */
+			while (*value == ' ' || *value == '\t') value++;
+
+			if (NULL == (ds = (data_string *)array_get_unused_element(con->response.headers, TYPE_STRING))) {
+				ds = data_response_init();
+			}
+			buffer_copy_string_len(ds->key, key, key_len);
+			buffer_copy_string(ds->value, value);
+
+			array_insert_unique(con->response.headers, (data_unset *)ds);
+
+			switch(key_len) {
+			case 4:
+				if (0 == strncasecmp(key, "Date", key_len)) {
+					con->parsed_response |= HTTP_DATE;
+				}
+				break;
+			case 6:
+				if (0 == strncasecmp(key, "Status", key_len)) {
+					con->http_status = strtol(value, NULL, 10);
+					con->parsed_response |= HTTP_STATUS;
+				}
+				break;
+			case 8:
+				if (0 == strncasecmp(key, "Location", key_len)) {
+					con->parsed_response |= HTTP_LOCATION;
+				}
+				break;
+			case 10:
+				if (0 == strncasecmp(key, "Connection", key_len)) {
+					con->response.keep_alive = (0 == strcasecmp(value, "Keep-Alive")) ? 1 : 0;
+					con->parsed_response |= HTTP_CONNECTION;
+				}
+				break;
+			case 14:
+				if (0 == strncasecmp(key, "Content-Length", key_len)) {
+					con->response.content_length = strtol(value, NULL, 10);
+					con->parsed_response |= HTTP_CONTENT_LENGTH;
+				}
+				break;
+			default:
+				break;
+			}
+		}
+	}
+
+	/* CGI/1.1 rev 03 - 7.2.1.2 */
+	if ((con->parsed_response & HTTP_LOCATION) &&
+	    !(con->parsed_response & HTTP_STATUS)) {
+		con->http_status = 302;
+	}
+
+	return 0;
+}
+
+
+static int cgi_demux_response(server *srv, handler_ctx *hctx) {
+	plugin_data *p    = hctx->plugin_data;
+	connection  *con  = hctx->remote_conn;
+
+	while(1) {
+		int n;
+
+		buffer_prepare_copy(hctx->response, 1024);
+		if (-1 == (n = read(hctx->fd, hctx->response->ptr, hctx->response->size - 1))) {
+			if (errno == EAGAIN || errno == EINTR) {
+				/* would block, wait for signal */
+				return FDEVENT_HANDLED_NOT_FINISHED;
+			}
+			/* error */
+			log_error_write(srv, __FILE__, __LINE__, "sdd", strerror(errno), con->fd, hctx->fd);
+			return FDEVENT_HANDLED_ERROR;
+		}
+
+		if (n == 0) {
+			/* read finished */
+
+			con->file_finished = 1;
+
+			/* send final chunk */
+			http_chunk_append_mem(srv, con, NULL, 0);
+			joblist_append(srv, con);
+
+			return FDEVENT_HANDLED_FINISHED;
+		}
+
+		hctx->response->ptr[n] = '\0';
+		hctx->response->used = n+1;
+
+		/* split header from body */
+
+		if (con->file_started == 0) {
+			int is_header = 0;
+			int is_header_end = 0;
+			size_t last_eol = 0;
+			size_t i;
+
+			buffer_append_string_buffer(hctx->response_header, hctx->response);
+
+			/**
+			 * we have to handle a few cases:
+			 *
+			 * nph:
+			 * 
+			 *   HTTP/1.0 200 Ok\n
+			 *   Header: Value\n
+			 *   \n
+			 *
+			 * CGI:
+			 *   Header: Value\n
+			 *   Status: 200\n
+			 *   \n
+			 *
+			 * and different mixes of \n and \r\n combinations
+			 * 
+			 * Some users also forget about CGI and just send a response and hope 
+			 * we handle it. No headers, no header-content seperator
+			 * 
+			 */
+			
+			/* nph (non-parsed headers) */
+			if (0 == strncmp(hctx->response_header->ptr, "HTTP/1.", 7)) is_header = 1;
+				
+			for (i = 0; !is_header_end && i < hctx->response_header->used - 1; i++) {
+				char c = hctx->response_header->ptr[i];
+
+				switch (c) {
+				case ':':
+					/* we found a colon
+					 *
+					 * looks like we have a normal header 
+					 */
+					is_header = 1;
+					break;
+				case '\n':
+					/* EOL */
+					if (is_header == 0) {
+						/* we got a EOL but we don't seem to got a HTTP header */
+
+						is_header_end = 1;
+
+						break;
+					}
+
+					/**
+					 * check if we saw a \n(\r)?\n sequence 
+					 */
+					if (last_eol > 0 && 
+					    ((i - last_eol == 1) || 
+					     (i - last_eol == 2 && hctx->response_header->ptr[i - 1] == '\r'))) {
+						is_header_end = 1;
+						break;
+					}
+
+					last_eol = i;
+
+					break;
+				}
+			}
+
+			if (is_header_end) {
+				if (!is_header) {
+					/* no header, but a body */
+
+					if (con->request.http_version == HTTP_VERSION_1_1) {
+						con->response.transfer_encoding = HTTP_TRANSFER_ENCODING_CHUNKED;
+					}
+
+					http_chunk_append_mem(srv, con, hctx->response_header->ptr, hctx->response_header->used);
+					joblist_append(srv, con);
+				} else {
+					const char *bstart;
+					size_t blen;
+					
+					/**
+					 * i still points to the char after the terminating EOL EOL
+					 *
+					 * put it on the last \n again
+					 */
+					i--;
+					
+					/* the body starts after the EOL */
+					bstart = hctx->response_header->ptr + (i + 1);
+					blen = (hctx->response_header->used - 1) - (i + 1);
+					
+					/* string the last \r?\n */
+					if (i > 0 && (hctx->response_header->ptr[i - 1] == '\r')) {
+						i--;
+					}
+
+					hctx->response_header->ptr[i] = '\0';
+					hctx->response_header->used = i + 1; /* the string + \0 */
+					
+					/* parse the response header */
+					cgi_response_parse(srv, con, p, hctx->response_header);
+
+					/* enable chunked-transfer-encoding */
+					if (con->request.http_version == HTTP_VERSION_1_1 &&
+					    !(con->parsed_response & HTTP_CONTENT_LENGTH)) {
+						con->response.transfer_encoding = HTTP_TRANSFER_ENCODING_CHUNKED;
+					}
+
+					if (blen > 0) {
+						http_chunk_append_mem(srv, con, bstart, blen + 1);
+						joblist_append(srv, con);
+					}
+				}
+
+				con->file_started = 1;
+			}
+		} else {
+			http_chunk_append_mem(srv, con, hctx->response->ptr, hctx->response->used);
+			joblist_append(srv, con);
+		}
+
+#if 0
+		log_error_write(srv, __FILE__, __LINE__, "ddss", con->fd, hctx->fd, connection_get_state(con->state), b->ptr);
+#endif
+	}
+
+	return FDEVENT_HANDLED_NOT_FINISHED;
+}
+
+static handler_t cgi_connection_close(server *srv, handler_ctx *hctx) {
+	int status;
+	pid_t pid;
+	plugin_data *p;
+	connection  *con;
+
+	if (NULL == hctx) return HANDLER_GO_ON;
+
+	p    = hctx->plugin_data;
+	con  = hctx->remote_conn;
+
+	if (con->mode != p->id) return HANDLER_GO_ON;
+
+#ifndef __WIN32
+
+	/* the connection to the browser went away, but we still have a connection
+	 * to the CGI script
+	 *
+	 * close cgi-connection
+	 */
+
+	if (hctx->fd != -1) {
+		/* close connection to the cgi-script */
+		fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+		fdevent_unregister(srv->ev, hctx->fd);
+
+		if (close(hctx->fd)) {
+			log_error_write(srv, __FILE__, __LINE__, "sds", "cgi close failed ", hctx->fd, strerror(errno));
+		}
+
+		hctx->fd = -1;
+		hctx->fde_ndx = -1;
+	}
+
+	pid = hctx->pid;
+
+	con->plugin_ctx[p->id] = NULL;
+
+	/* is this a good idea ? */
+	cgi_handler_ctx_free(hctx);
+
+	/* if waitpid hasn't been called by response.c yet, do it here */
+	if (pid) {
+		/* check if the CGI-script is already gone */
+		switch(waitpid(pid, &status, WNOHANG)) {
+		case 0:
+			/* not finished yet */
+#if 0
+			log_error_write(srv, __FILE__, __LINE__, "sd", "(debug) child isn't done yet, pid:", pid);
+#endif
+			break;
+		case -1:
+			/* */
+			if (errno == EINTR) break;
+
+			/*
+			 * errno == ECHILD happens if _subrequest catches the process-status before
+			 * we have read the response of the cgi process
+			 *
+			 * -> catch status
+			 * -> WAIT_FOR_EVENT
+			 * -> read response
+			 * -> we get here with waitpid == ECHILD
+			 *
+			 */
+			if (errno == ECHILD) return HANDLER_GO_ON;
+
+			log_error_write(srv, __FILE__, __LINE__, "ss", "waitpid failed: ", strerror(errno));
+			return HANDLER_ERROR;
+		default:
+			/* Send an error if we haven't sent any data yet */
+			if (0 == con->file_started) {
+				connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+				con->http_status = 500;
+				con->mode = DIRECT;
+			}
+
+			if (WIFEXITED(status)) {
+#if 0
+				log_error_write(srv, __FILE__, __LINE__, "sd", "(debug) cgi exited fine, pid:", pid);
+#endif
+				pid = 0;
+
+				return HANDLER_GO_ON;
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sd", "cgi died, pid:", pid);
+				pid = 0;
+				return HANDLER_GO_ON;
+			}
+		}
+
+
+		kill(pid, SIGTERM);
+
+		/* cgi-script is still alive, queue the PID for removal */
+		cgi_pid_add(srv, p, pid);
+	}
+#endif
+	return HANDLER_GO_ON;
+}
+
+static handler_t cgi_connection_close_callback(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+
+	return cgi_connection_close(srv, con->plugin_ctx[p->id]);
+}
+
+
+static handler_t cgi_handle_fdevent(void *s, void *ctx, int revents) {
+	server      *srv  = (server *)s;
+	handler_ctx *hctx = ctx;
+	connection  *con  = hctx->remote_conn;
+
+	joblist_append(srv, con);
+
+	if (hctx->fd == -1) {
+		log_error_write(srv, __FILE__, __LINE__, "ddss", con->fd, hctx->fd, connection_get_state(con->state), "invalid cgi-fd");
+
+		return HANDLER_ERROR;
+	}
+
+	if (revents & FDEVENT_IN) {
+		switch (cgi_demux_response(srv, hctx)) {
+		case FDEVENT_HANDLED_NOT_FINISHED:
+			break;
+		case FDEVENT_HANDLED_FINISHED:
+			/* we are done */
+
+#if 0
+			log_error_write(srv, __FILE__, __LINE__, "ddss", con->fd, hctx->fd, connection_get_state(con->state), "finished");
+#endif
+			cgi_connection_close(srv, hctx);
+
+			/* if we get a IN|HUP and have read everything don't exec the close twice */
+			return HANDLER_FINISHED;
+		case FDEVENT_HANDLED_ERROR:
+			connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+			con->http_status = 500;
+			con->mode = DIRECT;
+
+			log_error_write(srv, __FILE__, __LINE__, "s", "demuxer failed: ");
+			break;
+		}
+	}
+
+	if (revents & FDEVENT_OUT) {
+		/* nothing to do */
+	}
+
+	/* perhaps this issue is already handled */
+	if (revents & FDEVENT_HUP) {
+		/* check if we still have a unfinished header package which is a body in reality */
+		if (con->file_started == 0 &&
+		    hctx->response_header->used) {
+			con->file_started = 1;
+			http_chunk_append_mem(srv, con, hctx->response_header->ptr, hctx->response_header->used);
+			joblist_append(srv, con);
+		}
+
+		if (con->file_finished == 0) {
+			http_chunk_append_mem(srv, con, NULL, 0);
+			joblist_append(srv, con);
+		}
+
+		con->file_finished = 1;
+
+		if (chunkqueue_is_empty(con->write_queue)) {
+			/* there is nothing left to write */
+			connection_set_state(srv, con, CON_STATE_RESPONSE_END);
+		} else {
+			/* used the write-handler to finish the request on demand */
+
+		}
+
+# if 0
+		log_error_write(srv, __FILE__, __LINE__, "sddd", "got HUP from cgi", con->fd, hctx->fd, revents);
+# endif
+
+		/* rtsigs didn't liked the close */
+		cgi_connection_close(srv, hctx);
+	} else if (revents & FDEVENT_ERR) {
+		con->file_finished = 1;
+
+		/* kill all connections to the cgi process */
+		cgi_connection_close(srv, hctx);
+#if 1
+		log_error_write(srv, __FILE__, __LINE__, "s", "cgi-FDEVENT_ERR");
+#endif
+		return HANDLER_ERROR;
+	}
+
+	return HANDLER_FINISHED;
+}
+
+
+static int cgi_env_add(char_array *env, const char *key, size_t key_len, const char *val, size_t val_len) {
+	char *dst;
+
+	if (!key || !val) return -1;
+
+	dst = malloc(key_len + val_len + 3);
+	memcpy(dst, key, key_len);
+	dst[key_len] = '=';
+	/* add the \0 from the value */
+	memcpy(dst + key_len + 1, val, val_len + 1);
+
+	if (env->size == 0) {
+		env->size = 16;
+		env->ptr = malloc(env->size * sizeof(*env->ptr));
+	} else if (env->size == env->used) {
+		env->size += 16;
+		env->ptr = realloc(env->ptr, env->size * sizeof(*env->ptr));
+	}
+
+	env->ptr[env->used++] = dst;
+
+	return 0;
+}
+
+static int cgi_create_env(server *srv, connection *con, plugin_data *p, buffer *cgi_handler) {
+	pid_t pid;
+
+#ifdef HAVE_IPV6
+	char b2[INET6_ADDRSTRLEN + 1];
+#endif
+
+	int to_cgi_fds[2];
+	int from_cgi_fds[2];
+	struct stat st;
+
+#ifndef __WIN32
+
+	if (cgi_handler->used > 1) {
+		/* stat the exec file */
+		if (-1 == (stat(cgi_handler->ptr, &st))) {
+			log_error_write(srv, __FILE__, __LINE__, "sbss",
+					"stat for cgi-handler", cgi_handler,
+					"failed:", strerror(errno));
+			return -1;
+		}
+	}
+
+	if (pipe(to_cgi_fds)) {
+		log_error_write(srv, __FILE__, __LINE__, "ss", "pipe failed:", strerror(errno));
+		return -1;
+	}
+
+	if (pipe(from_cgi_fds)) {
+		log_error_write(srv, __FILE__, __LINE__, "ss", "pipe failed:", strerror(errno));
+		return -1;
+	}
+
+	/* fork, execve */
+	switch (pid = fork()) {
+	case 0: {
+		/* child */
+		char **args;
+		int argc;
+		int i = 0;
+		char buf[32];
+		size_t n;
+		char_array env;
+		char *c;
+		const char *s;
+		server_socket *srv_sock = con->srv_socket;
+
+		/* move stdout to from_cgi_fd[1] */
+		close(STDOUT_FILENO);
+		dup2(from_cgi_fds[1], STDOUT_FILENO);
+		close(from_cgi_fds[1]);
+		/* not needed */
+		close(from_cgi_fds[0]);
+
+		/* move the stdin to to_cgi_fd[0] */
+		close(STDIN_FILENO);
+		dup2(to_cgi_fds[0], STDIN_FILENO);
+		close(to_cgi_fds[0]);
+		/* not needed */
+		close(to_cgi_fds[1]);
+
+		/* HACK:
+		 * this is not nice, but it works
+		 *
+		 * we feed the stderr of the CGI to our errorlog, if possible
+		 */
+		if (srv->errorlog_mode == ERRORLOG_FILE) {
+			close(STDERR_FILENO);
+			dup2(srv->errorlog_fd, STDERR_FILENO);
+		}
+
+		/* create environment */
+		env.ptr = NULL;
+		env.size = 0;
+		env.used = 0;
+
+		cgi_env_add(&env, CONST_STR_LEN("SERVER_SOFTWARE"), CONST_STR_LEN(PACKAGE_NAME"/"PACKAGE_VERSION));
+
+		if (!buffer_is_empty(con->server_name)) {
+			cgi_env_add(&env, CONST_STR_LEN("SERVER_NAME"), CONST_BUF_LEN(con->server_name));
+		} else {
+#ifdef HAVE_IPV6
+			s = inet_ntop(srv_sock->addr.plain.sa_family,
+				      srv_sock->addr.plain.sa_family == AF_INET6 ?
+				      (const void *) &(srv_sock->addr.ipv6.sin6_addr) :
+				      (const void *) &(srv_sock->addr.ipv4.sin_addr),
+				      b2, sizeof(b2)-1);
+#else
+			s = inet_ntoa(srv_sock->addr.ipv4.sin_addr);
+#endif
+			cgi_env_add(&env, CONST_STR_LEN("SERVER_NAME"), s, strlen(s));
+		}
+		cgi_env_add(&env, CONST_STR_LEN("GATEWAY_INTERFACE"), CONST_STR_LEN("CGI/1.1"));
+
+		s = get_http_version_name(con->request.http_version);
+
+		cgi_env_add(&env, CONST_STR_LEN("SERVER_PROTOCOL"), s, strlen(s));
+
+		LI_ltostr(buf,
+#ifdef HAVE_IPV6
+			ntohs(srv_sock->addr.plain.sa_family == AF_INET6 ? srv_sock->addr.ipv6.sin6_port : srv_sock->addr.ipv4.sin_port)
+#else
+			ntohs(srv_sock->addr.ipv4.sin_port)
+#endif
+			);
+		cgi_env_add(&env, CONST_STR_LEN("SERVER_PORT"), buf, strlen(buf));
+
+#ifdef HAVE_IPV6
+		s = inet_ntop(srv_sock->addr.plain.sa_family,
+			      srv_sock->addr.plain.sa_family == AF_INET6 ?
+			      (const void *) &(srv_sock->addr.ipv6.sin6_addr) :
+			      (const void *) &(srv_sock->addr.ipv4.sin_addr),
+			      b2, sizeof(b2)-1);
+#else
+		s = inet_ntoa(srv_sock->addr.ipv4.sin_addr);
+#endif
+		cgi_env_add(&env, CONST_STR_LEN("SERVER_ADDR"), s, strlen(s));
+
+		s = get_http_method_name(con->request.http_method);
+		cgi_env_add(&env, CONST_STR_LEN("REQUEST_METHOD"), s, strlen(s));
+
+		if (!buffer_is_empty(con->request.pathinfo)) {
+			cgi_env_add(&env, CONST_STR_LEN("PATH_INFO"), CONST_BUF_LEN(con->request.pathinfo));
+		}
+		cgi_env_add(&env, CONST_STR_LEN("REDIRECT_STATUS"), CONST_STR_LEN("200"));
+		if (!buffer_is_empty(con->uri.query)) {
+			cgi_env_add(&env, CONST_STR_LEN("QUERY_STRING"), CONST_BUF_LEN(con->uri.query));
+		}
+		if (!buffer_is_empty(con->request.orig_uri)) {
+			cgi_env_add(&env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri));
+		}
+
+
+#ifdef HAVE_IPV6
+		s = inet_ntop(con->dst_addr.plain.sa_family,
+			      con->dst_addr.plain.sa_family == AF_INET6 ?
+			      (const void *) &(con->dst_addr.ipv6.sin6_addr) :
+			      (const void *) &(con->dst_addr.ipv4.sin_addr),
+			      b2, sizeof(b2)-1);
+#else
+		s = inet_ntoa(con->dst_addr.ipv4.sin_addr);
+#endif
+		cgi_env_add(&env, CONST_STR_LEN("REMOTE_ADDR"), s, strlen(s));
+
+		LI_ltostr(buf,
+#ifdef HAVE_IPV6
+			ntohs(con->dst_addr.plain.sa_family == AF_INET6 ? con->dst_addr.ipv6.sin6_port : con->dst_addr.ipv4.sin_port)
+#else
+			ntohs(con->dst_addr.ipv4.sin_port)
+#endif
+			);
+		cgi_env_add(&env, CONST_STR_LEN("REMOTE_PORT"), buf, strlen(buf));
+
+		if (!buffer_is_empty(con->authed_user)) {
+			cgi_env_add(&env, CONST_STR_LEN("REMOTE_USER"),
+				    CONST_BUF_LEN(con->authed_user));
+		}
+
+#ifdef USE_OPENSSL
+	if (srv_sock->is_ssl) {
+		cgi_env_add(&env, CONST_STR_LEN("HTTPS"), CONST_STR_LEN("on"));
+	}
+#endif
+
+		/* request.content_length < SSIZE_MAX, see request.c */
+		LI_ltostr(buf, con->request.content_length);
+		cgi_env_add(&env, CONST_STR_LEN("CONTENT_LENGTH"), buf, strlen(buf));
+		cgi_env_add(&env, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(con->physical.path));
+		cgi_env_add(&env, CONST_STR_LEN("SCRIPT_NAME"), CONST_BUF_LEN(con->uri.path));
+		cgi_env_add(&env, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(con->physical.doc_root));
+
+		/* for valgrind */
+		if (NULL != (s = getenv("LD_PRELOAD"))) {
+			cgi_env_add(&env, CONST_STR_LEN("LD_PRELOAD"), s, strlen(s));
+		}
+
+		if (NULL != (s = getenv("LD_LIBRARY_PATH"))) {
+			cgi_env_add(&env, CONST_STR_LEN("LD_LIBRARY_PATH"), s, strlen(s));
+		}
+#ifdef __CYGWIN__
+		/* CYGWIN needs SYSTEMROOT */
+		if (NULL != (s = getenv("SYSTEMROOT"))) {
+			cgi_env_add(&env, CONST_STR_LEN("SYSTEMROOT"), s, strlen(s));
+		}
+#endif
+
+		for (n = 0; n < con->request.headers->used; n++) {
+			data_string *ds;
+
+			ds = (data_string *)con->request.headers->data[n];
+
+			if (ds->value->used && ds->key->used) {
+				size_t j;
+
+				buffer_reset(p->tmp_buf);
+
+				if (0 != strcasecmp(ds->key->ptr, "CONTENT-TYPE")) {
+					buffer_copy_string(p->tmp_buf, "HTTP_");
+					p->tmp_buf->used--; /* strip \0 after HTTP_ */
+				}
+
+				buffer_prepare_append(p->tmp_buf, ds->key->used + 2);
+
+				for (j = 0; j < ds->key->used - 1; j++) {
+					char cr = '_';
+					if (light_isalpha(ds->key->ptr[j])) {
+						/* upper-case */
+						cr = ds->key->ptr[j] & ~32;
+					} else if (light_isdigit(ds->key->ptr[j])) {
+						/* copy */
+						cr = ds->key->ptr[j];
+					}
+					p->tmp_buf->ptr[p->tmp_buf->used++] = cr;
+				}
+				p->tmp_buf->ptr[p->tmp_buf->used++] = '\0';
+
+				cgi_env_add(&env, CONST_BUF_LEN(p->tmp_buf), CONST_BUF_LEN(ds->value));
+			}
+		}
+
+		for (n = 0; n < con->environment->used; n++) {
+			data_string *ds;
+
+			ds = (data_string *)con->environment->data[n];
+
+			if (ds->value->used && ds->key->used) {
+				size_t j;
+
+				buffer_reset(p->tmp_buf);
+
+				buffer_prepare_append(p->tmp_buf, ds->key->used + 2);
+
+				for (j = 0; j < ds->key->used - 1; j++) {
+					p->tmp_buf->ptr[p->tmp_buf->used++] =
+						isalpha((unsigned char)ds->key->ptr[j]) ?
+						toupper((unsigned char)ds->key->ptr[j]) : '_';
+				}
+				p->tmp_buf->ptr[p->tmp_buf->used++] = '\0';
+
+				cgi_env_add(&env, CONST_BUF_LEN(p->tmp_buf), CONST_BUF_LEN(ds->value));
+			}
+		}
+
+		if (env.size == env.used) {
+			env.size += 16;
+			env.ptr = realloc(env.ptr, env.size * sizeof(*env.ptr));
+		}
+
+		env.ptr[env.used] = NULL;
+
+		/* set up args */
+		argc = 3;
+		args = malloc(sizeof(*args) * argc);
+		i = 0;
+
+		if (cgi_handler->used > 1) {
+			args[i++] = cgi_handler->ptr;
+		}
+		args[i++] = con->physical.path->ptr;
+		args[i++] = NULL;
+
+		/* search for the last / */
+		if (NULL != (c = strrchr(con->physical.path->ptr, '/'))) {
+			*c = '\0';
+
+			/* change to the physical directory */
+			if (-1 == chdir(con->physical.path->ptr)) {
+				log_error_write(srv, __FILE__, __LINE__, "ssb", "chdir failed:", strerror(errno), con->physical.path);
+			}
+			*c = '/';
+		}
+
+		/* we don't need the client socket */
+		for (i = 3; i < 256; i++) {
+			if (i != srv->errorlog_fd) close(i);
+		}
+
+		/* exec the cgi */
+		execve(args[0], args, env.ptr);
+
+		log_error_write(srv, __FILE__, __LINE__, "sss", "CGI failed:", strerror(errno), args[0]);
+
+		/* */
+		SEGFAULT();
+		break;
+	}
+	case -1:
+		/* error */
+		log_error_write(srv, __FILE__, __LINE__, "ss", "fork failed:", strerror(errno));
+		return -1;
+		break;
+	default: {
+		handler_ctx *hctx;
+		/* father */
+
+		close(from_cgi_fds[1]);
+		close(to_cgi_fds[0]);
+
+		if (con->request.content_length) {
+			chunkqueue *cq = con->request_content_queue;
+			chunk *c;
+
+			assert(chunkqueue_length(cq) == (off_t)con->request.content_length);
+
+			/* there is content to send */
+			for (c = cq->first; c; c = cq->first) {
+				int r = 0;
+
+				/* copy all chunks */
+				switch(c->type) {
+				case FILE_CHUNK:
+
+					if (c->file.mmap.start == MAP_FAILED) {
+						if (-1 == c->file.fd &&  /* open the file if not already open */
+						    -1 == (c->file.fd = open(c->file.name->ptr, O_RDONLY))) {
+							log_error_write(srv, __FILE__, __LINE__, "ss", "open failed: ", strerror(errno));
+
+							close(from_cgi_fds[0]);
+							close(to_cgi_fds[1]);
+							return -1;
+						}
+
+						c->file.mmap.length = c->file.length;
+
+						if (MAP_FAILED == (c->file.mmap.start = mmap(0,  c->file.mmap.length, PROT_READ, MAP_SHARED, c->file.fd, 0))) {
+							log_error_write(srv, __FILE__, __LINE__, "ssbd", "mmap failed: ",
+									strerror(errno), c->file.name,  c->file.fd);
+
+							close(from_cgi_fds[0]);
+							close(to_cgi_fds[1]);
+							return -1;
+						}
+
+						close(c->file.fd);
+						c->file.fd = -1;
+
+						/* chunk_reset() or chunk_free() will cleanup for us */
+					}
+
+					if ((r = write(to_cgi_fds[1], c->file.mmap.start + c->offset, c->file.length - c->offset)) < 0) {
+						switch(errno) {
+						case ENOSPC:
+							con->http_status = 507;
+
+							break;
+						default:
+							con->http_status = 403;
+							break;
+						}
+					}
+					break;
+				case MEM_CHUNK:
+					if ((r = write(to_cgi_fds[1], c->mem->ptr + c->offset, c->mem->used - c->offset - 1)) < 0) {
+						switch(errno) {
+						case ENOSPC:
+							con->http_status = 507;
+
+							break;
+						default:
+							con->http_status = 403;
+							break;
+						}
+					}
+					break;
+				case UNUSED_CHUNK:
+					break;
+				}
+
+				if (r > 0) {
+					c->offset += r;
+					cq->bytes_out += r;
+				} else {
+					break;
+				}
+				chunkqueue_remove_finished_chunks(cq);
+			}
+		}
+
+		close(to_cgi_fds[1]);
+
+		/* register PID and wait for them asyncronously */
+		con->mode = p->id;
+		buffer_reset(con->physical.path);
+
+		hctx = cgi_handler_ctx_init();
+
+		hctx->remote_conn = con;
+		hctx->plugin_data = p;
+		hctx->pid = pid;
+		hctx->fd = from_cgi_fds[0];
+		hctx->fde_ndx = -1;
+
+		con->plugin_ctx[p->id] = hctx;
+
+		fdevent_register(srv->ev, hctx->fd, cgi_handle_fdevent, hctx);
+		fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_IN);
+
+		if (-1 == fdevent_fcntl_set(srv->ev, hctx->fd)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "fcntl failed: ", strerror(errno));
+
+			fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+			fdevent_unregister(srv->ev, hctx->fd);
+
+			log_error_write(srv, __FILE__, __LINE__, "sd", "cgi close:", hctx->fd);
+
+			close(hctx->fd);
+
+			cgi_handler_ctx_free(hctx);
+
+			con->plugin_ctx[p->id] = NULL;
+
+			return -1;
+		}
+
+		break;
+	}
+	}
+
+	return 0;
+#else
+	return -1;
+#endif
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_cgi_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(cgi);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("cgi.assign"))) {
+				PATCH(cgi);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+URIHANDLER_FUNC(cgi_is_handled) {
+	size_t k, s_len;
+	plugin_data *p = p_d;
+	buffer *fn = con->physical.path;
+
+	if (fn->used == 0) return HANDLER_GO_ON;
+
+	mod_cgi_patch_connection(srv, con, p);
+
+	s_len = fn->used - 1;
+
+	for (k = 0; k < p->conf.cgi->used; k++) {
+		data_string *ds = (data_string *)p->conf.cgi->data[k];
+		size_t ct_len = ds->key->used - 1;
+
+		if (ds->key->used == 0) continue;
+		if (s_len < ct_len) continue;
+
+		if (0 == strncmp(fn->ptr + s_len - ct_len, ds->key->ptr, ct_len)) {
+			if (cgi_create_env(srv, con, p, ds->value)) {
+				con->http_status = 500;
+
+				buffer_reset(con->physical.path);
+				return HANDLER_FINISHED;
+			}
+			/* one handler is enough for the request */
+			break;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+TRIGGER_FUNC(cgi_trigger) {
+	plugin_data *p = p_d;
+	size_t ndx;
+	/* the trigger handle only cares about lonely PID which we have to wait for */
+#ifndef __WIN32
+
+	for (ndx = 0; ndx < p->cgi_pid.used; ndx++) {
+		int status;
+
+		switch(waitpid(p->cgi_pid.ptr[ndx], &status, WNOHANG)) {
+		case 0:
+			/* not finished yet */
+#if 0
+			log_error_write(srv, __FILE__, __LINE__, "sd", "(debug) child isn't done yet, pid:", p->cgi_pid.ptr[ndx]);
+#endif
+			break;
+		case -1:
+			log_error_write(srv, __FILE__, __LINE__, "ss", "waitpid failed: ", strerror(errno));
+
+			return HANDLER_ERROR;
+		default:
+
+			if (WIFEXITED(status)) {
+#if 0
+				log_error_write(srv, __FILE__, __LINE__, "sd", "(debug) cgi exited fine, pid:", p->cgi_pid.ptr[ndx]);
+#endif
+			} else if (WIFSIGNALED(status)) {
+				/* FIXME: what if we killed the CGI script with a kill(..., SIGTERM) ?
+				 */
+				if (WTERMSIG(status) != SIGTERM) {
+					log_error_write(srv, __FILE__, __LINE__, "sd", "cleaning up CGI: process died with signal", WTERMSIG(status));
+				}
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "s", "cleaning up CGI: ended unexpectedly");
+			}
+
+			cgi_pid_del(srv, p, p->cgi_pid.ptr[ndx]);
+			/* del modified the buffer structure
+			 * and copies the last entry to the current one
+			 * -> recheck the current index
+			 */
+			ndx--;
+		}
+	}
+#endif
+	return HANDLER_GO_ON;
+}
+
+SUBREQUEST_FUNC(mod_cgi_handle_subrequest) {
+	int status;
+	plugin_data *p = p_d;
+	handler_ctx *hctx = con->plugin_ctx[p->id];
+
+	if (con->mode != p->id) return HANDLER_GO_ON;
+	if (NULL == hctx) return HANDLER_GO_ON;
+
+#if 0
+	log_error_write(srv, __FILE__, __LINE__, "sdd", "subrequest, pid =", hctx, hctx->pid);
+#endif
+	if (hctx->pid == 0) return HANDLER_FINISHED;
+#ifndef __WIN32
+	switch(waitpid(hctx->pid, &status, WNOHANG)) {
+	case 0:
+		/* we only have for events here if we don't have the header yet,
+		 * otherwise the event-handler will send us the incoming data */
+		if (con->file_started) return HANDLER_FINISHED;
+
+		return HANDLER_WAIT_FOR_EVENT;
+	case -1:
+		if (errno == EINTR) return HANDLER_WAIT_FOR_EVENT;
+
+		if (errno == ECHILD && con->file_started == 0) {
+			/*
+			 * second round but still not response
+			 */
+			return HANDLER_WAIT_FOR_EVENT;
+		}
+
+		log_error_write(srv, __FILE__, __LINE__, "ss", "waitpid failed: ", strerror(errno));
+		con->mode = DIRECT;
+		con->http_status = 500;
+
+		hctx->pid = 0;
+
+		fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+		fdevent_unregister(srv->ev, hctx->fd);
+
+		if (close(hctx->fd)) {
+			log_error_write(srv, __FILE__, __LINE__, "sds", "cgi close failed ", hctx->fd, strerror(errno));
+		}
+
+		cgi_handler_ctx_free(hctx);
+
+		con->plugin_ctx[p->id] = NULL;
+
+		return HANDLER_FINISHED;
+	default:
+		/* cgi process exited cleanly
+		 *
+		 * check if we already got the response
+		 */
+
+		if (!con->file_started) return HANDLER_WAIT_FOR_EVENT;
+
+		if (WIFEXITED(status)) {
+			/* nothing */
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "s", "cgi died ?");
+
+			con->mode = DIRECT;
+			con->http_status = 500;
+
+		}
+
+		hctx->pid = 0;
+
+		fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+		fdevent_unregister(srv->ev, hctx->fd);
+
+		if (close(hctx->fd)) {
+			log_error_write(srv, __FILE__, __LINE__, "sds", "cgi close failed ", hctx->fd, strerror(errno));
+		}
+
+		cgi_handler_ctx_free(hctx);
+
+		con->plugin_ctx[p->id] = NULL;
+		return HANDLER_FINISHED;
+	}
+#else
+	return HANDLER_ERROR;
+#endif
+}
+
+
+int mod_cgi_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("cgi");
+
+	p->connection_reset = cgi_connection_close_callback;
+	p->handle_subrequest_start = cgi_is_handled;
+	p->handle_subrequest = mod_cgi_handle_subrequest;
+#if 0
+	p->handle_fdevent = cgi_handle_fdevent;
+#endif
+	p->handle_trigger = cgi_trigger;
+	p->init           = mod_cgi_init;
+	p->cleanup        = mod_cgi_free;
+	p->set_defaults   = mod_fastcgi_set_defaults;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_cml.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_cml.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_cml.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,322 @@
+#include <sys/stat.h>
+#include <time.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdio.h>
+
+#include "buffer.h"
+#include "server.h"
+#include "log.h"
+#include "plugin.h"
+#include "response.h"
+
+#include "stream.h"
+
+#include "mod_cml.h"
+
+/* init the plugin data */
+INIT_FUNC(mod_cml_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->basedir         = buffer_init();
+	p->baseurl         = buffer_init();
+	p->trigger_handler = buffer_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_cml_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			buffer_free(s->ext);
+
+			buffer_free(s->mc_namespace);
+			buffer_free(s->power_magnet);
+			array_free(s->mc_hosts);
+
+#if defined(HAVE_MEMCACHE_H)
+			if (s->mc) mc_free(s->mc);
+#endif
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	buffer_free(p->trigger_handler);
+	buffer_free(p->basedir);
+	buffer_free(p->baseurl);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_cml_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "cml.extension",              NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "cml.memcache-hosts",         NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },        /* 1 */
+		{ "cml.memcache-namespace",     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 2 */
+		{ "cml.power-magnet",           NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 3 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = malloc(srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = malloc(sizeof(plugin_config));
+		s->ext    = buffer_init();
+		s->mc_hosts       = array_init();
+		s->mc_namespace   = buffer_init();
+		s->power_magnet   = buffer_init();
+#if defined(HAVE_MEMCACHE_H)
+		s->mc = NULL;
+#endif
+
+		cv[0].destination = s->ext;
+		cv[1].destination = s->mc_hosts;
+		cv[2].destination = s->mc_namespace;
+		cv[3].destination = s->power_magnet;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		if (s->mc_hosts->used) {
+#if defined(HAVE_MEMCACHE_H)
+			size_t k;
+			s->mc = mc_new();
+
+			for (k = 0; k < s->mc_hosts->used; k++) {
+				data_string *ds = (data_string *)s->mc_hosts->data[k];
+
+				if (0 != mc_server_add4(s->mc, ds->value->ptr)) {
+					log_error_write(srv, __FILE__, __LINE__, "sb",
+							"connection to host failed:",
+							ds->value);
+
+					return HANDLER_ERROR;
+				}
+			}
+#else
+			log_error_write(srv, __FILE__, __LINE__, "s",
+					"memcache support is not compiled in but cml.memcache-hosts is set, aborting");
+			return HANDLER_ERROR;
+#endif
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_cml_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(ext);
+#if defined(HAVE_MEMCACHE_H)
+	PATCH(mc);
+#endif
+	PATCH(mc_namespace);
+	PATCH(power_magnet);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("cml.extension"))) {
+				PATCH(ext);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("cml.memcache-hosts"))) {
+#if defined(HAVE_MEMCACHE_H)
+				PATCH(mc);
+#endif
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("cml.memcache-namespace"))) {
+				PATCH(mc_namespace);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("cml.power-magnet"))) {
+				PATCH(power_magnet);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+int cache_call_lua(server *srv, connection *con, plugin_data *p, buffer *cml_file) {
+	buffer *b;
+	char *c;
+
+	/* cleanup basedir */
+	b = p->baseurl;
+	buffer_copy_string_buffer(b, con->uri.path);
+	for (c = b->ptr + b->used - 1; c > b->ptr && *c != '/'; c--);
+
+	if (*c == '/') {
+		b->used = c - b->ptr + 2;
+		*(c+1) = '\0';
+	}
+
+	b = p->basedir;
+	buffer_copy_string_buffer(b, con->physical.path);
+	for (c = b->ptr + b->used - 1; c > b->ptr && *c != '/'; c--);
+
+	if (*c == '/') {
+		b->used = c - b->ptr + 2;
+		*(c+1) = '\0';
+	}
+
+
+	/* prepare variables
+	 *   - cookie-based
+	 *   - get-param-based
+	 */
+	return cache_parse_lua(srv, con, p, cml_file);
+}
+
+URIHANDLER_FUNC(mod_cml_power_magnet) {
+	plugin_data *p = p_d;
+
+	mod_cml_patch_connection(srv, con, p);
+
+	buffer_reset(p->basedir);
+	buffer_reset(p->baseurl);
+	buffer_reset(p->trigger_handler);
+
+	if (buffer_is_empty(p->conf.power_magnet)) return HANDLER_GO_ON;
+
+	/*
+	 * power-magnet:
+	 * cml.power-magnet = server.docroot + "/rewrite.cml"
+	 *
+	 * is called on EACH request, take the original REQUEST_URI and modifies the
+	 * request header as neccesary.
+	 *
+	 * First use:
+	 * if file_exists("/maintainance.html") {
+	 *   output_include = ( "/maintainance.html" )
+	 *   return CACHE_HIT
+	 * }
+	 *
+	 * as we only want to rewrite HTML like requests we should cover it in a conditional
+	 *
+	 * */
+
+	switch(cache_call_lua(srv, con, p, p->conf.power_magnet)) {
+	case -1:
+		/* error */
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "cache-error");
+		}
+		con->http_status = 500;
+		return HANDLER_COMEBACK;
+	case 0:
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "cache-hit");
+		}
+		/* cache-hit */
+		buffer_reset(con->physical.path);
+		return HANDLER_FINISHED;
+	case 1:
+		/* cache miss */
+		return HANDLER_GO_ON;
+	default:
+		con->http_status = 500;
+		return HANDLER_COMEBACK;
+	}
+}
+
+URIHANDLER_FUNC(mod_cml_is_handled) {
+	plugin_data *p = p_d;
+
+	if (buffer_is_empty(con->physical.path)) return HANDLER_ERROR;
+
+	mod_cml_patch_connection(srv, con, p);
+
+	buffer_reset(p->basedir);
+	buffer_reset(p->baseurl);
+	buffer_reset(p->trigger_handler);
+
+	if (buffer_is_empty(p->conf.ext)) return HANDLER_GO_ON;
+
+	if (!buffer_is_equal_right_len(con->physical.path, p->conf.ext, p->conf.ext->used - 1)) {
+		return HANDLER_GO_ON;
+	}
+
+	switch(cache_call_lua(srv, con, p, con->physical.path)) {
+	case -1:
+		/* error */
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "cache-error");
+		}
+		con->http_status = 500;
+		return HANDLER_COMEBACK;
+	case 0:
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "cache-hit");
+		}
+		/* cache-hit */
+		buffer_reset(con->physical.path);
+		return HANDLER_FINISHED;
+	case 1:
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "cache-miss");
+		}
+		/* cache miss */
+		return HANDLER_COMEBACK;
+	default:
+		con->http_status = 500;
+		return HANDLER_COMEBACK;
+	}
+}
+
+int mod_cml_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("cache");
+
+	p->init        = mod_cml_init;
+	p->cleanup     = mod_cml_free;
+	p->set_defaults  = mod_cml_set_defaults;
+
+	p->handle_subrequest_start = mod_cml_is_handled;
+	p->handle_physical         = mod_cml_power_magnet;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_cml.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_cml.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_cml.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,43 @@
+#ifndef _MOD_CACHE_H_
+#define _MOD_CACHE_H_
+
+#include "buffer.h"
+#include "server.h"
+#include "response.h"
+
+#include "stream.h"
+#include "plugin.h"
+
+#if defined(HAVE_MEMCACHE_H)
+#include <memcache.h>
+#endif
+
+#define plugin_data mod_cache_plugin_data
+
+typedef struct {
+	buffer *ext;
+
+	array  *mc_hosts;
+	buffer *mc_namespace;
+#if defined(HAVE_MEMCACHE_H)
+	struct memcache *mc;
+#endif
+	buffer *power_magnet;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *basedir;
+	buffer *baseurl;
+
+	buffer *trigger_handler;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+int cache_parse_lua(server *srv, connection *con, plugin_data *p, buffer *fn);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_funcs.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_funcs.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_funcs.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,301 @@
+#include <sys/stat.h>
+#include <time.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <stdio.h>
+
+#include "buffer.h"
+#include "server.h"
+#include "log.h"
+#include "plugin.h"
+#include "response.h"
+
+#include "mod_cml.h"
+#include "mod_cml_funcs.h"
+
+#ifdef USE_OPENSSL
+# include <openssl/md5.h>
+#else
+# include "md5.h"
+#endif
+
+#define HASHLEN 16
+typedef unsigned char HASH[HASHLEN];
+#define HASHHEXLEN 32
+typedef char HASHHEX[HASHHEXLEN+1];
+#ifdef USE_OPENSSL
+#define IN const
+#else
+#define IN
+#endif
+#define OUT
+
+#ifdef HAVE_LUA_H
+
+int f_crypto_md5(lua_State *L) {
+	MD5_CTX Md5Ctx;
+	HASH HA1;
+	buffer b;
+	char hex[33];
+	int n = lua_gettop(L);
+
+	b.ptr = hex;
+	b.used = 0;
+	b.size = sizeof(hex);
+
+	if (n != 1) {
+		lua_pushstring(L, "md5: expected one argument");
+		lua_error(L);
+	}
+
+	if (!lua_isstring(L, 1)) {
+		lua_pushstring(L, "md5: argument has to be a string");
+		lua_error(L);
+	}
+
+	MD5_Init(&Md5Ctx);
+	MD5_Update(&Md5Ctx, (unsigned char *)lua_tostring(L, 1), lua_strlen(L, 1));
+	MD5_Final(HA1, &Md5Ctx);
+
+	buffer_copy_string_hex(&b, (char *)HA1, 16);
+
+	lua_pushstring(L, b.ptr);
+
+	return 1;
+}
+
+
+int f_file_mtime(lua_State *L) {
+	struct stat st;
+	int n = lua_gettop(L);
+
+	if (n != 1) {
+		lua_pushstring(L, "file_mtime: expected one argument");
+		lua_error(L);
+	}
+
+	if (!lua_isstring(L, 1)) {
+		lua_pushstring(L, "file_mtime: argument has to be a string");
+		lua_error(L);
+	}
+
+	if (-1 == stat(lua_tostring(L, 1), &st)) {
+		lua_pushnil(L);
+		return 1;
+	}
+
+	lua_pushnumber(L, st.st_mtime);
+
+	return 1;
+}
+
+int f_dir_files_iter(lua_State *L) {
+	DIR *d;
+	struct dirent *de;
+
+	d = lua_touserdata(L, lua_upvalueindex(1));
+
+	if (NULL == (de = readdir(d))) {
+		/* EOF */
+		closedir(d);
+
+		return 0;
+	} else {
+		lua_pushstring(L, de->d_name);
+		return 1;
+	}
+}
+
+int f_dir_files(lua_State *L) {
+	DIR *d;
+	int n = lua_gettop(L);
+
+	if (n != 1) {
+		lua_pushstring(L, "dir_files: expected one argument");
+		lua_error(L);
+	}
+
+	if (!lua_isstring(L, 1)) {
+		lua_pushstring(L, "dir_files: argument has to be a string");
+		lua_error(L);
+	}
+
+	/* check if there is a valid DIR handle on the stack */
+	if (NULL == (d = opendir(lua_tostring(L, 1)))) {
+		lua_pushnil(L);
+		return 1;
+	}
+
+	/* push d into registry */
+	lua_pushlightuserdata(L, d);
+	lua_pushcclosure(L, f_dir_files_iter, 1);
+
+	return 1;
+}
+
+int f_file_isreg(lua_State *L) {
+	struct stat st;
+	int n = lua_gettop(L);
+
+	if (n != 1) {
+		lua_pushstring(L, "file_isreg: expected one argument");
+		lua_error(L);
+	}
+
+	if (!lua_isstring(L, 1)) {
+		lua_pushstring(L, "file_isreg: argument has to be a string");
+		lua_error(L);
+	}
+
+	if (-1 == stat(lua_tostring(L, 1), &st)) {
+		lua_pushnil(L);
+		return 1;
+	}
+
+	lua_pushnumber(L, S_ISREG(st.st_mode));
+
+	return 1;
+}
+
+int f_file_isdir(lua_State *L) {
+	struct stat st;
+	int n = lua_gettop(L);
+
+	if (n != 1) {
+		lua_pushstring(L, "file_isreg: expected one argument");
+		lua_error(L);
+	}
+
+	if (!lua_isstring(L, 1)) {
+		lua_pushstring(L, "file_isreg: argument has to be a string");
+		lua_error(L);
+	}
+
+	if (-1 == stat(lua_tostring(L, 1), &st)) {
+		lua_pushnil(L);
+		return 1;
+	}
+
+	lua_pushnumber(L, S_ISDIR(st.st_mode));
+
+	return 1;
+}
+
+
+
+#ifdef HAVE_MEMCACHE_H
+int f_memcache_exists(lua_State *L) {
+	char *r;
+	int n = lua_gettop(L);
+	struct memcache *mc;
+
+	if (!lua_islightuserdata(L, lua_upvalueindex(1))) {
+		lua_pushstring(L, "where is my userdata ?");
+		lua_error(L);
+	}
+
+	mc = lua_touserdata(L, lua_upvalueindex(1));
+
+	if (n != 1) {
+		lua_pushstring(L, "expected one argument");
+		lua_error(L);
+	}
+
+	if (!lua_isstring(L, 1)) {
+		lua_pushstring(L, "argument has to be a string");
+		lua_error(L);
+	}
+
+	if (NULL == (r = mc_aget(mc,
+				 lua_tostring(L, 1), lua_strlen(L, 1)))) {
+
+		lua_pushboolean(L, 0);
+		return 1;
+	}
+
+	free(r);
+
+	lua_pushboolean(L, 1);
+	return 1;
+}
+
+int f_memcache_get_string(lua_State *L) {
+	char *r;
+	int n = lua_gettop(L);
+
+	struct memcache *mc;
+
+	if (!lua_islightuserdata(L, lua_upvalueindex(1))) {
+		lua_pushstring(L, "where is my userdata ?");
+		lua_error(L);
+	}
+
+	mc = lua_touserdata(L, lua_upvalueindex(1));
+
+
+	if (n != 1) {
+		lua_pushstring(L, "expected one argument");
+		lua_error(L);
+	}
+
+	if (!lua_isstring(L, 1)) {
+		lua_pushstring(L, "argument has to be a string");
+		lua_error(L);
+	}
+
+	if (NULL == (r = mc_aget(mc,
+				 lua_tostring(L, 1), lua_strlen(L, 1)))) {
+		lua_pushnil(L);
+		return 1;
+	}
+
+	lua_pushstring(L, r);
+
+	free(r);
+
+	return 1;
+}
+
+int f_memcache_get_long(lua_State *L) {
+	char *r;
+	int n = lua_gettop(L);
+
+	struct memcache *mc;
+
+	if (!lua_islightuserdata(L, lua_upvalueindex(1))) {
+		lua_pushstring(L, "where is my userdata ?");
+		lua_error(L);
+	}
+
+	mc = lua_touserdata(L, lua_upvalueindex(1));
+
+
+	if (n != 1) {
+		lua_pushstring(L, "expected one argument");
+		lua_error(L);
+	}
+
+	if (!lua_isstring(L, 1)) {
+		lua_pushstring(L, "argument has to be a string");
+		lua_error(L);
+	}
+
+	if (NULL == (r = mc_aget(mc,
+				 lua_tostring(L, 1), lua_strlen(L, 1)))) {
+		lua_pushnil(L);
+		return 1;
+	}
+
+	lua_pushnumber(L, strtol(r, NULL, 10));
+
+	free(r);
+
+	return 1;
+}
+#endif
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_funcs.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_funcs.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_funcs.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,21 @@
+#ifndef _MOD_CML_FUNCS_H_
+#define _MOD_CML_FUNCS_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_LUA_H
+#include <lua.h>
+
+int f_crypto_md5(lua_State *L);
+int f_file_mtime(lua_State *L);
+int f_file_isreg(lua_State *L);
+int f_file_isdir(lua_State *L);
+int f_dir_files(lua_State *L);
+
+int f_memcache_exists(lua_State *L);
+int f_memcache_get_string(lua_State *L);
+int f_memcache_get_long(lua_State *L);
+#endif
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_lua.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_lua.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_cml_lua.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,468 @@
+#include <assert.h>
+#include <stdio.h>
+#include <errno.h>
+#include <time.h>
+
+#include "mod_cml.h"
+#include "mod_cml_funcs.h"
+#include "log.h"
+#include "stream.h"
+
+#include "stat_cache.h"
+
+#ifdef USE_OPENSSL
+# include <openssl/md5.h>
+#else
+# include "md5.h"
+#endif
+
+#define HASHLEN 16
+typedef unsigned char HASH[HASHLEN];
+#define HASHHEXLEN 32
+typedef char HASHHEX[HASHHEXLEN+1];
+#ifdef USE_OPENSSL
+#define IN const
+#else
+#define IN
+#endif
+#define OUT
+
+#ifdef HAVE_LUA_H
+
+#include <lua.h>
+#include <lualib.h>
+#include <lauxlib.h>
+
+typedef struct {
+	stream st;
+	int done;
+} readme;
+
+static const char * load_file(lua_State *L, void *data, size_t *size) {
+	readme *rm = data;
+
+	UNUSED(L);
+
+	if (rm->done) return 0;
+
+	*size = rm->st.size;
+	rm->done = 1;
+	return rm->st.start;
+}
+
+static int lua_to_c_get_string(lua_State *L, const char *varname, buffer *b) {
+	int curelem;
+
+	lua_pushstring(L, varname);
+
+	curelem = lua_gettop(L);
+	lua_gettable(L, LUA_GLOBALSINDEX);
+
+	/* it should be a table */
+	if (!lua_isstring(L, curelem)) {
+		lua_settop(L, curelem - 1);
+
+		return -1;
+	}
+
+	buffer_copy_string(b, lua_tostring(L, curelem));
+
+	lua_pop(L, 1);
+
+	assert(curelem - 1 == lua_gettop(L));
+
+	return 0;
+}
+
+static int lua_to_c_is_table(lua_State *L, const char *varname) {
+	int curelem;
+
+	lua_pushstring(L, varname);
+
+	curelem = lua_gettop(L);
+	lua_gettable(L, LUA_GLOBALSINDEX);
+
+	/* it should be a table */
+	if (!lua_istable(L, curelem)) {
+		lua_settop(L, curelem - 1);
+
+		return 0;
+	}
+
+	lua_settop(L, curelem - 1);
+
+	assert(curelem - 1 == lua_gettop(L));
+
+	return 1;
+}
+
+static int c_to_lua_push(lua_State *L, int tbl, const char *key, size_t key_len, const char *val, size_t val_len) {
+	lua_pushlstring(L, key, key_len);
+	lua_pushlstring(L, val, val_len);
+	lua_settable(L, tbl);
+
+	return 0;
+}
+
+
+int cache_export_get_params(lua_State *L, int tbl, buffer *qrystr) {
+	size_t is_key = 1;
+	size_t i;
+	char *key = NULL, *val = NULL;
+
+	key = qrystr->ptr;
+
+	/* we need the \0 */
+	for (i = 0; i < qrystr->used; i++) {
+		switch(qrystr->ptr[i]) {
+		case '=':
+			if (is_key) {
+				val = qrystr->ptr + i + 1;
+
+				qrystr->ptr[i] = '\0';
+
+				is_key = 0;
+			}
+
+			break;
+		case '&':
+		case '\0': /* fin symbol */
+			if (!is_key) {
+				/* we need at least a = since the last & */
+
+				/* terminate the value */
+				qrystr->ptr[i] = '\0';
+
+				c_to_lua_push(L, tbl,
+					      key, strlen(key),
+					      val, strlen(val));
+			}
+
+			key = qrystr->ptr + i + 1;
+			val = NULL;
+			is_key = 1;
+			break;
+		}
+	}
+
+	return 0;
+}
+#if 0
+int cache_export_cookie_params(server *srv, connection *con, plugin_data *p) {
+	data_unset *d;
+
+	UNUSED(srv);
+
+	if (NULL != (d = array_get_element(con->request.headers, "Cookie"))) {
+		data_string *ds = (data_string *)d;
+		size_t key = 0, value = 0;
+		size_t is_key = 1, is_sid = 0;
+		size_t i;
+
+		/* found COOKIE */
+		if (!DATA_IS_STRING(d)) return -1;
+		if (ds->value->used == 0) return -1;
+
+		if (ds->value->ptr[0] == '\0' ||
+		    ds->value->ptr[0] == '=' ||
+		    ds->value->ptr[0] == ';') return -1;
+
+		buffer_reset(p->session_id);
+		for (i = 0; i < ds->value->used; i++) {
+			switch(ds->value->ptr[i]) {
+			case '=':
+				if (is_key) {
+					if (0 == strncmp(ds->value->ptr + key, "PHPSESSID", i - key)) {
+						/* found PHP-session-id-key */
+						is_sid = 1;
+					}
+					value = i + 1;
+
+					is_key = 0;
+				}
+
+				break;
+			case ';':
+				if (is_sid) {
+					buffer_copy_string_len(p->session_id, ds->value->ptr + value, i - value);
+				}
+
+				is_sid = 0;
+				key = i + 1;
+				value = 0;
+				is_key = 1;
+				break;
+			case ' ':
+				if (is_key == 1 && key == i) key = i + 1;
+				if (is_key == 0 && value == i) value = i + 1;
+				break;
+			case '\0':
+				if (is_sid) {
+					buffer_copy_string_len(p->session_id, ds->value->ptr + value, i - value);
+				}
+				/* fin */
+				break;
+			}
+		}
+	}
+
+	return 0;
+}
+#endif
+
+int cache_parse_lua(server *srv, connection *con, plugin_data *p, buffer *fn) {
+	lua_State *L;
+	readme rm;
+	int ret = -1;
+	buffer *b = buffer_init();
+	int header_tbl = 0;
+
+	rm.done = 0;
+	stream_open(&rm.st, fn);
+
+	/* push the lua file to the interpreter and see what happends */
+	L = luaL_newstate();
+	luaL_openlibs(L);
+
+	/* register functions */
+	lua_register(L, "md5", f_crypto_md5);
+	lua_register(L, "file_mtime", f_file_mtime);
+	lua_register(L, "file_isreg", f_file_isreg);
+	lua_register(L, "file_isdir", f_file_isreg);
+	lua_register(L, "dir_files", f_dir_files);
+
+#ifdef HAVE_MEMCACHE_H
+	lua_pushliteral(L, "memcache_get_long");
+	lua_pushlightuserdata(L, p->conf.mc);
+	lua_pushcclosure(L, f_memcache_get_long, 1);
+	lua_settable(L, LUA_GLOBALSINDEX);
+
+	lua_pushliteral(L, "memcache_get_string");
+	lua_pushlightuserdata(L, p->conf.mc);
+	lua_pushcclosure(L, f_memcache_get_string, 1);
+	lua_settable(L, LUA_GLOBALSINDEX);
+
+	lua_pushliteral(L, "memcache_exists");
+	lua_pushlightuserdata(L, p->conf.mc);
+	lua_pushcclosure(L, f_memcache_exists, 1);
+	lua_settable(L, LUA_GLOBALSINDEX);
+#endif
+	/* register CGI environment */
+	lua_pushliteral(L, "request");
+	lua_newtable(L);
+	lua_settable(L, LUA_GLOBALSINDEX);
+
+	lua_pushliteral(L, "request");
+	header_tbl = lua_gettop(L);
+	lua_gettable(L, LUA_GLOBALSINDEX);
+
+	c_to_lua_push(L, header_tbl, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri));
+	c_to_lua_push(L, header_tbl, CONST_STR_LEN("SCRIPT_NAME"), CONST_BUF_LEN(con->uri.path));
+	c_to_lua_push(L, header_tbl, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(con->physical.path));
+	c_to_lua_push(L, header_tbl, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(con->physical.doc_root));
+	if (!buffer_is_empty(con->request.pathinfo)) {
+		c_to_lua_push(L, header_tbl, CONST_STR_LEN("PATH_INFO"), CONST_BUF_LEN(con->request.pathinfo));
+	}
+
+	c_to_lua_push(L, header_tbl, CONST_STR_LEN("CWD"), CONST_BUF_LEN(p->basedir));
+	c_to_lua_push(L, header_tbl, CONST_STR_LEN("BASEURL"), CONST_BUF_LEN(p->baseurl));
+
+	/* register GET parameter */
+	lua_pushliteral(L, "get");
+	lua_newtable(L);
+	lua_settable(L, LUA_GLOBALSINDEX);
+
+	lua_pushliteral(L, "get");
+	header_tbl = lua_gettop(L);
+	lua_gettable(L, LUA_GLOBALSINDEX);
+
+	buffer_copy_string_buffer(b, con->uri.query);
+	cache_export_get_params(L, header_tbl, b);
+	buffer_reset(b);
+
+	/* 2 default constants */
+	lua_pushliteral(L, "CACHE_HIT");
+	lua_pushboolean(L, 0);
+	lua_settable(L, LUA_GLOBALSINDEX);
+
+	lua_pushliteral(L, "CACHE_MISS");
+	lua_pushboolean(L, 1);
+	lua_settable(L, LUA_GLOBALSINDEX);
+
+	/* load lua program */
+	if (lua_load(L, load_file, &rm, fn->ptr) || lua_pcall(L,0,1,0)) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				lua_tostring(L,-1));
+
+		goto error;
+	}
+
+	/* get return value */
+	ret = (int)lua_tonumber(L, -1);
+	lua_pop(L, 1);
+
+	/* fetch the data from lua */
+	lua_to_c_get_string(L, "trigger_handler", p->trigger_handler);
+
+	if (0 == lua_to_c_get_string(L, "output_contenttype", b)) {
+		response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(b));
+	}
+
+	if (ret == 0) {
+		/* up to now it is a cache-hit, check if all files exist */
+
+		int curelem;
+		time_t mtime = 0;
+
+		if (!lua_to_c_is_table(L, "output_include")) {
+			log_error_write(srv, __FILE__, __LINE__, "s",
+				"output_include is missing or not a table");
+			ret = -1;
+
+			goto error;
+		}
+
+		lua_pushstring(L, "output_include");
+
+		curelem = lua_gettop(L);
+		lua_gettable(L, LUA_GLOBALSINDEX);
+
+		/* HOW-TO build a etag ?
+		 * as we don't just have one file we have to take the stat()
+		 * from all base files, merge them and build the etag from
+		 * it later.
+		 *
+		 * The mtime of the content is the mtime of the freshest base file
+		 *
+		 * */
+
+		lua_pushnil(L);  /* first key */
+		while (lua_next(L, curelem) != 0) {
+			stat_cache_entry *sce = NULL;
+			/* key' is at index -2 and value' at index -1 */
+
+			if (lua_isstring(L, -1)) {
+				const char *s = lua_tostring(L, -1);
+
+				/* the file is relative, make it absolute */
+				if (s[0] != '/') {
+					buffer_copy_string_buffer(b, p->basedir);
+					buffer_append_string(b, lua_tostring(L, -1));
+				} else {
+					buffer_copy_string(b, lua_tostring(L, -1));
+				}
+
+				if (HANDLER_ERROR == stat_cache_get_entry(srv, con, b, &sce)) {
+					/* stat failed */
+
+					switch(errno) {
+					case ENOENT:
+						/* a file is missing, call the handler to generate it */
+						if (!buffer_is_empty(p->trigger_handler)) {
+							ret = 1; /* cache-miss */
+
+							log_error_write(srv, __FILE__, __LINE__, "s",
+									"a file is missing, calling handler");
+
+							break;
+						} else {
+							/* handler not set -> 500 */
+							ret = -1;
+
+							log_error_write(srv, __FILE__, __LINE__, "s",
+									"a file missing and no handler set");
+
+							break;
+						}
+						break;
+					default:
+						break;
+					}
+				} else {
+					chunkqueue_append_file(con->write_queue, b, 0, sce->st.st_size);
+					if (sce->st.st_mtime > mtime) mtime = sce->st.st_mtime;
+				}
+			} else {
+				/* not a string */
+				ret = -1;
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"not a string");
+				break;
+			}
+
+			lua_pop(L, 1);  /* removes value'; keeps key' for next iteration */
+		}
+
+		lua_settop(L, curelem - 1);
+
+		if (ret == 0) {
+			data_string *ds;
+			char timebuf[sizeof("Sat, 23 Jul 2005 21:20:01 GMT")];
+			buffer tbuf;
+
+			con->file_finished = 1;
+
+			ds = (data_string *)array_get_element(con->response.headers, "Last-Modified");
+
+			/* no Last-Modified specified */
+			if ((mtime) && (NULL == ds)) {
+
+				strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %H:%M:%S GMT", gmtime(&mtime));
+
+				response_header_overwrite(srv, con, CONST_STR_LEN("Last-Modified"), timebuf, sizeof(timebuf) - 1);
+
+
+				tbuf.ptr = timebuf;
+				tbuf.used = sizeof(timebuf);
+				tbuf.size = sizeof(timebuf);
+			} else if (ds) {
+				tbuf.ptr = ds->value->ptr;
+				tbuf.used = ds->value->used;
+				tbuf.size = ds->value->size;
+			} else {
+				tbuf.size = 0;
+				tbuf.used = 0;
+				tbuf.ptr = NULL;
+			}
+
+			if (HANDLER_FINISHED == http_response_handle_cachable(srv, con, &tbuf)) {
+				/* ok, the client already has our content,
+				 * no need to send it again */
+
+				chunkqueue_reset(con->write_queue);
+				ret = 0; /* cache-hit */
+			}
+		} else {
+			chunkqueue_reset(con->write_queue);
+		}
+	}
+
+	if (ret == 1 && !buffer_is_empty(p->trigger_handler)) {
+		/* cache-miss */
+		buffer_copy_string_buffer(con->uri.path, p->baseurl);
+		buffer_append_string_buffer(con->uri.path, p->trigger_handler);
+
+		buffer_copy_string_buffer(con->physical.path, p->basedir);
+		buffer_append_string_buffer(con->physical.path, p->trigger_handler);
+
+		chunkqueue_reset(con->write_queue);
+	}
+
+error:
+	lua_close(L);
+
+	stream_close(&rm.st);
+	buffer_free(b);
+
+	return ret /* cache-error */;
+}
+#else
+int cache_parse_lua(server *srv, connection *con, plugin_data *p, buffer *fn) {
+	UNUSED(srv);
+	UNUSED(con);
+	UNUSED(p);
+	UNUSED(fn);
+	/* error */
+	return -1;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_compress.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_compress.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_compress.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,768 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+#include "response.h"
+#include "stat_cache.h"
+
+#include "plugin.h"
+
+#include "crc32.h"
+#include "etag.h"
+
+#if defined HAVE_ZLIB_H && defined HAVE_LIBZ
+# define USE_ZLIB
+# include <zlib.h>
+#endif
+
+#if defined HAVE_BZLIB_H && defined HAVE_LIBBZ2
+# define USE_BZ2LIB
+/* we don't need stdio interface */
+# define BZ_NO_STDIO
+# include <bzlib.h>
+#endif
+
+#include "sys-mmap.h"
+
+/* request: accept-encoding */
+#define HTTP_ACCEPT_ENCODING_IDENTITY BV(0)
+#define HTTP_ACCEPT_ENCODING_GZIP     BV(1)
+#define HTTP_ACCEPT_ENCODING_DEFLATE  BV(2)
+#define HTTP_ACCEPT_ENCODING_COMPRESS BV(3)
+#define HTTP_ACCEPT_ENCODING_BZIP2    BV(4)
+
+#ifdef __WIN32
+#define mkdir(x,y) mkdir(x)
+#endif
+
+typedef struct {
+	buffer *compress_cache_dir;
+	array  *compress;
+	off_t   compress_max_filesize; /** max filesize in kb */
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+	buffer *ofn;
+	buffer *b;
+
+	plugin_config **config_storage;
+	plugin_config conf;
+} plugin_data;
+
+INIT_FUNC(mod_compress_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->ofn = buffer_init();
+	p->b = buffer_init();
+
+	return p;
+}
+
+FREE_FUNC(mod_compress_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	buffer_free(p->ofn);
+	buffer_free(p->b);
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			array_free(s->compress);
+			buffer_free(s->compress_cache_dir);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+// 0 on success, -1 for error
+int mkdir_recursive(char *dir) {
+	char *p = dir;
+
+	if (!dir || !dir[0])
+		return 0;
+
+	while ((p = strchr(p + 1, '/')) != NULL) {
+
+		*p = '\0';
+		if ((mkdir(dir, 0700) != 0) && (errno != EEXIST)) {
+			*p = '/';
+			return -1;
+		}
+
+		*p++ = '/';
+		if (!*p) return 0; // Ignore trailing slash
+	}
+
+	return (mkdir(dir, 0700) != 0) && (errno != EEXIST) ? -1 : 0;
+}
+
+// 0 on success, -1 for error
+int mkdir_for_file(char *filename) {
+	char *p = filename;
+
+	if (!filename || !filename[0])
+		return -1;
+
+	while ((p = strchr(p + 1, '/')) != NULL) {
+
+		*p = '\0';
+		if ((mkdir(filename, 0700) != 0) && (errno != EEXIST)) {
+			*p = '/';
+			return -1;
+		}
+
+		*p++ = '/';
+		if (!*p) return -1; // Unexpected trailing slash in filename
+	}
+
+	return 0;
+}
+
+SETDEFAULTS_FUNC(mod_compress_setdefaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "compress.cache-dir",             NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "compress.filetype",              NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },
+		{ "compress.max-filesize",          NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },
+		{ NULL,                             NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->compress_cache_dir = buffer_init();
+		s->compress = array_init();
+		s->compress_max_filesize = 0;
+
+		cv[0].destination = s->compress_cache_dir;
+		cv[1].destination = s->compress;
+		cv[2].destination = &(s->compress_max_filesize);
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		if (!buffer_is_empty(s->compress_cache_dir)) {
+			mkdir_recursive(s->compress_cache_dir->ptr);
+
+			struct stat st;
+			if (0 != stat(s->compress_cache_dir->ptr, &st)) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs", "can't stat compress.cache-dir",
+						s->compress_cache_dir, strerror(errno));
+
+				return HANDLER_ERROR;
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+
+}
+
+#ifdef USE_ZLIB
+static int deflate_file_to_buffer_gzip(server *srv, connection *con, plugin_data *p, char *start, off_t st_size, time_t mtime) {
+	unsigned char *c;
+	unsigned long crc;
+	z_stream z;
+
+	UNUSED(srv);
+	UNUSED(con);
+
+	z.zalloc = Z_NULL;
+	z.zfree = Z_NULL;
+	z.opaque = Z_NULL;
+
+	if (Z_OK != deflateInit2(&z,
+				 Z_DEFAULT_COMPRESSION,
+				 Z_DEFLATED,
+				 -MAX_WBITS,  /* supress zlib-header */
+				 8,
+				 Z_DEFAULT_STRATEGY)) {
+		return -1;
+	}
+
+	z.next_in = (unsigned char *)start;
+	z.avail_in = st_size;
+	z.total_in = 0;
+
+
+	buffer_prepare_copy(p->b, (z.avail_in * 1.1) + 12 + 18);
+
+	/* write gzip header */
+
+	c = (unsigned char *)p->b->ptr;
+	c[0] = 0x1f;
+	c[1] = 0x8b;
+	c[2] = Z_DEFLATED;
+	c[3] = 0; /* options */
+	c[4] = (mtime >>  0) & 0xff;
+	c[5] = (mtime >>  8) & 0xff;
+	c[6] = (mtime >> 16) & 0xff;
+	c[7] = (mtime >> 24) & 0xff;
+	c[8] = 0x00; /* extra flags */
+	c[9] = 0x03; /* UNIX */
+
+	p->b->used = 10;
+	z.next_out = (unsigned char *)p->b->ptr + p->b->used;
+	z.avail_out = p->b->size - p->b->used - 8;
+	z.total_out = 0;
+
+	if (Z_STREAM_END != deflate(&z, Z_FINISH)) {
+		deflateEnd(&z);
+		return -1;
+	}
+
+	/* trailer */
+	p->b->used += z.total_out;
+
+	crc = generate_crc32c(start, st_size);
+
+	c = (unsigned char *)p->b->ptr + p->b->used;
+
+	c[0] = (crc >>  0) & 0xff;
+	c[1] = (crc >>  8) & 0xff;
+	c[2] = (crc >> 16) & 0xff;
+	c[3] = (crc >> 24) & 0xff;
+	c[4] = (z.total_in >>  0) & 0xff;
+	c[5] = (z.total_in >>  8) & 0xff;
+	c[6] = (z.total_in >> 16) & 0xff;
+	c[7] = (z.total_in >> 24) & 0xff;
+	p->b->used += 8;
+
+	if (Z_OK != deflateEnd(&z)) {
+		return -1;
+	}
+
+	return 0;
+}
+
+static int deflate_file_to_buffer_deflate(server *srv, connection *con, plugin_data *p, unsigned char *start, off_t st_size) {
+	z_stream z;
+
+	UNUSED(srv);
+	UNUSED(con);
+
+	z.zalloc = Z_NULL;
+	z.zfree = Z_NULL;
+	z.opaque = Z_NULL;
+
+	if (Z_OK != deflateInit2(&z,
+				 Z_DEFAULT_COMPRESSION,
+				 Z_DEFLATED,
+				 -MAX_WBITS,  /* supress zlib-header */
+				 8,
+				 Z_DEFAULT_STRATEGY)) {
+		return -1;
+	}
+
+	z.next_in = start;
+	z.avail_in = st_size;
+	z.total_in = 0;
+
+	buffer_prepare_copy(p->b, (z.avail_in * 1.1) + 12);
+
+	z.next_out = (unsigned char *)p->b->ptr;
+	z.avail_out = p->b->size;
+	z.total_out = 0;
+
+	if (Z_STREAM_END != deflate(&z, Z_FINISH)) {
+		deflateEnd(&z);
+		return -1;
+	}
+
+	/* trailer */
+	p->b->used += z.total_out;
+
+	if (Z_OK != deflateEnd(&z)) {
+		return -1;
+	}
+
+	return 0;
+}
+
+#endif
+
+#ifdef USE_BZ2LIB
+static int deflate_file_to_buffer_bzip2(server *srv, connection *con, plugin_data *p, unsigned char *start, off_t st_size) {
+	bz_stream bz;
+
+	UNUSED(srv);
+	UNUSED(con);
+
+	bz.bzalloc = NULL;
+	bz.bzfree = NULL;
+	bz.opaque = NULL;
+
+	if (BZ_OK != BZ2_bzCompressInit(&bz,
+					9, /* blocksize = 900k */
+					0, /* no output */
+					0)) { /* workFactor: default */
+		return -1;
+	}
+
+	bz.next_in = (char *)start;
+	bz.avail_in = st_size;
+	bz.total_in_lo32 = 0;
+	bz.total_in_hi32 = 0;
+
+	buffer_prepare_copy(p->b, (bz.avail_in * 1.1) + 12);
+
+	bz.next_out = p->b->ptr;
+	bz.avail_out = p->b->size;
+	bz.total_out_lo32 = 0;
+	bz.total_out_hi32 = 0;
+
+	if (BZ_STREAM_END != BZ2_bzCompress(&bz, BZ_FINISH)) {
+		BZ2_bzCompressEnd(&bz);
+		return -1;
+	}
+
+	/* file is too large for now */
+	if (bz.total_out_hi32) return -1;
+
+	/* trailer */
+	p->b->used = bz.total_out_lo32;
+
+	if (BZ_OK != BZ2_bzCompressEnd(&bz)) {
+		return -1;
+	}
+
+	return 0;
+}
+#endif
+
+static int deflate_file_to_file(server *srv, connection *con, plugin_data *p, buffer *fn, stat_cache_entry *sce, int type) {
+	int ifd, ofd;
+	int ret = -1;
+	void *start;
+	const char *filename = fn->ptr;
+	ssize_t r;
+
+	/* overflow */
+	if ((off_t)(sce->st.st_size * 1.1) < sce->st.st_size) return -1;
+
+	/* don't mmap files > 128Mb
+	 *
+	 * we could use a sliding window, but currently there is no need for it
+	 */
+
+	if (sce->st.st_size > 128 * 1024 * 1024) return -1;
+
+	buffer_reset(p->ofn);
+	buffer_copy_string_buffer(p->ofn, p->conf.compress_cache_dir);
+	BUFFER_APPEND_SLASH(p->ofn);
+
+	if (0 == strncmp(con->physical.path->ptr, con->physical.doc_root->ptr, con->physical.doc_root->used-1)) {
+		buffer_append_string(p->ofn, con->physical.path->ptr + con->physical.doc_root->used - 1);
+		buffer_copy_string_buffer(p->b, p->ofn);
+	} else {
+		buffer_append_string_buffer(p->ofn, con->uri.path);
+	}
+
+	switch(type) {
+	case HTTP_ACCEPT_ENCODING_GZIP:
+		buffer_append_string(p->ofn, "-gzip-");
+		break;
+	case HTTP_ACCEPT_ENCODING_DEFLATE:
+		buffer_append_string(p->ofn, "-deflate-");
+		break;
+	case HTTP_ACCEPT_ENCODING_BZIP2:
+		buffer_append_string(p->ofn, "-bzip2-");
+		break;
+	default:
+		log_error_write(srv, __FILE__, __LINE__, "sd", "unknown compression type", type);
+		return -1;
+	}
+
+	buffer_append_string_buffer(p->ofn, sce->etag);
+
+	if (-1 == mkdir_for_file(p->ofn->ptr)) {
+		log_error_write(srv, __FILE__, __LINE__, "sb", "couldn't create directory for file", p->ofn);
+		return -1;
+	}
+
+	if (-1 == (ofd = open(p->ofn->ptr, O_WRONLY | O_CREAT | O_EXCL | O_BINARY, 0600))) {
+		if (errno == EEXIST) {
+			/* cache-entry exists */
+#if 0
+			log_error_write(srv, __FILE__, __LINE__, "bs", p->ofn, "compress-cache hit");
+#endif
+			buffer_copy_string_buffer(con->physical.path, p->ofn);
+
+			return 0;
+		}
+
+		log_error_write(srv, __FILE__, __LINE__, "sbss", "creating cachefile", p->ofn, "failed", strerror(errno));
+
+		return -1;
+	}
+#if 0
+	log_error_write(srv, __FILE__, __LINE__, "bs", p->ofn, "compress-cache miss");
+#endif
+	if (-1 == (ifd = open(filename, O_RDONLY | O_BINARY))) {
+		log_error_write(srv, __FILE__, __LINE__, "sbss", "opening plain-file", fn, "failed", strerror(errno));
+
+		close(ofd);
+
+		/* Remove the incomplete cache file, so that later hits aren't served from it */
+		if (-1 == unlink(p->ofn->ptr)) {
+			log_error_write(srv, __FILE__, __LINE__, "sbss", "unlinking incomplete cachefile", p->ofn, "failed:", strerror(errno));
+		}
+
+		return -1;
+	}
+
+
+	if (MAP_FAILED == (start = mmap(NULL, sce->st.st_size, PROT_READ, MAP_SHARED, ifd, 0))) {
+		log_error_write(srv, __FILE__, __LINE__, "sbss", "mmaping", fn, "failed", strerror(errno));
+
+		close(ofd);
+		close(ifd);
+
+		/* Remove the incomplete cache file, so that later hits aren't served from it */
+		if (-1 == unlink(p->ofn->ptr)) {
+			log_error_write(srv, __FILE__, __LINE__, "sbss", "unlinking incomplete cachefile", p->ofn, "failed:", strerror(errno));
+		}
+
+		return -1;
+	}
+
+	switch(type) {
+#ifdef USE_ZLIB
+	case HTTP_ACCEPT_ENCODING_GZIP:
+		ret = deflate_file_to_buffer_gzip(srv, con, p, start, sce->st.st_size, sce->st.st_mtime);
+		break;
+	case HTTP_ACCEPT_ENCODING_DEFLATE:
+		ret = deflate_file_to_buffer_deflate(srv, con, p, start, sce->st.st_size);
+		break;
+#endif
+#ifdef USE_BZ2LIB
+	case HTTP_ACCEPT_ENCODING_BZIP2:
+		ret = deflate_file_to_buffer_bzip2(srv, con, p, start, sce->st.st_size);
+		break;
+#endif
+	default:
+		ret = -1;
+		break;
+	}
+
+	if (ret == 0) {
+		r = write(ofd, p->b->ptr, p->b->used);
+		if (-1 == r) {
+			log_error_write(srv, __FILE__, __LINE__, "sbss", "writing cachefile", p->ofn, "failed:", strerror(errno));
+			ret = -1;
+		} else if ((size_t)r != p->b->used) {
+			log_error_write(srv, __FILE__, __LINE__, "sbs", "writing cachefile", p->ofn, "failed: not enough bytes written");
+			ret = -1;
+		}
+	}
+
+	munmap(start, sce->st.st_size);
+	close(ofd);
+	close(ifd);
+
+	if (ret != 0) {
+		/* Remove the incomplete cache file, so that later hits aren't served from it */
+		if (-1 == unlink(p->ofn->ptr)) {
+			log_error_write(srv, __FILE__, __LINE__, "sbss", "unlinking incomplete cachefile", p->ofn, "failed:", strerror(errno));
+		}
+
+		return -1;
+	}
+
+	buffer_copy_string_buffer(con->physical.path, p->ofn);
+
+	return 0;
+}
+
+static int deflate_file_to_buffer(server *srv, connection *con, plugin_data *p, buffer *fn, stat_cache_entry *sce, int type) {
+	int ifd;
+	int ret = -1;
+	void *start;
+	buffer *b;
+
+	/* overflow */
+	if ((off_t)(sce->st.st_size * 1.1) < sce->st.st_size) return -1;
+
+	/* don't mmap files > 128M
+	 *
+	 * we could use a sliding window, but currently there is no need for it
+	 */
+
+	if (sce->st.st_size > 128 * 1024 * 1024) return -1;
+
+
+	if (-1 == (ifd = open(fn->ptr, O_RDONLY | O_BINARY))) {
+		log_error_write(srv, __FILE__, __LINE__, "sbss", "opening plain-file", fn, "failed", strerror(errno));
+
+		return -1;
+	}
+
+
+	if (MAP_FAILED == (start = mmap(NULL, sce->st.st_size, PROT_READ, MAP_SHARED, ifd, 0))) {
+		log_error_write(srv, __FILE__, __LINE__, "sbss", "mmaping", fn, "failed", strerror(errno));
+
+		close(ifd);
+		return -1;
+	}
+
+	switch(type) {
+#ifdef USE_ZLIB
+	case HTTP_ACCEPT_ENCODING_GZIP:
+		ret = deflate_file_to_buffer_gzip(srv, con, p, start, sce->st.st_size, sce->st.st_mtime);
+		break;
+	case HTTP_ACCEPT_ENCODING_DEFLATE:
+		ret = deflate_file_to_buffer_deflate(srv, con, p, start, sce->st.st_size);
+		break;
+#endif
+#ifdef USE_BZ2LIB
+	case HTTP_ACCEPT_ENCODING_BZIP2:
+		ret = deflate_file_to_buffer_bzip2(srv, con, p, start, sce->st.st_size);
+		break;
+#endif
+	default:
+		ret = -1;
+		break;
+	}
+
+	munmap(start, sce->st.st_size);
+	close(ifd);
+
+	if (ret != 0) return -1;
+
+	chunkqueue_reset(con->write_queue);
+	b = chunkqueue_get_append_buffer(con->write_queue);
+	buffer_copy_memory(b, p->b->ptr, p->b->used + 1);
+
+	buffer_reset(con->physical.path);
+
+	con->file_finished = 1;
+	con->file_started  = 1;
+
+	return 0;
+}
+
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_compress_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(compress_cache_dir);
+	PATCH(compress);
+	PATCH(compress_max_filesize);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("compress.cache-dir"))) {
+				PATCH(compress_cache_dir);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("compress.filetype"))) {
+				PATCH(compress);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("compress.max-filesize"))) {
+				PATCH(compress_max_filesize);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+PHYSICALPATH_FUNC(mod_compress_physical) {
+	plugin_data *p = p_d;
+	size_t m;
+	off_t max_fsize;
+	stat_cache_entry *sce = NULL;
+
+	if (con->mode != DIRECT || con->http_status) return HANDLER_GO_ON;
+
+	/* only GET and POST can get compressed */
+	if (con->request.http_method != HTTP_METHOD_GET &&
+	    con->request.http_method != HTTP_METHOD_POST) {
+		return HANDLER_GO_ON;
+	}
+
+	if (buffer_is_empty(con->physical.path)) {
+		return HANDLER_GO_ON;
+	}
+
+	mod_compress_patch_connection(srv, con, p);
+
+	max_fsize = p->conf.compress_max_filesize;
+
+	stat_cache_get_entry(srv, con, con->physical.path, &sce);
+
+	/* don't compress files that are too large as we need to much time to handle them */
+	if (max_fsize && (sce->st.st_size >> 10) > max_fsize) return HANDLER_GO_ON;
+
+	/* don't try to compress files less than 128 bytes
+	 *
+	 * - extra overhead for compression
+	 * - mmap() fails for st_size = 0 :)
+	 */
+	if (sce->st.st_size < 128) return HANDLER_GO_ON;
+
+	/* check if mimetype is in compress-config */
+	for (m = 0; m < p->conf.compress->used; m++) {
+		data_string *compress_ds = (data_string *)p->conf.compress->data[m];
+
+		if (!compress_ds) {
+			log_error_write(srv, __FILE__, __LINE__, "sbb", "evil", con->physical.path, con->uri.path);
+
+			return HANDLER_GO_ON;
+		}
+
+		if (buffer_is_equal(compress_ds->value, sce->content_type)) {
+			/* mimetype found */
+			data_string *ds;
+
+			/* the response might change according to Accept-Encoding */
+			response_header_insert(srv, con, CONST_STR_LEN("Vary"), CONST_STR_LEN("Accept-Encoding"));
+
+			if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Accept-Encoding"))) {
+				int accept_encoding = 0;
+				char *value = ds->value->ptr;
+				int srv_encodings = 0;
+				int matched_encodings = 0;
+
+				/* get client side support encodings */
+				if (NULL != strstr(value, "gzip")) accept_encoding |= HTTP_ACCEPT_ENCODING_GZIP;
+				if (NULL != strstr(value, "deflate")) accept_encoding |= HTTP_ACCEPT_ENCODING_DEFLATE;
+				if (NULL != strstr(value, "compress")) accept_encoding |= HTTP_ACCEPT_ENCODING_COMPRESS;
+				if (NULL != strstr(value, "bzip2")) accept_encoding |= HTTP_ACCEPT_ENCODING_BZIP2;
+				if (NULL != strstr(value, "identity")) accept_encoding |= HTTP_ACCEPT_ENCODING_IDENTITY;
+
+				/* get server side supported ones */
+#ifdef USE_BZ2LIB
+				srv_encodings |= HTTP_ACCEPT_ENCODING_BZIP2;
+#endif
+#ifdef USE_ZLIB
+				srv_encodings |= HTTP_ACCEPT_ENCODING_GZIP;
+				srv_encodings |= HTTP_ACCEPT_ENCODING_DEFLATE;
+#endif
+
+				/* find matching entries */
+				matched_encodings = accept_encoding & srv_encodings;
+
+				if (matched_encodings) {
+					const char *dflt_gzip = "gzip";
+					const char *dflt_deflate = "deflate";
+					const char *dflt_bzip2 = "bzip2";
+
+					const char *compression_name = NULL;
+					int compression_type = 0;
+
+					/* select best matching encoding */
+					if (matched_encodings & HTTP_ACCEPT_ENCODING_BZIP2) {
+						compression_type = HTTP_ACCEPT_ENCODING_BZIP2;
+						compression_name = dflt_bzip2;
+					} else if (matched_encodings & HTTP_ACCEPT_ENCODING_GZIP) {
+						compression_type = HTTP_ACCEPT_ENCODING_GZIP;
+						compression_name = dflt_gzip;
+					} else if (matched_encodings & HTTP_ACCEPT_ENCODING_DEFLATE) {
+						compression_type = HTTP_ACCEPT_ENCODING_DEFLATE;
+						compression_name = dflt_deflate;
+					}
+
+					/* deflate it */
+					if (p->conf.compress_cache_dir->used) {
+						if (0 == deflate_file_to_file(srv, con, p,
+									      con->physical.path, sce, compression_type)) {
+							buffer *mtime;
+
+							response_header_overwrite(srv, con, CONST_STR_LEN("Content-Encoding"), compression_name, strlen(compression_name));
+
+							mtime = strftime_cache_get(srv, sce->st.st_mtime);
+							response_header_overwrite(srv, con, CONST_STR_LEN("Last-Modified"), CONST_BUF_LEN(mtime));
+
+							etag_mutate(con->physical.etag, sce->etag);
+							response_header_overwrite(srv, con, CONST_STR_LEN("ETag"), CONST_BUF_LEN(con->physical.etag));
+
+							response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(sce->content_type));
+
+							return HANDLER_GO_ON;
+						}
+					} else if (0 == deflate_file_to_buffer(srv, con, p,
+									       con->physical.path, sce, compression_type)) {
+						buffer *mtime;
+
+						response_header_overwrite(srv, con, CONST_STR_LEN("Content-Encoding"), compression_name, strlen(compression_name));
+
+						mtime = strftime_cache_get(srv, sce->st.st_mtime);
+						response_header_overwrite(srv, con, CONST_STR_LEN("Last-Modified"), CONST_BUF_LEN(mtime));
+
+						etag_mutate(con->physical.etag, sce->etag);
+						response_header_overwrite(srv, con, CONST_STR_LEN("ETag"), CONST_BUF_LEN(con->physical.etag));
+
+						response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(sce->content_type));
+
+						return HANDLER_FINISHED;
+					}
+					break;
+				}
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+int mod_compress_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("compress");
+
+	p->init        = mod_compress_init;
+	p->set_defaults = mod_compress_setdefaults;
+	p->handle_subrequest_start  = mod_compress_physical;
+	p->cleanup     = mod_compress_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_dirlisting.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_dirlisting.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_dirlisting.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,909 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dirent.h>
+#include <assert.h>
+#include <errno.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <time.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#include "response.h"
+#include "stat_cache.h"
+#include "stream.h"
+
+/**
+ * this is a dirlisting for a lighttpd plugin
+ */
+
+
+#ifdef HAVE_SYS_SYSLIMITS_H
+#include <sys/syslimits.h>
+#endif
+
+#ifdef HAVE_ATTR_ATTRIBUTES_H
+#include <attr/attributes.h>
+#endif
+
+/* plugin config for all request/connections */
+
+typedef struct {
+#ifdef HAVE_PCRE_H
+	pcre *regex;
+#endif
+	buffer *string;
+} excludes;
+
+typedef struct {
+	excludes **ptr;
+
+	size_t used;
+	size_t size;
+} excludes_buffer;
+
+typedef struct {
+	unsigned short dir_listing;
+	unsigned short hide_dot_files;
+	unsigned short show_readme;
+	unsigned short hide_readme_file;
+	unsigned short show_header;
+	unsigned short hide_header_file;
+
+	excludes_buffer *excludes;
+
+	buffer *external_css;
+	buffer *encoding;
+	buffer *set_footer;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *tmp_buf;
+	buffer *content_charset;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+excludes_buffer *excludes_buffer_init(void) {
+	excludes_buffer *exb;
+
+	exb = calloc(1, sizeof(*exb));
+
+	return exb;
+}
+
+int excludes_buffer_append(excludes_buffer *exb, buffer *string) {
+#ifdef HAVE_PCRE_H
+	size_t i;
+	const char *errptr;
+	int erroff;
+
+	if (!string) return -1;
+
+	if (exb->size == 0) {
+		exb->size = 4;
+		exb->used = 0;
+
+		exb->ptr = malloc(exb->size * sizeof(*exb->ptr));
+
+		for(i = 0; i < exb->size ; i++) {
+			exb->ptr[i] = calloc(1, sizeof(**exb->ptr));
+		}
+	} else if (exb->used == exb->size) {
+		exb->size += 4;
+
+		exb->ptr = realloc(exb->ptr, exb->size * sizeof(*exb->ptr));
+
+		for(i = exb->used; i < exb->size; i++) {
+			exb->ptr[i] = calloc(1, sizeof(**exb->ptr));
+		}
+	}
+
+
+	if (NULL == (exb->ptr[exb->used]->regex = pcre_compile(string->ptr, 0,
+						    &errptr, &erroff, NULL))) {
+		return -1;
+	}
+
+	exb->ptr[exb->used]->string = buffer_init();
+	buffer_copy_string_buffer(exb->ptr[exb->used]->string, string);
+
+	exb->used++;
+
+	return 0;
+#else
+	UNUSED(exb);
+	UNUSED(string);
+
+	return -1;
+#endif
+}
+
+void excludes_buffer_free(excludes_buffer *exb) {
+#ifdef HAVE_PCRE_H
+	size_t i;
+
+	for (i = 0; i < exb->size; i++) {
+		if (exb->ptr[i]->regex) pcre_free(exb->ptr[i]->regex);
+		if (exb->ptr[i]->string) buffer_free(exb->ptr[i]->string);
+		free(exb->ptr[i]);
+	}
+
+	if (exb->ptr) free(exb->ptr);
+#endif
+
+	free(exb);
+}
+
+/* init the plugin data */
+INIT_FUNC(mod_dirlisting_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->tmp_buf = buffer_init();
+	p->content_charset = buffer_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_dirlisting_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			excludes_buffer_free(s->excludes);
+			buffer_free(s->external_css);
+			buffer_free(s->encoding);
+			buffer_free(s->set_footer);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	buffer_free(p->tmp_buf);
+	buffer_free(p->content_charset);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+static int parse_config_entry(server *srv, plugin_config *s, array *ca, const char *option) {
+	data_unset *du;
+
+	if (NULL != (du = array_get_element(ca, option))) {
+		data_array *da = (data_array *)du;
+		size_t j;
+
+		if (du->type != TYPE_ARRAY) {
+			log_error_write(srv, __FILE__, __LINE__, "sss",
+				"unexpected type for key: ", option, "array of strings");
+
+			return HANDLER_ERROR;
+		}
+
+		da = (data_array *)du;
+
+		for (j = 0; j < da->value->used; j++) {
+			if (da->value->data[j]->type != TYPE_STRING) {
+				log_error_write(srv, __FILE__, __LINE__, "sssbs",
+					"unexpected type for key: ", option, "[",
+					da->value->data[j]->key, "](string)");
+
+				return HANDLER_ERROR;
+			}
+
+			if (0 != excludes_buffer_append(s->excludes,
+				    ((data_string *)(da->value->data[j]))->value)) {
+#ifdef HAVE_PCRE_H
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"pcre-compile failed for", ((data_string *)(da->value->data[j]))->value);
+#else
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"pcre support is missing, please install libpcre and the headers");
+#endif
+			}
+		}
+	}
+
+	return 0;
+}
+
+/* handle plugin config and check values */
+
+#define CONFIG_EXCLUDE          "dir-listing.exclude"
+#define CONFIG_ACTIVATE         "dir-listing.activate"
+#define CONFIG_HIDE_DOTFILES    "dir-listing.hide-dotfiles"
+#define CONFIG_EXTERNAL_CSS     "dir-listing.external-css"
+#define CONFIG_ENCODING         "dir-listing.encoding"
+#define CONFIG_SHOW_README      "dir-listing.show-readme"
+#define CONFIG_HIDE_README_FILE "dir-listing.hide-readme-file"
+#define CONFIG_SHOW_HEADER      "dir-listing.show-header"
+#define CONFIG_HIDE_HEADER_FILE "dir-listing.hide-header-file"
+#define CONFIG_DIR_LISTING      "server.dir-listing"
+#define CONFIG_SET_FOOTER       "dir-listing.set-footer"
+
+
+SETDEFAULTS_FUNC(mod_dirlisting_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ CONFIG_EXCLUDE,          NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION },   /* 0 */
+		{ CONFIG_ACTIVATE,         NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 1 */
+		{ CONFIG_HIDE_DOTFILES,    NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 2 */
+		{ CONFIG_EXTERNAL_CSS,     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },  /* 3 */
+		{ CONFIG_ENCODING,         NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },  /* 4 */
+		{ CONFIG_SHOW_README,      NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 5 */
+		{ CONFIG_HIDE_README_FILE, NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 6 */
+		{ CONFIG_SHOW_HEADER,      NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 7 */
+		{ CONFIG_HIDE_HEADER_FILE, NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 8 */
+		{ CONFIG_DIR_LISTING,      NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 9 */
+		{ CONFIG_SET_FOOTER,       NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION }, /* 10 */
+
+		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+		array *ca;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->excludes = excludes_buffer_init();
+		s->dir_listing = 0;
+		s->external_css = buffer_init();
+		s->hide_dot_files = 0;
+		s->show_readme = 0;
+		s->hide_readme_file = 0;
+		s->show_header = 0;
+		s->hide_header_file = 0;
+		s->encoding = buffer_init();
+		s->set_footer = buffer_init();
+
+		cv[0].destination = s->excludes;
+		cv[1].destination = &(s->dir_listing);
+		cv[2].destination = &(s->hide_dot_files);
+		cv[3].destination = s->external_css;
+		cv[4].destination = s->encoding;
+		cv[5].destination = &(s->show_readme);
+		cv[6].destination = &(s->hide_readme_file);
+		cv[7].destination = &(s->show_header);
+		cv[8].destination = &(s->hide_header_file);
+		cv[9].destination = &(s->dir_listing); /* old name */
+		cv[10].destination = s->set_footer;
+
+		p->config_storage[i] = s;
+		ca = ((data_config *)srv->config_context->data[i])->value;
+
+		if (0 != config_insert_values_global(srv, ca, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		parse_config_entry(srv, s, ca, CONFIG_EXCLUDE);
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_dirlisting_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(dir_listing);
+	PATCH(external_css);
+	PATCH(hide_dot_files);
+	PATCH(encoding);
+	PATCH(show_readme);
+	PATCH(hide_readme_file);
+	PATCH(show_header);
+	PATCH(hide_header_file);
+	PATCH(excludes);
+	PATCH(set_footer);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_ACTIVATE)) ||
+			    buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_DIR_LISTING))) {
+				PATCH(dir_listing);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_HIDE_DOTFILES))) {
+				PATCH(hide_dot_files);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_EXTERNAL_CSS))) {
+				PATCH(external_css);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_ENCODING))) {
+				PATCH(encoding);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_SHOW_README))) {
+				PATCH(show_readme);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_HIDE_README_FILE))) {
+				PATCH(hide_readme_file);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_SHOW_HEADER))) {
+				PATCH(show_header);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_HIDE_HEADER_FILE))) {
+				PATCH(hide_header_file);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_SET_FOOTER))) {
+				PATCH(set_footer);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN(CONFIG_EXCLUDE))) {
+				PATCH(excludes);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+typedef struct {
+	size_t  namelen;
+	time_t  mtime;
+	off_t   size;
+} dirls_entry_t;
+
+typedef struct {
+	dirls_entry_t **ent;
+	size_t used;
+	size_t size;
+} dirls_list_t;
+
+#define DIRLIST_ENT_NAME(ent)	((char*)(ent) + sizeof(dirls_entry_t))
+#define DIRLIST_BLOB_SIZE		16
+
+/* simple combsort algorithm */
+static void http_dirls_sort(dirls_entry_t **ent, int num) {
+	int gap = num;
+	int i, j;
+	int swapped;
+	dirls_entry_t *tmp;
+
+	do {
+		gap = (gap * 10) / 13;
+		if (gap == 9 || gap == 10)
+			gap = 11;
+		if (gap < 1)
+			gap = 1;
+		swapped = 0;
+
+		for (i = 0; i < num - gap; i++) {
+			j = i + gap;
+			if (strcmp(DIRLIST_ENT_NAME(ent[i]), DIRLIST_ENT_NAME(ent[j])) > 0) {
+				tmp = ent[i];
+				ent[i] = ent[j];
+				ent[j] = tmp;
+				swapped = 1;
+			}
+		}
+
+	} while (gap > 1 || swapped);
+}
+
+/* buffer must be able to hold "999.9K"
+ * conversion is simple but not perfect
+ */
+static int http_list_directory_sizefmt(char *buf, off_t size) {
+	const char unit[] = "KMGTPE";	/* Kilo, Mega, Tera, Peta, Exa */
+	const char *u = unit - 1;		/* u will always increment at least once */
+	int remain;
+	char *out = buf;
+
+	if (size < 100)
+		size += 99;
+	if (size < 100)
+		size = 0;
+
+	while (1) {
+		remain = (int) size & 1023;
+		size >>= 10;
+		u++;
+		if ((size & (~0 ^ 1023)) == 0)
+			break;
+	}
+
+	remain /= 100;
+	if (remain > 9)
+		remain = 9;
+	if (size > 999) {
+		size   = 0;
+		remain = 9;
+		u++;
+	}
+
+	out   += LI_ltostr(out, size);
+	out[0] = '.';
+	out[1] = remain + '0';
+	out[2] = *u;
+	out[3] = '\0';
+
+	return (out + 3 - buf);
+}
+
+static void http_list_directory_header(server *srv, connection *con, plugin_data *p, buffer *out) {
+	UNUSED(srv);
+
+	BUFFER_APPEND_STRING_CONST(out,
+		"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n"
+		"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\">\n"
+		"<head>\n"
+		"<title>Index of "
+	);
+	buffer_append_string_encoded(out, CONST_BUF_LEN(con->uri.path), ENCODING_MINIMAL_XML);
+	BUFFER_APPEND_STRING_CONST(out, "</title>\n");
+
+	if (p->conf.external_css->used > 1) {
+		BUFFER_APPEND_STRING_CONST(out, "<link rel=\"stylesheet\" type=\"text/css\" href=\"");
+		buffer_append_string_buffer(out, p->conf.external_css);
+		BUFFER_APPEND_STRING_CONST(out, "\" />\n");
+	} else {
+		BUFFER_APPEND_STRING_CONST(out,
+			"<style type=\"text/css\">\n"
+			"a, a:active {text-decoration: none; color: blue;}\n"
+			"a:visited {color: #48468F;}\n"
+			"a:hover, a:focus {text-decoration: underline; color: red;}\n"
+			"body {background-color: #F5F5F5;}\n"
+			"h2 {margin-bottom: 12px;}\n"
+			"table {margin-left: 12px;}\n"
+			"th, td {"
+			" font: 90% monospace;"
+			" text-align: left;"
+			"}\n"
+			"th {"
+			" font-weight: bold;"
+			" padding-right: 14px;"
+			" padding-bottom: 3px;"
+			"}\n"
+		);
+		BUFFER_APPEND_STRING_CONST(out,
+			"td {padding-right: 14px;}\n"
+			"td.s, th.s {text-align: right;}\n"
+			"div.list {"
+			" background-color: white;"
+			" border-top: 1px solid #646464;"
+			" border-bottom: 1px solid #646464;"
+			" padding-top: 10px;"
+			" padding-bottom: 14px;"
+			"}\n"
+			"div.foot {"
+			" font: 90% monospace;"
+			" color: #787878;"
+			" padding-top: 4px;"
+			"}\n"
+			"</style>\n"
+		);
+	}
+
+	BUFFER_APPEND_STRING_CONST(out, "</head>\n<body>\n");
+
+	/* HEADER.txt */
+	if (p->conf.show_header) {
+		stream s;
+		/* if we have a HEADER file, display it in <pre class="header"></pre> */
+
+		buffer_copy_string_buffer(p->tmp_buf, con->physical.path);
+		BUFFER_APPEND_SLASH(p->tmp_buf);
+		BUFFER_APPEND_STRING_CONST(p->tmp_buf, "HEADER.txt");
+
+		if (-1 != stream_open(&s, p->tmp_buf)) {
+			BUFFER_APPEND_STRING_CONST(out, "<pre class=\"header\">");
+			buffer_append_string_encoded(out, s.start, s.size, ENCODING_MINIMAL_XML);
+			BUFFER_APPEND_STRING_CONST(out, "</pre>");
+		}
+		stream_close(&s);
+	}
+
+	BUFFER_APPEND_STRING_CONST(out, "<h2>Index of ");
+	buffer_append_string_encoded(out, CONST_BUF_LEN(con->uri.path), ENCODING_MINIMAL_XML);
+	BUFFER_APPEND_STRING_CONST(out,
+		"</h2>\n"
+		"<div class=\"list\">\n"
+		"<table summary=\"Directory Listing\" cellpadding=\"0\" cellspacing=\"0\">\n"
+		"<thead>"
+		"<tr>"
+			"<th class=\"n\">Name</th>"
+			"<th class=\"m\">Last Modified</th>"
+			"<th class=\"s\">Size</th>"
+			"<th class=\"t\">Type</th>"
+		"</tr>"
+		"</thead>\n"
+		"<tbody>\n"
+		"<tr>"
+			"<td class=\"n\"><a href=\"../\">Parent Directory</a>/</td>"
+			"<td class=\"m\"> </td>"
+			"<td class=\"s\">-  </td>"
+			"<td class=\"t\">Directory</td>"
+		"</tr>\n"
+	);
+}
+
+static void http_list_directory_footer(server *srv, connection *con, plugin_data *p, buffer *out) {
+	UNUSED(srv);
+
+	BUFFER_APPEND_STRING_CONST(out,
+		"</tbody>\n"
+		"</table>\n"
+		"</div>\n"
+	);
+
+	if (p->conf.show_readme) {
+		stream s;
+		/* if we have a README file, display it in <pre class="readme"></pre> */
+
+		buffer_copy_string_buffer(p->tmp_buf,  con->physical.path);
+		BUFFER_APPEND_SLASH(p->tmp_buf);
+		BUFFER_APPEND_STRING_CONST(p->tmp_buf, "README.txt");
+
+		if (-1 != stream_open(&s, p->tmp_buf)) {
+			BUFFER_APPEND_STRING_CONST(out, "<pre class=\"readme\">");
+			buffer_append_string_encoded(out, s.start, s.size, ENCODING_MINIMAL_XML);
+			BUFFER_APPEND_STRING_CONST(out, "</pre>");
+		}
+		stream_close(&s);
+	}
+
+	BUFFER_APPEND_STRING_CONST(out,
+		"<div class=\"foot\">"
+	);
+
+	if (p->conf.set_footer->used > 1) {
+		buffer_append_string_buffer(out, p->conf.set_footer);
+	} else if (buffer_is_empty(con->conf.server_tag)) {
+		BUFFER_APPEND_STRING_CONST(out, PACKAGE_NAME "/" PACKAGE_VERSION);
+	} else {
+		buffer_append_string_buffer(out, con->conf.server_tag);
+	}
+
+	BUFFER_APPEND_STRING_CONST(out,
+		"</div>\n"
+		"</body>\n"
+		"</html>\n"
+	);
+}
+
+static int http_list_directory(server *srv, connection *con, plugin_data *p, buffer *dir) {
+	DIR *dp;
+	buffer *out;
+	struct dirent *dent;
+	struct stat st;
+	char *path, *path_file;
+	size_t i;
+	int hide_dotfiles = p->conf.hide_dot_files;
+	dirls_list_t dirs, files, *list;
+	dirls_entry_t *tmp;
+	char sizebuf[sizeof("999.9K")];
+	char datebuf[sizeof("2005-Jan-01 22:23:24")];
+	size_t k;
+	const char *content_type;
+	long name_max;
+#ifdef HAVE_XATTR
+	char attrval[128];
+	int attrlen;
+#endif
+#ifdef HAVE_LOCALTIME_R
+	struct tm tm;
+#endif
+
+	if (dir->used == 0) return -1;
+
+	i = dir->used - 1;
+
+#ifdef HAVE_PATHCONF
+	if (-1 == (name_max = pathconf(dir->ptr, _PC_NAME_MAX))) {
+#ifdef NAME_MAX
+		name_max = NAME_MAX;
+#else
+		name_max = 255; /* stupid default */
+#endif
+	}
+#elif defined __WIN32
+	name_max = FILENAME_MAX;
+#else
+	name_max = NAME_MAX;
+#endif
+
+	path = malloc(dir->used + name_max);
+	assert(path);
+	strcpy(path, dir->ptr);
+	path_file = path + i;
+
+	if (NULL == (dp = opendir(path))) {
+		log_error_write(srv, __FILE__, __LINE__, "sbs",
+			"opendir failed:", dir, strerror(errno));
+
+		free(path);
+		return -1;
+	}
+
+	dirs.ent   = (dirls_entry_t**) malloc(sizeof(dirls_entry_t*) * DIRLIST_BLOB_SIZE);
+	assert(dirs.ent);
+	dirs.size  = DIRLIST_BLOB_SIZE;
+	dirs.used  = 0;
+	files.ent  = (dirls_entry_t**) malloc(sizeof(dirls_entry_t*) * DIRLIST_BLOB_SIZE);
+	assert(files.ent);
+	files.size = DIRLIST_BLOB_SIZE;
+	files.used = 0;
+
+	while ((dent = readdir(dp)) != NULL) {
+		unsigned short exclude_match = 0;
+
+		if (dent->d_name[0] == '.') {
+			if (hide_dotfiles)
+				continue;
+			if (dent->d_name[1] == '\0')
+				continue;
+			if (dent->d_name[1] == '.' && dent->d_name[2] == '\0')
+				continue;
+		}
+
+		if (p->conf.hide_readme_file) {
+			if (strcmp(dent->d_name, "README.txt") == 0)
+				continue;
+		}
+		if (p->conf.hide_header_file) {
+			if (strcmp(dent->d_name, "HEADER.txt") == 0)
+				continue;
+		}
+
+		/* compare d_name against excludes array
+		 * elements, skipping any that match.
+		 */
+#ifdef HAVE_PCRE_H
+		for(i = 0; i < p->conf.excludes->used; i++) {
+			int n;
+#define N 10
+			int ovec[N * 3];
+			pcre *regex = p->conf.excludes->ptr[i]->regex;
+
+			if ((n = pcre_exec(regex, NULL, dent->d_name,
+				    strlen(dent->d_name), 0, 0, ovec, 3 * N)) < 0) {
+				if (n != PCRE_ERROR_NOMATCH) {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+						"execution error while matching:", n);
+
+					return -1;
+				}
+			}
+			else {
+				exclude_match = 1;
+				break;
+			}
+		}
+
+		if (exclude_match) {
+			continue;
+		}
+#endif
+
+		i = strlen(dent->d_name);
+
+		/* NOTE: the manual says, d_name is never more than NAME_MAX
+		 *       so this should actually not be a buffer-overflow-risk
+		 */
+		if (i > (size_t)name_max) continue;
+
+		memcpy(path_file, dent->d_name, i + 1);
+		if (stat(path, &st) != 0)
+			continue;
+
+		list = &files;
+		if (S_ISDIR(st.st_mode))
+			list = &dirs;
+
+		if (list->used == list->size) {
+			list->size += DIRLIST_BLOB_SIZE;
+			list->ent   = (dirls_entry_t**) realloc(list->ent, sizeof(dirls_entry_t*) * list->size);
+			assert(list->ent);
+		}
+
+		tmp = (dirls_entry_t*) malloc(sizeof(dirls_entry_t) + 1 + i);
+		tmp->mtime = st.st_mtime;
+		tmp->size  = st.st_size;
+		tmp->namelen = i;
+		memcpy(DIRLIST_ENT_NAME(tmp), dent->d_name, i + 1);
+
+		list->ent[list->used++] = tmp;
+	}
+	closedir(dp);
+
+	if (dirs.used) http_dirls_sort(dirs.ent, dirs.used);
+
+	if (files.used) http_dirls_sort(files.ent, files.used);
+
+	out = chunkqueue_get_append_buffer(con->write_queue);
+	BUFFER_COPY_STRING_CONST(out, "<?xml version=\"1.0\" encoding=\"");
+	if (buffer_is_empty(p->conf.encoding)) {
+		BUFFER_APPEND_STRING_CONST(out, "iso-8859-1");
+	} else {
+		buffer_append_string_buffer(out, p->conf.encoding);
+	}
+	BUFFER_APPEND_STRING_CONST(out, "\"?>\n");
+	http_list_directory_header(srv, con, p, out);
+
+	/* directories */
+	for (i = 0; i < dirs.used; i++) {
+		tmp = dirs.ent[i];
+
+#ifdef HAVE_LOCALTIME_R
+		localtime_r(&(tmp->mtime), &tm);
+		strftime(datebuf, sizeof(datebuf), "%Y-%b-%d %H:%M:%S", &tm);
+#else
+		strftime(datebuf, sizeof(datebuf), "%Y-%b-%d %H:%M:%S", localtime(&(tmp->mtime)));
+#endif
+
+		BUFFER_APPEND_STRING_CONST(out, "<tr><td class=\"n\"><a href=\"");
+		buffer_append_string_encoded(out, DIRLIST_ENT_NAME(tmp), tmp->namelen, ENCODING_REL_URI_PART);
+		BUFFER_APPEND_STRING_CONST(out, "/\">");
+		buffer_append_string_encoded(out, DIRLIST_ENT_NAME(tmp), tmp->namelen, ENCODING_MINIMAL_XML);
+		BUFFER_APPEND_STRING_CONST(out, "</a>/</td><td class=\"m\">");
+		buffer_append_string_len(out, datebuf, sizeof(datebuf) - 1);
+		BUFFER_APPEND_STRING_CONST(out, "</td><td class=\"s\">-  </td><td class=\"t\">Directory</td></tr>\n");
+
+		free(tmp);
+	}
+
+	/* files */
+	for (i = 0; i < files.used; i++) {
+		tmp = files.ent[i];
+
+		content_type = NULL;
+#ifdef HAVE_XATTR
+
+		if (con->conf.use_xattr) {
+			memcpy(path_file, DIRLIST_ENT_NAME(tmp), tmp->namelen + 1);
+			attrlen = sizeof(attrval) - 1;
+			if (attr_get(path, "Content-Type", attrval, &attrlen, 0) == 0) {
+				attrval[attrlen] = '\0';
+				content_type = attrval;
+			}
+		}
+#endif
+
+		if (content_type == NULL) {
+			content_type = "application/octet-stream";
+			for (k = 0; k < con->conf.mimetypes->used; k++) {
+				data_string *ds = (data_string *)con->conf.mimetypes->data[k];
+				size_t ct_len;
+
+				if (ds->key->used == 0)
+					continue;
+
+				ct_len = ds->key->used - 1;
+				if (tmp->namelen < ct_len)
+					continue;
+
+				if (0 == strncasecmp(DIRLIST_ENT_NAME(tmp) + tmp->namelen - ct_len, ds->key->ptr, ct_len)) {
+					content_type = ds->value->ptr;
+					break;
+				}
+			}
+		}
+
+#ifdef HAVE_LOCALTIME_R
+		localtime_r(&(tmp->mtime), &tm);
+		strftime(datebuf, sizeof(datebuf), "%Y-%b-%d %H:%M:%S", &tm);
+#else
+		strftime(datebuf, sizeof(datebuf), "%Y-%b-%d %H:%M:%S", localtime(&(tmp->mtime)));
+#endif
+		http_list_directory_sizefmt(sizebuf, tmp->size);
+
+		BUFFER_APPEND_STRING_CONST(out, "<tr><td class=\"n\"><a href=\"");
+		buffer_append_string_encoded(out, DIRLIST_ENT_NAME(tmp), tmp->namelen, ENCODING_REL_URI_PART);
+		BUFFER_APPEND_STRING_CONST(out, "\">");
+		buffer_append_string_encoded(out, DIRLIST_ENT_NAME(tmp), tmp->namelen, ENCODING_MINIMAL_XML);
+		BUFFER_APPEND_STRING_CONST(out, "</a></td><td class=\"m\">");
+		buffer_append_string_len(out, datebuf, sizeof(datebuf) - 1);
+		BUFFER_APPEND_STRING_CONST(out, "</td><td class=\"s\">");
+		buffer_append_string(out, sizebuf);
+		BUFFER_APPEND_STRING_CONST(out, "</td><td class=\"t\">");
+		buffer_append_string(out, content_type);
+		BUFFER_APPEND_STRING_CONST(out, "</td></tr>\n");
+
+		free(tmp);
+	}
+
+	free(files.ent);
+	free(dirs.ent);
+	free(path);
+
+	http_list_directory_footer(srv, con, p, out);
+
+	/* Insert possible charset to Content-Type */
+	if (buffer_is_empty(p->conf.encoding)) {
+		response_header_insert(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/html"));
+	} else {
+		buffer_copy_string(p->content_charset, "text/html; charset=");
+		buffer_append_string_buffer(p->content_charset, p->conf.encoding);
+		response_header_insert(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(p->content_charset));
+	}
+
+	con->file_finished = 1;
+
+	return 0;
+}
+
+
+
+URIHANDLER_FUNC(mod_dirlisting_subrequest) {
+	plugin_data *p = p_d;
+	stat_cache_entry *sce = NULL;
+
+	UNUSED(srv);
+
+	if (con->physical.path->used == 0) return HANDLER_GO_ON;
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+	if (con->uri.path->ptr[con->uri.path->used - 2] != '/') return HANDLER_GO_ON;
+
+	mod_dirlisting_patch_connection(srv, con, p);
+
+	if (!p->conf.dir_listing) return HANDLER_GO_ON;
+
+	if (con->conf.log_request_handling) {
+		log_error_write(srv, __FILE__, __LINE__,  "s",  "-- handling the request as Dir-Listing");
+		log_error_write(srv, __FILE__, __LINE__,  "sb", "URI          :", con->uri.path);
+	}
+
+	if (HANDLER_ERROR == stat_cache_get_entry(srv, con, con->physical.path, &sce)) {
+		fprintf(stderr, "%s.%d: %s\n", __FILE__, __LINE__, con->physical.path->ptr);
+		SEGFAULT();
+	}
+
+	if (!S_ISDIR(sce->st.st_mode)) return HANDLER_GO_ON;
+
+	if (http_list_directory(srv, con, p, con->physical.path)) {
+		/* dirlisting failed */
+		con->http_status = 403;
+	}
+
+	buffer_reset(con->physical.path);
+
+	/* not found */
+	return HANDLER_FINISHED;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_dirlisting_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("dirlisting");
+
+	p->init        = mod_dirlisting_init;
+	p->handle_subrequest_start  = mod_dirlisting_subrequest;
+	p->set_defaults  = mod_dirlisting_set_defaults;
+	p->cleanup     = mod_dirlisting_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_evasive.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_evasive.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_evasive.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,178 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#include "inet_ntop_cache.h"
+
+/**
+ * mod_evasive
+ *
+ * we indent to implement all features the mod_evasive from apache has
+ *
+ * - limit of connections per IP
+ * - provide a list of block-listed ip/networks (no access)
+ * - provide a white-list of ips/network which is not affected by the limit
+ *   (hmm, conditionals might be enough)
+ * - provide a bandwidth limiter per IP
+ *
+ * started by:
+ * - w1zzard at techpowerup.com
+ */
+
+typedef struct {
+	unsigned short max_conns;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+INIT_FUNC(mod_evasive_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	return p;
+}
+
+FREE_FUNC(mod_evasive_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+SETDEFAULTS_FUNC(mod_evasive_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "evasive.max-conns-per-ip",    NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },
+		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->max_conns       = 0;
+
+		cv[0].destination = &(s->max_conns);
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_evasive_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(max_conns);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("evasive.max-conns-per-ip"))) {
+				PATCH(max_conns);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+URIHANDLER_FUNC(mod_evasive_uri_handler) {
+	plugin_data *p = p_d;
+	size_t conns_by_ip = 0;
+	size_t j;
+
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+
+	mod_evasive_patch_connection(srv, con, p);
+
+	/* no limit set, nothing to block */
+	if (p->conf.max_conns == 0) return HANDLER_GO_ON;
+
+	for (j = 0; j < srv->conns->used; j++) {
+		connection *c = srv->conns->ptr[j];
+
+		/* check if other connections are already actively serving data for the same IP
+		 * we can only ban connections which are already behind the 'read request' state
+		 * */
+		if (c->dst_addr.ipv4.sin_addr.s_addr == con->dst_addr.ipv4.sin_addr.s_addr &&
+		    c->state > CON_STATE_REQUEST_END) {
+			conns_by_ip++;
+
+			if (conns_by_ip > p->conf.max_conns) {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+					inet_ntop_cache_get_ip(srv, &(con->dst_addr)),
+					"turned away. Too many connections.");
+
+				con->http_status = 403;
+				return HANDLER_FINISHED;
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+
+int mod_evasive_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("evasive");
+
+	p->init        = mod_evasive_init;
+	p->set_defaults = mod_evasive_set_defaults;
+	p->handle_uri_clean  = mod_evasive_uri_handler;
+	p->cleanup     = mod_evasive_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_evhost.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_evhost.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_evhost.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,334 @@
+#include <string.h>
+#include <errno.h>
+#include <ctype.h>
+
+#include "plugin.h"
+#include "log.h"
+#include "response.h"
+#include "stat_cache.h"
+
+typedef struct {
+	/* unparsed pieces */
+	buffer *path_pieces_raw;
+
+	/* pieces for path creation */
+	size_t len;
+	buffer **path_pieces;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+	buffer *tmp_buf;
+
+	plugin_config **config_storage;
+	plugin_config conf;
+} plugin_data;
+
+INIT_FUNC(mod_evhost_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->tmp_buf = buffer_init();
+
+	return p;
+}
+
+FREE_FUNC(mod_evhost_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			if(s->path_pieces) {
+				size_t j;
+				for (j = 0; j < s->len; j++) {
+					buffer_free(s->path_pieces[j]);
+				}
+
+				free(s->path_pieces);
+			}
+
+			buffer_free(s->path_pieces_raw);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	buffer_free(p->tmp_buf);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+static void mod_evhost_parse_pattern(plugin_config *s) {
+	char *ptr = s->path_pieces_raw->ptr,*pos;
+
+	s->path_pieces = NULL;
+
+	for(pos=ptr;*ptr;ptr++) {
+		if(*ptr == '%') {
+			s->path_pieces = realloc(s->path_pieces,(s->len+2) * sizeof(*s->path_pieces));
+			s->path_pieces[s->len] = buffer_init();
+			s->path_pieces[s->len+1] = buffer_init();
+
+			buffer_copy_string_len(s->path_pieces[s->len],pos,ptr-pos);
+			pos = ptr + 2;
+
+			buffer_copy_string_len(s->path_pieces[s->len+1],ptr++,2);
+
+			s->len += 2;
+		}
+	}
+
+	if(*pos != '\0') {
+		s->path_pieces = realloc(s->path_pieces,(s->len+1) * sizeof(*s->path_pieces));
+		s->path_pieces[s->len] = buffer_init();
+
+		buffer_append_memory(s->path_pieces[s->len],pos,ptr-pos);
+
+		s->len += 1;
+	}
+}
+
+SETDEFAULTS_FUNC(mod_evhost_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	/**
+	 *
+	 * #
+	 * # define a pattern for the host url finding
+	 * # %% => % sign
+	 * # %0 => domain name + tld
+	 * # %1 => tld
+	 * # %2 => domain name without tld
+	 * # %3 => subdomain 1 name
+	 * # %4 => subdomain 2 name
+	 * #
+	 * evhost.path-pattern = "/home/ckruse/dev/www/%3/htdocs/"
+	 *
+	 */
+
+	config_values_t cv[] = {
+		{ "evhost.path-pattern",            NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ NULL,                             NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->path_pieces_raw = buffer_init();
+		s->path_pieces     = NULL;
+		s->len             = 0;
+
+		cv[0].destination = s->path_pieces_raw;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value,  cv)) {
+			return HANDLER_ERROR;
+		}
+
+		if (s->path_pieces_raw->used != 0) {
+			mod_evhost_parse_pattern(s);
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+/**
+ * assign the different parts of the domain to array-indezes
+ * - %0 - full hostname (authority w/o port)
+ * - %1 - tld
+ * - %2 - domain.tld
+ * - %3 -
+ */
+
+static int mod_evhost_parse_host(connection *con,array *host) {
+	/* con->uri.authority->used is always > 0 if we come here */
+	register char *ptr = con->uri.authority->ptr + con->uri.authority->used - 1;
+	char *colon = ptr; /* needed to filter out the colon (if exists) */
+	int first = 1;
+	data_string *ds;
+	int i;
+
+	/* first, find the domain + tld */
+	for(;ptr > con->uri.authority->ptr;ptr--) {
+		if(*ptr == '.') {
+			if(first) first = 0;
+			else      break;
+		} else if(*ptr == ':') {
+			colon = ptr;
+			first = 1;
+		}
+	}
+
+	ds = data_string_init();
+	buffer_copy_string(ds->key,"%0");
+
+	/* if we stopped at a dot, skip the dot */
+	if (*ptr == '.') ptr++;
+	buffer_copy_string_len(ds->value, ptr, colon-ptr);
+
+	array_insert_unique(host,(data_unset *)ds);
+
+	/* if the : is not the start of the authority, go on parsing the hostname */
+
+	if (colon != con->uri.authority->ptr) {
+		for(ptr = colon - 1, i = 1; ptr > con->uri.authority->ptr; ptr--) {
+			if(*ptr == '.') {
+				if (ptr != colon - 1) {
+					/* is something between the dots */
+					ds = data_string_init();
+					buffer_copy_string(ds->key,"%");
+					buffer_append_long(ds->key, i++);
+					buffer_copy_string_len(ds->value,ptr+1,colon-ptr-1);
+
+					array_insert_unique(host,(data_unset *)ds);
+				}
+				colon = ptr;
+			}
+		}
+
+		/* if the . is not the first charactor of the hostname */
+		if (colon != ptr) {
+			ds = data_string_init();
+			buffer_copy_string(ds->key,"%");
+			buffer_append_long(ds->key, i++);
+			buffer_copy_string_len(ds->value,ptr,colon-ptr);
+
+			array_insert_unique(host,(data_unset *)ds);
+		}
+	}
+
+	return 0;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_evhost_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(path_pieces);
+	PATCH(len);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("evhost.path-pattern"))) {
+				PATCH(path_pieces);
+				PATCH(len);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+
+static handler_t mod_evhost_uri_handler(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+	size_t i;
+	array *parsed_host;
+	register char *ptr;
+	int not_good = 0;
+	stat_cache_entry *sce = NULL;
+
+	/* not authority set */
+	if (con->uri.authority->used == 0) return HANDLER_GO_ON;
+
+	mod_evhost_patch_connection(srv, con, p);
+
+	/* missing even default(global) conf */
+	if (0 == p->conf.len) {
+		return HANDLER_GO_ON;
+	}
+
+	parsed_host = array_init();
+
+	mod_evhost_parse_host(con, parsed_host);
+
+	/* build document-root */
+	buffer_reset(p->tmp_buf);
+
+	for (i = 0; i < p->conf.len; i++) {
+		ptr = p->conf.path_pieces[i]->ptr;
+		if (*ptr == '%') {
+			data_string *ds;
+
+			if (*(ptr+1) == '%') {
+				/* %% */
+				BUFFER_APPEND_STRING_CONST(p->tmp_buf,"%");
+			} else if (NULL != (ds = (data_string *)array_get_element(parsed_host,p->conf.path_pieces[i]->ptr))) {
+				if (ds->value->used) {
+					buffer_append_string_buffer(p->tmp_buf,ds->value);
+				}
+			} else {
+				/* unhandled %-sequence */
+			}
+		} else {
+			buffer_append_string_buffer(p->tmp_buf,p->conf.path_pieces[i]);
+		}
+	}
+
+	BUFFER_APPEND_SLASH(p->tmp_buf);
+
+	array_free(parsed_host);
+
+	if (HANDLER_ERROR == stat_cache_get_entry(srv, con, p->tmp_buf, &sce)) {
+		log_error_write(srv, __FILE__, __LINE__, "sb", strerror(errno), p->tmp_buf);
+		not_good = 1;
+	} else if(!S_ISDIR(sce->st.st_mode)) {
+		log_error_write(srv, __FILE__, __LINE__, "sb", "not a directory:", p->tmp_buf);
+		not_good = 1;
+	}
+
+	if (!not_good) {
+		buffer_copy_string_buffer(con->physical.doc_root, p->tmp_buf);
+	}
+
+	return HANDLER_GO_ON;
+}
+
+int mod_evhost_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name                    = buffer_init_string("evhost");
+	p->init                    = mod_evhost_init;
+	p->set_defaults            = mod_evhost_set_defaults;
+	p->handle_docroot          = mod_evhost_uri_handler;
+	p->cleanup                 = mod_evhost_free;
+
+	p->data                    = NULL;
+
+	return 0;
+}
+
+/* eof */

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_expire.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_expire.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_expire.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,369 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+#include "response.h"
+
+#include "plugin.h"
+#include "stat_cache.h"
+
+/**
+ * this is a expire module for a lighttpd
+ *
+ * set 'Expires:' HTTP Headers on demand
+ */
+
+
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	array *expire_url;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *expire_tstmp;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_expire_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->expire_tstmp = buffer_init();
+
+	buffer_prepare_copy(p->expire_tstmp, 255);
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_expire_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	buffer_free(p->expire_tstmp);
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			array_free(s->expire_url);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+static int mod_expire_get_offset(server *srv, plugin_data *p, buffer *expire, int *offset) {
+	char *ts;
+	int type = -1;
+	int retts = 0;
+
+	UNUSED(p);
+
+	/*
+	 * parse
+	 *
+	 * '(access|now|modification) [plus] {<num> <type>}*'
+	 *
+	 * e.g. 'access 1 years'
+	 */
+
+	if (expire->used == 0) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"empty:");
+		return -1;
+	}
+
+	ts = expire->ptr;
+
+	if (0 == strncmp(ts, "access ", 7)) {
+		type  = 0;
+		ts   += 7;
+	} else if (0 == strncmp(ts, "now ", 4)) {
+		type  = 0;
+		ts   += 4;
+	} else if (0 == strncmp(ts, "modification ", 13)) {
+		type  = 1;
+		ts   += 13;
+	} else {
+		/* invalid type-prefix */
+		log_error_write(srv, __FILE__, __LINE__, "ss",
+				"invalid <base>:", ts);
+		return -1;
+	}
+
+	if (0 == strncmp(ts, "plus ", 5)) {
+		/* skip the optional plus */
+		ts   += 5;
+	}
+
+	/* the rest is just <number> (years|months|weeks|days|hours|minutes|seconds) */
+	while (1) {
+		char *space, *err;
+		int num;
+
+		if (NULL == (space = strchr(ts, ' '))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"missing space after <num>:", ts);
+			return -1;
+		}
+
+		num = strtol(ts, &err, 10);
+		if (*err != ' ') {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"missing <type> after <num>:", ts);
+			return -1;
+		}
+
+		ts = space + 1;
+
+		if (NULL != (space = strchr(ts, ' '))) {
+			int slen;
+			/* */
+
+			slen = space - ts;
+
+			if (slen == 5 &&
+			    0 == strncmp(ts, "years", slen)) {
+				num *= 60 * 60 * 24 * 30 * 12;
+			} else if (slen == 6 &&
+				   0 == strncmp(ts, "months", slen)) {
+				num *= 60 * 60 * 24 * 30;
+			} else if (slen == 5 &&
+				   0 == strncmp(ts, "weeks", slen)) {
+				num *= 60 * 60 * 24 * 7;
+			} else if (slen == 4 &&
+				   0 == strncmp(ts, "days", slen)) {
+				num *= 60 * 60 * 24;
+			} else if (slen == 5 &&
+				   0 == strncmp(ts, "hours", slen)) {
+				num *= 60 * 60;
+			} else if (slen == 7 &&
+				   0 == strncmp(ts, "minutes", slen)) {
+				num *= 60;
+			} else if (slen == 7 &&
+				   0 == strncmp(ts, "seconds", slen)) {
+				num *= 1;
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"unknown type:", ts);
+				return -1;
+			}
+
+			retts += num;
+
+			ts = space + 1;
+		} else {
+			if (0 == strcmp(ts, "years")) {
+				num *= 60 * 60 * 24 * 30 * 12;
+			} else if (0 == strcmp(ts, "months")) {
+				num *= 60 * 60 * 24 * 30;
+			} else if (0 == strcmp(ts, "weeks")) {
+				num *= 60 * 60 * 24 * 7;
+			} else if (0 == strcmp(ts, "days")) {
+				num *= 60 * 60 * 24;
+			} else if (0 == strcmp(ts, "hours")) {
+				num *= 60 * 60;
+			} else if (0 == strcmp(ts, "minutes")) {
+				num *= 60;
+			} else if (0 == strcmp(ts, "seconds")) {
+				num *= 1;
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"unknown type:", ts);
+				return -1;
+			}
+
+			retts += num;
+
+			break;
+		}
+	}
+
+	if (offset != NULL) *offset = retts;
+
+	return type;
+}
+
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_expire_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0, k;
+
+	config_values_t cv[] = {
+		{ "expire.url",                 NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->expire_url    = array_init();
+
+		cv[0].destination = s->expire_url;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		for (k = 0; k < s->expire_url->used; k++) {
+			data_string *ds = (data_string *)s->expire_url->data[k];
+
+			/* parse lines */
+			if (-1 == mod_expire_get_offset(srv, p, ds->value, NULL)) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"parsing expire.url failed:", ds->value);
+				return HANDLER_ERROR;
+			}
+		}
+	}
+
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_expire_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(expire_url);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("expire.url"))) {
+				PATCH(expire_url);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+URIHANDLER_FUNC(mod_expire_path_handler) {
+	plugin_data *p = p_d;
+	int s_len;
+	size_t k;
+
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+
+	mod_expire_patch_connection(srv, con, p);
+
+	s_len = con->uri.path->used - 1;
+
+	for (k = 0; k < p->conf.expire_url->used; k++) {
+		data_string *ds = (data_string *)p->conf.expire_url->data[k];
+		int ct_len = ds->key->used - 1;
+
+		if (ct_len > s_len) continue;
+		if (ds->key->used == 0) continue;
+
+		if (0 == strncmp(con->uri.path->ptr, ds->key->ptr, ct_len)) {
+			int ts;
+			time_t t;
+			size_t len;
+			stat_cache_entry *sce = NULL;
+
+			stat_cache_get_entry(srv, con, con->physical.path, &sce);
+
+			switch(mod_expire_get_offset(srv, p, ds->value, &ts)) {
+			case 0:
+				/* access */
+				t = (ts + srv->cur_ts);
+				break;
+			case 1:
+				/* modification */
+
+				t = (ts + sce->st.st_mtime);
+				break;
+			default:
+				/* -1 is handled at parse-time */
+				break;
+			}
+
+
+			if (0 == (len = strftime(p->expire_tstmp->ptr, p->expire_tstmp->size - 1,
+					   "%a, %d %b %Y %H:%M:%S GMT", gmtime(&(t))))) {
+				/* could not set expire header, out of mem */
+
+				return HANDLER_GO_ON;
+
+			}
+
+			p->expire_tstmp->used = len + 1;
+
+			/* HTTP/1.0 */
+			response_header_overwrite(srv, con, CONST_STR_LEN("Expires"), CONST_BUF_LEN(p->expire_tstmp));
+
+			/* HTTP/1.1 */
+			buffer_copy_string(p->expire_tstmp, "max-age=");
+			buffer_append_long(p->expire_tstmp, ts);
+
+			response_header_overwrite(srv, con, CONST_STR_LEN("Cache-Control"), CONST_BUF_LEN(p->expire_tstmp));
+
+			return HANDLER_GO_ON;
+		}
+	}
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_expire_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("expire");
+
+	p->init        = mod_expire_init;
+	p->handle_subrequest_start = mod_expire_path_handler;
+	p->set_defaults  = mod_expire_set_defaults;
+	p->cleanup     = mod_expire_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_extforward.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_extforward.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_extforward.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,496 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <netinet/in.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#include "inet_ntop_cache.h"
+#include "configfile.h"
+
+/**
+ * mod_extforward.c for lighttpd, by comman.kang <at> gmail <dot> com
+ *                  extended, modified by Lionel Elie Mamane (LEM), lionel <at> mamane <dot> lu
+ *                  support chained proxies by glen at delfi.ee, #1528
+ *
+ * Config example:
+ *
+ *       Trust proxy 10.0.0.232 and 10.0.0.232
+ *       extforward.forwarder = ( "10.0.0.232" => "trust",
+ *                                "10.0.0.233" => "trust" )
+ *
+ *       Trust all proxies  (NOT RECOMMENDED!)
+ *       extforward.forwarder = ( "all" => "trust")
+ *
+ *       Note that "all" has precedence over specific entries,
+ *       so "all except" setups will not work.
+ *
+ *       In case you have chained proxies, you can add all their IP's to the
+ *       config. However "all" has effect only on connecting IP, as the
+ *       X-Forwarded-For header can not be trusted.
+ *
+ * Note: The effect of this module is variable on $HTTP["remotip"] directives and
+ *       other module's remote ip dependent actions.
+ *  Things done by modules before we change the remoteip or after we reset it will match on the proxy's IP.
+ *  Things done in between these two moments will match on the real client's IP.
+ *  The moment things are done by a module depends on in which hook it does things and within the same hook
+ *  on whether they are before/after us in the module loading order
+ *  (order in the server.modules directive in the config file).
+ *
+ * Tested behaviours:
+ *
+ *  mod_access: Will match on the real client.
+ *
+ *  mod_accesslog:
+ *   In order to see the "real" ip address in access log ,
+ *   you'll have to load mod_extforward after mod_accesslog.
+ *   like this:
+ *
+ *    server.modules  = (
+ *       .....
+ *       mod_accesslog,
+ *       mod_extforward
+ *    )
+ *
+ * Known issues:
+ *      seems causing segfault with mod_ssl and $HTTP{"socket"} directives
+ *      LEM 2006.05.26: Fixed segfault $SERVER["socket"] directive. Untested with SSL.
+ *
+ * ChangeLog:
+ *     2005.12.19   Initial Version
+ *     2005.12.19   fixed conflict with conditional directives
+ *     2006.05.26   LEM: IPv6 support
+ *     2006.05.26   LEM: Fix a segfault with $SERVER["socket"] directive.
+ *     2006.05.26   LEM: Run at uri_raw time, as we don't need to see the URI
+ *                       In this manner, we run before mod_access and $HTTP["remoteip"] directives work!
+ *     2006.05.26   LEM: Clean config_cond cache of tests whose result we probably change.
+ */
+
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	array *forwarder;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+
+/* context , used for restore remote ip */
+
+typedef struct {
+	sock_addr saved_remote_addr;
+	buffer *saved_remote_addr_buf;
+} handler_ctx;
+
+
+static handler_ctx * handler_ctx_init(sock_addr oldaddr, buffer *oldaddr_buf) {
+	handler_ctx * hctx;
+	hctx = calloc(1, sizeof(*hctx));
+	hctx->saved_remote_addr = oldaddr;
+	hctx->saved_remote_addr_buf = oldaddr_buf;
+	return hctx;
+}
+
+static void handler_ctx_free(handler_ctx *hctx) {
+	free(hctx);
+}
+
+/* init the plugin data */
+INIT_FUNC(mod_extforward_init) {
+	plugin_data *p;
+	p = calloc(1, sizeof(*p));
+	return p;
+}
+
+/* destroy the plugin data */
+FREE_FUNC(mod_extforward_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			array_free(s->forwarder);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_extforward_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "extforward.forwarder",             NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->forwarder    = array_init();
+
+		cv[0].destination = s->forwarder;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_extforward_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(forwarder);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("extforward.forwarder"))) {
+				PATCH(forwarder);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+
+static void put_string_into_array_len(array *ary, const char *str, int len)
+{
+	data_string *tempdata;
+	if (len == 0)
+		return;
+	tempdata = data_string_init();
+	buffer_copy_string_len(tempdata->value,str,len);
+	array_insert_unique(ary,(data_unset *)tempdata);
+}
+/*
+   extract a forward array from the environment
+*/
+static array *extract_forward_array(buffer *pbuffer)
+{
+	array *result = array_init();
+	if (pbuffer->used > 0) {
+		char *base, *curr;
+		/* state variable, 0 means not in string, 1 means in string */
+		int in_str = 0;
+		for (base = pbuffer->ptr, curr = pbuffer->ptr; *curr; curr++) {
+			if (in_str) {
+				if ((*curr > '9' || *curr < '0') && *curr != '.' && *curr != ':') {
+					/* found an separator , insert value into result array */
+					put_string_into_array_len(result, base, curr - base);
+					/* change state to not in string */
+					in_str = 0;
+				}
+			} else {
+				if (*curr >= '0' && *curr <= '9') {
+					/* found leading char of an IP address, move base pointer and change state */
+					base = curr;
+					in_str = 1;
+				}
+			}
+		}
+		/* if breaking out while in str, we got to the end of string, so add it */
+		if (in_str) {
+			put_string_into_array_len(result, base, curr - base);
+		}
+	}
+	return result;
+}
+
+#define IP_TRUSTED 1
+#define IP_UNTRUSTED 0
+/*
+ * check whether ip is trusted, return 1 for trusted , 0 for untrusted
+ */
+static int is_proxy_trusted(const char *ipstr, plugin_data *p)
+{
+	data_string* allds = (data_string *)array_get_element(p->conf.forwarder, "all");
+
+	if (allds) {
+		if (strcasecmp(allds->value->ptr, "trust") == 0) {
+			return IP_TRUSTED;
+		} else {
+			return IP_UNTRUSTED;
+		}
+	}
+
+	return (data_string *)array_get_element(p->conf.forwarder, ipstr) ? IP_TRUSTED : IP_UNTRUSTED;
+}
+
+/*
+ * Return char *ip of last address of proxy that is not trusted.
+ * Do not accept "all" keyword here.
+ */
+static const char *last_not_in_array(array *a, plugin_data *p)
+{
+	array *forwarder = p->conf.forwarder;
+
+	for (int i = a->used - 1; i >= 0; i--) {
+		data_string *ds = (data_string *)a->data[i];
+		const char *ip = ds->value->ptr;
+
+		if (!array_get_element(forwarder, ip)) {
+			return ip;
+		}
+	}
+	return NULL;
+}
+
+struct addrinfo *ipstr_to_sockaddr(const char *host)
+{
+   struct addrinfo hints, *res0;
+   int result;
+
+   memset(&hints, 0, sizeof(hints));
+#ifndef AI_NUMERICSERV
+/** 
+ * quoting $ man getaddrinfo
+ *
+ * NOTES
+ *        AI_ADDRCONFIG, AI_ALL, and AI_V4MAPPED are available since glibc 2.3.3.  
+ *        AI_NUMERICSERV is available since glibc 2.3.4.
+ */
+#define AI_NUMERICSERV 0
+#endif
+   hints.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV;
+
+   result = getaddrinfo(host, NULL, &hints, &res0);
+   if ( result != 0 )
+   {
+      fprintf(stderr,"could not resolve hostname %s because %s\n", host,gai_strerror(result));
+      if (result == EAI_SYSTEM)
+         perror("The system error is ");
+      return NULL;
+   }
+   else
+      if (res0==0)
+         fprintf(stderr, "Problem in resolving hostname %s: succeeded, but no information returned\n", host);
+
+   return res0;
+}
+
+
+
+static void clean_cond_cache(server *srv, connection *con) {
+	config_cond_cache_reset_item(srv, con, COMP_HTTP_REMOTE_IP);
+}
+
+URIHANDLER_FUNC(mod_extforward_uri_handler) {
+	plugin_data *p = p_d;
+	data_string *forwarded = NULL;
+#ifdef HAVE_IPV6
+	char b2[INET6_ADDRSTRLEN + 1];
+	struct addrinfo *addrlist = NULL;
+#endif
+	const char *dst_addr_str = NULL;
+	array *forward_array = NULL;
+	const char *real_remote_addr = NULL;
+#ifdef HAVE_IPV6
+#endif
+
+	if (!con->request.headers) return HANDLER_GO_ON;
+
+	mod_extforward_patch_connection(srv, con, p);
+
+	if (con->conf.log_request_handling) {
+ 		log_error_write(srv, __FILE__, __LINE__, "s", 
+				"-- mod_extforward_uri_handler called");
+	}
+
+	if ((NULL == (forwarded = (data_string *) array_get_element(con->request.headers,"X-Forwarded-For")) &&
+	     NULL == (forwarded = (data_string *) array_get_element(con->request.headers,  "Forwarded-For")))) {
+
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__, "s", 
+					"no X-Forwarded-For|Forwarded-For: found, skipping");
+		}
+
+		return HANDLER_GO_ON;
+	}
+
+#ifdef HAVE_IPV6
+	dst_addr_str = inet_ntop(con->dst_addr.plain.sa_family,
+		      con->dst_addr.plain.sa_family == AF_INET6 ?
+		       (struct sockaddr *)&(con->dst_addr.ipv6.sin6_addr) :
+		       (struct sockaddr *)&(con->dst_addr.ipv4.sin_addr),
+		      b2,
+		      (sizeof b2) - 1);
+#else
+	dst_addr_str = inet_ntoa(con->dst_addr.ipv4.sin_addr);
+#endif
+
+	/* if the remote ip itself is not trusted, then do nothing */
+	if (IP_UNTRUSTED == is_proxy_trusted(dst_addr_str, p)) {
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__, "s",
+					"remote address is NOT a trusted proxy, skipping");
+		}
+
+		return HANDLER_GO_ON;
+	}
+
+	/* build forward_array from forwarded data_string */
+	forward_array = extract_forward_array(forwarded->value);
+	real_remote_addr = last_not_in_array(forward_array, p);
+
+	if (real_remote_addr != NULL) { /* parsed */
+		sock_addr sock;
+		struct addrinfo *addrs_left;
+		server_socket *srv_sock = con->srv_socket;
+		data_string *forwarded_proto = (data_string *)array_get_element(con->request.headers, "X-Forwarded-Proto");
+
+		if (forwarded_proto && !strcmp(forwarded_proto->value->ptr, "https")) {
+			srv_sock->is_proxy_ssl = 1;
+		} else {
+			srv_sock->is_proxy_ssl = 0;
+		}
+
+		if (con->conf.log_request_handling) {
+ 			log_error_write(srv, __FILE__, __LINE__, "ss", "using address:", real_remote_addr);
+		}
+#ifdef HAVE_IPV6
+		addrlist = ipstr_to_sockaddr(real_remote_addr);
+		sock.plain.sa_family = AF_UNSPEC;
+		for (addrs_left = addrlist; addrs_left != NULL; addrs_left = addrs_left -> ai_next) {
+			sock.plain.sa_family = addrs_left->ai_family;
+			if (sock.plain.sa_family == AF_INET) {
+				sock.ipv4.sin_addr = ((struct sockaddr_in*)addrs_left->ai_addr)->sin_addr;
+				break;
+			} else if (sock.plain.sa_family == AF_INET6) {
+				sock.ipv6.sin6_addr = ((struct sockaddr_in6*)addrs_left->ai_addr)->sin6_addr;
+				break;
+			}
+		}
+#else
+		sock.ipv4.sin_addr.s_addr = inet_addr(real_remote_addr);
+		sock.plain.sa_family = (sock.ipv4.sin_addr.s_addr == 0xFFFFFFFF) ? AF_UNSPEC : AF_INET;
+#endif
+		if (sock.plain.sa_family != AF_UNSPEC) {
+			/* we found the remote address, modify current connection and save the old address */
+			if (con->plugin_ctx[p->id]) {
+				log_error_write(srv, __FILE__, __LINE__, "s", 
+						"patching an already patched connection!");
+				handler_ctx_free(con->plugin_ctx[p->id]);
+				con->plugin_ctx[p->id] = NULL;
+			}
+			/* save old address */
+			con->plugin_ctx[p->id] = handler_ctx_init(con->dst_addr, con->dst_addr_buf);
+			/* patch connection address */
+			con->dst_addr = sock;
+			con->dst_addr_buf = buffer_init();
+			buffer_copy_string(con->dst_addr_buf, real_remote_addr);
+		
+			if (con->conf.log_request_handling) {
+ 				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"patching con->dst_addr_buf for the accesslog:", real_remote_addr);
+			}
+			/* Now, clean the conf_cond cache, because we may have changed the results of tests */
+			clean_cond_cache(srv, con);
+		}
+#ifdef HAVE_IPV6
+		if (addrlist != NULL ) freeaddrinfo(addrlist);
+#endif
+	}
+	array_free(forward_array);
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+
+CONNECTION_FUNC(mod_extforward_restore) {
+	plugin_data *p = p_d;
+	handler_ctx *hctx = con->plugin_ctx[p->id];
+
+	if (!hctx) return HANDLER_GO_ON;
+	
+	con->dst_addr = hctx->saved_remote_addr;
+	buffer_free(con->dst_addr_buf);
+
+	con->dst_addr_buf = hctx->saved_remote_addr_buf;
+	
+	handler_ctx_free(hctx);
+
+	con->plugin_ctx[p->id] = NULL;
+
+	/* Now, clean the conf_cond cache, because we may have changed the results of tests */
+	clean_cond_cache(srv, con);
+
+	return HANDLER_GO_ON;
+}
+
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_extforward_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("extforward");
+
+	p->init        = mod_extforward_init;
+	p->handle_uri_raw = mod_extforward_uri_handler;
+	p->handle_request_done = mod_extforward_restore;
+	p->connection_reset = mod_extforward_restore;
+	p->set_defaults  = mod_extforward_set_defaults;
+	p->cleanup     = mod_extforward_free;
+
+	p->data        = NULL;
+
+	return 0;
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_fastcgi.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_fastcgi.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_fastcgi.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,3878 @@
+#include <sys/types.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <assert.h>
+#include <signal.h>
+
+#include "buffer.h"
+#include "server.h"
+#include "keyvalue.h"
+#include "log.h"
+
+#include "http_chunk.h"
+#include "fdevent.h"
+#include "connections.h"
+#include "response.h"
+#include "joblist.h"
+
+#include "plugin.h"
+
+#include "inet_ntop_cache.h"
+#include "stat_cache.h"
+#include "status_counter.h"
+
+#ifdef HAVE_FASTCGI_FASTCGI_H
+#include <fastcgi/fastcgi.h>
+#else
+#ifdef HAVE_FASTCGI_H
+#include <fastcgi.h>
+#else
+#include "fastcgi.h"
+#endif
+#endif /* HAVE_FASTCGI_FASTCGI_H */
+#include <stdio.h>
+
+#ifdef HAVE_SYS_FILIO_H
+# include <sys/filio.h>
+#endif
+
+#include "sys-socket.h"
+
+#ifdef HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+#define FCGI_ENV_ADD_CHECK(ret, con) \
+	if (ret == -1) { \
+		con->http_status = 400; \
+		con->file_finished = 1; \
+		return -1; \
+	};
+
+/*
+ *
+ * TODO:
+ *
+ * - add timeout for a connect to a non-fastcgi process
+ *   (use state_timestamp + state)
+ *
+ */
+
+typedef struct fcgi_proc {
+	size_t id; /* id will be between 1 and max_procs */
+	buffer *unixsocket; /* config.socket + "-" + id */
+	unsigned port;  /* config.port + pno */
+
+	buffer *connection_name; /* either tcp:<host>:<port> or unix:<socket> for debugging purposes */
+
+	pid_t pid;   /* PID of the spawned process (0 if not spawned locally) */
+
+
+	size_t load; /* number of requests waiting on this process */
+
+	time_t last_used; /* see idle_timeout */
+	size_t requests;  /* see max_requests */
+	struct fcgi_proc *prev, *next; /* see first */
+
+	time_t disabled_until; /* this proc is disabled until, use something else until then */
+
+	int is_local;
+
+	enum {
+		PROC_STATE_UNSET,    /* init-phase */
+		PROC_STATE_RUNNING,  /* alive */
+		PROC_STATE_OVERLOADED, /* listen-queue is full,
+					  don't send anything to this proc for the next 2 seconds */
+		PROC_STATE_DIED_WAIT_FOR_PID, /* */
+		PROC_STATE_DIED,     /* marked as dead, should be restarted */
+		PROC_STATE_KILLED    /* was killed as we don't have the load anymore */
+	} state;
+} fcgi_proc;
+
+typedef struct {
+	/* the key that is used to reference this value */
+	buffer *id;
+
+	/* list of processes handling this extension
+	 * sorted by lowest load
+	 *
+	 * whenever a job is done move it up in the list
+	 * until it is sorted, move it down as soon as the
+	 * job is started
+	 */
+	fcgi_proc *first;
+	fcgi_proc *unused_procs;
+
+	/*
+	 * spawn at least min_procs, at max_procs.
+	 *
+	 * as soon as the load of the first entry
+	 * is max_load_per_proc we spawn a new one
+	 * and add it to the first entry and give it
+	 * the load
+	 *
+	 */
+
+	unsigned short min_procs;
+	unsigned short max_procs;
+	size_t num_procs;    /* how many procs are started */
+	size_t active_procs; /* how many of them are really running */
+
+	unsigned short max_load_per_proc;
+
+	/*
+	 * kick the process from the list if it was not
+	 * used for idle_timeout until min_procs is
+	 * reached. this helps to get the processlist
+	 * small again we had a small peak load.
+	 *
+	 */
+
+	unsigned short idle_timeout;
+
+	/*
+	 * time after a disabled remote connection is tried to be re-enabled
+	 *
+	 *
+	 */
+
+	unsigned short disable_time;
+
+	/*
+	 * some fastcgi processes get a little bit larger
+	 * than wanted. max_requests_per_proc kills a
+	 * process after a number of handled requests.
+	 *
+	 */
+	size_t max_requests_per_proc;
+
+
+	/* config */
+
+	/*
+	 * host:port
+	 *
+	 * if host is one of the local IP adresses the
+	 * whole connection is local
+	 *
+	 * if port is not 0, and host is not specified,
+	 * "localhost" (INADDR_LOOPBACK) is assumed.
+	 *
+	 */
+	buffer *host;
+	unsigned short port;
+
+	/*
+	 * Unix Domain Socket
+	 *
+	 * instead of TCP/IP we can use Unix Domain Sockets
+	 * - more secure (you have fileperms to play with)
+	 * - more control (on locally)
+	 * - more speed (no extra overhead)
+	 */
+	buffer *unixsocket;
+
+	/* if socket is local we can start the fastcgi
+	 * process ourself
+	 *
+	 * bin-path is the path to the binary
+	 *
+	 * check min_procs and max_procs for the number
+	 * of process to start up
+	 */
+	buffer *bin_path;
+
+	/* bin-path is set bin-environment is taken to
+	 * create the environement before starting the
+	 * FastCGI process
+	 *
+	 */
+	array *bin_env;
+
+	array *bin_env_copy;
+
+	/*
+	 * docroot-translation between URL->phys and the
+	 * remote host
+	 *
+	 * reasons:
+	 * - different dir-layout if remote
+	 * - chroot if local
+	 *
+	 */
+	buffer *docroot;
+
+	/*
+	 * fastcgi-mode:
+	 * - responser
+	 * - authorizer
+	 *
+	 */
+	unsigned short mode;
+
+	/*
+	 * check_local tells you if the phys file is stat()ed
+	 * or not. FastCGI doesn't care if the service is
+	 * remote. If the web-server side doesn't contain
+	 * the fastcgi-files we should not stat() for them
+	 * and say '404 not found'.
+	 */
+	unsigned short check_local;
+
+	/*
+	 * append PATH_INFO to SCRIPT_FILENAME
+	 *
+	 * php needs this if cgi.fix_pathinfo is provided
+	 *
+	 */
+
+	unsigned short break_scriptfilename_for_php;
+
+	/*
+	 * If the backend includes X-LIGHTTPD-send-file in the response
+	 * we use the value as filename and ignore the content.
+	 *
+	 */
+	unsigned short allow_xsendfile;
+
+	ssize_t load; /* replace by host->load */
+
+	size_t max_id; /* corresponds most of the time to
+	num_procs.
+
+	only if a process is killed max_id waits for the process itself
+	to die and decrements it afterwards */
+
+	buffer *strip_request_uri;
+
+	unsigned short kill_signal; /* we need a setting for this as libfcgi
+				       applications prefer SIGUSR1 while the
+				       rest of the world would use SIGTERM
+				       *sigh* */
+} fcgi_extension_host;
+
+/*
+ * one extension can have multiple hosts assigned
+ * one host can spawn additional processes on the same
+ *   socket (if we control it)
+ *
+ * ext -> host -> procs
+ *    1:n     1:n
+ *
+ * if the fastcgi process is remote that whole goes down
+ * to
+ *
+ * ext -> host -> procs
+ *    1:n     1:1
+ *
+ * in case of PHP and FCGI_CHILDREN we have again a procs
+ * but we don't control it directly.
+ *
+ */
+
+typedef struct {
+	buffer *key; /* like .php */
+
+	int note_is_sent;
+	int last_used_ndx;
+
+	fcgi_extension_host **hosts;
+
+	size_t used;
+	size_t size;
+} fcgi_extension;
+
+typedef struct {
+	fcgi_extension **exts;
+
+	size_t used;
+	size_t size;
+} fcgi_exts;
+
+
+typedef struct {
+	fcgi_exts *exts;
+
+	array *ext_mapping;
+
+	int debug;
+} plugin_config;
+
+typedef struct {
+	size_t *ptr;
+	size_t used;
+	size_t size;
+} buffer_uint;
+
+typedef struct {
+	char **ptr;
+
+	size_t size;
+	size_t used;
+} char_array;
+
+/* generic plugin data, shared between all connections */
+typedef struct {
+	PLUGIN_DATA;
+	buffer_uint fcgi_request_id;
+
+	buffer *fcgi_env;
+
+	buffer *path;
+	buffer *parse_response;
+
+	buffer *statuskey;
+
+	plugin_config **config_storage;
+
+	plugin_config conf; /* this is only used as long as no handler_ctx is setup */
+} plugin_data;
+
+/* connection specific data */
+typedef enum {
+	FCGI_STATE_UNSET,
+	FCGI_STATE_INIT,
+	FCGI_STATE_CONNECT_DELAYED,
+	FCGI_STATE_PREPARE_WRITE,
+	FCGI_STATE_WRITE,
+	FCGI_STATE_READ
+} fcgi_connection_state_t;
+
+typedef struct {
+	fcgi_proc *proc;
+	fcgi_extension_host *host;
+	fcgi_extension *ext;
+
+	fcgi_connection_state_t state;
+	time_t   state_timestamp;
+
+	int      reconnects; /* number of reconnect attempts */
+
+	chunkqueue *rb; /* read queue */
+	chunkqueue *wb; /* write queue */
+
+	buffer   *response_header;
+
+	size_t    request_id;
+	int       fd;        /* fd to the fastcgi process */
+	int       fde_ndx;   /* index into the fd-event buffer */
+
+	pid_t     pid;
+	int       got_proc;
+
+	int       send_content_body;
+
+	plugin_config conf;
+
+	connection *remote_conn;  /* dumb pointer */
+	plugin_data *plugin_data; /* dumb pointer */
+} handler_ctx;
+
+
+/* ok, we need a prototype */
+static handler_t fcgi_handle_fdevent(void *s, void *ctx, int revents);
+
+int fastcgi_status_copy_procname(buffer *b, fcgi_extension_host *host, fcgi_proc *proc) {
+	buffer_copy_string(b, "fastcgi.backend.");
+	buffer_append_string_buffer(b, host->id);
+	if (proc) {
+		buffer_append_string(b, ".");
+		buffer_append_long(b, proc->id);
+	}
+
+	return 0;
+}
+
+int fastcgi_status_init(server *srv, buffer *b, fcgi_extension_host *host, fcgi_proc *proc) {
+#define CLEAN(x) \
+	fastcgi_status_copy_procname(b, host, proc); \
+	buffer_append_string(b, x); \
+	status_counter_set(srv, CONST_BUF_LEN(b), 0);
+
+	CLEAN(".disabled");
+	CLEAN(".died");
+	CLEAN(".overloaded");
+	CLEAN(".connected");
+	CLEAN(".load");
+
+#undef CLEAN
+
+#define CLEAN(x) \
+	fastcgi_status_copy_procname(b, host, NULL); \
+	buffer_append_string(b, x); \
+	status_counter_set(srv, CONST_BUF_LEN(b), 0);
+
+	CLEAN(".load");
+
+#undef CLEAN
+
+	return 0;
+}
+
+static handler_ctx * handler_ctx_init() {
+	handler_ctx * hctx;
+
+	hctx = calloc(1, sizeof(*hctx));
+	assert(hctx);
+
+	hctx->fde_ndx = -1;
+
+	hctx->response_header = buffer_init();
+
+	hctx->request_id = 0;
+	hctx->state = FCGI_STATE_INIT;
+	hctx->proc = NULL;
+
+	hctx->fd = -1;
+
+	hctx->reconnects = 0;
+	hctx->send_content_body = 1;
+
+	hctx->rb = chunkqueue_init();
+	hctx->wb = chunkqueue_init();
+
+	return hctx;
+}
+
+static void handler_ctx_free(handler_ctx *hctx) {
+	if (hctx->host) {
+		hctx->host->load--;
+		hctx->host = NULL;
+	}
+
+	buffer_free(hctx->response_header);
+
+	chunkqueue_free(hctx->rb);
+	chunkqueue_free(hctx->wb);
+
+	free(hctx);
+}
+
+fcgi_proc *fastcgi_process_init() {
+	fcgi_proc *f;
+
+	f = calloc(1, sizeof(*f));
+	f->unixsocket = buffer_init();
+	f->connection_name = buffer_init();
+
+	f->prev = NULL;
+	f->next = NULL;
+
+	return f;
+}
+
+void fastcgi_process_free(fcgi_proc *f) {
+	if (!f) return;
+
+	fastcgi_process_free(f->next);
+
+	buffer_free(f->unixsocket);
+	buffer_free(f->connection_name);
+
+	free(f);
+}
+
+fcgi_extension_host *fastcgi_host_init() {
+	fcgi_extension_host *f;
+
+	f = calloc(1, sizeof(*f));
+
+	f->id = buffer_init();
+	f->host = buffer_init();
+	f->unixsocket = buffer_init();
+	f->docroot = buffer_init();
+	f->bin_path = buffer_init();
+	f->bin_env = array_init();
+	f->bin_env_copy = array_init();
+	f->strip_request_uri = buffer_init();
+
+	return f;
+}
+
+void fastcgi_host_free(fcgi_extension_host *h) {
+	if (!h) return;
+
+	buffer_free(h->id);
+	buffer_free(h->host);
+	buffer_free(h->unixsocket);
+	buffer_free(h->docroot);
+	buffer_free(h->bin_path);
+	buffer_free(h->strip_request_uri);
+	array_free(h->bin_env);
+	array_free(h->bin_env_copy);
+
+	fastcgi_process_free(h->first);
+	fastcgi_process_free(h->unused_procs);
+
+	free(h);
+
+}
+
+fcgi_exts *fastcgi_extensions_init() {
+	fcgi_exts *f;
+
+	f = calloc(1, sizeof(*f));
+
+	return f;
+}
+
+void fastcgi_extensions_free(fcgi_exts *f) {
+	size_t i;
+
+	if (!f) return;
+
+	for (i = 0; i < f->used; i++) {
+		fcgi_extension *fe;
+		size_t j;
+
+		fe = f->exts[i];
+
+		for (j = 0; j < fe->used; j++) {
+			fcgi_extension_host *h;
+
+			h = fe->hosts[j];
+
+			fastcgi_host_free(h);
+		}
+
+		buffer_free(fe->key);
+		free(fe->hosts);
+
+		free(fe);
+	}
+
+	free(f->exts);
+
+	free(f);
+}
+
+int fastcgi_extension_insert(fcgi_exts *ext, buffer *key, fcgi_extension_host *fh) {
+	fcgi_extension *fe;
+	size_t i;
+
+	/* there is something */
+
+	for (i = 0; i < ext->used; i++) {
+		if (buffer_is_equal(key, ext->exts[i]->key)) {
+			break;
+		}
+	}
+
+	if (i == ext->used) {
+		/* filextension is new */
+		fe = calloc(1, sizeof(*fe));
+		assert(fe);
+		fe->key = buffer_init();
+		fe->last_used_ndx = -1;
+		buffer_copy_string_buffer(fe->key, key);
+
+		/* */
+
+		if (ext->size == 0) {
+			ext->size = 8;
+			ext->exts = malloc(ext->size * sizeof(*(ext->exts)));
+			assert(ext->exts);
+		} else if (ext->used == ext->size) {
+			ext->size += 8;
+			ext->exts = realloc(ext->exts, ext->size * sizeof(*(ext->exts)));
+			assert(ext->exts);
+		}
+		ext->exts[ext->used++] = fe;
+	} else {
+		fe = ext->exts[i];
+	}
+
+	if (fe->size == 0) {
+		fe->size = 4;
+		fe->hosts = malloc(fe->size * sizeof(*(fe->hosts)));
+		assert(fe->hosts);
+	} else if (fe->size == fe->used) {
+		fe->size += 4;
+		fe->hosts = realloc(fe->hosts, fe->size * sizeof(*(fe->hosts)));
+		assert(fe->hosts);
+	}
+
+	fe->hosts[fe->used++] = fh;
+
+	return 0;
+
+}
+
+INIT_FUNC(mod_fastcgi_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->fcgi_env = buffer_init();
+
+	p->path = buffer_init();
+	p->parse_response = buffer_init();
+
+	p->statuskey = buffer_init();
+
+	return p;
+}
+
+
+FREE_FUNC(mod_fastcgi_free) {
+	plugin_data *p = p_d;
+	buffer_uint *r = &(p->fcgi_request_id);
+
+	UNUSED(srv);
+
+	if (r->ptr) free(r->ptr);
+
+	buffer_free(p->fcgi_env);
+	buffer_free(p->path);
+	buffer_free(p->parse_response);
+	buffer_free(p->statuskey);
+
+	if (p->config_storage) {
+		size_t i, j, n;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+			fcgi_exts *exts;
+
+			if (!s) continue;
+
+			exts = s->exts;
+
+			for (j = 0; j < exts->used; j++) {
+				fcgi_extension *ex;
+
+				ex = exts->exts[j];
+
+				for (n = 0; n < ex->used; n++) {
+					fcgi_proc *proc;
+					fcgi_extension_host *host;
+
+					host = ex->hosts[n];
+
+					for (proc = host->first; proc; proc = proc->next) {
+						if (proc->pid != 0) {
+							kill(proc->pid, host->kill_signal);
+						}
+
+						if (proc->is_local &&
+						    !buffer_is_empty(proc->unixsocket)) {
+							unlink(proc->unixsocket->ptr);
+						}
+					}
+
+					for (proc = host->unused_procs; proc; proc = proc->next) {
+						if (proc->pid != 0) {
+							kill(proc->pid, host->kill_signal);
+						}
+						if (proc->is_local &&
+						    !buffer_is_empty(proc->unixsocket)) {
+							unlink(proc->unixsocket->ptr);
+						}
+					}
+				}
+			}
+
+			fastcgi_extensions_free(s->exts);
+			array_free(s->ext_mapping);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+static int env_add(char_array *env, const char *key, size_t key_len, const char *val, size_t val_len) {
+	char *dst;
+
+	if (!key || !val) return -1;
+
+	dst = malloc(key_len + val_len + 3);
+	memcpy(dst, key, key_len);
+	dst[key_len] = '=';
+	/* add the \0 from the value */
+	memcpy(dst + key_len + 1, val, val_len + 1);
+
+	if (env->size == 0) {
+		env->size = 16;
+		env->ptr = malloc(env->size * sizeof(*env->ptr));
+	} else if (env->size == env->used + 1) {
+		env->size += 16;
+		env->ptr = realloc(env->ptr, env->size * sizeof(*env->ptr));
+	}
+
+	env->ptr[env->used++] = dst;
+
+	return 0;
+}
+
+static int parse_binpath(char_array *env, buffer *b) {
+	char *start;
+	size_t i;
+	/* search for spaces */
+
+	start = b->ptr;
+	for (i = 0; i < b->used - 1; i++) {
+		switch(b->ptr[i]) {
+		case ' ':
+		case '\t':
+			/* a WS, stop here and copy the argument */
+
+			if (env->size == 0) {
+				env->size = 16;
+				env->ptr = malloc(env->size * sizeof(*env->ptr));
+			} else if (env->size == env->used) {
+				env->size += 16;
+				env->ptr = realloc(env->ptr, env->size * sizeof(*env->ptr));
+			}
+
+			b->ptr[i] = '\0';
+
+			env->ptr[env->used++] = start;
+
+			start = b->ptr + i + 1;
+			break;
+		default:
+			break;
+		}
+	}
+
+	if (env->size == 0) {
+		env->size = 16;
+		env->ptr = malloc(env->size * sizeof(*env->ptr));
+	} else if (env->size == env->used) { /* we need one extra for the terminating NULL */
+		env->size += 16;
+		env->ptr = realloc(env->ptr, env->size * sizeof(*env->ptr));
+	}
+
+	/* the rest */
+	env->ptr[env->used++] = start;
+
+	if (env->size == 0) {
+		env->size = 16;
+		env->ptr = malloc(env->size * sizeof(*env->ptr));
+	} else if (env->size == env->used) { /* we need one extra for the terminating NULL */
+		env->size += 16;
+		env->ptr = realloc(env->ptr, env->size * sizeof(*env->ptr));
+	}
+
+	/* terminate */
+	env->ptr[env->used++] = NULL;
+
+	return 0;
+}
+
+static int fcgi_spawn_connection(server *srv,
+				 plugin_data *p,
+				 fcgi_extension_host *host,
+				 fcgi_proc *proc) {
+	int fcgi_fd;
+	int socket_type, status;
+	struct timeval tv = { 0, 100 * 1000 };
+#ifdef HAVE_SYS_UN_H
+	struct sockaddr_un fcgi_addr_un;
+#endif
+	struct sockaddr_in fcgi_addr_in;
+	struct sockaddr *fcgi_addr;
+
+	socklen_t servlen;
+
+#ifndef HAVE_FORK
+	return -1;
+#endif
+
+	if (p->conf.debug) {
+		log_error_write(srv, __FILE__, __LINE__, "sdb",
+				"new proc, socket:", proc->port, proc->unixsocket);
+	}
+
+	if (!buffer_is_empty(proc->unixsocket)) {
+		memset(&fcgi_addr, 0, sizeof(fcgi_addr));
+
+#ifdef HAVE_SYS_UN_H
+		fcgi_addr_un.sun_family = AF_UNIX;
+		strcpy(fcgi_addr_un.sun_path, proc->unixsocket->ptr);
+
+#ifdef SUN_LEN
+		servlen = SUN_LEN(&fcgi_addr_un);
+#else
+		/* stevens says: */
+		servlen = proc->unixsocket->used + sizeof(fcgi_addr_un.sun_family);
+#endif
+		socket_type = AF_UNIX;
+		fcgi_addr = (struct sockaddr *) &fcgi_addr_un;
+
+		buffer_copy_string(proc->connection_name, "unix:");
+		buffer_append_string_buffer(proc->connection_name, proc->unixsocket);
+
+#else
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"ERROR: Unix Domain sockets are not supported.");
+		return -1;
+#endif
+	} else {
+		fcgi_addr_in.sin_family = AF_INET;
+
+		if (buffer_is_empty(host->host)) {
+			fcgi_addr_in.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+		} else {
+			struct hostent *he;
+
+			/* set a useful default */
+			fcgi_addr_in.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+
+			if (NULL == (he = gethostbyname(host->host->ptr))) {
+				log_error_write(srv, __FILE__, __LINE__,
+						"sdb", "gethostbyname failed: ",
+						h_errno, host->host);
+				return -1;
+			}
+
+			if (he->h_addrtype != AF_INET) {
+				log_error_write(srv, __FILE__, __LINE__, "sd", "addr-type != AF_INET: ", he->h_addrtype);
+				return -1;
+			}
+
+			if (he->h_length != sizeof(struct in_addr)) {
+				log_error_write(srv, __FILE__, __LINE__, "sd", "addr-length != sizeof(in_addr): ", he->h_length);
+				return -1;
+			}
+
+			memcpy(&(fcgi_addr_in.sin_addr.s_addr), he->h_addr_list[0], he->h_length);
+
+		}
+		fcgi_addr_in.sin_port = htons(proc->port);
+		servlen = sizeof(fcgi_addr_in);
+
+		socket_type = AF_INET;
+		fcgi_addr = (struct sockaddr *) &fcgi_addr_in;
+
+		buffer_copy_string(proc->connection_name, "tcp:");
+		if (!buffer_is_empty(host->host)) {
+			buffer_append_string_buffer(proc->connection_name, host->host);
+		} else {
+			buffer_append_string(proc->connection_name, "localhost");
+		}
+		buffer_append_string(proc->connection_name, ":");
+		buffer_append_long(proc->connection_name, proc->port);
+	}
+
+	if (-1 == (fcgi_fd = socket(socket_type, SOCK_STREAM, 0))) {
+		log_error_write(srv, __FILE__, __LINE__, "ss",
+				"failed:", strerror(errno));
+		return -1;
+	}
+
+	if (-1 == connect(fcgi_fd, fcgi_addr, servlen)) {
+		/* server is not up, spawn it  */
+		pid_t child;
+		int val;
+
+		if (errno != ENOENT &&
+		    !buffer_is_empty(proc->unixsocket)) {
+			unlink(proc->unixsocket->ptr);
+		}
+
+		close(fcgi_fd);
+
+		/* reopen socket */
+		if (-1 == (fcgi_fd = socket(socket_type, SOCK_STREAM, 0))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+				"socket failed:", strerror(errno));
+			return -1;
+		}
+
+		val = 1;
+		if (setsockopt(fcgi_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"socketsockopt failed:", strerror(errno));
+			return -1;
+		}
+
+		/* create socket */
+		if (-1 == bind(fcgi_fd, fcgi_addr, servlen)) {
+			log_error_write(srv, __FILE__, __LINE__, "sbs",
+				"bind failed for:",
+				proc->connection_name,
+				strerror(errno));
+			return -1;
+		}
+
+		if (-1 == listen(fcgi_fd, 1024)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+				"listen failed:", strerror(errno));
+			return -1;
+		}
+
+#ifdef HAVE_FORK
+		switch ((child = fork())) {
+		case 0: {
+			size_t i = 0;
+			char *c;
+			char_array env;
+			char_array arg;
+
+			/* create environment */
+			env.ptr = NULL;
+			env.size = 0;
+			env.used = 0;
+
+			arg.ptr = NULL;
+			arg.size = 0;
+			arg.used = 0;
+
+			if(fcgi_fd != FCGI_LISTENSOCK_FILENO) {
+				close(FCGI_LISTENSOCK_FILENO);
+				dup2(fcgi_fd, FCGI_LISTENSOCK_FILENO);
+				close(fcgi_fd);
+			}
+
+			/* we don't need the client socket */
+			for (i = 3; i < 256; i++) {
+				close(i);
+			}
+
+			/* build clean environment */
+			if (host->bin_env_copy->used) {
+				for (i = 0; i < host->bin_env_copy->used; i++) {
+					data_string *ds = (data_string *)host->bin_env_copy->data[i];
+					char *ge;
+
+					if (NULL != (ge = getenv(ds->value->ptr))) {
+						env_add(&env, CONST_BUF_LEN(ds->value), ge, strlen(ge));
+					}
+				}
+			} else {
+				for (i = 0; environ[i]; i++) {
+					char *eq;
+
+					if (NULL != (eq = strchr(environ[i], '='))) {
+						env_add(&env, environ[i], eq - environ[i], eq+1, strlen(eq+1));
+					}
+				}
+			}
+
+			/* create environment */
+			for (i = 0; i < host->bin_env->used; i++) {
+				data_string *ds = (data_string *)host->bin_env->data[i];
+
+				env_add(&env, CONST_BUF_LEN(ds->key), CONST_BUF_LEN(ds->value));
+			}
+
+			for (i = 0; i < env.used; i++) {
+				/* search for PHP_FCGI_CHILDREN */
+				if (0 == strncmp(env.ptr[i], "PHP_FCGI_CHILDREN=", sizeof("PHP_FCGI_CHILDREN=") - 1)) break;
+			}
+
+			/* not found, add a default */
+			if (i == env.used) {
+				env_add(&env, CONST_STR_LEN("PHP_FCGI_CHILDREN"), CONST_STR_LEN("1"));
+			}
+
+			env.ptr[env.used] = NULL;
+
+			parse_binpath(&arg, host->bin_path);
+
+			/* chdir into the base of the bin-path,
+			 * search for the last / */
+			if (NULL != (c = strrchr(arg.ptr[0], '/'))) {
+				*c = '\0';
+
+				/* change to the physical directory */
+				if (-1 == chdir(arg.ptr[0])) {
+					*c = '/';
+					log_error_write(srv, __FILE__, __LINE__, "sss", "chdir failed:", strerror(errno), arg.ptr[0]);
+				}
+				*c = '/';
+			}
+
+
+			/* exec the cgi */
+			execve(arg.ptr[0], arg.ptr, env.ptr);
+
+			log_error_write(srv, __FILE__, __LINE__, "sbs",
+					"execve failed for:", host->bin_path, strerror(errno));
+
+			exit(errno);
+
+			break;
+		}
+		case -1:
+			/* error */
+			break;
+		default:
+			/* father */
+
+			/* wait */
+			select(0, NULL, NULL, NULL, &tv);
+
+			switch (waitpid(child, &status, WNOHANG)) {
+			case 0:
+				/* child still running after timeout, good */
+				break;
+			case -1:
+				/* no PID found ? should never happen */
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"pid not found:", strerror(errno));
+				return -1;
+			default:
+				log_error_write(srv, __FILE__, __LINE__, "sbs",
+						"the fastcgi-backend", host->bin_path, "failed to start:");
+				/* the child should not terminate at all */
+				if (WIFEXITED(status)) {
+					log_error_write(srv, __FILE__, __LINE__, "sdb",
+							"child exited with status",
+							WEXITSTATUS(status), host->bin_path);
+					log_error_write(srv, __FILE__, __LINE__, "s",
+							"If you're trying to run PHP as a FastCGI backend, make sure you're using the FastCGI-enabled version.\n"
+							"You can find out if it is the right one by executing 'php -v' and it should display '(cgi-fcgi)' "
+							"in the output, NOT '(cgi)' NOR '(cli)'.\n"
+							"For more information, check http://trac.lighttpd.net/trac/wiki/Docs%3AModFastCGI#preparing-php-as-a-fastcgi-program"
+							"If this is PHP on Gentoo, add 'fastcgi' to the USE flags.");
+				} else if (WIFSIGNALED(status)) {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+							"terminated by signal:",
+							WTERMSIG(status));
+
+					if (WTERMSIG(status) == 11) {
+						log_error_write(srv, __FILE__, __LINE__, "s",
+								"to be exact: it segfaulted, crashed, died, ... you get the idea." );
+						log_error_write(srv, __FILE__, __LINE__, "s",
+								"If this is PHP, try removing the bytecode caches for now and try again.");
+					}
+				} else {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+							"child died somehow:",
+							status);
+				}
+				return -1;
+			}
+
+			/* register process */
+			proc->pid = child;
+			proc->last_used = srv->cur_ts;
+			proc->is_local = 1;
+
+			break;
+		}
+#endif
+	} else {
+		proc->is_local = 0;
+		proc->pid = 0;
+
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"(debug) socket is already used; won't spawn:",
+					proc->connection_name);
+		}
+	}
+
+	proc->state = PROC_STATE_RUNNING;
+	host->active_procs++;
+
+	close(fcgi_fd);
+
+	return 0;
+}
+
+
+SETDEFAULTS_FUNC(mod_fastcgi_set_defaults) {
+	plugin_data *p = p_d;
+	data_unset *du;
+	size_t i = 0;
+	buffer *fcgi_mode = buffer_init();
+
+	config_values_t cv[] = {
+		{ "fastcgi.server",              NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "fastcgi.debug",               NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+		{ "fastcgi.map-extensions",      NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 2 */
+		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+		array *ca;
+
+		s = malloc(sizeof(plugin_config));
+		s->exts          = fastcgi_extensions_init();
+		s->debug         = 0;
+		s->ext_mapping   = array_init();
+
+		cv[0].destination = s->exts;
+		cv[1].destination = &(s->debug);
+		cv[2].destination = s->ext_mapping;
+
+		p->config_storage[i] = s;
+		ca = ((data_config *)srv->config_context->data[i])->value;
+
+		if (0 != config_insert_values_global(srv, ca, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		/*
+		 * <key> = ( ... )
+		 */
+
+		if (NULL != (du = array_get_element(ca, "fastcgi.server"))) {
+			size_t j;
+			data_array *da = (data_array *)du;
+
+			if (du->type != TYPE_ARRAY) {
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"unexpected type for key: ", "fastcgi.server", "array of strings");
+
+				return HANDLER_ERROR;
+			}
+
+
+			/*
+			 * fastcgi.server = ( "<ext>" => ( ... ),
+			 *                    "<ext>" => ( ... ) )
+			 */
+
+			for (j = 0; j < da->value->used; j++) {
+				size_t n;
+				data_array *da_ext = (data_array *)da->value->data[j];
+
+				if (da->value->data[j]->type != TYPE_ARRAY) {
+					log_error_write(srv, __FILE__, __LINE__, "sssbs",
+							"unexpected type for key: ", "fastcgi.server",
+							"[", da->value->data[j]->key, "](string)");
+
+					return HANDLER_ERROR;
+				}
+
+				/*
+				 * da_ext->key == name of the extension
+				 */
+
+				/*
+				 * fastcgi.server = ( "<ext>" =>
+				 *                     ( "<host>" => ( ... ),
+				 *                       "<host>" => ( ... )
+				 *                     ),
+				 *                    "<ext>" => ... )
+				 */
+
+				for (n = 0; n < da_ext->value->used; n++) {
+					data_array *da_host = (data_array *)da_ext->value->data[n];
+
+					fcgi_extension_host *host;
+
+					config_values_t fcv[] = {
+						{ "host",              NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+						{ "docroot",           NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+						{ "mode",              NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 2 */
+						{ "socket",            NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 3 */
+						{ "bin-path",          NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 4 */
+
+						{ "check-local",       NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },      /* 5 */
+						{ "port",              NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 6 */
+						{ "min-procs-not-working",         NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 7 this is broken for now */
+						{ "max-procs",         NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 8 */
+						{ "max-load-per-proc", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 9 */
+						{ "idle-timeout",      NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 10 */
+						{ "disable-time",      NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 11 */
+
+						{ "bin-environment",   NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },        /* 12 */
+						{ "bin-copy-environment", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },     /* 13 */
+
+						{ "broken-scriptfilename", NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },  /* 14 */
+						{ "allow-x-send-file",  NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },      /* 15 */
+						{ "strip-request-uri",  NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },      /* 16 */
+						{ "kill-signal",        NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },      /* 17 */
+
+						{ NULL,                NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+					};
+
+					if (da_host->type != TYPE_ARRAY) {
+						log_error_write(srv, __FILE__, __LINE__, "ssSBS",
+								"unexpected type for key:",
+								"fastcgi.server",
+								"[", da_host->key, "](string)");
+
+						return HANDLER_ERROR;
+					}
+
+					host = fastcgi_host_init();
+
+					buffer_copy_string_buffer(host->id, da_host->key);
+
+					host->check_local  = 1;
+					host->min_procs    = 4;
+					host->max_procs    = 4;
+					host->max_load_per_proc = 1;
+					host->idle_timeout = 60;
+					host->mode = FCGI_RESPONDER;
+					host->disable_time = 60;
+					host->break_scriptfilename_for_php = 0;
+					host->allow_xsendfile = 0; /* handle X-LIGHTTPD-send-file */
+					host->kill_signal = SIGTERM;
+
+					fcv[0].destination = host->host;
+					fcv[1].destination = host->docroot;
+					fcv[2].destination = fcgi_mode;
+					fcv[3].destination = host->unixsocket;
+					fcv[4].destination = host->bin_path;
+
+					fcv[5].destination = &(host->check_local);
+					fcv[6].destination = &(host->port);
+					fcv[7].destination = &(host->min_procs);
+					fcv[8].destination = &(host->max_procs);
+					fcv[9].destination = &(host->max_load_per_proc);
+					fcv[10].destination = &(host->idle_timeout);
+					fcv[11].destination = &(host->disable_time);
+
+					fcv[12].destination = host->bin_env;
+					fcv[13].destination = host->bin_env_copy;
+					fcv[14].destination = &(host->break_scriptfilename_for_php);
+					fcv[15].destination = &(host->allow_xsendfile);
+					fcv[16].destination = host->strip_request_uri;
+					fcv[17].destination = &(host->kill_signal);
+
+					if (0 != config_insert_values_internal(srv, da_host->value, fcv)) {
+						return HANDLER_ERROR;
+					}
+
+					if ((!buffer_is_empty(host->host) || host->port) &&
+					    !buffer_is_empty(host->unixsocket)) {
+						log_error_write(srv, __FILE__, __LINE__, "sbsbsbs",
+								"either host/port or socket have to be set in:",
+								da->key, "= (",
+								da_ext->key, " => (",
+								da_host->key, " ( ...");
+
+						return HANDLER_ERROR;
+					}
+
+					if (!buffer_is_empty(host->unixsocket)) {
+						/* unix domain socket */
+						struct sockaddr_un un;
+
+						if (host->unixsocket->used > sizeof(un.sun_path) - 2) {
+							log_error_write(srv, __FILE__, __LINE__, "sbsbsbs",
+									"unixsocket is too long in:",
+									da->key, "= (",
+									da_ext->key, " => (",
+									da_host->key, " ( ...");
+
+							return HANDLER_ERROR;
+						}
+					} else {
+						/* tcp/ip */
+
+						if (buffer_is_empty(host->host) &&
+						    buffer_is_empty(host->bin_path)) {
+							log_error_write(srv, __FILE__, __LINE__, "sbsbsbs",
+									"host or binpath have to be set in:",
+									da->key, "= (",
+									da_ext->key, " => (",
+									da_host->key, " ( ...");
+
+							return HANDLER_ERROR;
+						} else if (host->port == 0) {
+							log_error_write(srv, __FILE__, __LINE__, "sbsbsbs",
+									"port has to be set in:",
+									da->key, "= (",
+									da_ext->key, " => (",
+									da_host->key, " ( ...");
+
+							return HANDLER_ERROR;
+						}
+					}
+
+					if (!buffer_is_empty(host->bin_path)) {
+						/* a local socket + self spawning */
+						size_t pno;
+
+						/* HACK:  just to make sure the adaptive spawing is disabled */
+						host->min_procs = host->max_procs;
+
+						if (host->min_procs > host->max_procs) host->max_procs = host->min_procs;
+						if (host->max_load_per_proc < 1) host->max_load_per_proc = 0;
+
+						if (s->debug) {
+							log_error_write(srv, __FILE__, __LINE__, "ssbsdsbsdsd",
+									"--- fastcgi spawning local",
+									"\n\tproc:", host->bin_path,
+									"\n\tport:", host->port,
+									"\n\tsocket", host->unixsocket,
+									"\n\tmin-procs:", host->min_procs,
+									"\n\tmax-procs:", host->max_procs);
+						}
+
+						for (pno = 0; pno < host->min_procs; pno++) {
+							fcgi_proc *proc;
+
+							proc = fastcgi_process_init();
+							proc->id = host->num_procs++;
+							host->max_id++;
+
+							if (buffer_is_empty(host->unixsocket)) {
+								proc->port = host->port + pno;
+							} else {
+								buffer_copy_string_buffer(proc->unixsocket, host->unixsocket);
+								buffer_append_string(proc->unixsocket, "-");
+								buffer_append_long(proc->unixsocket, pno);
+							}
+
+							if (s->debug) {
+								log_error_write(srv, __FILE__, __LINE__, "ssdsbsdsd",
+										"--- fastcgi spawning",
+										"\n\tport:", host->port,
+										"\n\tsocket", host->unixsocket,
+										"\n\tcurrent:", pno, "/", host->min_procs);
+							}
+
+							if (fcgi_spawn_connection(srv, p, host, proc)) {
+								log_error_write(srv, __FILE__, __LINE__, "s",
+										"[ERROR]: spawning fcgi failed.");
+								return HANDLER_ERROR;
+							}
+
+							fastcgi_status_init(srv, p->statuskey, host, proc);
+
+							proc->next = host->first;
+							if (host->first) 	host->first->prev = proc;
+
+							host->first = proc;
+						}
+					} else {
+						fcgi_proc *proc;
+
+						proc = fastcgi_process_init();
+						proc->id = host->num_procs++;
+						host->max_id++;
+						host->active_procs++;
+						proc->state = PROC_STATE_RUNNING;
+
+						if (buffer_is_empty(host->unixsocket)) {
+							proc->port = host->port;
+						} else {
+							buffer_copy_string_buffer(proc->unixsocket, host->unixsocket);
+						}
+
+						fastcgi_status_init(srv, p->statuskey, host, proc);
+
+						host->first = proc;
+
+						host->min_procs = 1;
+						host->max_procs = 1;
+					}
+
+					if (!buffer_is_empty(fcgi_mode)) {
+						if (strcmp(fcgi_mode->ptr, "responder") == 0) {
+							host->mode = FCGI_RESPONDER;
+						} else if (strcmp(fcgi_mode->ptr, "authorizer") == 0) {
+							host->mode = FCGI_AUTHORIZER;
+							if (buffer_is_empty(host->docroot)) {
+								log_error_write(srv, __FILE__, __LINE__, "s",
+										"ERROR: docroot is required for authorizer mode.");
+								return HANDLER_ERROR;
+							}
+						} else {
+							log_error_write(srv, __FILE__, __LINE__, "sbs",
+									"WARNING: unknown fastcgi mode:",
+									fcgi_mode, "(ignored, mode set to responder)");
+						}
+					}
+
+					/* if extension already exists, take it */
+					fastcgi_extension_insert(s->exts, da_ext->key, host);
+				}
+			}
+		}
+	}
+
+	buffer_free(fcgi_mode);
+
+	return HANDLER_GO_ON;
+}
+
+static int fcgi_set_state(server *srv, handler_ctx *hctx, fcgi_connection_state_t state) {
+	hctx->state = state;
+	hctx->state_timestamp = srv->cur_ts;
+
+	return 0;
+}
+
+
+static size_t fcgi_requestid_new(server *srv, plugin_data *p) {
+	size_t m = 0;
+	size_t i;
+	buffer_uint *r = &(p->fcgi_request_id);
+
+	UNUSED(srv);
+
+	for (i = 0; i < r->used; i++) {
+		if (r->ptr[i] > m) m = r->ptr[i];
+	}
+
+	if (r->size == 0) {
+		r->size = 16;
+		r->ptr = malloc(sizeof(*r->ptr) * r->size);
+	} else if (r->used == r->size) {
+		r->size += 16;
+		r->ptr = realloc(r->ptr, sizeof(*r->ptr) * r->size);
+	}
+
+	r->ptr[r->used++] = ++m;
+
+	return m;
+}
+
+static int fcgi_requestid_del(server *srv, plugin_data *p, size_t request_id) {
+	size_t i;
+	buffer_uint *r = &(p->fcgi_request_id);
+
+	UNUSED(srv);
+
+	for (i = 0; i < r->used; i++) {
+		if (r->ptr[i] == request_id) break;
+	}
+
+	if (i != r->used) {
+		/* found */
+
+		if (i != r->used - 1) {
+			r->ptr[i] = r->ptr[r->used - 1];
+		}
+		r->used--;
+	}
+
+	return 0;
+}
+void fcgi_connection_close(server *srv, handler_ctx *hctx) {
+	plugin_data *p;
+	connection  *con;
+
+	if (NULL == hctx) return;
+
+	p    = hctx->plugin_data;
+	con  = hctx->remote_conn;
+
+	if (hctx->fd != -1) {
+		fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+		fdevent_unregister(srv->ev, hctx->fd);
+		close(hctx->fd);
+		srv->cur_fds--;
+	}
+
+	if (hctx->request_id != 0) {
+		fcgi_requestid_del(srv, p, hctx->request_id);
+	}
+
+	if (hctx->host && hctx->proc) {
+		if (hctx->got_proc) {
+			/* after the connect the process gets a load */
+			hctx->proc->load--;
+
+			status_counter_dec(srv, CONST_STR_LEN("fastcgi.active-requests"));
+
+			fastcgi_status_copy_procname(p->statuskey, hctx->host, hctx->proc);
+			buffer_append_string(p->statuskey, ".load");
+
+			status_counter_set(srv, CONST_BUF_LEN(p->statuskey), hctx->proc->load);
+
+			if (p->conf.debug) {
+				log_error_write(srv, __FILE__, __LINE__, "ssdsbsd",
+						"released proc:",
+						"pid:", hctx->proc->pid,
+						"socket:", hctx->proc->connection_name,
+						"load:", hctx->proc->load);
+			}
+		}
+	}
+
+
+	handler_ctx_free(hctx);
+	con->plugin_ctx[p->id] = NULL;
+}
+
+static int fcgi_reconnect(server *srv, handler_ctx *hctx) {
+	plugin_data *p    = hctx->plugin_data;
+
+	/* child died
+	 *
+	 * 1.
+	 *
+	 * connect was ok, connection was accepted
+	 * but the php accept loop checks after the accept if it should die or not.
+	 *
+	 * if yes we can only detect it at a write()
+	 *
+	 * next step is resetting this attemp and setup a connection again
+	 *
+	 * if we have more than 5 reconnects for the same request, die
+	 *
+	 * 2.
+	 *
+	 * we have a connection but the child died by some other reason
+	 *
+	 */
+
+	if (hctx->fd != -1) {
+		fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+		fdevent_unregister(srv->ev, hctx->fd);
+		close(hctx->fd);
+		srv->cur_fds--;
+		hctx->fd = -1;
+	}
+
+	fcgi_requestid_del(srv, p, hctx->request_id);
+
+	fcgi_set_state(srv, hctx, FCGI_STATE_INIT);
+
+	hctx->request_id = 0;
+	hctx->reconnects++;
+
+	if (p->conf.debug > 2) {
+		if (hctx->proc) {
+			log_error_write(srv, __FILE__, __LINE__, "sdb",
+					"release proc for reconnect:",
+					hctx->proc->pid, hctx->proc->connection_name);
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"release proc for reconnect:",
+					hctx->host->unixsocket);
+		}
+	}
+
+	if (hctx->proc && hctx->got_proc) {
+		hctx->proc->load--;
+	}
+
+	/* perhaps another host gives us more luck */
+	hctx->host->load--;
+	hctx->host = NULL;
+
+	return 0;
+}
+
+
+static handler_t fcgi_connection_reset(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+
+	fcgi_connection_close(srv, con->plugin_ctx[p->id]);
+
+	return HANDLER_GO_ON;
+}
+
+
+static int fcgi_env_add(buffer *env, const char *key, size_t key_len, const char *val, size_t val_len) {
+	size_t len;
+
+	if (!key || !val) return -1;
+
+	len = key_len + val_len;
+
+	len += key_len > 127 ? 4 : 1;
+	len += val_len > 127 ? 4 : 1;
+
+	if (env->used + len >= FCGI_MAX_LENGTH) {
+		/**
+		 * we can't append more headers, ignore it
+		 */
+		return -1;
+	}
+
+	/**
+	 * field length can be 31bit max
+	 *
+	 * HINT: this can't happen as FCGI_MAX_LENGTH is only 16bit
+	 */
+	if (key_len > 0x7fffffff) key_len = 0x7fffffff;
+	if (val_len > 0x7fffffff) val_len = 0x7fffffff;
+
+	buffer_prepare_append(env, len);
+
+	if (key_len > 127) {
+		env->ptr[env->used++] = ((key_len >> 24) & 0xff) | 0x80;
+		env->ptr[env->used++] = (key_len >> 16) & 0xff;
+		env->ptr[env->used++] = (key_len >> 8) & 0xff;
+		env->ptr[env->used++] = (key_len >> 0) & 0xff;
+	} else {
+		env->ptr[env->used++] = (key_len >> 0) & 0xff;
+	}
+
+	if (val_len > 127) {
+		env->ptr[env->used++] = ((val_len >> 24) & 0xff) | 0x80;
+		env->ptr[env->used++] = (val_len >> 16) & 0xff;
+		env->ptr[env->used++] = (val_len >> 8) & 0xff;
+		env->ptr[env->used++] = (val_len >> 0) & 0xff;
+	} else {
+		env->ptr[env->used++] = (val_len >> 0) & 0xff;
+	}
+
+	memcpy(env->ptr + env->used, key, key_len);
+	env->used += key_len;
+	memcpy(env->ptr + env->used, val, val_len);
+	env->used += val_len;
+
+	return 0;
+}
+
+static int fcgi_header(FCGI_Header * header, unsigned char type, size_t request_id, int contentLength, unsigned char paddingLength) {
+	assert(contentLength <= FCGI_MAX_LENGTH);
+	
+	header->version = FCGI_VERSION_1;
+	header->type = type;
+	header->requestIdB0 = request_id & 0xff;
+	header->requestIdB1 = (request_id >> 8) & 0xff;
+	header->contentLengthB0 = contentLength & 0xff;
+	header->contentLengthB1 = (contentLength >> 8) & 0xff;
+	header->paddingLength = paddingLength;
+	header->reserved = 0;
+
+	return 0;
+}
+/**
+ *
+ * returns
+ *   -1 error
+ *    0 connected
+ *    1 not connected yet
+ */
+
+typedef enum {
+	CONNECTION_UNSET,
+	CONNECTION_OK,
+	CONNECTION_DELAYED, /* retry after event, take same host */
+	CONNECTION_OVERLOADED, /* disable for 1 second, take another backend */
+	CONNECTION_DEAD /* disable for 60 seconds, take another backend */
+} connection_result_t;
+
+static connection_result_t fcgi_establish_connection(server *srv, handler_ctx *hctx) {
+	struct sockaddr *fcgi_addr;
+	struct sockaddr_in fcgi_addr_in;
+#ifdef HAVE_SYS_UN_H
+	struct sockaddr_un fcgi_addr_un;
+#endif
+	socklen_t servlen;
+
+	fcgi_extension_host *host = hctx->host;
+	fcgi_proc *proc   = hctx->proc;
+	int fcgi_fd       = hctx->fd;
+
+	memset(&fcgi_addr, 0, sizeof(fcgi_addr));
+
+	if (!buffer_is_empty(proc->unixsocket)) {
+#ifdef HAVE_SYS_UN_H
+		/* use the unix domain socket */
+		fcgi_addr_un.sun_family = AF_UNIX;
+		strcpy(fcgi_addr_un.sun_path, proc->unixsocket->ptr);
+#ifdef SUN_LEN
+		servlen = SUN_LEN(&fcgi_addr_un);
+#else
+		/* stevens says: */
+		servlen = proc->unixsocket->used + sizeof(fcgi_addr_un.sun_family);
+#endif
+		fcgi_addr = (struct sockaddr *) &fcgi_addr_un;
+
+		if (buffer_is_empty(proc->connection_name)) {
+			/* on remote spawing we have to set the connection-name now */
+			buffer_copy_string(proc->connection_name, "unix:");
+			buffer_append_string_buffer(proc->connection_name, proc->unixsocket);
+		}
+#else
+		return -1;
+#endif
+	} else {
+		fcgi_addr_in.sin_family = AF_INET;
+		if (!buffer_is_empty(host->host)) {
+			if (0 == inet_aton(host->host->ptr, &(fcgi_addr_in.sin_addr))) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs",
+						"converting IP address failed for", host->host,
+						"\nBe sure to specify an IP address here");
+	
+				return -1;
+			}
+		} else {
+			fcgi_addr_in.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+		}
+		fcgi_addr_in.sin_port = htons(proc->port);
+		servlen = sizeof(fcgi_addr_in);
+
+		fcgi_addr = (struct sockaddr *) &fcgi_addr_in;
+
+		if (buffer_is_empty(proc->connection_name)) {
+			/* on remote spawing we have to set the connection-name now */
+			buffer_copy_string(proc->connection_name, "tcp:");
+			if (!buffer_is_empty(host->host)) {
+				buffer_append_string_buffer(proc->connection_name, host->host);
+			} else {
+				buffer_append_string(proc->connection_name, "localhost");
+			}
+			buffer_append_string(proc->connection_name, ":");
+			buffer_append_long(proc->connection_name, proc->port);
+		}
+	}
+
+	if (-1 == connect(fcgi_fd, fcgi_addr, servlen)) {
+		if (errno == EINPROGRESS ||
+		    errno == EALREADY ||
+		    errno == EINTR) {
+			if (hctx->conf.debug > 2) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+					"connect delayed; will continue later:", proc->connection_name);
+			}
+
+			return CONNECTION_DELAYED;
+		} else if (errno == EAGAIN) {
+			if (hctx->conf.debug) {
+				log_error_write(srv, __FILE__, __LINE__, "sbsd",
+					"This means that you have more incoming requests than your FastCGI backend can handle in parallel."
+					"It might help to spawn more FastCGI backends or PHP children; if not, decrease server.max-connections."
+					"The load for this FastCGI backend", proc->connection_name, "is", proc->load);
+			}
+
+			return CONNECTION_OVERLOADED;
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sssb",
+					"connect failed:",
+					strerror(errno), "on",
+					proc->connection_name);
+
+			return CONNECTION_DEAD;
+		}
+	}
+
+	hctx->reconnects = 0;
+	if (hctx->conf.debug > 1) {
+		log_error_write(srv, __FILE__, __LINE__, "sd",
+				"connect succeeded: ", fcgi_fd);
+	}
+
+	return CONNECTION_OK;
+}
+
+static int fcgi_env_add_request_headers(server *srv, connection *con, plugin_data *p) {
+	size_t i;
+
+	for (i = 0; i < con->request.headers->used; i++) {
+		data_string *ds;
+
+		ds = (data_string *)con->request.headers->data[i];
+
+		if (ds->value->used && ds->key->used) {
+			size_t j;
+			buffer_reset(srv->tmp_buf);
+
+			if (0 != strcasecmp(ds->key->ptr, "CONTENT-TYPE")) {
+				BUFFER_COPY_STRING_CONST(srv->tmp_buf, "HTTP_");
+				srv->tmp_buf->used--;
+			}
+
+			buffer_prepare_append(srv->tmp_buf, ds->key->used + 2);
+			for (j = 0; j < ds->key->used - 1; j++) {
+				char c = '_';
+				if (light_isalpha(ds->key->ptr[j])) {
+					/* upper-case */
+					c = ds->key->ptr[j] & ~32;
+				} else if (light_isdigit(ds->key->ptr[j])) {
+					/* copy */
+					c = ds->key->ptr[j];
+				}
+				srv->tmp_buf->ptr[srv->tmp_buf->used++] = c;
+			}
+			srv->tmp_buf->ptr[srv->tmp_buf->used++] = '\0';
+
+			FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_BUF_LEN(srv->tmp_buf), CONST_BUF_LEN(ds->value)),con);
+		}
+	}
+
+	for (i = 0; i < con->environment->used; i++) {
+		data_string *ds;
+
+		ds = (data_string *)con->environment->data[i];
+
+		if (ds->value->used && ds->key->used) {
+			size_t j;
+			buffer_reset(srv->tmp_buf);
+
+			buffer_prepare_append(srv->tmp_buf, ds->key->used + 2);
+			for (j = 0; j < ds->key->used - 1; j++) {
+				char c = '_';
+				if (light_isalpha(ds->key->ptr[j])) {
+					/* upper-case */
+					c = ds->key->ptr[j] & ~32;
+				} else if (light_isdigit(ds->key->ptr[j])) {
+					/* copy */
+					c = ds->key->ptr[j];
+				}
+				srv->tmp_buf->ptr[srv->tmp_buf->used++] = c;
+			}
+			srv->tmp_buf->ptr[srv->tmp_buf->used++] = '\0';
+
+			FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_BUF_LEN(srv->tmp_buf), CONST_BUF_LEN(ds->value)), con);
+		}
+	}
+
+	return 0;
+}
+
+
+static int fcgi_create_env(server *srv, handler_ctx *hctx, size_t request_id) {
+	FCGI_BeginRequestRecord beginRecord;
+	FCGI_Header header;
+	buffer *b;
+
+	char buf[32];
+	const char *s;
+#ifdef HAVE_IPV6
+	char b2[INET6_ADDRSTRLEN + 1];
+#endif
+
+	plugin_data *p    = hctx->plugin_data;
+	fcgi_extension_host *host= hctx->host;
+
+	connection *con   = hctx->remote_conn;
+	server_socket *srv_sock = con->srv_socket;
+
+	sock_addr our_addr;
+	socklen_t our_addr_len;
+
+	/* send FCGI_BEGIN_REQUEST */
+
+	fcgi_header(&(beginRecord.header), FCGI_BEGIN_REQUEST, request_id, sizeof(beginRecord.body), 0);
+	beginRecord.body.roleB0 = host->mode;
+	beginRecord.body.roleB1 = 0;
+	beginRecord.body.flags = 0;
+	memset(beginRecord.body.reserved, 0, sizeof(beginRecord.body.reserved));
+
+	b = chunkqueue_get_append_buffer(hctx->wb);
+
+	buffer_copy_memory(b, (const char *)&beginRecord, sizeof(beginRecord));
+
+	/* send FCGI_PARAMS */
+	buffer_prepare_copy(p->fcgi_env, 1024);
+
+
+	FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_SOFTWARE"), CONST_STR_LEN(PACKAGE_NAME"/"PACKAGE_VERSION)),con)
+
+	if (con->server_name->used) {
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_NAME"), CONST_BUF_LEN(con->server_name)),con)
+	} else {
+#ifdef HAVE_IPV6
+		s = inet_ntop(srv_sock->addr.plain.sa_family,
+			      srv_sock->addr.plain.sa_family == AF_INET6 ?
+			      (const void *) &(srv_sock->addr.ipv6.sin6_addr) :
+			      (const void *) &(srv_sock->addr.ipv4.sin_addr),
+			      b2, sizeof(b2)-1);
+#else
+		s = inet_ntoa(srv_sock->addr.ipv4.sin_addr);
+#endif
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_NAME"), s, strlen(s)),con)
+	}
+
+	FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("GATEWAY_INTERFACE"), CONST_STR_LEN("CGI/1.1")),con)
+
+	LI_ltostr(buf,
+#ifdef HAVE_IPV6
+	       ntohs(srv_sock->addr.plain.sa_family ? srv_sock->addr.ipv6.sin6_port : srv_sock->addr.ipv4.sin_port)
+#else
+	       ntohs(srv_sock->addr.ipv4.sin_port)
+#endif
+	       );
+
+	FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_PORT"), buf, strlen(buf)),con)
+
+	/* get the server-side of the connection to the client */
+	our_addr_len = sizeof(our_addr);
+
+	if (-1 == getsockname(con->fd, &(our_addr.plain), &our_addr_len)) {
+		s = inet_ntop_cache_get_ip(srv, &(srv_sock->addr));
+	} else {
+		s = inet_ntop_cache_get_ip(srv, &(our_addr));
+	}
+	FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_ADDR"), s, strlen(s)),con)
+
+	LI_ltostr(buf,
+#ifdef HAVE_IPV6
+	       ntohs(con->dst_addr.plain.sa_family ? con->dst_addr.ipv6.sin6_port : con->dst_addr.ipv4.sin_port)
+#else
+	       ntohs(con->dst_addr.ipv4.sin_port)
+#endif
+	       );
+
+	FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REMOTE_PORT"), buf, strlen(buf)),con)
+
+	s = inet_ntop_cache_get_ip(srv, &(con->dst_addr));
+	FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REMOTE_ADDR"), s, strlen(s)),con)
+
+	if (!buffer_is_empty(con->authed_user)) {
+		/* AUTH_TYPE fix by Troy Kruthoff (tkruthoff at gmail.com)
+		 * section 4.1.1 of RFC 3875 (cgi spec) requires the server to set a AUTH_TYPE env
+		 * declaring the type of authentication used.	 (see http://tools.ietf.org/html/rfc3875#page-11)
+		 *
+		 * I copied this code from mod_auth.c where it extracts auth info from the "Authorization" 
+		 * header to authenticate the user before allowing the request to proceed.  I'm guessing it makes
+		 * sense to re-parse the header here, as mod_auth is unaware if the request is headed for cgi/fcgi.
+		 * Someone more familiar with the lighty internals should be able to quickly determine if we are 
+		 * better storing AUTH_TYPE on the initial parse in mod_auth.
+		 */
+		char *http_authorization = NULL;
+		data_string *ds;
+	  	
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REMOTE_USER"), CONST_BUF_LEN(con->authed_user)),con)
+	
+		if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Authorization"))) {
+			http_authorization = ds->value->ptr;
+		}
+	
+		if (ds && ds->value && ds->value->used) {
+			char *auth_realm;
+		  if (NULL != (auth_realm = strchr(http_authorization, ' '))) {
+				int auth_type_len = auth_realm - http_authorization;
+				if ((auth_type_len == 5) && (0 == strncmp(http_authorization, "Basic", auth_type_len))) {
+					  fcgi_env_add(p->fcgi_env, CONST_STR_LEN("AUTH_TYPE"), CONST_STR_LEN("Basic"));
+				} else if ((auth_type_len == 6) && (0 == strncmp(http_authorization, "Digest", auth_type_len))) {
+					  fcgi_env_add(p->fcgi_env, CONST_STR_LEN("AUTH_TYPE"), CONST_STR_LEN("Digest"));
+				}
+			}
+		}
+	}
+
+	if (con->request.content_length > 0 && host->mode != FCGI_AUTHORIZER) {
+		/* CGI-SPEC 6.1.2 and FastCGI spec 6.3 */
+
+		/* request.content_length < SSIZE_MAX, see request.c */
+		LI_ltostr(buf, con->request.content_length);
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("CONTENT_LENGTH"), buf, strlen(buf)),con)
+	}
+
+	if (host->mode != FCGI_AUTHORIZER) {
+		/*
+		 * SCRIPT_NAME, PATH_INFO and PATH_TRANSLATED according to
+		 * http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html
+		 * (6.1.14, 6.1.6, 6.1.7)
+		 * For AUTHORIZER mode these headers should be omitted.
+		 */
+
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SCRIPT_NAME"), CONST_BUF_LEN(con->uri.path)),con)
+
+		if (!buffer_is_empty(con->request.pathinfo)) {
+			FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("PATH_INFO"), CONST_BUF_LEN(con->request.pathinfo)),con)
+
+			/* PATH_TRANSLATED is only defined if PATH_INFO is set */
+
+			if (!buffer_is_empty(host->docroot)) {
+				buffer_copy_string_buffer(p->path, host->docroot);
+			} else {
+				buffer_copy_string_buffer(p->path, con->physical.doc_root);
+			}
+			buffer_append_string_buffer(p->path, con->request.pathinfo);
+			FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("PATH_TRANSLATED"), CONST_BUF_LEN(p->path)),con)
+		} else {
+			FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("PATH_INFO"), CONST_STR_LEN("")),con)
+		}
+	}
+
+	/*
+	 * SCRIPT_FILENAME and DOCUMENT_ROOT for php. The PHP manual
+	 * http://www.php.net/manual/en/reserved.variables.php
+	 * treatment of PATH_TRANSLATED is different from the one of CGI specs.
+	 * TODO: this code should be checked against cgi.fix_pathinfo php
+	 * parameter.
+	 */
+
+	if (!buffer_is_empty(host->docroot)) {
+		/*
+		 * rewrite SCRIPT_FILENAME
+		 *
+		 */
+
+		buffer_copy_string_buffer(p->path, host->docroot);
+		buffer_append_string_buffer(p->path, con->uri.path);
+
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(p->path)),con)
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(host->docroot)),con)
+	} else {
+		buffer_copy_string_buffer(p->path, con->physical.path);
+
+		/* cgi.fix_pathinfo need a broken SCRIPT_FILENAME to find out what PATH_INFO is itself
+		 *
+		 * see src/sapi/cgi_main.c, init_request_info()
+		 */
+		if (host->break_scriptfilename_for_php) {
+			buffer_append_string_buffer(p->path, con->request.pathinfo);
+		}
+
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(p->path)),con)
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(con->physical.doc_root)),con)
+	}
+
+	if (host->strip_request_uri->used > 1) {
+		/* we need at least one char to strip off */
+		/**
+		 * /app1/index/list
+		 *
+		 * stripping /app1 or /app1/ should lead to
+		 *
+		 * /index/list
+		 *
+		 */
+		if ('/' != host->strip_request_uri->ptr[host->strip_request_uri->used - 2]) {
+			/* fix the user-input to have / as last char */
+			buffer_append_string(host->strip_request_uri, "/");
+		}
+
+		if (con->request.orig_uri->used >= host->strip_request_uri->used &&
+		    0 == strncmp(con->request.orig_uri->ptr, host->strip_request_uri->ptr, host->strip_request_uri->used - 1)) {
+			/* the left is the same */
+
+			fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_URI"),
+					con->request.orig_uri->ptr + (host->strip_request_uri->used - 2),
+					con->request.orig_uri->used - (host->strip_request_uri->used - 2));
+		} else {
+			FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri)),con)
+		}
+	} else {
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri)),con)
+	}
+	if (!buffer_is_equal(con->request.uri, con->request.orig_uri)) {
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REDIRECT_URI"), CONST_BUF_LEN(con->request.uri)),con)
+	}
+	if (!buffer_is_empty(con->uri.query)) {
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("QUERY_STRING"), CONST_BUF_LEN(con->uri.query)),con)
+	} else {
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("QUERY_STRING"), CONST_STR_LEN("")),con)
+	}
+
+	s = get_http_method_name(con->request.http_method);
+	FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REQUEST_METHOD"), s, strlen(s)),con)
+	FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("REDIRECT_STATUS"), CONST_STR_LEN("200")),con) /* if php is compiled with --force-redirect */
+	s = get_http_version_name(con->request.http_version);
+	FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("SERVER_PROTOCOL"), s, strlen(s)),con)
+
+    if (srv_sock->is_ssl || srv_sock->is_proxy_ssl) {
+		FCGI_ENV_ADD_CHECK(fcgi_env_add(p->fcgi_env, CONST_STR_LEN("HTTPS"), CONST_STR_LEN("on")),con)
+	}
+
+	FCGI_ENV_ADD_CHECK(fcgi_env_add_request_headers(srv, con, p), con);
+
+	fcgi_header(&(header), FCGI_PARAMS, request_id, p->fcgi_env->used, 0);
+	buffer_append_memory(b, (const char *)&header, sizeof(header));
+	buffer_append_memory(b, (const char *)p->fcgi_env->ptr, p->fcgi_env->used);
+
+	fcgi_header(&(header), FCGI_PARAMS, request_id, 0, 0);
+	buffer_append_memory(b, (const char *)&header, sizeof(header));
+
+	b->used++; /* add virtual \0 */
+	hctx->wb->bytes_in += b->used - 1;
+
+	if (con->request.content_length) {
+		chunkqueue *req_cq = con->request_content_queue;
+		chunk *req_c;
+		off_t offset;
+
+		/* something to send ? */
+		for (offset = 0, req_c = req_cq->first; offset != req_cq->bytes_in; ) {
+			off_t weWant = req_cq->bytes_in - offset > FCGI_MAX_LENGTH ? FCGI_MAX_LENGTH : req_cq->bytes_in - offset;
+			off_t written = 0;
+			off_t weHave = 0;
+
+			/* we announce toWrite octets
+			 * now take all the request_content chunks that we need to fill this request
+			 * */
+
+			b = chunkqueue_get_append_buffer(hctx->wb);
+			fcgi_header(&(header), FCGI_STDIN, request_id, weWant, 0);
+			buffer_copy_memory(b, (const char *)&header, sizeof(header));
+			hctx->wb->bytes_in += sizeof(header);
+
+			if (p->conf.debug > 10) {
+				fprintf(stderr, "%s.%d: tosend: %lld / %lld\n", __FILE__, __LINE__, offset, req_cq->bytes_in);
+			}
+
+			for (written = 0; written != weWant; ) {
+				if (p->conf.debug > 10) {
+					fprintf(stderr, "%s.%d: chunk: %lld / %lld\n", __FILE__, __LINE__, written, weWant);
+				}
+
+				switch (req_c->type) {
+				case FILE_CHUNK:
+					weHave = req_c->file.length - req_c->offset;
+
+					if (weHave > weWant - written) weHave = weWant - written;
+
+					if (p->conf.debug > 10) {
+						fprintf(stderr, "%s.%d: sending %lld bytes from (%lld / %lld) %s\n",
+								__FILE__, __LINE__,
+								weHave,
+								req_c->offset,
+								req_c->file.length,
+								req_c->file.name->ptr);
+					}
+
+					assert(weHave != 0);
+
+					chunkqueue_append_file(hctx->wb, req_c->file.name, req_c->offset, weHave);
+
+					req_c->offset += weHave;
+					req_cq->bytes_out += weHave;
+					written += weHave;
+
+					hctx->wb->bytes_in += weHave;
+
+					/* steal the tempfile
+					 *
+					 * This is tricky:
+					 * - we reference the tempfile from the request-content-queue several times
+					 *   if the req_c is larger than FCGI_MAX_LENGTH
+					 * - we can't simply cleanup the request-content-queue as soon as possible
+					 *   as it would remove the tempfiles
+					 * - the idea is to 'steal' the tempfiles and attach the is_temp flag to the last
+					 *   referencing chunk of the fastcgi-write-queue
+					 *
+					 *  */
+
+					if (req_c->offset == req_c->file.length) {
+						chunk *c;
+
+						if (p->conf.debug > 10) {
+							fprintf(stderr, "%s.%d: next chunk\n", __FILE__, __LINE__);
+						}
+						c = hctx->wb->last;
+
+						assert(c->type == FILE_CHUNK);
+						assert(req_c->file.is_temp == 1);
+
+						c->file.is_temp = 1;
+						req_c->file.is_temp = 0;
+
+						chunkqueue_remove_finished_chunks(req_cq);
+
+						req_c = req_cq->first;
+					}
+
+					break;
+				case MEM_CHUNK:
+					/* append to the buffer */
+					weHave = req_c->mem->used - 1 - req_c->offset;
+
+					if (weHave > weWant - written) weHave = weWant - written;
+
+					buffer_append_memory(b, req_c->mem->ptr + req_c->offset, weHave);
+
+					req_c->offset += weHave;
+					req_cq->bytes_out += weHave;
+					written += weHave;
+
+					hctx->wb->bytes_in += weHave;
+
+					if (req_c->offset == req_c->mem->used - 1) {
+						chunkqueue_remove_finished_chunks(req_cq);
+
+						req_c = req_cq->first;
+					}
+
+					break;
+				default:
+					break;
+				}
+			}
+
+			b->used++; /* add virtual \0 */
+			offset += weWant;
+		}
+	}
+
+	b = chunkqueue_get_append_buffer(hctx->wb);
+	/* terminate STDIN */
+	fcgi_header(&(header), FCGI_STDIN, request_id, 0, 0);
+	buffer_copy_memory(b, (const char *)&header, sizeof(header));
+	b->used++; /* add virtual \0 */
+
+	hctx->wb->bytes_in += sizeof(header);
+
+#if 0
+	for (i = 0; i < hctx->write_buffer->used; i++) {
+		fprintf(stderr, "%02x ", hctx->write_buffer->ptr[i]);
+		if ((i+1) % 16 == 0) {
+			size_t j;
+			for (j = i-15; j <= i; j++) {
+				fprintf(stderr, "%c",
+					isprint((unsigned char)hctx->write_buffer->ptr[j]) ? hctx->write_buffer->ptr[j] : '.');
+			}
+			fprintf(stderr, "\n");
+		}
+	}
+#endif
+
+	return 0;
+}
+
+static int fcgi_response_parse(server *srv, connection *con, plugin_data *p, buffer *in) {
+	char *s, *ns;
+
+	handler_ctx *hctx = con->plugin_ctx[p->id];
+	fcgi_extension_host *host= hctx->host;
+
+	UNUSED(srv);
+
+	buffer_copy_string_buffer(p->parse_response, in);
+
+	/* search for \n */
+	for (s = p->parse_response->ptr; NULL != (ns = strchr(s, '\n')); s = ns + 1) {
+		char *key, *value;
+		int key_len;
+		data_string *ds;
+
+		/* a good day. Someone has read the specs and is sending a \r\n to us */
+
+		if (ns > p->parse_response->ptr &&
+		    *(ns-1) == '\r') {
+			*(ns-1) = '\0';
+		}
+
+		ns[0] = '\0';
+
+		key = s;
+		if (NULL == (value = strchr(s, ':'))) {
+			/* we expect: "<key>: <value>\n" */
+			continue;
+		}
+
+		key_len = value - key;
+
+		value++;
+		/* strip WS */
+		while (*value == ' ' || *value == '\t') value++;
+
+		if (host->mode != FCGI_AUTHORIZER ||
+		    !(con->http_status == 0 ||
+		      con->http_status == 200)) {
+			/* authorizers shouldn't affect the response headers sent back to the client */
+
+			/* don't forward Status: */
+			if (0 != strncasecmp(key, "Status", key_len)) {
+				if (NULL == (ds = (data_string *)array_get_unused_element(con->response.headers, TYPE_STRING))) {
+					ds = data_response_init();
+				}
+				buffer_copy_string_len(ds->key, key, key_len);
+				buffer_copy_string(ds->value, value);
+
+				array_insert_unique(con->response.headers, (data_unset *)ds);
+			}
+		}
+
+		switch(key_len) {
+		case 4:
+			if (0 == strncasecmp(key, "Date", key_len)) {
+				con->parsed_response |= HTTP_DATE;
+			}
+			break;
+		case 6:
+			if (0 == strncasecmp(key, "Status", key_len)) {
+				con->http_status = strtol(value, NULL, 10);
+				con->parsed_response |= HTTP_STATUS;
+			}
+			break;
+		case 8:
+			if (0 == strncasecmp(key, "Location", key_len)) {
+				con->parsed_response |= HTTP_LOCATION;
+			}
+			break;
+		case 10:
+			if (0 == strncasecmp(key, "Connection", key_len)) {
+				con->response.keep_alive = (0 == strcasecmp(value, "Keep-Alive")) ? 1 : 0;
+				con->parsed_response |= HTTP_CONNECTION;
+			}
+			break;
+		case 14:
+			if (0 == strncasecmp(key, "Content-Length", key_len)) {
+				con->response.content_length = strtol(value, NULL, 10);
+				con->parsed_response |= HTTP_CONTENT_LENGTH;
+
+				if (con->response.content_length < 0) con->response.content_length = 0;
+			}
+			break;
+		default:
+			break;
+		}
+	}
+
+	/* CGI/1.1 rev 03 - 7.2.1.2 */
+	if ((con->parsed_response & HTTP_LOCATION) &&
+	    !(con->parsed_response & HTTP_STATUS)) {
+		con->http_status = 302;
+	}
+
+	return 0;
+}
+
+typedef struct {
+	buffer  *b;
+	size_t   len;
+	int      type;
+	int      padding;
+	size_t   request_id;
+} fastcgi_response_packet;
+
+static int fastcgi_get_packet(server *srv, handler_ctx *hctx, fastcgi_response_packet *packet) {
+	chunk *	c;
+	size_t offset = 0;
+	size_t toread = 0;
+	FCGI_Header *header;
+
+	if (!hctx->rb->first) return -1;
+
+	packet->b = buffer_init();
+	packet->len = 0;
+	packet->type = 0;
+	packet->padding = 0;
+	packet->request_id = 0;
+
+	/* get at least the FastCGI header */
+	for (c = hctx->rb->first; c; c = c->next) {
+		if (packet->b->used == 0) {
+			buffer_copy_string_len(packet->b, c->mem->ptr + c->offset, c->mem->used - c->offset - 1);
+		} else {
+			buffer_append_string_len(packet->b, c->mem->ptr + c->offset, c->mem->used - c->offset - 1);
+		}
+
+		if (packet->b->used >= sizeof(*header) + 1) break;
+	}
+
+	if ((packet->b->used == 0) ||
+	    (packet->b->used - 1 < sizeof(FCGI_Header))) {
+		/* no header */
+		buffer_free(packet->b);
+
+		log_error_write(srv, __FILE__, __LINE__, "sdsds", "FastCGI: header too small:", packet->b->used, "bytes <", sizeof(FCGI_Header), "bytes");
+		return -1;
+	}
+
+	/* we have at least a header, now check how much me have to fetch */
+	header = (FCGI_Header *)(packet->b->ptr);
+
+	packet->len = (header->contentLengthB0 | (header->contentLengthB1 << 8)) + header->paddingLength;
+	packet->request_id = (header->requestIdB0 | (header->requestIdB1 << 8));
+	packet->type = header->type;
+	packet->padding = header->paddingLength;
+
+	/* the first bytes in packet->b are the header */
+	offset = sizeof(*header);
+
+	/* ->b should only be the content */
+	buffer_copy_string(packet->b, ""); /* used == 1 */
+
+	if (packet->len) {
+		/* copy the content */
+		for (; c && (packet->b->used < packet->len + 1); c = c->next) {
+			size_t weWant = packet->len - (packet->b->used - 1);
+			size_t weHave = c->mem->used - c->offset - offset - 1;
+
+			if (weHave > weWant) weHave = weWant;
+
+			buffer_append_string_len(packet->b, c->mem->ptr + c->offset + offset, weHave);
+
+			/* we only skipped the first 8 bytes as they are the fcgi header */
+			offset = 0;
+		}
+
+		if (packet->b->used < packet->len + 1) {
+			/* we didn't get the full packet */
+
+			buffer_free(packet->b);
+			return -1;
+		}
+
+		packet->b->used -= packet->padding;
+		packet->b->ptr[packet->b->used - 1] = '\0';
+	}
+
+	/* tag the chunks as read */
+	toread = packet->len + sizeof(FCGI_Header);
+	for (c = hctx->rb->first; c && toread; c = c->next) {
+		if (c->mem->used - c->offset - 1 <= toread) {
+			/* we read this whole buffer, move it to unused */
+			toread -= c->mem->used - c->offset - 1;
+			c->offset = c->mem->used - 1; /* everthing has been written */
+		} else {
+			c->offset += toread;
+			toread = 0;
+		}
+	}
+
+	chunkqueue_remove_finished_chunks(hctx->rb);
+
+	return 0;
+}
+
+static int fcgi_demux_response(server *srv, handler_ctx *hctx) {
+	int fin = 0;
+	int toread;
+	ssize_t r;
+
+	plugin_data *p    = hctx->plugin_data;
+	connection *con   = hctx->remote_conn;
+	int fcgi_fd       = hctx->fd;
+	fcgi_extension_host *host= hctx->host;
+	fcgi_proc *proc   = hctx->proc;
+
+	/*
+	 * check how much we have to read
+	 */
+	if (ioctl(hctx->fd, FIONREAD, &toread)) {
+		if (errno == EAGAIN) return 0;
+		log_error_write(srv, __FILE__, __LINE__, "sd",
+				"unexpected end-of-file (perhaps the fastcgi process died):",
+				fcgi_fd);
+		return -1;
+	}
+
+	/* init read-buffer */
+
+	if (toread > 0) {
+		buffer *b;
+		chunk *cq_first = hctx->rb->first;
+		chunk *cq_last = hctx->rb->last;
+
+		b = chunkqueue_get_append_buffer(hctx->rb);
+		buffer_prepare_copy(b, toread + 1);
+
+		/* append to read-buffer */
+		if (-1 == (r = read(hctx->fd, b->ptr, toread))) {
+			if (errno == EAGAIN) {
+				/* roll back the last chunk allocation,
+                                   and continue on next iteration        */
+				buffer_free(hctx->rb->last->mem);
+				free(hctx->rb->last);
+				hctx->rb->first = cq_first;
+				hctx->rb->last = cq_last;
+				return 0;
+			}
+			log_error_write(srv, __FILE__, __LINE__, "sds",
+					"unexpected end-of-file (perhaps the fastcgi process died):",
+					fcgi_fd, strerror(errno));
+			return -1;
+		}
+
+		/* this should be catched by the b > 0 above */
+		assert(r);
+
+		b->used = r + 1; /* one extra for the fake \0 */
+		b->ptr[b->used - 1] = '\0';
+	} else {
+		log_error_write(srv, __FILE__, __LINE__, "ssdsb",
+				"unexpected end-of-file (perhaps the fastcgi process died):",
+				"pid:", proc->pid,
+				"socket:", proc->connection_name);
+
+		return -1;
+	}
+
+	/*
+	 * parse the fastcgi packets and forward the content to the write-queue
+	 *
+	 */
+	while (fin == 0) {
+		fastcgi_response_packet packet;
+
+		/* check if we have at least one packet */
+		if (0 != fastcgi_get_packet(srv, hctx, &packet)) {
+			/* no full packet */
+			break;
+		}
+
+		switch(packet.type) {
+		case FCGI_STDOUT:
+			if (packet.len == 0) break;
+
+			/* is the header already finished */
+			if (0 == con->file_started) {
+				char *c;
+				size_t blen;
+				data_string *ds;
+
+				/* search for header terminator
+				 *
+				 * if we start with \r\n check if last packet terminated with \r\n
+				 * if we start with \n check if last packet terminated with \n
+				 * search for \r\n\r\n
+				 * search for \n\n
+				 */
+
+				if (hctx->response_header->used == 0) {
+					buffer_copy_string_buffer(hctx->response_header, packet.b);
+				} else {
+					buffer_append_string_buffer(hctx->response_header, packet.b);
+				}
+
+				if (NULL != (c = buffer_search_string_len(hctx->response_header, CONST_STR_LEN("\r\n\r\n")))) {
+					blen = hctx->response_header->used - (c - hctx->response_header->ptr) - 4;
+					hctx->response_header->used = (c - hctx->response_header->ptr) + 3;
+					c += 4; /* point the the start of the response */
+				} else if (NULL != (c = buffer_search_string_len(hctx->response_header, CONST_STR_LEN("\n\n")))) {
+					blen = hctx->response_header->used - (c - hctx->response_header->ptr) - 2;
+					hctx->response_header->used = c - hctx->response_header->ptr + 2;
+					c += 2; /* point the the start of the response */
+				} else {
+					/* no luck, no header found */
+					break;
+				}
+
+				/* parse the response header */
+				fcgi_response_parse(srv, con, p, hctx->response_header);
+
+				con->file_started = 1;
+
+				if (host->mode == FCGI_AUTHORIZER &&
+				    (con->http_status == 0 ||
+				     con->http_status == 200)) {
+					/* a authorizer with approved the static request, ignore the content here */
+					hctx->send_content_body = 0;
+				}
+
+				if (host->allow_xsendfile &&
+				    (NULL != (ds = (data_string *) array_get_element(con->response.headers, "X-LIGHTTPD-send-file"))
+					  || NULL != (ds = (data_string *) array_get_element(con->response.headers, "X-Sendfile")))) {
+					stat_cache_entry *sce;
+
+					if (HANDLER_ERROR != stat_cache_get_entry(srv, con, ds->value, &sce)) {
+						data_string *dcls = data_string_init();
+						/* found */
+						http_chunk_append_file(srv, con, ds->value, 0, sce->st.st_size);
+						hctx->send_content_body = 0; /* ignore the content */
+						joblist_append(srv, con);
+
+						buffer_copy_string_len(dcls->key, "Content-Length", sizeof("Content-Length")-1);
+						buffer_copy_long(dcls->value, sce->st.st_size);
+						dcls = (data_string*) array_replace(con->response.headers, (data_unset *)dcls);
+						if (dcls) dcls->free((data_unset*)dcls);
+
+						con->parsed_response |= HTTP_CONTENT_LENGTH;
+						con->response.content_length = sce->st.st_size;
+					} else {
+						log_error_write(srv, __FILE__, __LINE__, "sb",
+							"send-file error: couldn't get stat_cache entry for:",
+							ds->value);
+					}
+				}
+
+
+				if (hctx->send_content_body && blen > 1) {
+					/* enable chunked-transfer-encoding */
+					if (con->request.http_version == HTTP_VERSION_1_1 &&
+					    !(con->parsed_response & HTTP_CONTENT_LENGTH)) {
+						con->response.transfer_encoding = HTTP_TRANSFER_ENCODING_CHUNKED;
+					}
+
+					http_chunk_append_mem(srv, con, c, blen);
+					joblist_append(srv, con);
+				}
+			} else if (hctx->send_content_body && packet.b->used > 1) {
+				if (con->request.http_version == HTTP_VERSION_1_1 &&
+				    !(con->parsed_response & HTTP_CONTENT_LENGTH)) {
+					/* enable chunked-transfer-encoding */
+					con->response.transfer_encoding = HTTP_TRANSFER_ENCODING_CHUNKED;
+				}
+
+				http_chunk_append_mem(srv, con, packet.b->ptr, packet.b->used);
+				joblist_append(srv, con);
+			}
+			break;
+		case FCGI_STDERR:
+			if (packet.len == 0) break;
+
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"FastCGI-stderr:", packet.b);
+
+			break;
+		case FCGI_END_REQUEST:
+			con->file_finished = 1;
+
+			if (host->mode != FCGI_AUTHORIZER ||
+			    !(con->http_status == 0 ||
+			      con->http_status == 200)) {
+				/* send chunk-end if necessary */
+				http_chunk_append_mem(srv, con, NULL, 0);
+				joblist_append(srv, con);
+			}
+
+			fin = 1;
+			break;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"FastCGI: header.type not handled: ", packet.type);
+			break;
+		}
+		buffer_free(packet.b);
+	}
+
+	return fin;
+}
+
+static int fcgi_restart_dead_procs(server *srv, plugin_data *p, fcgi_extension_host *host) {
+	fcgi_proc *proc;
+
+	for (proc = host->first; proc; proc = proc->next) {
+		int status;
+
+		if (p->conf.debug > 2) {
+			log_error_write(srv, __FILE__, __LINE__,  "sbdddd",
+					"proc:",
+					proc->connection_name,
+					proc->state,
+					proc->is_local,
+					proc->load,
+					proc->pid);
+		}
+
+		/*
+		 * if the remote side is overloaded, we check back after <n> seconds
+		 *
+		 */
+		switch (proc->state) {
+		case PROC_STATE_KILLED:
+		case PROC_STATE_UNSET:
+			/* this should never happen as long as adaptive spawing is disabled */
+			assert(0);
+
+			break;
+		case PROC_STATE_RUNNING:
+			break;
+		case PROC_STATE_OVERLOADED:
+			if (srv->cur_ts <= proc->disabled_until) break;
+
+			proc->state = PROC_STATE_RUNNING;
+			host->active_procs++;
+
+			log_error_write(srv, __FILE__, __LINE__,  "sbdb",
+					"fcgi-server re-enabled:",
+					host->host, host->port,
+					host->unixsocket);
+			break;
+		case PROC_STATE_DIED_WAIT_FOR_PID:
+			/* non-local procs don't have PIDs to wait for */
+			if (!proc->is_local) break;
+
+			/* the child should not terminate at all */
+
+			switch(waitpid(proc->pid, &status, WNOHANG)) {
+			case 0:
+				/* child is still alive */
+				break;
+			case -1:
+				break;
+			default:
+				if (WIFEXITED(status)) {
+#if 0
+					log_error_write(srv, __FILE__, __LINE__, "sdsd",
+							"child exited, pid:", proc->pid,
+							"status:", WEXITSTATUS(status));
+#endif
+				} else if (WIFSIGNALED(status)) {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+							"child signaled:",
+							WTERMSIG(status));
+				} else {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+							"child died somehow:",
+							status);
+				}
+
+				proc->state = PROC_STATE_DIED;
+				break;
+			}
+
+			/* fall through if we have a dead proc now */
+			if (proc->state != PROC_STATE_DIED) break;
+
+		case PROC_STATE_DIED:
+			/* local procs get restarted by us,
+			 * remote ones hopefully by the admin */
+
+			if (proc->is_local) {
+				/* we still have connections bound to this proc,
+				 * let them terminate first */
+				if (proc->load != 0) break;
+
+				/* restart the child */
+
+				if (p->conf.debug) {
+					log_error_write(srv, __FILE__, __LINE__, "ssbsdsd",
+							"--- fastcgi spawning",
+							"\n\tsocket", proc->connection_name,
+							"\n\tcurrent:", 1, "/", host->min_procs);
+				}
+
+				if (fcgi_spawn_connection(srv, p, host, proc)) {
+					log_error_write(srv, __FILE__, __LINE__, "s",
+							"ERROR: spawning fcgi failed.");
+					return HANDLER_ERROR;
+				}
+			} else {
+				if (srv->cur_ts <= proc->disabled_until) break;
+
+				proc->state = PROC_STATE_RUNNING;
+				host->active_procs++;
+
+				log_error_write(srv, __FILE__, __LINE__,  "sb",
+						"fcgi-server re-enabled:",
+						proc->connection_name);
+			}
+			break;
+		}
+	}
+
+	return 0;
+}
+
+static handler_t fcgi_write_request(server *srv, handler_ctx *hctx) {
+	plugin_data *p    = hctx->plugin_data;
+	fcgi_extension_host *host= hctx->host;
+	connection *con   = hctx->remote_conn;
+	fcgi_proc  *proc;
+
+	int ret;
+
+	/* sanity check:
+	 *  - host != NULL
+	 *  - either:
+	 *     - tcp socket (do not check host->host->uses, as it may be not set which means INADDR_LOOPBACK)
+	 *     - unix socket
+	 */
+	if (!host ||
+	    (!host->port && !host->unixsocket->used)) {
+		log_error_write(srv, __FILE__, __LINE__, "sxddd",
+				"write-req: error",
+				host,
+				host->host->used,
+				host->port,
+				host->unixsocket->used);
+
+		hctx->proc->disabled_until = srv->cur_ts + 10;
+		hctx->proc->state = PROC_STATE_DIED;
+
+		return HANDLER_ERROR;
+	}
+
+	/* we can't handle this in the switch as we have to fall through in it */
+	if (hctx->state == FCGI_STATE_CONNECT_DELAYED) {
+		int socket_error;
+		socklen_t socket_error_len = sizeof(socket_error);
+
+		/* try to finish the connect() */
+		if (0 != getsockopt(hctx->fd, SOL_SOCKET, SO_ERROR, &socket_error, &socket_error_len)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"getsockopt failed:", strerror(errno));
+
+			hctx->proc->disabled_until = srv->cur_ts + 10;
+			hctx->proc->state = PROC_STATE_DIED;
+
+			return HANDLER_ERROR;
+		}
+		if (socket_error != 0) {
+			if (!hctx->proc->is_local || p->conf.debug) {
+				/* local procs get restarted */
+
+				log_error_write(srv, __FILE__, __LINE__, "sssb",
+						"establishing connection failed:", strerror(socket_error),
+						"socket:", hctx->proc->connection_name);
+			}
+
+			hctx->proc->disabled_until = srv->cur_ts + 5;
+
+			if (hctx->proc->is_local) {
+				hctx->proc->state = PROC_STATE_DIED_WAIT_FOR_PID;
+			} else {
+				hctx->proc->state = PROC_STATE_DIED;
+			}
+
+			hctx->proc->state = PROC_STATE_DIED;
+
+			fastcgi_status_copy_procname(p->statuskey, hctx->host, hctx->proc);
+			buffer_append_string(p->statuskey, ".died");
+
+			status_counter_inc(srv, CONST_BUF_LEN(p->statuskey));
+
+			return HANDLER_ERROR;
+		}
+		/* go on with preparing the request */
+		hctx->state = FCGI_STATE_PREPARE_WRITE;
+	}
+
+
+	switch(hctx->state) {
+	case FCGI_STATE_CONNECT_DELAYED:
+		/* should never happen */
+		break;
+	case FCGI_STATE_INIT:
+		/* do we have a running process for this host (max-procs) ? */
+		hctx->proc = NULL;
+
+		for (proc = hctx->host->first;
+		     proc && proc->state != PROC_STATE_RUNNING;
+		     proc = proc->next);
+
+		/* all children are dead */
+		if (proc == NULL) {
+			hctx->fde_ndx = -1;
+
+			return HANDLER_ERROR;
+		}
+
+		hctx->proc = proc;
+
+		/* check the other procs if they have a lower load */
+		for (proc = proc->next; proc; proc = proc->next) {
+			if (proc->state != PROC_STATE_RUNNING) continue;
+			if (proc->load < hctx->proc->load) hctx->proc = proc;
+		}
+
+		ret = host->unixsocket->used ? AF_UNIX : AF_INET;
+
+		if (-1 == (hctx->fd = socket(ret, SOCK_STREAM, 0))) {
+			if (errno == EMFILE ||
+			    errno == EINTR) {
+				log_error_write(srv, __FILE__, __LINE__, "sd",
+						"wait for fd at connection:", con->fd);
+
+				return HANDLER_WAIT_FOR_FD;
+			}
+
+			log_error_write(srv, __FILE__, __LINE__, "ssdd",
+					"socket failed:", strerror(errno), srv->cur_fds, srv->max_fds);
+			return HANDLER_ERROR;
+		}
+		hctx->fde_ndx = -1;
+
+		srv->cur_fds++;
+
+		fdevent_register(srv->ev, hctx->fd, fcgi_handle_fdevent, hctx);
+
+		if (-1 == fdevent_fcntl_set(srv->ev, hctx->fd)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"fcntl failed:", strerror(errno));
+
+			return HANDLER_ERROR;
+		}
+
+		if (hctx->proc->is_local) {
+			hctx->pid = hctx->proc->pid;
+		}
+
+		switch (fcgi_establish_connection(srv, hctx)) {
+		case CONNECTION_DELAYED:
+			/* connection is in progress, wait for an event and call getsockopt() below */
+
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+			fcgi_set_state(srv, hctx, FCGI_STATE_CONNECT_DELAYED);
+			return HANDLER_WAIT_FOR_EVENT;
+		case CONNECTION_OVERLOADED:
+			/* cool down the backend, it is overloaded
+			 * -> EAGAIN */
+
+			log_error_write(srv, __FILE__, __LINE__, "ssdsd",
+				"backend is overloaded; we'll disable it for 2 seconds and send the request to another backend instead:",
+				"reconnects:", hctx->reconnects,
+				"load:", host->load);
+
+
+			hctx->proc->disabled_until = srv->cur_ts + 2;
+			hctx->proc->state = PROC_STATE_OVERLOADED;
+
+			fastcgi_status_copy_procname(p->statuskey, hctx->host, hctx->proc);
+			buffer_append_string(p->statuskey, ".overloaded");
+
+			status_counter_inc(srv, CONST_BUF_LEN(p->statuskey));
+
+			return HANDLER_ERROR;
+		case CONNECTION_DEAD:
+			/* we got a hard error from the backend like
+			 * - ECONNREFUSED for tcp-ip sockets
+			 * - ENOENT for unix-domain-sockets
+			 *
+			 * for check if the host is back in 5 seconds
+			 *  */
+
+			hctx->proc->disabled_until = srv->cur_ts + 5;
+			if (hctx->proc->is_local) {
+				hctx->proc->state = PROC_STATE_DIED_WAIT_FOR_PID;
+			} else {
+				hctx->proc->state = PROC_STATE_DIED;
+			}
+
+			log_error_write(srv, __FILE__, __LINE__, "ssdsd",
+				"backend died; we'll disable it for 5 seconds and send the request to another backend instead:",
+				"reconnects:", hctx->reconnects,
+				"load:", host->load);
+
+			fastcgi_status_copy_procname(p->statuskey, hctx->host, hctx->proc);
+			buffer_append_string(p->statuskey, ".died");
+
+			status_counter_inc(srv, CONST_BUF_LEN(p->statuskey));
+
+			return HANDLER_ERROR;
+		case CONNECTION_OK:
+			/* everything is ok, go on */
+
+			fcgi_set_state(srv, hctx, FCGI_STATE_PREPARE_WRITE);
+
+			break;
+		case CONNECTION_UNSET:
+			break;
+		}
+
+	case FCGI_STATE_PREPARE_WRITE:
+		/* ok, we have the connection */
+
+		hctx->proc->load++;
+		hctx->proc->last_used = srv->cur_ts;
+		hctx->got_proc = 1;
+
+		status_counter_inc(srv, CONST_STR_LEN("fastcgi.requests"));
+		status_counter_inc(srv, CONST_STR_LEN("fastcgi.active-requests"));
+
+		fastcgi_status_copy_procname(p->statuskey, hctx->host, hctx->proc);
+		buffer_append_string(p->statuskey, ".connected");
+
+		status_counter_inc(srv, CONST_BUF_LEN(p->statuskey));
+
+		/* the proc-load */
+		fastcgi_status_copy_procname(p->statuskey, hctx->host, hctx->proc);
+		buffer_append_string(p->statuskey, ".load");
+
+		status_counter_set(srv, CONST_BUF_LEN(p->statuskey), hctx->proc->load);
+
+		/* the host-load */
+		fastcgi_status_copy_procname(p->statuskey, hctx->host, NULL);
+		buffer_append_string(p->statuskey, ".load");
+
+		status_counter_set(srv, CONST_BUF_LEN(p->statuskey), hctx->host->load);
+
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__, "ssdsbsd",
+					"got proc:",
+					"pid:", hctx->proc->pid,
+					"socket:", hctx->proc->connection_name,
+					"load:", hctx->proc->load);
+		}
+
+		/* move the proc-list entry down the list */
+		if (hctx->request_id == 0) {
+			hctx->request_id = fcgi_requestid_new(srv, p);
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"fcgi-request is already in use:", hctx->request_id);
+		}
+
+		/* fall through */
+		if (-1 == fcgi_create_env(srv, hctx, hctx->request_id)) return HANDLER_ERROR;
+		fcgi_set_state(srv, hctx, FCGI_STATE_WRITE);
+		/* fall through */
+	case FCGI_STATE_WRITE:
+		ret = srv->network_backend_write(srv, con, hctx->fd, hctx->wb);
+
+		chunkqueue_remove_finished_chunks(hctx->wb);
+
+		if (ret < 0) {
+			switch(errno) {
+			case ENOTCONN:
+				/* the connection got dropped after accept()
+				 *
+				 * this is most of the time a PHP which dies
+				 * after PHP_FCGI_MAX_REQUESTS
+				 *
+				 */
+				if (hctx->wb->bytes_out == 0 &&
+				    hctx->reconnects < 5) {
+					usleep(10000); /* take away the load of the webserver
+							* to give the php a chance to restart
+							*/
+
+					fcgi_reconnect(srv, hctx);
+
+					return HANDLER_WAIT_FOR_FD;
+				}
+
+				/* not reconnected ... why
+				 *
+				 * far@#lighttpd report this for FreeBSD
+				 *
+				 */
+
+				log_error_write(srv, __FILE__, __LINE__, "ssosd",
+						"[REPORT ME] connection was dropped after accept(). reconnect() denied:",
+						"write-offset:", hctx->wb->bytes_out,
+						"reconnect attempts:", hctx->reconnects);
+
+				return HANDLER_ERROR;
+			case EAGAIN:
+			case EINTR:
+				fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+				return HANDLER_WAIT_FOR_EVENT;
+			default:
+				log_error_write(srv, __FILE__, __LINE__, "ssd",
+						"write failed:", strerror(errno), errno);
+
+				return HANDLER_ERROR;
+			}
+		}
+
+		if (hctx->wb->bytes_out == hctx->wb->bytes_in) {
+			/* we don't need the out event anymore */
+			fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_IN);
+			fcgi_set_state(srv, hctx, FCGI_STATE_READ);
+		} else {
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+			return HANDLER_WAIT_FOR_EVENT;
+		}
+
+		break;
+	case FCGI_STATE_READ:
+		/* waiting for a response */
+		break;
+	default:
+		log_error_write(srv, __FILE__, __LINE__, "s", "(debug) unknown state");
+		return HANDLER_ERROR;
+	}
+
+	return HANDLER_WAIT_FOR_EVENT;
+}
+
+
+/* might be called on fdevent after a connect() is delay too
+ * */
+SUBREQUEST_FUNC(mod_fastcgi_handle_subrequest) {
+	plugin_data *p = p_d;
+
+	handler_ctx *hctx = con->plugin_ctx[p->id];
+	fcgi_proc *proc;
+	fcgi_extension_host *host;
+
+	if (NULL == hctx) return HANDLER_GO_ON;
+
+	/* not my job */
+	if (con->mode != p->id) return HANDLER_GO_ON;
+
+	/* we don't have a host yet, choose one
+	 * -> this happens in the first round
+	 *    and when the host died and we have to select a new one */
+	if (hctx->host == NULL) {
+		size_t k;
+		int ndx, used = -1;
+
+		/* check if the next server has no load. */
+		ndx = hctx->ext->last_used_ndx + 1;
+		if(ndx >= hctx->ext->used || ndx < 0) ndx = 0;
+		host = hctx->ext->hosts[ndx];
+		if (host->load > 0) {
+			/* get backend with the least load. */
+			for (k = 0, ndx = -1; k < hctx->ext->used; k++) {
+				host = hctx->ext->hosts[k];
+
+				/* we should have at least one proc that can do something */
+				if (host->active_procs == 0) continue;
+
+				if (used == -1 || host->load < used) {
+					used = host->load;
+
+					ndx = k;
+				}
+			}
+		}
+
+		/* found a server */
+		if (ndx == -1) {
+			/* all hosts are down */
+
+			fcgi_connection_close(srv, hctx);
+
+			con->http_status = 500;
+			con->mode = DIRECT;
+
+			return HANDLER_FINISHED;
+		}
+
+		hctx->ext->last_used_ndx = ndx;
+		host = hctx->ext->hosts[ndx];
+
+		/*
+		 * if check-local is disabled, use the uri.path handler
+		 *
+		 */
+
+		/* init handler-context */
+		hctx->host = host;
+
+		/* we put a connection on this host, move the other new connections to other hosts
+		 *
+		 * as soon as hctx->host is unassigned, decrease the load again */
+		hctx->host->load++;
+		hctx->proc = NULL;
+	} else {
+		host = hctx->host;
+	}
+
+	/* ok, create the request */
+	switch(fcgi_write_request(srv, hctx)) {
+	case HANDLER_ERROR:
+		proc = hctx->proc;
+		host = hctx->host;
+
+		if (hctx->state == FCGI_STATE_INIT ||
+		    hctx->state == FCGI_STATE_CONNECT_DELAYED) {
+			if (proc) host->active_procs--;
+
+			fcgi_restart_dead_procs(srv, p, host);
+
+			/* cleanup this request and let the request handler start this request again */
+			if (hctx->reconnects < 5) {
+				fcgi_reconnect(srv, hctx);
+				joblist_append(srv, con); /* in case we come from the event-handler */
+
+				return HANDLER_WAIT_FOR_FD;
+			} else {
+				fcgi_connection_close(srv, hctx);
+
+				buffer_reset(con->physical.path);
+				con->mode = DIRECT;
+				con->http_status = 500;
+				joblist_append(srv, con); /* in case we come from the event-handler */
+
+				return HANDLER_FINISHED;
+			}
+		} else {
+			fcgi_connection_close(srv, hctx);
+
+			buffer_reset(con->physical.path);
+			con->mode = DIRECT;
+			if (con->http_status != 400) con->http_status = 503;
+			joblist_append(srv, con); /* really ? */
+
+			return HANDLER_FINISHED;
+		}
+	case HANDLER_WAIT_FOR_EVENT:
+		if (con->file_started == 1) {
+			return HANDLER_FINISHED;
+		} else {
+			return HANDLER_WAIT_FOR_EVENT;
+		}
+	case HANDLER_WAIT_FOR_FD:
+		return HANDLER_WAIT_FOR_FD;
+	default:
+		log_error_write(srv, __FILE__, __LINE__, "s", "subrequest write-req default");
+		return HANDLER_ERROR;
+	}
+}
+
+static handler_t fcgi_handle_fdevent(void *s, void *ctx, int revents) {
+	server      *srv  = (server *)s;
+	handler_ctx *hctx = ctx;
+	connection  *con  = hctx->remote_conn;
+	plugin_data *p    = hctx->plugin_data;
+
+	fcgi_proc *proc   = hctx->proc;
+	fcgi_extension_host *host= hctx->host;
+
+	if ((revents & FDEVENT_IN) &&
+	    hctx->state == FCGI_STATE_READ) {
+		switch (fcgi_demux_response(srv, hctx)) {
+		case 0:
+			break;
+		case 1:
+
+			if (host->mode == FCGI_AUTHORIZER &&
+		   	    (con->http_status == 200 ||
+			     con->http_status == 0)) {
+				/*
+				 * If we are here in AUTHORIZER mode then a request for authorizer
+				 * was processed already, and status 200 has been returned. We need
+				 * now to handle authorized request.
+				 */
+
+				buffer_copy_string_buffer(con->physical.doc_root, host->docroot);
+
+				buffer_copy_string_buffer(con->physical.path, host->docroot);
+				buffer_append_string_buffer(con->physical.path, con->uri.path);
+				fcgi_connection_close(srv, hctx);
+
+				con->mode = DIRECT;
+				con->file_started = 1; /* fcgi_extension won't touch the request afterwards */
+			} else {
+				/* we are done */
+				fcgi_connection_close(srv, hctx);
+			}
+
+			joblist_append(srv, con);
+			return HANDLER_FINISHED;
+		case -1:
+			if (proc->pid && proc->state != PROC_STATE_DIED) {
+				int status;
+
+				/* only fetch the zombie if it is not already done */
+
+				switch(waitpid(proc->pid, &status, WNOHANG)) {
+				case 0:
+					/* child is still alive */
+					break;
+				case -1:
+					break;
+				default:
+					/* the child should not terminate at all */
+					if (WIFEXITED(status)) {
+						log_error_write(srv, __FILE__, __LINE__, "sdsd",
+								"child exited, pid:", proc->pid,
+								"status:", WEXITSTATUS(status));
+					} else if (WIFSIGNALED(status)) {
+						log_error_write(srv, __FILE__, __LINE__, "sd",
+								"child signaled:",
+								WTERMSIG(status));
+					} else {
+						log_error_write(srv, __FILE__, __LINE__, "sd",
+								"child died somehow:",
+								status);
+					}
+
+					if (p->conf.debug) {
+						log_error_write(srv, __FILE__, __LINE__, "ssbsdsd",
+								"--- fastcgi spawning",
+								"\n\tsocket", proc->connection_name,
+								"\n\tcurrent:", 1, "/", host->min_procs);
+					}
+
+					if (fcgi_spawn_connection(srv, p, host, proc)) {
+						/* respawning failed, retry later */
+						proc->state = PROC_STATE_DIED;
+
+						log_error_write(srv, __FILE__, __LINE__, "s",
+								"respawning failed, will retry later");
+					}
+
+					break;
+				}
+			}
+
+			if (con->file_started == 0) {
+				/* nothing has been sent out yet, try to use another child */
+
+				if (hctx->wb->bytes_out == 0 &&
+				    hctx->reconnects < 5) {
+					fcgi_reconnect(srv, hctx);
+
+					log_error_write(srv, __FILE__, __LINE__, "ssbsbs",
+						"response not received, request not sent",
+						"on socket:", proc->connection_name,
+						"for", con->uri.path, ", reconnecting");
+
+					return HANDLER_WAIT_FOR_FD;
+				}
+
+				log_error_write(srv, __FILE__, __LINE__, "sosbsbs",
+						"response not received, request sent:", hctx->wb->bytes_out,
+						"on socket:", proc->connection_name,
+						"for", con->uri.path, ", closing connection");
+
+				fcgi_connection_close(srv, hctx);
+
+				connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+				buffer_reset(con->physical.path);
+				con->http_status = 500;
+				con->mode = DIRECT;
+			} else {
+				/* response might have been already started, kill the connection */
+				fcgi_connection_close(srv, hctx);
+
+				log_error_write(srv, __FILE__, __LINE__, "ssbsbs",
+						"response already sent out, but backend returned error",
+						"on socket:", proc->connection_name,
+						"for", con->uri.path, ", terminating connection");
+
+				connection_set_state(srv, con, CON_STATE_ERROR);
+			}
+
+			/* */
+
+
+			joblist_append(srv, con);
+			return HANDLER_FINISHED;
+		}
+	}
+
+	if (revents & FDEVENT_OUT) {
+		if (hctx->state == FCGI_STATE_CONNECT_DELAYED ||
+		    hctx->state == FCGI_STATE_WRITE) {
+			/* we are allowed to send something out
+			 *
+			 * 1. in an unfinished connect() call
+			 * 2. in an unfinished write() call (long POST request)
+			 */
+			return mod_fastcgi_handle_subrequest(srv, con, p);
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"got a FDEVENT_OUT and didn't know why:",
+					hctx->state);
+		}
+	}
+
+	/* perhaps this issue is already handled */
+	if (revents & FDEVENT_HUP) {
+		if (hctx->state == FCGI_STATE_CONNECT_DELAYED) {
+			/* getoptsock will catch this one (right ?)
+			 *
+			 * if we are in connect we might get an EINPROGRESS
+			 * in the first call and an FDEVENT_HUP in the
+			 * second round
+			 *
+			 * FIXME: as it is a bit ugly.
+			 *
+			 */
+			return mod_fastcgi_handle_subrequest(srv, con, p);
+		} else if (hctx->state == FCGI_STATE_READ &&
+			   hctx->proc->port == 0) {
+			/* FIXME:
+			 *
+			 * ioctl says 8192 bytes to read from PHP and we receive directly a HUP for the socket
+			 * even if the FCGI_FIN packet is not received yet
+			 */
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sbSBSDSd",
+					"error: unexpected close of fastcgi connection for",
+					con->uri.path,
+					"(no fastcgi process on host:",
+					host->host,
+					", port: ",
+					host->port,
+					" ?)",
+					hctx->state);
+
+			connection_set_state(srv, con, CON_STATE_ERROR);
+			fcgi_connection_close(srv, hctx);
+			joblist_append(srv, con);
+		}
+	} else if (revents & FDEVENT_ERR) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"fcgi: got a FDEVENT_ERR. Don't know why.");
+		/* kill all connections to the fastcgi process */
+
+
+		connection_set_state(srv, con, CON_STATE_ERROR);
+		fcgi_connection_close(srv, hctx);
+		joblist_append(srv, con);
+	}
+
+	return HANDLER_FINISHED;
+}
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int fcgi_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(exts);
+	PATCH(debug);
+	PATCH(ext_mapping);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("fastcgi.server"))) {
+				PATCH(exts);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("fastcgi.debug"))) {
+				PATCH(debug);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("fastcgi.map-extensions"))) {
+				PATCH(ext_mapping);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+
+static handler_t fcgi_check_extension(server *srv, connection *con, void *p_d, int uri_path_handler) {
+	plugin_data *p = p_d;
+	size_t s_len;
+	size_t k;
+	buffer *fn;
+	fcgi_extension *extension = NULL;
+	fcgi_extension_host *host = NULL;
+
+	/* Possibly, we processed already this request */
+	if (con->file_started == 1) return HANDLER_GO_ON;
+
+	fn = uri_path_handler ? con->uri.path : con->physical.path;
+
+	if (buffer_is_empty(fn)) return HANDLER_GO_ON;
+
+	s_len = fn->used - 1;
+
+	fcgi_patch_connection(srv, con, p);
+
+	/* fastcgi.map-extensions maps extensions to existing fastcgi.server entries
+	 *
+	 * fastcgi.map-extensions = ( ".php3" => ".php" )
+	 *
+	 * fastcgi.server = ( ".php" => ... )
+	 *
+	 * */
+
+	/* check if extension-mapping matches */
+	for (k = 0; k < p->conf.ext_mapping->used; k++) {
+		data_string *ds = (data_string *)p->conf.ext_mapping->data[k];
+		size_t ct_len; /* length of the config entry */
+
+		if (ds->key->used == 0) continue;
+
+		ct_len = ds->key->used - 1;
+
+		if (s_len < ct_len) continue;
+
+		/* found a mapping */
+		if (0 == strncmp(fn->ptr + s_len - ct_len, ds->key->ptr, ct_len)) {
+			/* check if we know the extension */
+
+			/* we can reuse k here */
+			for (k = 0; k < p->conf.exts->used; k++) {
+				extension = p->conf.exts->exts[k];
+
+				if (buffer_is_equal(ds->value, extension->key)) {
+					break;
+				}
+			}
+
+			if (k == p->conf.exts->used) {
+				/* found nothign */
+				extension = NULL;
+			}
+			break;
+		}
+	}
+
+	if (extension == NULL) {
+		/* check if extension matches */
+		for (k = 0; k < p->conf.exts->used; k++) {
+			size_t ct_len; /* length of the config entry */
+
+			extension = p->conf.exts->exts[k];
+
+			if (extension->key->used == 0) continue;
+
+			ct_len = extension->key->used - 1;
+
+			if (s_len < ct_len) continue;
+
+			/* check extension in the form "/fcgi_pattern" */
+			if (*(extension->key->ptr) == '/') {
+				if (strncmp(fn->ptr, extension->key->ptr, ct_len) == 0)
+					break;
+			} else if (0 == strncmp(fn->ptr + s_len - ct_len, extension->key->ptr, ct_len)) {
+				/* check extension in the form ".fcg" */
+				break;
+			}
+		}
+		/* extension doesn't match */
+		if (k == p->conf.exts->used) {
+			return HANDLER_GO_ON;
+		}
+	}
+
+	/* check if we have at least one server for this extension up and running */
+	for (k = 0; k < extension->used; k++) {
+		host = extension->hosts[k];
+
+		/* we should have at least one proc that can do something */
+		if (host->active_procs == 0) {
+			host = NULL;
+
+			continue;
+		}
+
+		/* we found one host that is alive */
+		break;
+	}
+
+	if (!host) {
+		/* sorry, we don't have a server alive for this ext */
+		buffer_reset(con->physical.path);
+		con->http_status = 500;
+
+		/* only send the 'no handler' once */
+		if (!extension->note_is_sent) {
+			extension->note_is_sent = 1;
+
+			log_error_write(srv, __FILE__, __LINE__, "sbsbs",
+					"all handlers for ", con->uri.path,
+					"on", extension->key,
+					"are down.");
+		}
+
+		return HANDLER_FINISHED;
+	}
+
+	/* a note about no handler is not sent yet */
+	extension->note_is_sent = 0;
+
+	/*
+	 * if check-local is disabled, use the uri.path handler
+	 *
+	 */
+
+	/* init handler-context */
+	if (uri_path_handler) {
+		if (host->check_local == 0) {
+			handler_ctx *hctx;
+			char *pathinfo;
+
+			hctx = handler_ctx_init();
+
+			hctx->remote_conn      = con;
+			hctx->plugin_data      = p;
+			hctx->proc	       = NULL;
+			hctx->ext              = extension;
+
+
+			hctx->conf.exts        = p->conf.exts;
+			hctx->conf.debug       = p->conf.debug;
+
+			con->plugin_ctx[p->id] = hctx;
+
+			con->mode = p->id;
+
+			if (con->conf.log_request_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "s",
+				"handling it in mod_fastcgi");
+			}
+
+			/* the prefix is the SCRIPT_NAME,
+			 * everything from start to the next slash
+			 * this is important for check-local = "disable"
+			 *
+			 * if prefix = /admin.fcgi
+			 *
+			 * /admin.fcgi/foo/bar
+			 *
+			 * SCRIPT_NAME = /admin.fcgi
+			 * PATH_INFO   = /foo/bar
+			 *
+			 * if prefix = /fcgi-bin/
+			 *
+			 * /fcgi-bin/foo/bar
+			 *
+			 * SCRIPT_NAME = /fcgi-bin/foo
+			 * PATH_INFO   = /bar
+			 *
+			 */
+
+			/* the rewrite is only done for /prefix/? matches */
+			if (extension->key->ptr[0] == '/' &&
+			    con->uri.path->used > extension->key->used &&
+			    NULL != (pathinfo = strchr(con->uri.path->ptr + extension->key->used - 1, '/'))) {
+				/* rewrite uri.path and pathinfo */
+
+				buffer_copy_string(con->request.pathinfo, pathinfo);
+
+				con->uri.path->used -= con->request.pathinfo->used - 1;
+				con->uri.path->ptr[con->uri.path->used - 1] = '\0';
+			}
+		}
+	} else {
+		handler_ctx *hctx;
+		hctx = handler_ctx_init();
+
+		hctx->remote_conn      = con;
+		hctx->plugin_data      = p;
+		hctx->proc             = NULL;
+		hctx->ext              = extension;
+
+		hctx->conf.exts        = p->conf.exts;
+		hctx->conf.debug       = p->conf.debug;
+
+		con->plugin_ctx[p->id] = hctx;
+
+		con->mode = p->id;
+
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "handling it in mod_fastcgi");
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+/* uri-path handler */
+static handler_t fcgi_check_extension_1(server *srv, connection *con, void *p_d) {
+	return fcgi_check_extension(srv, con, p_d, 1);
+}
+
+/* start request handler */
+static handler_t fcgi_check_extension_2(server *srv, connection *con, void *p_d) {
+	return fcgi_check_extension(srv, con, p_d, 0);
+}
+
+JOBLIST_FUNC(mod_fastcgi_handle_joblist) {
+	plugin_data *p = p_d;
+	handler_ctx *hctx = con->plugin_ctx[p->id];
+
+	if (hctx == NULL) return HANDLER_GO_ON;
+
+	if (hctx->fd != -1) {
+		switch (hctx->state) {
+		case FCGI_STATE_READ:
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_IN);
+
+			break;
+		case FCGI_STATE_CONNECT_DELAYED:
+		case FCGI_STATE_WRITE:
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+			break;
+		case FCGI_STATE_INIT:
+			/* at reconnect */
+			break;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "sd", "unhandled fcgi.state", hctx->state);
+			break;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+
+static handler_t fcgi_connection_close_callback(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+
+	fcgi_connection_close(srv, con->plugin_ctx[p->id]);
+
+	return HANDLER_GO_ON;
+}
+
+TRIGGER_FUNC(mod_fastcgi_handle_trigger) {
+	plugin_data *p = p_d;
+	size_t i, j, n;
+
+
+	/* perhaps we should kill a connect attempt after 10-15 seconds
+	 *
+	 * currently we wait for the TCP timeout which is 180 seconds on Linux
+	 *
+	 *
+	 *
+	 */
+
+	/* check all children if they are still up */
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *conf;
+		fcgi_exts *exts;
+
+		conf = p->config_storage[i];
+
+		exts = conf->exts;
+
+		for (j = 0; j < exts->used; j++) {
+			fcgi_extension *ex;
+
+			ex = exts->exts[j];
+
+			for (n = 0; n < ex->used; n++) {
+
+				fcgi_proc *proc;
+				unsigned long sum_load = 0;
+				fcgi_extension_host *host;
+
+				host = ex->hosts[n];
+
+				fcgi_restart_dead_procs(srv, p, host);
+
+				for (proc = host->first; proc; proc = proc->next) {
+					sum_load += proc->load;
+				}
+
+				if (host->num_procs &&
+				    host->num_procs < host->max_procs &&
+				    (sum_load / host->num_procs) > host->max_load_per_proc) {
+					/* overload, spawn new child */
+					if (p->conf.debug) {
+						log_error_write(srv, __FILE__, __LINE__, "s",
+								"overload detected, spawning a new child");
+					}
+
+					for (proc = host->unused_procs; proc && proc->pid != 0; proc = proc->next);
+
+					if (proc) {
+						if (proc == host->unused_procs) host->unused_procs = proc->next;
+
+						if (proc->next) proc->next->prev = NULL;
+
+						host->max_id++;
+					} else {
+						proc = fastcgi_process_init();
+						proc->id = host->max_id++;
+					}
+
+					host->num_procs++;
+
+					if (buffer_is_empty(host->unixsocket)) {
+						proc->port = host->port + proc->id;
+					} else {
+						buffer_copy_string_buffer(proc->unixsocket, host->unixsocket);
+						buffer_append_string(proc->unixsocket, "-");
+						buffer_append_long(proc->unixsocket, proc->id);
+					}
+
+					if (fcgi_spawn_connection(srv, p, host, proc)) {
+						log_error_write(srv, __FILE__, __LINE__, "s",
+								"ERROR: spawning fcgi failed.");
+						return HANDLER_ERROR;
+					}
+
+					proc->prev = NULL;
+					proc->next = host->first;
+					if (host->first) {
+						host->first->prev = proc;
+					}
+					host->first = proc;
+				}
+
+				for (proc = host->first; proc; proc = proc->next) {
+					if (proc->load != 0) break;
+					if (host->num_procs <= host->min_procs) break;
+					if (proc->pid == 0) continue;
+
+					if (srv->cur_ts - proc->last_used > host->idle_timeout) {
+						/* a proc is idling for a long time now,
+						 * terminate it */
+
+						if (p->conf.debug) {
+							log_error_write(srv, __FILE__, __LINE__, "ssbsd",
+									"idle-timeout reached; terminating child:",
+									"socket:", proc->connection_name,
+									"pid", proc->pid);
+						}
+
+
+						if (proc->next) proc->next->prev = proc->prev;
+						if (proc->prev) proc->prev->next = proc->next;
+
+						if (proc->prev == NULL) host->first = proc->next;
+
+						proc->prev = NULL;
+						proc->next = host->unused_procs;
+
+						if (host->unused_procs) host->unused_procs->prev = proc;
+						host->unused_procs = proc;
+
+						kill(proc->pid, SIGTERM);
+
+						proc->state = PROC_STATE_KILLED;
+
+						log_error_write(srv, __FILE__, __LINE__, "ssbsd",
+									"killed:",
+									"socket:", proc->connection_name,
+									"pid", proc->pid);
+
+						host->num_procs--;
+
+						/* proc is now in unused, let the next second handle the next process */
+						break;
+					}
+				}
+
+				for (proc = host->unused_procs; proc; proc = proc->next) {
+					int status;
+
+					if (proc->pid == 0) continue;
+
+					switch (waitpid(proc->pid, &status, WNOHANG)) {
+					case 0:
+						/* child still running after timeout, good */
+						break;
+					case -1:
+						if (errno != EINTR) {
+							/* no PID found ? should never happen */
+							log_error_write(srv, __FILE__, __LINE__, "sddss",
+									"pid ", proc->pid, proc->state,
+									"not found:", strerror(errno));
+
+#if 0
+							if (errno == ECHILD) {
+								/* someone else has cleaned up for us */
+								proc->pid = 0;
+								proc->state = PROC_STATE_UNSET;
+							}
+#endif
+						}
+						break;
+					default:
+						/* the child should not terminate at all */
+						if (WIFEXITED(status)) {
+							if (proc->state != PROC_STATE_KILLED) {
+								log_error_write(srv, __FILE__, __LINE__, "sdb",
+										"child exited:",
+										WEXITSTATUS(status), proc->connection_name);
+							}
+						} else if (WIFSIGNALED(status)) {
+							if (WTERMSIG(status) != SIGTERM) {
+								log_error_write(srv, __FILE__, __LINE__, "sd",
+										"child signaled:",
+										WTERMSIG(status));
+							}
+						} else {
+							log_error_write(srv, __FILE__, __LINE__, "sd",
+									"child died somehow:",
+									status);
+						}
+						proc->pid = 0;
+						proc->state = PROC_STATE_UNSET;
+						host->max_id--;
+					}
+				}
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+
+int mod_fastcgi_plugin_init(plugin *p) {
+	p->version      = LIGHTTPD_VERSION_ID;
+	p->name         = buffer_init_string("fastcgi");
+
+	p->init         = mod_fastcgi_init;
+	p->cleanup      = mod_fastcgi_free;
+	p->set_defaults = mod_fastcgi_set_defaults;
+	p->connection_reset        = fcgi_connection_reset;
+	p->handle_connection_close = fcgi_connection_close_callback;
+	p->handle_uri_clean        = fcgi_check_extension_1;
+	p->handle_subrequest_start = fcgi_check_extension_2;
+	p->handle_subrequest       = mod_fastcgi_handle_subrequest;
+	p->handle_joblist          = mod_fastcgi_handle_joblist;
+	p->handle_trigger          = mod_fastcgi_handle_trigger;
+
+	p->data         = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_flv_streaming.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_flv_streaming.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_flv_streaming.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,278 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+#include "response.h"
+#include "http_chunk.h"
+#include "stat_cache.h"
+
+#include "plugin.h"
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	array *extensions;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *query_str;
+	array *get_params;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_flv_streaming_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->query_str = buffer_init();
+	p->get_params = array_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_flv_streaming_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			array_free(s->extensions);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	buffer_free(p->query_str);
+	array_free(p->get_params);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_flv_streaming_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "flv-streaming.extensions",   NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->extensions     = array_init();
+
+		cv[0].destination = s->extensions;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_flv_streaming_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(extensions);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("flv-streaming.extensions"))) {
+				PATCH(extensions);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+static int split_get_params(array *get_params, buffer *qrystr) {
+	size_t is_key = 1;
+	size_t i;
+	char *key = NULL, *val = NULL;
+
+	key = qrystr->ptr;
+
+	/* we need the \0 */
+	for (i = 0; i < qrystr->used; i++) {
+		switch(qrystr->ptr[i]) {
+		case '=':
+			if (is_key) {
+				val = qrystr->ptr + i + 1;
+
+				qrystr->ptr[i] = '\0';
+
+				is_key = 0;
+			}
+
+			break;
+		case '&':
+		case '\0': /* fin symbol */
+			if (!is_key) {
+				data_string *ds;
+				/* we need at least a = since the last & */
+
+				/* terminate the value */
+				qrystr->ptr[i] = '\0';
+
+				if (NULL == (ds = (data_string *)array_get_unused_element(get_params, TYPE_STRING))) {
+					ds = data_string_init();
+				}
+				buffer_copy_string_len(ds->key, key, strlen(key));
+				buffer_copy_string_len(ds->value, val, strlen(val));
+
+				array_insert_unique(get_params, (data_unset *)ds);
+			}
+
+			key = qrystr->ptr + i + 1;
+			val = NULL;
+			is_key = 1;
+			break;
+		}
+	}
+
+	return 0;
+}
+
+URIHANDLER_FUNC(mod_flv_streaming_path_handler) {
+	plugin_data *p = p_d;
+	int s_len;
+	size_t k;
+
+	UNUSED(srv);
+
+	if (buffer_is_empty(con->physical.path)) return HANDLER_GO_ON;
+
+	mod_flv_streaming_patch_connection(srv, con, p);
+
+	s_len = con->physical.path->used - 1;
+
+	for (k = 0; k < p->conf.extensions->used; k++) {
+		data_string *ds = (data_string *)p->conf.extensions->data[k];
+		int ct_len = ds->value->used - 1;
+
+		if (ct_len > s_len) continue;
+		if (ds->value->used == 0) continue;
+
+		if (0 == strncmp(con->physical.path->ptr + s_len - ct_len, ds->value->ptr, ct_len)) {
+			data_string *get_param;
+			stat_cache_entry *sce = NULL;
+			buffer *b;
+			int start;
+			char *err = NULL;
+			/* if there is a start=[0-9]+ in the header use it as start,
+			 * otherwise send the full file */
+
+			array_reset(p->get_params);
+			buffer_copy_string_buffer(p->query_str, con->uri.query);
+			split_get_params(p->get_params, p->query_str);
+
+			if (NULL == (get_param = (data_string *)array_get_element(p->get_params, "start"))) {
+				return HANDLER_GO_ON;
+			}
+
+			/* too short */
+			if (get_param->value->used < 2) return HANDLER_GO_ON;
+
+			/* check if it is a number */
+			start = strtol(get_param->value->ptr, &err, 10);
+			if (*err != '\0') {
+				return HANDLER_GO_ON;
+			}
+
+			if (start <= 0) return HANDLER_GO_ON;
+
+			/* check if start is > filesize */
+			if (HANDLER_GO_ON != stat_cache_get_entry(srv, con, con->physical.path, &sce)) {
+				return HANDLER_GO_ON;
+			}
+
+			if (start > sce->st.st_size) {
+				return HANDLER_GO_ON;
+			}
+
+			/* we are safe now, let's build a flv header */
+			b = chunkqueue_get_append_buffer(con->write_queue);
+			BUFFER_COPY_STRING_CONST(b, "FLV\x1\x1\0\0\0\x9\0\0\0\x9");
+
+			http_chunk_append_file(srv, con, con->physical.path, start, sce->st.st_size - start);
+
+			response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("video/x-flv"));
+
+			con->file_finished = 1;
+
+			return HANDLER_FINISHED;
+		}
+	}
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_flv_streaming_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("flv_streaming");
+
+	p->init        = mod_flv_streaming_init;
+	p->handle_physical = mod_flv_streaming_path_handler;
+	p->set_defaults  = mod_flv_streaming_set_defaults;
+	p->cleanup     = mod_flv_streaming_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_indexfile.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_indexfile.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_indexfile.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,219 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#include "stat_cache.h"
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	array *indexfiles;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *tmp_buf;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_indexfile_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->tmp_buf = buffer_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_indexfile_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			array_free(s->indexfiles);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	buffer_free(p->tmp_buf);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_indexfile_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "index-file.names",           NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "server.indexfiles",          NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->indexfiles    = array_init();
+
+		cv[0].destination = s->indexfiles;
+		cv[1].destination = s->indexfiles; /* old name for [0] */
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_indexfile_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(indexfiles);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("server.indexfiles"))) {
+				PATCH(indexfiles);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("index-file.names"))) {
+				PATCH(indexfiles);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+URIHANDLER_FUNC(mod_indexfile_subrequest) {
+	plugin_data *p = p_d;
+	size_t k;
+	stat_cache_entry *sce = NULL;
+
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+	if (con->uri.path->ptr[con->uri.path->used - 2] != '/') return HANDLER_GO_ON;
+
+	mod_indexfile_patch_connection(srv, con, p);
+
+	if (con->conf.log_request_handling) {
+		log_error_write(srv, __FILE__, __LINE__,  "s",  "-- handling the request as Indexfile");
+		log_error_write(srv, __FILE__, __LINE__,  "sb", "URI          :", con->uri.path);
+	}
+
+	/* indexfile */
+	for (k = 0; k < p->conf.indexfiles->used; k++) {
+		data_string *ds = (data_string *)p->conf.indexfiles->data[k];
+
+		if (ds->value && ds->value->ptr[0] == '/') {
+			/* if the index-file starts with a prefix as use this file as
+			 * index-generator */
+			buffer_copy_string_buffer(p->tmp_buf, con->physical.doc_root);
+		} else {
+			buffer_copy_string_buffer(p->tmp_buf, con->physical.path);
+		}
+		buffer_append_string_buffer(p->tmp_buf, ds->value);
+
+		if (HANDLER_ERROR == stat_cache_get_entry(srv, con, p->tmp_buf, &sce)) {
+			if (errno == EACCES) {
+				con->http_status = 403;
+				buffer_reset(con->physical.path);
+
+				return HANDLER_FINISHED;
+			}
+
+			if (errno != ENOENT &&
+			    errno != ENOTDIR) {
+				/* we have no idea what happend. let's tell the user so. */
+
+				con->http_status = 500;
+
+				log_error_write(srv, __FILE__, __LINE__, "ssbsb",
+						"file not found ... or so: ", strerror(errno),
+						con->uri.path,
+						"->", con->physical.path);
+
+				buffer_reset(con->physical.path);
+
+				return HANDLER_FINISHED;
+			}
+			continue;
+		}
+
+		/* rewrite uri.path to the real path (/ -> /index.php) */
+		buffer_append_string_buffer(con->uri.path, ds->value);
+		buffer_copy_string_buffer(con->physical.path, p->tmp_buf);
+
+		/* fce is already set up a few lines above */
+
+		return HANDLER_GO_ON;
+	}
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_indexfile_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("indexfile");
+
+	p->init        = mod_indexfile_init;
+	p->handle_subrequest_start = mod_indexfile_subrequest;
+	p->set_defaults  = mod_indexfile_set_defaults;
+	p->cleanup     = mod_indexfile_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,851 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <setjmp.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#include "mod_magnet_cache.h"
+#include "response.h"
+#include "stat_cache.h"
+#include "status_counter.h"
+#include "etag.h"
+
+#ifdef HAVE_LUA_H
+#include <lua.h>
+#include <lauxlib.h>
+
+#define MAGNET_CONFIG_RAW_URL       "magnet.attract-raw-url-to"
+#define MAGNET_CONFIG_PHYSICAL_PATH "magnet.attract-physical-path-to"
+#define MAGNET_RESTART_REQUEST      99
+
+/* plugin config for all request/connections */
+
+static jmp_buf exceptionjmp;
+
+typedef struct {
+	array *url_raw;
+	array *physical_path;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	script_cache *cache;
+
+	buffer *encode_buf;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_magnet_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->cache = script_cache_init();
+	p->encode_buf = buffer_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_magnet_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			array_free(s->url_raw);
+			array_free(s->physical_path);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	script_cache_free(p->cache);
+	buffer_free(p->encode_buf);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_magnet_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ MAGNET_CONFIG_RAW_URL,       NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ MAGNET_CONFIG_PHYSICAL_PATH, NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+		{ NULL,                           NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->url_raw  = array_init();
+		s->physical_path = array_init();
+
+		cv[0].destination = s->url_raw;
+		cv[1].destination = s->physical_path;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_magnet_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(url_raw);
+	PATCH(physical_path);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN(MAGNET_CONFIG_RAW_URL))) {
+				PATCH(url_raw);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN(MAGNET_CONFIG_PHYSICAL_PATH))) {
+				PATCH(physical_path);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+static int magnet_print(lua_State *L) {
+	const char *s = luaL_checkstring(L, 1);
+	server *srv;
+
+	lua_pushstring(L, "lighty.srv");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	srv = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	log_error_write(srv, __FILE__, __LINE__, "ss",
+			"(lua-print)", s);
+
+	return 0;
+}
+
+static int magnet_stat(lua_State *L) {
+	const char *s = luaL_checkstring(L, 1);
+	server *srv;
+	connection *con;
+	buffer sb;
+	stat_cache_entry *sce = NULL;
+
+	lua_pushstring(L, "lighty.srv");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	srv = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	lua_pushstring(L, "lighty.con");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	con = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	sb.ptr = (char *)s;
+	sb.used = sb.size = strlen(s) + 1;
+	
+	if (HANDLER_GO_ON != stat_cache_get_entry(srv, con, &sb, &sce)) {
+		lua_pushnil(L);
+
+		return 1;
+	}
+
+	lua_newtable(L);
+
+	lua_pushboolean(L, S_ISREG(sce->st.st_mode));
+	lua_setfield(L, -2, "is_file");
+	
+	lua_pushboolean(L, S_ISDIR(sce->st.st_mode));
+	lua_setfield(L, -2, "is_dir");
+
+	lua_pushboolean(L, S_ISCHR(sce->st.st_mode));
+	lua_setfield(L, -2, "is_char");
+
+	lua_pushboolean(L, S_ISBLK(sce->st.st_mode));
+	lua_setfield(L, -2, "is_block");
+
+	lua_pushboolean(L, S_ISSOCK(sce->st.st_mode));
+	lua_setfield(L, -2, "is_socket");
+
+	lua_pushboolean(L, S_ISLNK(sce->st.st_mode));
+	lua_setfield(L, -2, "is_link");
+
+	lua_pushboolean(L, S_ISFIFO(sce->st.st_mode));
+	lua_setfield(L, -2, "is_fifo");
+
+	lua_pushinteger(L, sce->st.st_mtime);
+	lua_setfield(L, -2, "st_mtime");
+
+	lua_pushinteger(L, sce->st.st_ctime);
+	lua_setfield(L, -2, "st_ctime");
+
+	lua_pushinteger(L, sce->st.st_atime);
+	lua_setfield(L, -2, "st_atime");
+
+	lua_pushinteger(L, sce->st.st_uid);
+	lua_setfield(L, -2, "st_uid");
+
+	lua_pushinteger(L, sce->st.st_gid);
+	lua_setfield(L, -2, "st_gid");
+
+	lua_pushinteger(L, sce->st.st_size);
+	lua_setfield(L, -2, "st_size");
+
+	lua_pushinteger(L, sce->st.st_ino);
+	lua_setfield(L, -2, "st_ino");
+
+
+	if (!buffer_is_empty(sce->etag)) {
+		/* we have to mutate the etag */
+		buffer *b = buffer_init();
+		etag_mutate(b, sce->etag);
+
+		lua_pushlstring(L, b->ptr, b->used - 1);
+		buffer_free(b);
+	} else {
+		lua_pushnil(L);
+	}
+	lua_setfield(L, -2, "etag");
+
+	if (!buffer_is_empty(sce->content_type)) {
+		lua_pushlstring(L, sce->content_type->ptr, sce->content_type->used - 1);
+	} else {
+		lua_pushnil(L);
+	}
+	lua_setfield(L, -2, "content-type");
+
+	return 1;
+}
+
+
+static int magnet_atpanic(lua_State *L) {
+	const char *s = luaL_checkstring(L, 1);
+	server *srv;
+
+	lua_pushstring(L, "lighty.srv");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	srv = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	log_error_write(srv, __FILE__, __LINE__, "ss",
+			"(lua-atpanic)", s);
+
+	longjmp(exceptionjmp, 1);
+}
+
+static int magnet_reqhdr_get(lua_State *L) {
+	server *srv;
+	connection *con;
+	data_string *ds;
+
+	const char *key = luaL_checkstring(L, 2);
+
+	lua_pushstring(L, "lighty.srv");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	srv = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	lua_pushstring(L, "lighty.con");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	con = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	if (NULL != (ds = (data_string *)array_get_element(con->request.headers, key))) {
+		if (ds->value->used) {
+			lua_pushlstring(L, ds->value->ptr, ds->value->used - 1);
+		} else {
+			lua_pushnil(L);
+		}
+	} else {
+		lua_pushnil(L);
+	}
+	return 1;
+}
+
+static int magnet_status_get(lua_State *L) {
+	data_integer *di;
+	server *srv;
+	size_t key_len = 0;
+
+	const char *key = luaL_checklstring(L, 2, &key_len);
+
+	lua_pushstring(L, "lighty.srv");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	srv = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	di = status_counter_get_counter(srv, key, key_len);
+
+	lua_pushnumber(L, (double)di->value);
+
+	return 1;
+}
+
+static int magnet_status_set(lua_State *L) {
+	size_t key_len = 0;
+	server *srv;
+
+	const char *key = luaL_checklstring(L, 2, &key_len);
+	int counter = luaL_checkint(L, 3);
+
+	lua_pushstring(L, "lighty.srv");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	srv = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	status_counter_set(srv, key, key_len, counter);
+
+	return 0;
+}
+
+typedef struct {
+	const char *name;
+	enum {
+		MAGNET_ENV_UNSET,
+
+		MAGNET_ENV_PHYICAL_PATH,
+		MAGNET_ENV_PHYICAL_REL_PATH,
+		MAGNET_ENV_PHYICAL_DOC_ROOT,
+
+		MAGNET_ENV_URI_PATH,
+		MAGNET_ENV_URI_PATH_RAW,
+		MAGNET_ENV_URI_SCHEME,
+		MAGNET_ENV_URI_AUTHORITY,
+		MAGNET_ENV_URI_QUERY,
+
+		MAGNET_ENV_REQUEST_METHOD,
+		MAGNET_ENV_REQUEST_URI,
+		MAGNET_ENV_REQUEST_ORIG_URI,
+		MAGNET_ENV_REQUEST_PROTOCOL
+       	} type;
+} magnet_env_t;
+
+static buffer *magnet_env_get_buffer(server *srv, connection *con, const char *key) {
+	buffer *dest = NULL;
+	size_t i;
+
+	const magnet_env_t env[] = {
+		{ "physical.path", MAGNET_ENV_PHYICAL_PATH },
+		{ "physical.rel-path", MAGNET_ENV_PHYICAL_REL_PATH },
+		{ "physical.doc-root", MAGNET_ENV_PHYICAL_DOC_ROOT },
+
+		{ "uri.path", MAGNET_ENV_URI_PATH },
+		{ "uri.path-raw", MAGNET_ENV_URI_PATH_RAW },
+		{ "uri.scheme", MAGNET_ENV_URI_SCHEME },
+		{ "uri.authority", MAGNET_ENV_URI_AUTHORITY },
+		{ "uri.query", MAGNET_ENV_URI_QUERY },
+
+		{ "request.method", MAGNET_ENV_REQUEST_METHOD },
+		{ "request.uri", MAGNET_ENV_REQUEST_URI },
+		{ "request.orig-uri", MAGNET_ENV_REQUEST_ORIG_URI },
+		{ "request.protocol", MAGNET_ENV_REQUEST_PROTOCOL },
+
+		{ NULL, MAGNET_ENV_UNSET }
+	};
+
+	UNUSED(srv);
+
+	/**
+	 * map all internal variables to lua
+	 *
+	 */
+
+	for (i = 0; env[i].name; i++) {
+		if (0 == strcmp(key, env[i].name)) break;
+	}
+
+	switch (env[i].type) {
+	case MAGNET_ENV_PHYICAL_PATH: dest = con->physical.path; break;
+	case MAGNET_ENV_PHYICAL_REL_PATH: dest = con->physical.rel_path; break;
+	case MAGNET_ENV_PHYICAL_DOC_ROOT: dest = con->physical.doc_root; break;
+
+	case MAGNET_ENV_URI_PATH: dest = con->uri.path; break;
+	case MAGNET_ENV_URI_PATH_RAW: dest = con->uri.path_raw; break;
+	case MAGNET_ENV_URI_SCHEME: dest = con->uri.scheme; break;
+	case MAGNET_ENV_URI_AUTHORITY: dest = con->uri.authority; break;
+	case MAGNET_ENV_URI_QUERY: dest = con->uri.query; break;
+
+	case MAGNET_ENV_REQUEST_METHOD:   break;
+	case MAGNET_ENV_REQUEST_URI:      dest = con->request.uri; break;
+	case MAGNET_ENV_REQUEST_ORIG_URI: dest = con->request.orig_uri; break;
+	case MAGNET_ENV_REQUEST_PROTOCOL: break;
+
+	case MAGNET_ENV_UNSET: break;
+	}
+
+	return dest;
+}
+
+static int magnet_env_get(lua_State *L) {
+	server *srv;
+	connection *con;
+
+	const char *key = luaL_checkstring(L, 2);
+	buffer *dest = NULL;
+
+	lua_pushstring(L, "lighty.srv");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	srv = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	lua_pushstring(L, "lighty.con");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	con = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	dest = magnet_env_get_buffer(srv, con, key);
+
+	if (dest && dest->used) {
+		lua_pushlstring(L, dest->ptr, dest->used - 1);
+	} else {
+		lua_pushnil(L);
+	}
+
+	return 1;
+}
+
+static int magnet_env_set(lua_State *L) {
+	server *srv;
+	connection *con;
+
+	const char *key = luaL_checkstring(L, 2);
+	const char *val = luaL_checkstring(L, 3);
+	buffer *dest = NULL;
+
+	lua_pushstring(L, "lighty.srv");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	srv = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	lua_pushstring(L, "lighty.con");
+	lua_gettable(L, LUA_REGISTRYINDEX);
+	con = lua_touserdata(L, -1);
+	lua_pop(L, 1);
+
+	if (NULL != (dest = magnet_env_get_buffer(srv, con, key))) {
+		buffer_copy_string(dest, val);
+	} else {
+		/* couldn't save */
+
+		return luaL_error(L, "couldn't store '%s' in lighty.env[]", key);
+	}
+
+	return 0;
+}
+
+
+static int magnet_copy_response_header(server *srv, connection *con, plugin_data *p, lua_State *L) {
+	UNUSED(p);
+	/**
+	 * get the environment of the function
+	 */
+
+	lua_getfenv(L, -1); /* -1 is the function */
+
+	/* lighty.header */
+
+	lua_getfield(L, -1, "lighty"); /* lighty.* from the env  */
+	assert(lua_istable(L, -1));
+
+	lua_getfield(L, -1, "header"); /* lighty.header */
+	if (lua_istable(L, -1)) {
+		/* header is found, and is a table */
+
+		lua_pushnil(L);
+		while (lua_next(L, -2) != 0) {
+			if (lua_isstring(L, -1) && lua_isstring(L, -2)) {
+				const char *key, *val;
+				size_t key_len, val_len;
+
+				key = lua_tolstring(L, -2, &key_len);
+				val = lua_tolstring(L, -1, &val_len);
+
+				response_header_overwrite(srv, con, key, key_len, val, val_len);
+			}
+
+			lua_pop(L, 1);
+		}
+	}
+
+	lua_pop(L, 1); /* pop the header-table */
+	lua_pop(L, 1); /* pop the lighty-env */
+	lua_pop(L, 1); /* pop the function env */
+
+	return 0;
+}
+
+/**
+ * walk through the content array
+ *
+ * content = { "<pre>", { file = "/content" } , "</pre>" }
+ *
+ * header["Content-Type"] = "text/html"
+ *
+ * return 200
+ */
+static int magnet_attach_content(server *srv, connection *con, plugin_data *p, lua_State *L) {
+	UNUSED(p);
+	/**
+	 * get the environment of the function
+	 */
+
+	assert(lua_isfunction(L, -1));
+	lua_getfenv(L, -1); /* -1 is the function */
+
+	lua_getfield(L, -1, "lighty"); /* lighty.* from the env  */
+	assert(lua_istable(L, -1));
+
+	lua_getfield(L, -1, "content"); /* lighty.content */
+	if (lua_istable(L, -1)) {
+		int i;
+		/* header is found, and is a table */
+
+		for (i = 1; ; i++) {
+			lua_rawgeti(L, -1, i);
+
+			/* -1 is the value and should be the value ... aka a table */
+			if (lua_isstring(L, -1)) {
+				size_t s_len = 0;
+				const char *s = lua_tolstring(L, -1, &s_len);
+
+				chunkqueue_append_mem(con->write_queue, s, s_len + 1);
+			} else if (lua_istable(L, -1)) {
+				lua_getfield(L, -1, "filename");
+				lua_getfield(L, -2, "length");
+				lua_getfield(L, -3, "offset");
+
+				if (lua_isstring(L, -3)) { /* filename has to be a string */
+					buffer *fn = buffer_init();
+					stat_cache_entry *sce;
+
+					buffer_copy_string(fn, lua_tostring(L, -3));
+
+					if (HANDLER_GO_ON == stat_cache_get_entry(srv, con, fn, &sce)) {
+						off_t off = 0;
+						off_t len = 0;
+
+						if (lua_isnumber(L, -1)) {
+							off = lua_tonumber(L, -1);
+						}
+
+						if (lua_isnumber(L, -2)) {
+							len = lua_tonumber(L, -2);
+						} else {
+							len = sce->st.st_size;
+						}
+
+						if (off < 0) {
+							return luaL_error(L, "offset for '%s' is negative", fn->ptr);
+						}
+
+						if (len < off) {
+							return luaL_error(L, "offset > length for '%s'", fn->ptr);
+						}
+
+						chunkqueue_append_file(con->write_queue, fn, off, len - off);
+					}
+
+					buffer_free(fn);
+				} else {
+					lua_pop(L, 3 + 2); /* correct the stack */
+
+					return luaL_error(L, "content[%d] is a table and requires the field \"filename\"", i);
+				}
+
+				lua_pop(L, 3);
+			} else if (lua_isnil(L, -1)) {
+				/* oops, end of list */
+
+				lua_pop(L, 1);
+
+				break;
+			} else {
+				lua_pop(L, 4);
+
+				return luaL_error(L, "content[%d] is neither a string nor a table: ", i);
+			}
+
+			lua_pop(L, 1); /* pop the content[...] table */
+		}
+	} else {
+		return luaL_error(L, "lighty.content has to be a table");
+	}
+	lua_pop(L, 1); /* pop the header-table */
+	lua_pop(L, 1); /* pop the lighty-table */
+	lua_pop(L, 1); /* php the function env */
+
+	return 0;
+}
+
+static handler_t magnet_attract(server *srv, connection *con, plugin_data *p, buffer *name) {
+	lua_State *L;
+	int lua_return_value = -1;
+	/* get the script-context */
+
+
+	L = script_cache_get_script(srv, con, p->cache, name);
+
+	if (lua_isstring(L, -1)) {
+		log_error_write(srv, __FILE__, __LINE__,
+				"sbss",
+				"loading script",
+				name,
+				"failed:",
+				lua_tostring(L, -1));
+
+		lua_pop(L, 1);
+
+		assert(lua_gettop(L) == 0); /* only the function should be on the stack */
+
+		con->http_status = 500;
+
+		return HANDLER_FINISHED;
+	}
+
+	lua_pushstring(L, "lighty.srv");
+	lua_pushlightuserdata(L, srv);
+	lua_settable(L, LUA_REGISTRYINDEX); /* registery[<id>] = srv */
+
+	lua_pushstring(L, "lighty.con");
+	lua_pushlightuserdata(L, con);
+	lua_settable(L, LUA_REGISTRYINDEX); /* registery[<id>] = con */
+
+	lua_atpanic(L, magnet_atpanic);
+
+	/**
+	 * we want to create empty environment for our script
+	 *
+	 * setmetatable({}, {__index = _G})
+	 *
+	 * if a function, symbol is not defined in our env, __index will lookup
+	 * in the global env.
+	 *
+	 * all variables created in the script-env will be thrown
+	 * away at the end of the script run.
+	 */
+	lua_newtable(L); /* my empty environment aka {}              (sp += 1) */
+
+	/* we have to overwrite the print function */
+	lua_pushcfunction(L, magnet_print);                       /* (sp += 1) */
+	lua_setfield(L, -2, "print"); /* -1 is the env we want to set(sp -= 1) */
+
+	/**
+	 * lighty.request[] has the HTTP-request headers
+	 * lighty.content[] is a table of string/file
+	 * lighty.header[] is a array to set response headers
+	 */
+
+	lua_newtable(L); /* lighty.*                                 (sp += 1) */
+
+	lua_newtable(L); /*  {}                                      (sp += 1) */
+	lua_newtable(L); /* the meta-table for the request-table     (sp += 1) */
+	lua_pushcfunction(L, magnet_reqhdr_get);                  /* (sp += 1) */
+	lua_setfield(L, -2, "__index");                           /* (sp -= 1) */
+	lua_setmetatable(L, -2); /* tie the metatable to request     (sp -= 1) */
+	lua_setfield(L, -2, "request"); /* content = {}              (sp -= 1) */
+
+	lua_newtable(L); /*  {}                                      (sp += 1) */
+	lua_newtable(L); /* the meta-table for the request-table     (sp += 1) */
+	lua_pushcfunction(L, magnet_env_get);                     /* (sp += 1) */
+	lua_setfield(L, -2, "__index");                           /* (sp -= 1) */
+	lua_pushcfunction(L, magnet_env_set);                     /* (sp += 1) */
+	lua_setfield(L, -2, "__newindex");                        /* (sp -= 1) */
+	lua_setmetatable(L, -2); /* tie the metatable to request     (sp -= 1) */
+	lua_setfield(L, -2, "env"); /* content = {}                  (sp -= 1) */
+
+	lua_newtable(L); /*  {}                                      (sp += 1) */
+	lua_newtable(L); /* the meta-table for the request-table     (sp += 1) */
+	lua_pushcfunction(L, magnet_status_get);                  /* (sp += 1) */
+	lua_setfield(L, -2, "__index");                           /* (sp -= 1) */
+	lua_pushcfunction(L, magnet_status_set);                  /* (sp += 1) */
+	lua_setfield(L, -2, "__newindex");                        /* (sp -= 1) */
+	lua_setmetatable(L, -2); /* tie the metatable to request     (sp -= 1) */
+	lua_setfield(L, -2, "status"); /* content = {}               (sp -= 1) */
+
+	/* add empty 'content' and 'header' tables */
+	lua_newtable(L); /*  {}                                      (sp += 1) */
+	lua_setfield(L, -2, "content"); /* content = {}              (sp -= 1) */
+
+	lua_newtable(L); /*  {}                                      (sp += 1) */
+	lua_setfield(L, -2, "header"); /* header = {}                (sp -= 1) */
+
+	lua_pushinteger(L, MAGNET_RESTART_REQUEST);
+	lua_setfield(L, -2, "RESTART_REQUEST");
+
+	lua_pushcfunction(L, magnet_stat);                        /* (sp += 1) */
+	lua_setfield(L, -2, "stat"); /* -1 is the env we want to set (sp -= 1) */
+
+	lua_setfield(L, -2, "lighty"); /* lighty.*                   (sp -= 1) */
+
+	lua_newtable(L); /* the meta-table for the new env           (sp += 1) */
+	lua_pushvalue(L, LUA_GLOBALSINDEX);                       /* (sp += 1) */
+	lua_setfield(L, -2, "__index"); /* { __index = _G }          (sp -= 1) */
+	lua_setmetatable(L, -2); /* setmetatable({}, {__index = _G}) (sp -= 1) */
+
+
+	lua_setfenv(L, -2); /* on the stack should be a modified env (sp -= 1) */
+
+	if (lua_pcall(L, 0, 1, 0)) {
+		log_error_write(srv, __FILE__, __LINE__,
+			"ss",
+			"lua_pcall():",
+			lua_tostring(L, -1));
+		lua_pop(L, 1); /* remove the error-msg and the function copy from the stack */
+
+		assert(lua_gettop(L) == 1); /* only the function should be on the stack */
+
+		con->http_status = 500;
+
+		return HANDLER_FINISHED;
+	}
+
+	/* we should have the function-copy and the return value on the stack */
+	assert(lua_gettop(L) == 2);
+
+	if (lua_isnumber(L, -1)) {
+		/* if the ret-value is a number, take it */
+		lua_return_value = (int)lua_tonumber(L, -1);
+	}
+	lua_pop(L, 1); /* pop the ret-value */
+
+	magnet_copy_response_header(srv, con, p, L);
+
+	if (lua_return_value > 99) {
+		con->http_status = lua_return_value;
+		con->file_finished = 1;
+
+		/* try { ...*/
+		if (0 == setjmp(exceptionjmp)) {
+			magnet_attach_content(srv, con, p, L);
+		} else {
+			/* } catch () { */
+			con->http_status = 500;
+		}
+
+		assert(lua_gettop(L) == 1); /* only the function should be on the stack */
+
+		/* we are finished */
+		return HANDLER_FINISHED;
+	} else if (MAGNET_RESTART_REQUEST == lua_return_value) {
+		assert(lua_gettop(L) == 1); /* only the function should be on the stack */
+
+		return HANDLER_COMEBACK;
+	} else {
+		assert(lua_gettop(L) == 1); /* only the function should be on the stack */
+
+		return HANDLER_GO_ON;
+	}
+}
+
+static handler_t magnet_attract_array(server *srv, connection *con, plugin_data *p, array *files) {
+	size_t i;
+
+	/* no filename set */
+	if (files->used == 0) return HANDLER_GO_ON;
+
+	/**
+	 * execute all files and jump out on the first !HANDLER_GO_ON
+	 */
+	for (i = 0; i < files->used; i++) {
+		data_string *ds = (data_string *)files->data[i];
+		handler_t ret;
+
+		if (buffer_is_empty(ds->value)) continue;
+
+		ret = magnet_attract(srv, con, p, ds->value);
+
+		if (ret != HANDLER_GO_ON) return ret;
+	}
+
+	return HANDLER_GO_ON;
+}
+
+URIHANDLER_FUNC(mod_magnet_uri_handler) {
+	plugin_data *p = p_d;
+
+	mod_magnet_patch_connection(srv, con, p);
+
+	return magnet_attract_array(srv, con, p, p->conf.url_raw);
+}
+
+URIHANDLER_FUNC(mod_magnet_physical) {
+	plugin_data *p = p_d;
+
+	mod_magnet_patch_connection(srv, con, p);
+
+	return magnet_attract_array(srv, con, p, p->conf.physical_path);
+}
+
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_magnet_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("magnet");
+
+	p->init        = mod_magnet_init;
+	p->handle_uri_clean  = mod_magnet_uri_handler;
+	p->handle_physical   = mod_magnet_physical;
+	p->set_defaults  = mod_magnet_set_defaults;
+	p->cleanup     = mod_magnet_free;
+
+	p->data        = NULL;
+
+	return 0;
+}
+
+#else
+int mod_magnet_plugin_init(plugin *p) {
+	UNUSED(p);
+	return -1;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet_cache.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet_cache.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet_cache.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,137 @@
+#include <stdlib.h>
+#include <time.h>
+#include <assert.h>
+
+#include "mod_magnet_cache.h"
+#include "stat_cache.h"
+
+#ifdef HAVE_LUA_H
+#include <lualib.h>
+#include <lauxlib.h>
+
+script *script_init() {
+	script *sc;
+
+	sc = calloc(1, sizeof(*sc));
+	sc->name = buffer_init();
+	sc->etag = buffer_init();
+
+	return sc;
+}
+
+void script_free(script *sc) {
+	if (!sc) return;
+
+	lua_pop(sc->L, 1); /* the function copy */
+
+	buffer_free(sc->name);
+	buffer_free(sc->etag);
+
+	lua_close(sc->L);
+
+	free(sc);
+}
+
+script_cache *script_cache_init() {
+	script_cache *p;
+
+	p = calloc(1, sizeof(*p));
+
+	return p;
+}
+
+void script_cache_free(script_cache *p) {
+	size_t i;
+
+	if (!p) return;
+
+	for (i = 0; i < p->used; i++) {
+		script_free(p->ptr[i]);
+	}
+
+	free(p->ptr);
+
+	free(p);
+}
+
+lua_State *script_cache_get_script(server *srv, connection *con, script_cache *cache, buffer *name) {
+	size_t i;
+	script *sc = NULL;
+	stat_cache_entry *sce;
+
+	for (i = 0; i < cache->used; i++) {
+		sc = cache->ptr[i];
+
+		if (buffer_is_equal(name, sc->name)) {
+			sc->last_used = time(NULL);
+
+			/* oops, the script failed last time */
+
+			if (lua_gettop(sc->L) == 0) break;
+
+			if (HANDLER_ERROR == stat_cache_get_entry(srv, con, sc->name, &sce)) {
+				lua_pop(sc->L, 1); /* pop the old function */
+				break;
+			}
+
+			if (!buffer_is_equal(sce->etag, sc->etag)) {
+				/* the etag is outdated, reload the function */
+				lua_pop(sc->L, 1);
+				break;
+			}
+
+			assert(lua_isfunction(sc->L, -1));
+			lua_pushvalue(sc->L, -1); /* copy the function-reference */
+
+			return sc->L;
+		}
+
+		sc = NULL;
+	}
+
+	/* if the script was script already loaded but either got changed or
+	 * failed to load last time */
+	if (sc == NULL) {
+		sc = script_init();
+
+		if (cache->size == 0) {
+			cache->size = 16;
+			cache->ptr = malloc(cache->size * sizeof(*(cache->ptr)));
+		} else if (cache->used == cache->size) {
+			cache->size += 16;
+			cache->ptr = realloc(cache->ptr, cache->size * sizeof(*(cache->ptr)));
+		}
+
+		cache->ptr[cache->used++] = sc;
+
+		buffer_copy_string_buffer(sc->name, name);
+
+		sc->L = luaL_newstate();
+		luaL_openlibs(sc->L);
+	}
+
+	sc->last_used = time(NULL);
+
+	if (0 != luaL_loadfile(sc->L, name->ptr)) {
+		/* oops, an error, return it */
+
+		return sc->L;
+	}
+
+	if (HANDLER_GO_ON == stat_cache_get_entry(srv, con, sc->name, &sce)) {
+		buffer_copy_string_buffer(sc->etag, sce->etag);
+	}
+
+	/**
+	 * pcall() needs the function on the stack
+	 *
+	 * as pcall() will pop the script from the stack when done, we have to
+	 * duplicate it here
+	 */
+	assert(lua_isfunction(sc->L, -1));
+	lua_pushvalue(sc->L, -1); /* copy the function-reference */
+
+	return sc->L;
+}
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet_cache.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet_cache.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_magnet_cache.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,33 @@
+#ifndef _MOD_MAGNET_CACHE_H_
+#define _MOD_MAGNET_CACHE_H_
+
+#include "buffer.h"
+#include "base.h"
+
+#ifdef HAVE_LUA_H
+#include <lua.h>
+
+typedef struct {
+	buffer *name;
+	buffer *etag;
+
+	lua_State *L;
+
+	time_t last_used; /* LRU */
+} script;
+
+typedef struct {
+	script **ptr;
+
+	size_t used;
+	size_t size;
+} script_cache;
+
+script_cache *script_cache_init(void);
+void script_cache_free(script_cache *cache);
+
+lua_State *script_cache_get_script(server *srv, connection *con,
+	       	script_cache *cache, buffer *name);
+
+#endif
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_mysql_vhost.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_mysql_vhost.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_mysql_vhost.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,438 @@
+#include <unistd.h>
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <strings.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_MYSQL
+#include <mysql.h>
+#endif
+
+#include "plugin.h"
+#include "log.h"
+
+#include "stat_cache.h"
+#ifdef DEBUG_MOD_MYSQL_VHOST
+#define DEBUG
+#endif
+
+/*
+ * Plugin for lighttpd to use MySQL
+ *   for domain to directory lookups,
+ *   i.e virtual hosts (vhosts).
+ *
+ * Optionally sets fcgi_offset and fcgi_arg
+ *   in preparation for fcgi.c to handle
+ *   per-user fcgi chroot jails.
+ *
+ * /ada at riksnet.se 2004-12-06
+ */
+
+#ifdef HAVE_MYSQL
+typedef struct {
+	MYSQL 	*mysql;
+
+	buffer  *mydb;
+	buffer  *myuser;
+	buffer  *mypass;
+	buffer  *mysock;
+
+	buffer  *hostname;
+	unsigned short port;
+
+	buffer  *mysql_pre;
+	buffer  *mysql_post;
+} plugin_config;
+
+/* global plugin data */
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer 	*tmp_buf;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* per connection plugin data */
+typedef struct {
+	buffer	*server_name;
+	buffer	*document_root;
+	buffer	*fcgi_arg;
+	unsigned fcgi_offset;
+} plugin_connection_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_mysql_vhost_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->tmp_buf = buffer_init();
+
+	return p;
+}
+
+/* cleanup the plugin data */
+SERVER_FUNC(mod_mysql_vhost_cleanup) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+#ifdef DEBUG
+	log_error_write(srv, __FILE__, __LINE__, "ss",
+		"mod_mysql_vhost_cleanup", p ? "yes" : "NO");
+#endif
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			mysql_close(s->mysql);
+
+			buffer_free(s->mydb);
+			buffer_free(s->myuser);
+			buffer_free(s->mypass);
+			buffer_free(s->mysock);
+			buffer_free(s->mysql_pre);
+			buffer_free(s->mysql_post);
+			buffer_free(s->hostname);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+	buffer_free(p->tmp_buf);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle the plugin per connection data */
+static void* mod_mysql_vhost_connection_data(server *srv, connection *con, void *p_d)
+{
+	plugin_data *p = p_d;
+	plugin_connection_data *c = con->plugin_ctx[p->id];
+
+	UNUSED(srv);
+
+#ifdef DEBUG
+        log_error_write(srv, __FILE__, __LINE__, "ss",
+		"mod_mysql_connection_data", c ? "old" : "NEW");
+#endif
+
+	if (c) return c;
+	c = calloc(1, sizeof(*c));
+
+	c->server_name = buffer_init();
+	c->document_root = buffer_init();
+	c->fcgi_arg = buffer_init();
+	c->fcgi_offset = 0;
+
+	return con->plugin_ctx[p->id] = c;
+}
+
+/* destroy the plugin per connection data */
+CONNECTION_FUNC(mod_mysql_vhost_handle_connection_close) {
+	plugin_data *p = p_d;
+	plugin_connection_data *c = con->plugin_ctx[p->id];
+
+	UNUSED(srv);
+
+#ifdef DEBUG
+	log_error_write(srv, __FILE__, __LINE__, "ss",
+		"mod_mysql_vhost_handle_connection_close", c ? "yes" : "NO");
+#endif
+
+	if (!c) return HANDLER_GO_ON;
+
+	buffer_free(c->server_name);
+	buffer_free(c->document_root);
+	buffer_free(c->fcgi_arg);
+	c->fcgi_offset = 0;
+
+	free(c);
+
+	con->plugin_ctx[p->id] = NULL;
+	return HANDLER_GO_ON;
+}
+
+/* set configuration values */
+SERVER_FUNC(mod_mysql_vhost_set_defaults) {
+	plugin_data *p = p_d;
+
+	char *qmark;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "mysql-vhost.db",	NULL, T_CONFIG_STRING, 	T_CONFIG_SCOPE_SERVER },
+		{ "mysql-vhost.user",	NULL, T_CONFIG_STRING, 	T_CONFIG_SCOPE_SERVER },
+		{ "mysql-vhost.pass",	NULL, T_CONFIG_STRING, 	T_CONFIG_SCOPE_SERVER },
+		{ "mysql-vhost.sock",	NULL, T_CONFIG_STRING, 	T_CONFIG_SCOPE_SERVER },
+		{ "mysql-vhost.sql",	NULL, T_CONFIG_STRING, 	T_CONFIG_SCOPE_SERVER },
+		{ "mysql-vhost.hostname", NULL, T_CONFIG_STRING,T_CONFIG_SCOPE_SERVER },
+		{ "mysql-vhost.port",   NULL, T_CONFIG_SHORT,   T_CONFIG_SCOPE_SERVER },
+                { NULL,			NULL, T_CONFIG_UNSET,	T_CONFIG_SCOPE_UNSET }
+        };
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+		buffer *sel;
+
+
+		s = calloc(1, sizeof(plugin_config));
+		s->mydb = buffer_init();
+		s->myuser = buffer_init();
+		s->mypass = buffer_init();
+		s->mysock = buffer_init();
+		s->hostname = buffer_init();
+		s->port   = 0;               /* default port for mysql */
+		sel = buffer_init();
+		s->mysql = NULL;
+
+		s->mysql_pre = buffer_init();
+		s->mysql_post = buffer_init();
+
+		cv[0].destination = s->mydb;
+		cv[1].destination = s->myuser;
+		cv[2].destination = s->mypass;
+		cv[3].destination = s->mysock;
+		cv[4].destination = sel;
+		cv[5].destination = s->hostname;
+		cv[6].destination = &(s->port);
+
+		p->config_storage[i] = s;
+
+        	if (config_insert_values_global(srv,
+			((data_config *)srv->config_context->data[i])->value,
+			cv)) return HANDLER_ERROR;
+
+		s->mysql_pre = buffer_init();
+		s->mysql_post = buffer_init();
+
+		if (sel->used && (qmark = strchr(sel->ptr, '?'))) {
+			*qmark = '\0';
+			buffer_copy_string(s->mysql_pre, sel->ptr);
+			buffer_copy_string(s->mysql_post, qmark+1);
+		} else {
+			buffer_copy_string_buffer(s->mysql_pre, sel);
+		}
+
+		/* required:
+		 * - username
+		 * - database
+		 *
+		 * optional:
+		 * - password, default: empty
+		 * - socket, default: mysql default
+		 * - hostname, if set overrides socket
+		 * - port, default: 3306
+		 */
+
+		/* all have to be set */
+		if (!(buffer_is_empty(s->myuser) ||
+		      buffer_is_empty(s->mydb))) {
+			my_bool reconnect = 1;
+			int fd;
+
+			if (NULL == (s->mysql = mysql_init(NULL))) {
+				log_error_write(srv, __FILE__, __LINE__, "s", "mysql_init() failed, exiting...");
+
+				return HANDLER_ERROR;
+			}
+
+#if MYSQL_VERSION_ID >= 50013
+			/* in mysql versions above 5.0.3 the reconnect flag is off by default */
+			mysql_options(s->mysql, MYSQL_OPT_RECONNECT, &reconnect);
+#endif
+
+#define FOO(x) (s->x->used ? s->x->ptr : NULL)
+
+			if (!mysql_real_connect(s->mysql, FOO(hostname), FOO(myuser), FOO(mypass),
+						FOO(mydb), s->port, FOO(mysock), 0)) {
+				log_error_write(srv, __FILE__, __LINE__, "s", mysql_error(s->mysql));
+
+				return HANDLER_ERROR;
+			}
+#undef FOO
+			/* set close_on_exec for mysql the hard way */
+			/* Note: this only works as it is done during startup, */
+			/* otherwise we cannot be sure that mysql is fd i-1 */
+			if (-1 == (fd = open("/dev/null", 0))) {
+				close(fd);
+				fcntl(fd-1, F_SETFD, FD_CLOEXEC);
+			}
+		}
+	}
+
+
+
+        return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_mysql_vhost_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(mysql_pre);
+	PATCH(mysql_post);
+#ifdef HAVE_MYSQL
+	PATCH(mysql);
+#endif
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("mysql-vhost.sql"))) {
+				PATCH(mysql_pre);
+				PATCH(mysql_post);
+			}
+		}
+
+		if (s->mysql) {
+			PATCH(mysql);
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+
+/* handle document root request */
+CONNECTION_FUNC(mod_mysql_vhost_handle_docroot) {
+	plugin_data *p = p_d;
+	plugin_connection_data *c;
+	stat_cache_entry *sce;
+
+	unsigned  cols;
+	MYSQL_ROW row;
+	MYSQL_RES *result = NULL;
+
+	/* no host specified? */
+	if (!con->uri.authority->used) return HANDLER_GO_ON;
+
+	mod_mysql_vhost_patch_connection(srv, con, p);
+
+	if (!p->conf.mysql) return HANDLER_GO_ON;
+
+	/* sets up connection data if not done yet */
+	c = mod_mysql_vhost_connection_data(srv, con, p_d);
+
+	/* check if cached this connection */
+	if (c->server_name->used && /* con->uri.authority->used && */
+            buffer_is_equal(c->server_name, con->uri.authority)) goto GO_ON;
+
+	/* build and run SQL query */
+	buffer_copy_string_buffer(p->tmp_buf, p->conf.mysql_pre);
+	if (p->conf.mysql_post->used) {
+		buffer_append_string_buffer(p->tmp_buf, con->uri.authority);
+		buffer_append_string_buffer(p->tmp_buf, p->conf.mysql_post);
+	}
+   	if (mysql_query(p->conf.mysql, p->tmp_buf->ptr)) {
+		log_error_write(srv, __FILE__, __LINE__, "s", mysql_error(p->conf.mysql));
+		goto ERR500;
+	}
+	result = mysql_store_result(p->conf.mysql);
+	cols = mysql_num_fields(result);
+	row = mysql_fetch_row(result);
+	if (!row || cols < 1) {
+		/* no such virtual host */
+		mysql_free_result(result);
+		return HANDLER_GO_ON;
+	}
+
+	/* sanity check that really is a directory */
+	buffer_copy_string(p->tmp_buf, row[0]);
+	BUFFER_APPEND_SLASH(p->tmp_buf);
+
+	if (HANDLER_ERROR == stat_cache_get_entry(srv, con, p->tmp_buf, &sce)) {
+		log_error_write(srv, __FILE__, __LINE__, "sb", strerror(errno), p->tmp_buf);
+		goto ERR500;
+	}
+        if (!S_ISDIR(sce->st.st_mode)) {
+		log_error_write(srv, __FILE__, __LINE__, "sb", "Not a directory", p->tmp_buf);
+		goto ERR500;
+	}
+
+	/* cache the data */
+	buffer_copy_string_buffer(c->server_name, con->uri.authority);
+	buffer_copy_string_buffer(c->document_root, p->tmp_buf);
+
+	/* fcgi_offset and fcgi_arg are optional */
+	if (cols > 1 && row[1]) {
+		c->fcgi_offset = atoi(row[1]);
+
+		if (cols > 2 && row[2]) {
+			buffer_copy_string(c->fcgi_arg, row[2]);
+		} else {
+			c->fcgi_arg->used = 0;
+		}
+	} else {
+		c->fcgi_offset = c->fcgi_arg->used = 0;
+	}
+	mysql_free_result(result);
+
+	/* fix virtual server and docroot */
+GO_ON:	buffer_copy_string_buffer(con->server_name, c->server_name);
+	buffer_copy_string_buffer(con->physical.doc_root, c->document_root);
+
+#ifdef DEBUG
+	log_error_write(srv, __FILE__, __LINE__, "sbbdb",
+		result ? "NOT CACHED" : "cached",
+		con->server_name, con->physical.doc_root,
+		c->fcgi_offset, c->fcgi_arg);
+#endif
+	return HANDLER_GO_ON;
+
+ERR500:	if (result) mysql_free_result(result);
+	con->http_status = 500; /* Internal Error */
+	return HANDLER_FINISHED;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+int mod_mysql_vhost_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        			= buffer_init_string("mysql_vhost");
+
+	p->init        			= mod_mysql_vhost_init;
+	p->cleanup     			= mod_mysql_vhost_cleanup;
+	p->handle_request_done	 	= mod_mysql_vhost_handle_connection_close;
+
+	p->set_defaults			= mod_mysql_vhost_set_defaults;
+	p->handle_docroot  		= mod_mysql_vhost_handle_docroot;
+
+	return 0;
+}
+#else
+/* we don't have mysql support, this plugin does nothing */
+int mod_mysql_vhost_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        			= buffer_init_string("mysql_vhost");
+
+	return 0;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_proxy.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_proxy.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_proxy.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1327 @@
+#include <sys/types.h>
+
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include "buffer.h"
+#include "server.h"
+#include "keyvalue.h"
+#include "log.h"
+
+#include "http_chunk.h"
+#include "fdevent.h"
+#include "connections.h"
+#include "response.h"
+#include "joblist.h"
+
+#include "plugin.h"
+
+#include "inet_ntop_cache.h"
+#include "crc32.h"
+
+#include <stdio.h>
+
+#ifdef HAVE_SYS_FILIO_H
+# include <sys/filio.h>
+#endif
+
+#include "sys-socket.h"
+
+#define data_proxy data_fastcgi
+#define data_proxy_init data_fastcgi_init
+
+#define PROXY_RETRY_TIMEOUT 60
+
+/**
+ *
+ * the proxy module is based on the fastcgi module
+ *
+ * 28.06.2004 Jan Kneschke     The first release
+ * 01.07.2004 Evgeny Rodichev  Several bugfixes and cleanups
+ *            - co-ordinate up- and downstream flows correctly (proxy_demux_response
+ *              and proxy_handle_fdevent)
+ *            - correctly transfer upstream http_response_status;
+ *            - some unused structures removed.
+ *
+ * TODO:      - delay upstream read if write_queue is too large
+ *              (to prevent memory eating, like in apache). Shoud be
+ *              configurable).
+ *            - persistent connection with upstream servers
+ *            - HTTP/1.1
+ */
+typedef enum {
+	PROXY_BALANCE_UNSET,
+	PROXY_BALANCE_FAIR,
+	PROXY_BALANCE_HASH,
+	PROXY_BALANCE_RR
+} proxy_balance_t;
+
+typedef struct {
+	array *extensions;
+	unsigned short debug;
+
+	proxy_balance_t balance;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *parse_response;
+	buffer *balance_buf;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+typedef enum {
+	PROXY_STATE_INIT,
+	PROXY_STATE_CONNECT,
+	PROXY_STATE_PREPARE_WRITE,
+	PROXY_STATE_WRITE,
+	PROXY_STATE_READ,
+	PROXY_STATE_ERROR
+} proxy_connection_state_t;
+
+enum { PROXY_STDOUT, PROXY_END_REQUEST };
+
+typedef struct {
+	proxy_connection_state_t state;
+	time_t state_timestamp;
+
+	data_proxy *host;
+
+	buffer *response;
+	buffer *response_header;
+
+	chunkqueue *wb;
+
+	int fd; /* fd to the proxy process */
+	int fde_ndx; /* index into the fd-event buffer */
+
+	size_t path_info_offset; /* start of path_info in uri.path */
+
+	connection *remote_conn;  /* dump pointer */
+	plugin_data *plugin_data; /* dump pointer */
+} handler_ctx;
+
+
+/* ok, we need a prototype */
+static handler_t proxy_handle_fdevent(void *s, void *ctx, int revents);
+
+static handler_ctx * handler_ctx_init() {
+	handler_ctx * hctx;
+
+
+	hctx = calloc(1, sizeof(*hctx));
+
+	hctx->state = PROXY_STATE_INIT;
+	hctx->host = NULL;
+
+	hctx->response = buffer_init();
+	hctx->response_header = buffer_init();
+
+	hctx->wb = chunkqueue_init();
+
+	hctx->fd = -1;
+	hctx->fde_ndx = -1;
+
+	return hctx;
+}
+
+static void handler_ctx_free(handler_ctx *hctx) {
+	buffer_free(hctx->response);
+	buffer_free(hctx->response_header);
+	chunkqueue_free(hctx->wb);
+
+	free(hctx);
+}
+
+INIT_FUNC(mod_proxy_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->parse_response = buffer_init();
+	p->balance_buf = buffer_init();
+
+	return p;
+}
+
+
+FREE_FUNC(mod_proxy_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	buffer_free(p->parse_response);
+	buffer_free(p->balance_buf);
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (s) {
+
+				array_free(s->extensions);
+
+				free(s);
+			}
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+SETDEFAULTS_FUNC(mod_proxy_set_defaults) {
+	plugin_data *p = p_d;
+	data_unset *du;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "proxy.server",              NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "proxy.debug",               NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+		{ "proxy.balance",             NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },      /* 2 */
+		{ NULL,                        NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+		array *ca;
+
+		s = malloc(sizeof(plugin_config));
+		s->extensions    = array_init();
+		s->debug         = 0;
+
+		cv[0].destination = s->extensions;
+		cv[1].destination = &(s->debug);
+		cv[2].destination = p->balance_buf;
+
+		buffer_reset(p->balance_buf);
+
+		p->config_storage[i] = s;
+		ca = ((data_config *)srv->config_context->data[i])->value;
+
+		if (0 != config_insert_values_global(srv, ca, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		if (buffer_is_empty(p->balance_buf)) {
+			s->balance = PROXY_BALANCE_FAIR;
+		} else if (buffer_is_equal_string(p->balance_buf, CONST_STR_LEN("fair"))) {
+			s->balance = PROXY_BALANCE_FAIR;
+		} else if (buffer_is_equal_string(p->balance_buf, CONST_STR_LEN("round-robin"))) {
+			s->balance = PROXY_BALANCE_RR;
+		} else if (buffer_is_equal_string(p->balance_buf, CONST_STR_LEN("hash"))) {
+			s->balance = PROXY_BALANCE_HASH;
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+				        "proxy.balance has to be one of: fair, round-robin, hash, but not:", p->balance_buf);
+			return HANDLER_ERROR;
+		}
+
+		if (NULL != (du = array_get_element(ca, "proxy.server"))) {
+			size_t j;
+			data_array *da = (data_array *)du;
+
+			if (du->type != TYPE_ARRAY) {
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"unexpected type for key: ", "proxy.server", "array of strings");
+
+				return HANDLER_ERROR;
+			}
+
+			/*
+			 * proxy.server = ( "<ext>" => ...,
+			 *                  "<ext>" => ... )
+			 */
+
+			for (j = 0; j < da->value->used; j++) {
+				data_array *da_ext = (data_array *)da->value->data[j];
+				size_t n;
+
+				if (da_ext->type != TYPE_ARRAY) {
+					log_error_write(srv, __FILE__, __LINE__, "sssbs",
+							"unexpected type for key: ", "proxy.server",
+							"[", da->value->data[j]->key, "](string)");
+
+					return HANDLER_ERROR;
+				}
+
+				/*
+				 * proxy.server = ( "<ext>" =>
+				 *                     ( "<host>" => ( ... ),
+				 *                       "<host>" => ( ... )
+				 *                     ),
+				 *                    "<ext>" => ... )
+				 */
+
+				for (n = 0; n < da_ext->value->used; n++) {
+					data_array *da_host = (data_array *)da_ext->value->data[n];
+
+					data_proxy *df;
+					data_array *dfa;
+
+					config_values_t pcv[] = {
+						{ "host",              NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },      /* 0 */
+						{ "port",              NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+						{ NULL,                NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+					};
+
+					if (da_host->type != TYPE_ARRAY) {
+						log_error_write(srv, __FILE__, __LINE__, "ssSBS",
+								"unexpected type for key:",
+								"proxy.server",
+								"[", da_ext->value->data[n]->key, "](string)");
+
+						return HANDLER_ERROR;
+					}
+
+					df = data_proxy_init();
+
+					df->port = 80;
+
+					buffer_copy_string_buffer(df->key, da_host->key);
+
+					pcv[0].destination = df->host;
+					pcv[1].destination = &(df->port);
+
+					if (0 != config_insert_values_internal(srv, da_host->value, pcv)) {
+						return HANDLER_ERROR;
+					}
+
+					if (buffer_is_empty(df->host)) {
+						log_error_write(srv, __FILE__, __LINE__, "sbbbs",
+								"missing key (string):",
+								da->key,
+								da_ext->key,
+								da_host->key,
+								"host");
+
+						return HANDLER_ERROR;
+					}
+
+					/* if extension already exists, take it */
+
+					if (NULL == (dfa = (data_array *)array_get_element(s->extensions, da_ext->key->ptr))) {
+						dfa = data_array_init();
+
+						buffer_copy_string_buffer(dfa->key, da_ext->key);
+
+						array_insert_unique(dfa->value, (data_unset *)df);
+						array_insert_unique(s->extensions, (data_unset *)dfa);
+					} else {
+						array_insert_unique(dfa->value, (data_unset *)df);
+					}
+				}
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+void proxy_connection_close(server *srv, handler_ctx *hctx) {
+	plugin_data *p;
+	connection *con;
+
+	if (NULL == hctx) return;
+
+	p    = hctx->plugin_data;
+	con  = hctx->remote_conn;
+
+	if (hctx->fd != -1) {
+		fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+		fdevent_unregister(srv->ev, hctx->fd);
+
+		close(hctx->fd);
+		srv->cur_fds--;
+	}
+
+	handler_ctx_free(hctx);
+	con->plugin_ctx[p->id] = NULL;
+}
+
+static int proxy_establish_connection(server *srv, handler_ctx *hctx) {
+	struct sockaddr *proxy_addr;
+	struct sockaddr_in proxy_addr_in;
+	socklen_t servlen;
+
+	plugin_data *p    = hctx->plugin_data;
+	data_proxy *host= hctx->host;
+	int proxy_fd       = hctx->fd;
+
+	memset(&proxy_addr, 0, sizeof(proxy_addr));
+
+	proxy_addr_in.sin_family = AF_INET;
+	proxy_addr_in.sin_addr.s_addr = inet_addr(host->host->ptr);
+	proxy_addr_in.sin_port = htons(host->port);
+	servlen = sizeof(proxy_addr_in);
+
+	proxy_addr = (struct sockaddr *) &proxy_addr_in;
+
+	if (-1 == connect(proxy_fd, proxy_addr, servlen)) {
+		if (errno == EINPROGRESS || errno == EALREADY) {
+			if (p->conf.debug) {
+				log_error_write(srv, __FILE__, __LINE__, "sd",
+						"connect delayed:", proxy_fd);
+			}
+
+			return 1;
+		} else {
+
+			log_error_write(srv, __FILE__, __LINE__, "sdsd",
+					"connect failed:", proxy_fd, strerror(errno), errno);
+
+			return -1;
+		}
+	}
+	if (p->conf.debug) {
+		log_error_write(srv, __FILE__, __LINE__, "sd",
+				"connect succeeded: ", proxy_fd);
+	}
+
+	return 0;
+}
+
+void proxy_set_header(connection *con, const char *key, const char *value) {
+    data_string *ds_dst;
+
+    if (NULL == (ds_dst = (data_string *)array_get_unused_element(con->request.headers, TYPE_STRING))) {
+          ds_dst = data_string_init();
+    }
+
+    buffer_copy_string(ds_dst->key, key);
+    buffer_copy_string(ds_dst->value, value);
+    array_insert_unique(con->request.headers, (data_unset *)ds_dst);
+}
+
+void proxy_append_header(connection *con, const char *key, const char *value) {
+    data_string *ds_dst;
+
+    if (NULL == (ds_dst = (data_string *)array_get_unused_element(con->request.headers, TYPE_STRING))) {
+          ds_dst = data_string_init();
+    }
+
+    buffer_copy_string(ds_dst->key, key);
+    buffer_append_string(ds_dst->value, value);
+    array_insert_unique(con->request.headers, (data_unset *)ds_dst);
+}
+
+
+static int proxy_create_env(server *srv, handler_ctx *hctx) {
+	size_t i;
+
+	connection *con   = hctx->remote_conn;
+	buffer *b;
+
+	/* build header */
+
+	b = chunkqueue_get_append_buffer(hctx->wb);
+
+	/* request line */
+	buffer_copy_string(b, get_http_method_name(con->request.http_method));
+	BUFFER_APPEND_STRING_CONST(b, " ");
+
+	buffer_append_string_buffer(b, con->request.uri);
+	BUFFER_APPEND_STRING_CONST(b, " HTTP/1.0\r\n");
+
+	proxy_append_header(con, "X-Forwarded-For", (char *)inet_ntop_cache_get_ip(srv, &(con->dst_addr)));
+	/* http_host is NOT is just a pointer to a buffer
+	 * which is NULL if it is not set */
+	if (con->request.http_host &&
+	    !buffer_is_empty(con->request.http_host)) {
+		proxy_set_header(con, "X-Host", con->request.http_host->ptr);
+	}
+	proxy_set_header(con, "X-Forwarded-Proto", con->conf.is_ssl ? "https" : "http");
+
+	/* request header */
+	for (i = 0; i < con->request.headers->used; i++) {
+		data_string *ds;
+
+		ds = (data_string *)con->request.headers->data[i];
+
+		if (ds->value->used && ds->key->used) {
+			if (buffer_is_equal_string(ds->key, CONST_STR_LEN("Connection"))) continue;
+
+			buffer_append_string_buffer(b, ds->key);
+			BUFFER_APPEND_STRING_CONST(b, ": ");
+			buffer_append_string_buffer(b, ds->value);
+			BUFFER_APPEND_STRING_CONST(b, "\r\n");
+		}
+	}
+
+	BUFFER_APPEND_STRING_CONST(b, "\r\n");
+
+	hctx->wb->bytes_in += b->used - 1;
+	/* body */
+
+	if (con->request.content_length) {
+		chunkqueue *req_cq = con->request_content_queue;
+		chunk *req_c;
+		off_t offset;
+
+		/* something to send ? */
+		for (offset = 0, req_c = req_cq->first; offset != req_cq->bytes_in; req_c = req_c->next) {
+			off_t weWant = req_cq->bytes_in - offset;
+			off_t weHave = 0;
+
+			/* we announce toWrite octects
+			 * now take all the request_content chunk that we need to fill this request
+			 * */
+
+			switch (req_c->type) {
+			case FILE_CHUNK:
+				weHave = req_c->file.length - req_c->offset;
+
+				if (weHave > weWant) weHave = weWant;
+
+				chunkqueue_append_file(hctx->wb, req_c->file.name, req_c->offset, weHave);
+
+				req_c->offset += weHave;
+				req_cq->bytes_out += weHave;
+
+				hctx->wb->bytes_in += weHave;
+
+				break;
+			case MEM_CHUNK:
+				/* append to the buffer */
+				weHave = req_c->mem->used - 1 - req_c->offset;
+
+				if (weHave > weWant) weHave = weWant;
+
+				b = chunkqueue_get_append_buffer(hctx->wb);
+				buffer_append_memory(b, req_c->mem->ptr + req_c->offset, weHave);
+				b->used++; /* add virtual \0 */
+
+				req_c->offset += weHave;
+				req_cq->bytes_out += weHave;
+
+				hctx->wb->bytes_in += weHave;
+
+				break;
+			default:
+				break;
+			}
+
+			offset += weHave;
+		}
+
+	}
+
+	return 0;
+}
+
+static int proxy_set_state(server *srv, handler_ctx *hctx, proxy_connection_state_t state) {
+	hctx->state = state;
+	hctx->state_timestamp = srv->cur_ts;
+
+	return 0;
+}
+
+
+static int proxy_response_parse(server *srv, connection *con, plugin_data *p, buffer *in) {
+	char *s, *ns;
+	int http_response_status = -1;
+
+	UNUSED(srv);
+
+	/* \r\n -> \0\0 */
+
+	buffer_copy_string_buffer(p->parse_response, in);
+
+	for (s = p->parse_response->ptr; NULL != (ns = strstr(s, "\r\n")); s = ns + 2) {
+		char *key, *value;
+		int key_len;
+		data_string *ds;
+		int copy_header;
+
+		ns[0] = '\0';
+		ns[1] = '\0';
+
+		if (-1 == http_response_status) {
+			/* The first line of a Response message is the Status-Line */
+
+			for (key=s; *key && *key != ' '; key++);
+
+			if (*key) {
+				http_response_status = (int) strtol(key, NULL, 10);
+				if (http_response_status <= 0) http_response_status = 502;
+			} else {
+				http_response_status = 502;
+			}
+
+			con->http_status = http_response_status;
+			con->parsed_response |= HTTP_STATUS;
+			continue;
+		}
+
+		if (NULL == (value = strchr(s, ':'))) {
+			/* now we expect: "<key>: <value>\n" */
+
+			continue;
+		}
+
+		key = s;
+		key_len = value - key;
+
+		value++;
+		/* strip WS */
+		while (*value == ' ' || *value == '\t') value++;
+
+		copy_header = 1;
+
+		switch(key_len) {
+		case 4:
+			if (0 == strncasecmp(key, "Date", key_len)) {
+				con->parsed_response |= HTTP_DATE;
+			}
+			break;
+		case 8:
+			if (0 == strncasecmp(key, "Location", key_len)) {
+				con->parsed_response |= HTTP_LOCATION;
+			}
+			break;
+		case 10:
+			if (0 == strncasecmp(key, "Connection", key_len)) {
+				copy_header = 0;
+			}
+			break;
+		case 14:
+			if (0 == strncasecmp(key, "Content-Length", key_len)) {
+				con->response.content_length = strtol(value, NULL, 10);
+				con->parsed_response |= HTTP_CONTENT_LENGTH;
+			}
+			break;
+		default:
+			break;
+		}
+
+		if (copy_header) {
+			if (NULL == (ds = (data_string *)array_get_unused_element(con->response.headers, TYPE_STRING))) {
+				ds = data_response_init();
+			}
+			buffer_copy_string_len(ds->key, key, key_len);
+			buffer_copy_string(ds->value, value);
+
+			array_insert_unique(con->response.headers, (data_unset *)ds);
+		}
+	}
+
+	return 0;
+}
+
+
+static int proxy_demux_response(server *srv, handler_ctx *hctx) {
+	int fin = 0;
+	int b;
+	ssize_t r;
+
+	plugin_data *p    = hctx->plugin_data;
+	connection *con   = hctx->remote_conn;
+	int proxy_fd       = hctx->fd;
+
+	/* check how much we have to read */
+	if (ioctl(hctx->fd, FIONREAD, &b)) {
+		log_error_write(srv, __FILE__, __LINE__, "sd",
+				"ioctl failed: ",
+				proxy_fd);
+		return -1;
+	}
+
+
+	if (p->conf.debug) {
+		log_error_write(srv, __FILE__, __LINE__, "sd",
+			       "proxy - have to read:", b);
+	}
+
+	if (b > 0) {
+		if (hctx->response->used == 0) {
+			/* avoid too small buffer */
+			buffer_prepare_append(hctx->response, b + 1);
+			hctx->response->used = 1;
+		} else {
+			buffer_prepare_append(hctx->response, hctx->response->used + b);
+		}
+
+		if (-1 == (r = read(hctx->fd, hctx->response->ptr + hctx->response->used - 1, b))) {
+			if (errno == EAGAIN) return 0;
+			log_error_write(srv, __FILE__, __LINE__, "sds",
+					"unexpected end-of-file (perhaps the proxy process died):",
+					proxy_fd, strerror(errno));
+			return -1;
+		}
+
+		/* this should be catched by the b > 0 above */
+		assert(r);
+
+		hctx->response->used += r;
+		hctx->response->ptr[hctx->response->used - 1] = '\0';
+
+#if 0
+		log_error_write(srv, __FILE__, __LINE__, "sdsbs",
+				"demux: Response buffer len", hctx->response->used, ":", hctx->response, ":");
+#endif
+
+		if (0 == con->got_response) {
+			con->got_response = 1;
+			buffer_prepare_copy(hctx->response_header, 128);
+		}
+
+		if (0 == con->file_started) {
+			char *c;
+
+			/* search for the \r\n\r\n in the string */
+			if (NULL != (c = buffer_search_string_len(hctx->response, "\r\n\r\n", 4))) {
+				size_t hlen = c - hctx->response->ptr + 4;
+				size_t blen = hctx->response->used - hlen - 1;
+				/* found */
+
+				buffer_append_string_len(hctx->response_header, hctx->response->ptr, c - hctx->response->ptr + 4);
+#if 0
+				log_error_write(srv, __FILE__, __LINE__, "sb", "Header:", hctx->response_header);
+#endif
+				/* parse the response header */
+				proxy_response_parse(srv, con, p, hctx->response_header);
+
+				/* enable chunked-transfer-encoding */
+				if (con->request.http_version == HTTP_VERSION_1_1 &&
+				    !(con->parsed_response & HTTP_CONTENT_LENGTH)) {
+					con->response.transfer_encoding = HTTP_TRANSFER_ENCODING_CHUNKED;
+				}
+
+				con->file_started = 1;
+				if (blen) {
+					http_chunk_append_mem(srv, con, c + 4, blen + 1);
+					joblist_append(srv, con);
+				}
+				hctx->response->used = 0;
+			}
+		} else {
+			http_chunk_append_mem(srv, con, hctx->response->ptr, hctx->response->used);
+			joblist_append(srv, con);
+			hctx->response->used = 0;
+		}
+
+	} else {
+		/* reading from upstream done */
+		con->file_finished = 1;
+
+		http_chunk_append_mem(srv, con, NULL, 0);
+		joblist_append(srv, con);
+
+		fin = 1;
+	}
+
+	return fin;
+}
+
+
+static handler_t proxy_write_request(server *srv, handler_ctx *hctx) {
+	data_proxy *host= hctx->host;
+	plugin_data *p    = hctx->plugin_data;
+	connection *con   = hctx->remote_conn;
+
+	int ret;
+
+	if (!host ||
+	    (!host->host->used || !host->port)) return -1;
+
+	switch(hctx->state) {
+	case PROXY_STATE_INIT:
+		if (-1 == (hctx->fd = socket(AF_INET, SOCK_STREAM, 0))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed: ", strerror(errno));
+			return HANDLER_ERROR;
+		}
+		hctx->fde_ndx = -1;
+
+		srv->cur_fds++;
+
+		fdevent_register(srv->ev, hctx->fd, proxy_handle_fdevent, hctx);
+
+		if (-1 == fdevent_fcntl_set(srv->ev, hctx->fd)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "fcntl failed: ", strerror(errno));
+
+			return HANDLER_ERROR;
+		}
+
+		/* fall through */
+
+	case PROXY_STATE_CONNECT:
+		/* try to finish the connect() */
+		if (hctx->state == PROXY_STATE_INIT) {
+			/* first round */
+			switch (proxy_establish_connection(srv, hctx)) {
+			case 1:
+				proxy_set_state(srv, hctx, PROXY_STATE_CONNECT);
+
+				/* connection is in progress, wait for an event and call getsockopt() below */
+
+				fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+				return HANDLER_WAIT_FOR_EVENT;
+			case -1:
+				/* if ECONNREFUSED choose another connection -> FIXME */
+				hctx->fde_ndx = -1;
+
+				return HANDLER_ERROR;
+			default:
+				/* everything is ok, go on */
+				break;
+			}
+		} else {
+			int socket_error;
+			socklen_t socket_error_len = sizeof(socket_error);
+
+			/* we don't need it anymore */
+			fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+
+			/* try to finish the connect() */
+			if (0 != getsockopt(hctx->fd, SOL_SOCKET, SO_ERROR, &socket_error, &socket_error_len)) {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"getsockopt failed:", strerror(errno));
+
+				return HANDLER_ERROR;
+			}
+			if (socket_error != 0) {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"establishing connection failed:", strerror(socket_error),
+						"port:", hctx->host->port);
+
+				return HANDLER_ERROR;
+			}
+			if (p->conf.debug) {
+				log_error_write(srv, __FILE__, __LINE__,  "s", "proxy - connect - delayed success");
+			}
+		}
+
+		proxy_set_state(srv, hctx, PROXY_STATE_PREPARE_WRITE);
+		/* fall through */
+	case PROXY_STATE_PREPARE_WRITE:
+		proxy_create_env(srv, hctx);
+
+		proxy_set_state(srv, hctx, PROXY_STATE_WRITE);
+
+		/* fall through */
+	case PROXY_STATE_WRITE:;
+		ret = srv->network_backend_write(srv, con, hctx->fd, hctx->wb);
+
+		chunkqueue_remove_finished_chunks(hctx->wb);
+
+		if (-1 == ret) {
+			if (errno != EAGAIN &&
+			    errno != EINTR) {
+				log_error_write(srv, __FILE__, __LINE__, "ssd", "write failed:", strerror(errno), errno);
+
+				return HANDLER_ERROR;
+			} else {
+				fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+				return HANDLER_WAIT_FOR_EVENT;
+			}
+		}
+
+		if (hctx->wb->bytes_out == hctx->wb->bytes_in) {
+			proxy_set_state(srv, hctx, PROXY_STATE_READ);
+
+			fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_IN);
+		} else {
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+			return HANDLER_WAIT_FOR_EVENT;
+		}
+
+		return HANDLER_WAIT_FOR_EVENT;
+	case PROXY_STATE_READ:
+		/* waiting for a response */
+		return HANDLER_WAIT_FOR_EVENT;
+	default:
+		log_error_write(srv, __FILE__, __LINE__, "s", "(debug) unknown state");
+		return HANDLER_ERROR;
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_proxy_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(extensions);
+	PATCH(debug);
+	PATCH(balance);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("proxy.server"))) {
+				PATCH(extensions);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("proxy.debug"))) {
+				PATCH(debug);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("proxy.balance"))) {
+				PATCH(balance);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+SUBREQUEST_FUNC(mod_proxy_handle_subrequest) {
+	plugin_data *p = p_d;
+
+	handler_ctx *hctx = con->plugin_ctx[p->id];
+	data_proxy *host;
+
+	if (NULL == hctx) return HANDLER_GO_ON;
+
+	mod_proxy_patch_connection(srv, con, p);
+
+	host = hctx->host;
+
+	/* not my job */
+	if (con->mode != p->id) return HANDLER_GO_ON;
+
+	/* ok, create the request */
+	switch(proxy_write_request(srv, hctx)) {
+	case HANDLER_ERROR:
+		log_error_write(srv, __FILE__, __LINE__,  "sbdd", "proxy-server disabled:",
+				host->host,
+				host->port,
+				hctx->fd);
+
+		/* disable this server */
+		host->is_disabled = 1;
+		host->disable_ts = srv->cur_ts;
+
+		proxy_connection_close(srv, hctx);
+
+		/* reset the enviroment and restart the sub-request */
+		buffer_reset(con->physical.path);
+		con->mode = DIRECT;
+
+		joblist_append(srv, con);
+
+		/* mis-using HANDLER_WAIT_FOR_FD to break out of the loop
+		 * and hope that the childs will be restarted
+		 *
+		 */
+
+		return HANDLER_WAIT_FOR_FD;
+	case HANDLER_WAIT_FOR_EVENT:
+		return HANDLER_WAIT_FOR_EVENT;
+	case HANDLER_WAIT_FOR_FD:
+		return HANDLER_WAIT_FOR_FD;
+	default:
+		break;
+	}
+
+	if (con->file_started == 1) {
+		return HANDLER_FINISHED;
+	} else {
+		return HANDLER_WAIT_FOR_EVENT;
+	}
+}
+
+static handler_t proxy_handle_fdevent(void *s, void *ctx, int revents) {
+	server      *srv  = (server *)s;
+	handler_ctx *hctx = ctx;
+	connection  *con  = hctx->remote_conn;
+	plugin_data *p    = hctx->plugin_data;
+
+
+	if ((revents & FDEVENT_IN) &&
+	    hctx->state == PROXY_STATE_READ) {
+
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"proxy: fdevent-in", hctx->state);
+		}
+
+		switch (proxy_demux_response(srv, hctx)) {
+		case 0:
+			break;
+		case 1:
+			hctx->host->usage--;
+
+			/* we are done */
+			proxy_connection_close(srv, hctx);
+
+			joblist_append(srv, con);
+			return HANDLER_FINISHED;
+		case -1:
+			if (con->file_started == 0) {
+				/* nothing has been send out yet, send a 500 */
+				connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+				con->http_status = 500;
+				con->mode = DIRECT;
+			} else {
+				/* response might have been already started, kill the connection */
+				connection_set_state(srv, con, CON_STATE_ERROR);
+			}
+
+			joblist_append(srv, con);
+			return HANDLER_FINISHED;
+		}
+	}
+
+	if (revents & FDEVENT_OUT) {
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"proxy: fdevent-out", hctx->state);
+		}
+
+		if (hctx->state == PROXY_STATE_CONNECT ||
+		    hctx->state == PROXY_STATE_WRITE) {
+			/* we are allowed to send something out
+			 *
+			 * 1. in a unfinished connect() call
+			 * 2. in a unfinished write() call (long POST request)
+			 */
+			return mod_proxy_handle_subrequest(srv, con, p);
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"proxy: out", hctx->state);
+		}
+	}
+
+	/* perhaps this issue is already handled */
+	if (revents & FDEVENT_HUP) {
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"proxy: fdevent-hup", hctx->state);
+		}
+
+		if (hctx->state == PROXY_STATE_CONNECT) {
+			/* connect() -> EINPROGRESS -> HUP */
+
+			/**
+			 * what is proxy is doing if it can't reach the next hop ?
+			 *
+			 */
+
+			proxy_connection_close(srv, hctx);
+			joblist_append(srv, con);
+
+			con->http_status = 503;
+			con->mode = DIRECT;
+
+			return HANDLER_FINISHED;
+		}
+
+		con->file_finished = 1;
+
+		proxy_connection_close(srv, hctx);
+		joblist_append(srv, con);
+	} else if (revents & FDEVENT_ERR) {
+		/* kill all connections to the proxy process */
+
+		log_error_write(srv, __FILE__, __LINE__, "sd", "proxy-FDEVENT_ERR, but no HUP", revents);
+
+		joblist_append(srv, con);
+		proxy_connection_close(srv, hctx);
+	}
+
+	return HANDLER_FINISHED;
+}
+
+static handler_t mod_proxy_check_extension(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+	size_t s_len;
+	unsigned long last_max = ULONG_MAX;
+	int max_usage = INT_MAX;
+	int ndx = -1;
+	size_t k;
+	buffer *fn;
+	data_array *extension = NULL;
+	size_t path_info_offset;
+
+	/* Possibly, we processed already this request */
+	if (con->file_started == 1) return HANDLER_GO_ON;
+
+	mod_proxy_patch_connection(srv, con, p);
+
+	fn = con->uri.path;
+
+	if (fn->used == 0) {
+		return HANDLER_ERROR;
+	}
+
+	s_len = fn->used - 1;
+
+
+	path_info_offset = 0;
+
+	if (p->conf.debug) {
+		log_error_write(srv, __FILE__, __LINE__,  "s", "proxy - start");
+	}
+
+	/* check if extension matches */
+	for (k = 0; k < p->conf.extensions->used; k++) {
+		size_t ct_len;
+
+		extension = (data_array *)p->conf.extensions->data[k];
+
+		if (extension->key->used == 0) continue;
+
+		ct_len = extension->key->used - 1;
+
+		if (s_len < ct_len) continue;
+
+		/* check extension in the form "/proxy_pattern" */
+		if (*(extension->key->ptr) == '/') {
+			if (strncmp(fn->ptr, extension->key->ptr, ct_len) == 0) {
+				if (s_len > ct_len + 1) {
+					char *pi_offset;
+
+					if (0 != (pi_offset = strchr(fn->ptr + ct_len + 1, '/'))) {
+						path_info_offset = pi_offset - fn->ptr;
+					}
+				}
+				break;
+			}
+		} else if (0 == strncmp(fn->ptr + s_len - ct_len, extension->key->ptr, ct_len)) {
+			/* check extension in the form ".fcg" */
+			break;
+		}
+	}
+
+	if (k == p->conf.extensions->used) {
+		return HANDLER_GO_ON;
+	}
+
+	if (p->conf.debug) {
+		log_error_write(srv, __FILE__, __LINE__,  "s", "proxy - ext found");
+	}
+
+	switch(p->conf.balance) {
+	case PROXY_BALANCE_HASH:
+		/* hash balancing */
+
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__,  "sd",
+					"proxy - used hash balancing, hosts:", extension->value->used);
+		}
+
+		for (k = 0, ndx = -1, last_max = ULONG_MAX; k < extension->value->used; k++) {
+			data_proxy *host = (data_proxy *)extension->value->data[k];
+			unsigned long cur_max;
+
+			if (host->is_disabled) continue;
+
+			cur_max = generate_crc32c(CONST_BUF_LEN(con->uri.path)) +
+				generate_crc32c(CONST_BUF_LEN(host->host)) + /* we can cache this */
+				generate_crc32c(CONST_BUF_LEN(con->uri.authority));
+
+			if (p->conf.debug) {
+				log_error_write(srv, __FILE__, __LINE__,  "sbbbd",
+						"proxy - election:",
+						con->uri.path,
+						host->host,
+						con->uri.authority,
+						cur_max);
+			}
+
+			if ((last_max == ULONG_MAX) || /* first round */
+		   	    (cur_max > last_max)) {
+				last_max = cur_max;
+
+				ndx = k;
+			}
+		}
+
+		break;
+	case PROXY_BALANCE_FAIR:
+		/* fair balancing */
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",
+					"proxy - used fair balancing");
+		}
+
+		for (k = 0, ndx = -1, max_usage = INT_MAX; k < extension->value->used; k++) {
+			data_proxy *host = (data_proxy *)extension->value->data[k];
+
+			if (host->is_disabled) continue;
+
+			if (host->usage < max_usage) {
+				max_usage = host->usage;
+
+				ndx = k;
+			}
+		}
+
+		break;
+	case PROXY_BALANCE_RR:
+		/* round robin */
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",
+					"proxy - used round-robin balancing");
+		}
+
+		/* just to be sure */
+		assert(extension->value->used < INT_MAX);
+
+		for (k = 0, ndx = -1, max_usage = INT_MAX; k < extension->value->used; k++) {
+			data_proxy *host = (data_proxy *)extension->value->data[k];
+
+			if (host->is_disabled) continue;
+
+			/* first usable ndx */
+			if (max_usage == INT_MAX) {
+				max_usage = k;
+			}
+
+			/* get next ndx */
+			if ((int)k > host->last_used_ndx) {
+				ndx = k;
+				host->last_used_ndx = k;
+
+				break;
+			}
+		}
+
+		/* didn't found a higher id, wrap to the start */
+		if (ndx == -1 && max_usage != INT_MAX) {
+			ndx = max_usage;
+		}
+
+		break;
+	default:
+		break;
+	}
+
+	/* found a server */
+	if (ndx != -1) {
+		data_proxy *host = (data_proxy *)extension->value->data[ndx];
+
+		/*
+		 * if check-local is disabled, use the uri.path handler
+		 *
+		 */
+
+		/* init handler-context */
+		handler_ctx *hctx;
+		hctx = handler_ctx_init();
+
+		hctx->path_info_offset = path_info_offset;
+		hctx->remote_conn      = con;
+		hctx->plugin_data      = p;
+		hctx->host             = host;
+
+		con->plugin_ctx[p->id] = hctx;
+
+		host->usage++;
+
+		con->mode = p->id;
+
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__,  "sbd",
+					"proxy - found a host",
+					host->host, host->port);
+		}
+
+		return HANDLER_GO_ON;
+	} else {
+		/* no handler found */
+		con->http_status = 500;
+
+		log_error_write(srv, __FILE__, __LINE__,  "sb",
+				"no proxy-handler found for:",
+				fn);
+
+		return HANDLER_FINISHED;
+	}
+	return HANDLER_GO_ON;
+}
+
+static handler_t mod_proxy_connection_close_callback(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+
+	proxy_connection_close(srv, con->plugin_ctx[p->id]);
+
+	return HANDLER_GO_ON;
+}
+
+/**
+ *
+ * the trigger re-enables the disabled connections after the timeout is over
+ *
+ * */
+
+TRIGGER_FUNC(mod_proxy_trigger) {
+	plugin_data *p = p_d;
+
+	if (p->config_storage) {
+		size_t i, n, k;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			/* get the extensions for all configs */
+
+			for (k = 0; k < s->extensions->used; k++) {
+				data_array *extension = (data_array *)s->extensions->data[k];
+
+				/* get all hosts */
+				for (n = 0; n < extension->value->used; n++) {
+					data_proxy *host = (data_proxy *)extension->value->data[n];
+
+					if (!host->is_disabled ||
+					    srv->cur_ts - host->disable_ts < 5) continue;
+
+					log_error_write(srv, __FILE__, __LINE__,  "sbd",
+							"proxy - re-enabled:",
+							host->host, host->port);
+
+					host->is_disabled = 0;
+				}
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+
+int mod_proxy_plugin_init(plugin *p) {
+	p->version      = LIGHTTPD_VERSION_ID;
+	p->name         = buffer_init_string("proxy");
+
+	p->init         = mod_proxy_init;
+	p->cleanup      = mod_proxy_free;
+	p->set_defaults = mod_proxy_set_defaults;
+	p->connection_reset        = mod_proxy_connection_close_callback; /* end of req-resp cycle */
+	p->handle_connection_close = mod_proxy_connection_close_callback; /* end of client connection */
+	p->handle_uri_clean        = mod_proxy_check_extension;
+	p->handle_subrequest       = mod_proxy_handle_subrequest;
+	p->handle_trigger          = mod_proxy_trigger;
+
+	p->data         = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_redirect.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_redirect.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_redirect.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,283 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+#include "response.h"
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+typedef struct {
+	pcre_keyvalue_buffer *redirect;
+	data_config *context; /* to which apply me */
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+	buffer *match_buf;
+	buffer *location;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+INIT_FUNC(mod_redirect_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->match_buf = buffer_init();
+	p->location = buffer_init();
+
+	return p;
+}
+
+FREE_FUNC(mod_redirect_free) {
+	plugin_data *p = p_d;
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			pcre_keyvalue_buffer_free(s->redirect);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+
+	buffer_free(p->match_buf);
+	buffer_free(p->location);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+SETDEFAULTS_FUNC(mod_redirect_set_defaults) {
+	plugin_data *p = p_d;
+	data_unset *du;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "url.redirect",               NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION }, /* 0 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	/* 0 */
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+		size_t j;
+		array *ca;
+		data_array *da = (data_array *)du;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->redirect   = pcre_keyvalue_buffer_init();
+
+		cv[0].destination = s->redirect;
+
+		p->config_storage[i] = s;
+		ca = ((data_config *)srv->config_context->data[i])->value;
+
+		if (0 != config_insert_values_global(srv, ca, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		if (NULL == (du = array_get_element(ca, "url.redirect"))) {
+			/* no url.redirect defined */
+			continue;
+		}
+
+		if (du->type != TYPE_ARRAY) {
+			log_error_write(srv, __FILE__, __LINE__, "sss",
+					"unexpected type for key: ", "url.redirect", "array of strings");
+
+			return HANDLER_ERROR;
+		}
+
+		da = (data_array *)du;
+
+		for (j = 0; j < da->value->used; j++) {
+			if (da->value->data[j]->type != TYPE_STRING) {
+				log_error_write(srv, __FILE__, __LINE__, "sssbs",
+						"unexpected type for key: ",
+						"url.redirect",
+						"[", da->value->data[j]->key, "](string)");
+
+				return HANDLER_ERROR;
+			}
+
+			if (0 != pcre_keyvalue_buffer_append(s->redirect,
+							     ((data_string *)(da->value->data[j]))->key->ptr,
+							     ((data_string *)(da->value->data[j]))->value->ptr)) {
+
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"pcre-compile failed for", da->value->data[j]->key);
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+#ifdef HAVE_PCRE_H
+static int mod_redirect_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	p->conf.redirect = s->redirect;
+	p->conf.context = NULL;
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (0 == strcmp(du->key->ptr, "url.redirect")) {
+				p->conf.redirect = s->redirect;
+				p->conf.context = dc;
+			}
+		}
+	}
+
+	return 0;
+}
+#endif
+static handler_t mod_redirect_uri_handler(server *srv, connection *con, void *p_data) {
+#ifdef HAVE_PCRE_H
+	plugin_data *p = p_data;
+	size_t i;
+
+	/*
+	 * REWRITE URL
+	 *
+	 * e.g. redirect /base/ to /index.php?section=base
+	 *
+	 */
+
+	mod_redirect_patch_connection(srv, con, p);
+
+	buffer_copy_string_buffer(p->match_buf, con->request.uri);
+
+	for (i = 0; i < p->conf.redirect->used; i++) {
+		pcre *match;
+		pcre_extra *extra;
+		const char *pattern;
+		size_t pattern_len;
+		int n;
+		pcre_keyvalue *kv = p->conf.redirect->kv[i];
+# define N 10
+		int ovec[N * 3];
+
+		match       = kv->key;
+		extra       = kv->key_extra;
+		pattern     = kv->value->ptr;
+		pattern_len = kv->value->used - 1;
+
+		if ((n = pcre_exec(match, extra, p->match_buf->ptr, p->match_buf->used - 1, 0, 0, ovec, 3 * N)) < 0) {
+			if (n != PCRE_ERROR_NOMATCH) {
+				log_error_write(srv, __FILE__, __LINE__, "sd",
+						"execution error while matching: ", n);
+				return HANDLER_ERROR;
+			}
+		} else {
+			const char **list;
+			size_t start, end;
+			size_t k;
+
+			/* it matched */
+			pcre_get_substring_list(p->match_buf->ptr, ovec, n, &list);
+
+			/* search for $[0-9] */
+
+			buffer_reset(p->location);
+
+			start = 0; end = pattern_len;
+			for (k = 0; k < pattern_len; k++) {
+				if ((pattern[k] == '$' || pattern[k] == '%') &&
+				    isdigit((unsigned char)pattern[k + 1])) {
+					/* got one */
+
+					size_t num = pattern[k + 1] - '0';
+
+					end = k;
+
+					buffer_append_string_len(p->location, pattern + start, end - start);
+
+					if (pattern[k] == '$') {
+						/* n is always > 0 */
+						if (num < (size_t)n) {
+							buffer_append_string(p->location, list[num]);
+						}
+					} else if (p->conf.context == NULL) {
+						/* we have no context, we are global */
+						log_error_write(srv, __FILE__, __LINE__, "sb",
+								"used a rewrite containing a %[0-9]+ in the global scope, ignored:",
+								kv->value);
+					} else {
+						config_append_cond_match_buffer(con, p->conf.context, p->location, num);
+					}
+
+					k++;
+					start = k + 1;
+				}
+			}
+
+			buffer_append_string_len(p->location, pattern + start, pattern_len - start);
+
+			pcre_free(list);
+
+			response_header_insert(srv, con, CONST_STR_LEN("Location"), CONST_BUF_LEN(p->location));
+
+			con->http_status = 301;
+			con->file_finished = 1;
+
+			return HANDLER_FINISHED;
+		}
+	}
+#undef N
+
+#else
+	UNUSED(srv);
+	UNUSED(con);
+	UNUSED(p_data);
+#endif
+
+	return HANDLER_GO_ON;
+}
+
+
+int mod_redirect_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("redirect");
+
+	p->init        = mod_redirect_init;
+	p->handle_uri_clean  = mod_redirect_uri_handler;
+	p->set_defaults  = mod_redirect_set_defaults;
+	p->cleanup     = mod_redirect_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_rewrite.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_rewrite.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_rewrite.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,458 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+typedef struct {
+#ifdef HAVE_PCRE_H
+	pcre *key;
+#endif
+
+	buffer *value;
+
+	int once;
+} rewrite_rule;
+
+typedef struct {
+	rewrite_rule **ptr;
+
+	size_t used;
+	size_t size;
+} rewrite_rule_buffer;
+
+typedef struct {
+	rewrite_rule_buffer *rewrite;
+	data_config *context; /* to which apply me */
+} plugin_config;
+
+typedef struct {
+	enum { REWRITE_STATE_UNSET, REWRITE_STATE_FINISHED} state;
+	int loops;
+} handler_ctx;
+
+typedef struct {
+	PLUGIN_DATA;
+	buffer *match_buf;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+static handler_ctx * handler_ctx_init() {
+	handler_ctx * hctx;
+
+	hctx = calloc(1, sizeof(*hctx));
+
+	hctx->state = REWRITE_STATE_UNSET;
+	hctx->loops = 0;
+
+	return hctx;
+}
+
+static void handler_ctx_free(handler_ctx *hctx) {
+	free(hctx);
+}
+
+rewrite_rule_buffer *rewrite_rule_buffer_init(void) {
+	rewrite_rule_buffer *kvb;
+
+	kvb = calloc(1, sizeof(*kvb));
+
+	return kvb;
+}
+
+int rewrite_rule_buffer_append(rewrite_rule_buffer *kvb, buffer *key, buffer *value, int once) {
+#ifdef HAVE_PCRE_H
+	size_t i;
+	const char *errptr;
+	int erroff;
+
+	if (!key) return -1;
+
+	if (kvb->size == 0) {
+		kvb->size = 4;
+		kvb->used = 0;
+
+		kvb->ptr = malloc(kvb->size * sizeof(*kvb->ptr));
+
+		for(i = 0; i < kvb->size; i++) {
+			kvb->ptr[i] = calloc(1, sizeof(**kvb->ptr));
+		}
+	} else if (kvb->used == kvb->size) {
+		kvb->size += 4;
+
+		kvb->ptr = realloc(kvb->ptr, kvb->size * sizeof(*kvb->ptr));
+
+		for(i = kvb->used; i < kvb->size; i++) {
+			kvb->ptr[i] = calloc(1, sizeof(**kvb->ptr));
+		}
+	}
+
+	if (NULL == (kvb->ptr[kvb->used]->key = pcre_compile(key->ptr,
+							    0, &errptr, &erroff, NULL))) {
+
+		return -1;
+	}
+
+	kvb->ptr[kvb->used]->value = buffer_init();
+	buffer_copy_string_buffer(kvb->ptr[kvb->used]->value, value);
+	kvb->ptr[kvb->used]->once = once;
+
+	kvb->used++;
+
+	return 0;
+#else
+	UNUSED(kvb);
+	UNUSED(value);
+	UNUSED(once);
+	UNUSED(key);
+
+	return -1;
+#endif
+}
+
+void rewrite_rule_buffer_free(rewrite_rule_buffer *kvb) {
+#ifdef HAVE_PCRE_H
+	size_t i;
+
+	for (i = 0; i < kvb->size; i++) {
+		if (kvb->ptr[i]->key) pcre_free(kvb->ptr[i]->key);
+		if (kvb->ptr[i]->value) buffer_free(kvb->ptr[i]->value);
+		free(kvb->ptr[i]);
+	}
+
+	if (kvb->ptr) free(kvb->ptr);
+#endif
+
+	free(kvb);
+}
+
+
+INIT_FUNC(mod_rewrite_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->match_buf = buffer_init();
+
+	return p;
+}
+
+FREE_FUNC(mod_rewrite_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	buffer_free(p->match_buf);
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+			rewrite_rule_buffer_free(s->rewrite);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+static int parse_config_entry(server *srv, plugin_config *s, array *ca, const char *option, int once) {
+	data_unset *du;
+
+	if (NULL != (du = array_get_element(ca, option))) {
+		data_array *da = (data_array *)du;
+		size_t j;
+
+		if (du->type != TYPE_ARRAY) {
+			log_error_write(srv, __FILE__, __LINE__, "sss",
+					"unexpected type for key: ", option, "array of strings");
+
+			return HANDLER_ERROR;
+		}
+
+		da = (data_array *)du;
+
+		for (j = 0; j < da->value->used; j++) {
+			if (da->value->data[j]->type != TYPE_STRING) {
+				log_error_write(srv, __FILE__, __LINE__, "sssbs",
+						"unexpected type for key: ",
+						option,
+						"[", da->value->data[j]->key, "](string)");
+
+				return HANDLER_ERROR;
+			}
+
+			if (0 != rewrite_rule_buffer_append(s->rewrite,
+							    ((data_string *)(da->value->data[j]))->key,
+							    ((data_string *)(da->value->data[j]))->value,
+							    once)) {
+#ifdef HAVE_PCRE_H
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"pcre-compile failed for", da->value->data[j]->key);
+#else
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"pcre support is missing, please install libpcre and the headers");
+#endif
+			}
+		}
+	}
+
+	return 0;
+}
+
+SETDEFAULTS_FUNC(mod_rewrite_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "url.rewrite-repeat",        NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION }, /* 0 */
+		{ "url.rewrite-once",          NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION }, /* 1 */
+
+		/* old names, still supported
+		 *
+		 * url.rewrite remapped to url.rewrite-once
+		 * url.rewrite-final    is url.rewrite-once
+		 *
+		 */
+		{ "url.rewrite",               NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION }, /* 2 */
+		{ "url.rewrite-final",         NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION }, /* 3 */
+		{ NULL,                        NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	/* 0 */
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+		array *ca;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->rewrite   = rewrite_rule_buffer_init();
+
+		cv[0].destination = s->rewrite;
+		cv[1].destination = s->rewrite;
+		cv[2].destination = s->rewrite;
+
+		p->config_storage[i] = s;
+		ca = ((data_config *)srv->config_context->data[i])->value;
+
+		if (0 != config_insert_values_global(srv, ca, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		parse_config_entry(srv, s, ca, "url.rewrite-once",   1);
+		parse_config_entry(srv, s, ca, "url.rewrite-final",  1);
+		parse_config_entry(srv, s, ca, "url.rewrite",        1);
+		parse_config_entry(srv, s, ca, "url.rewrite-repeat", 0);
+	}
+
+	return HANDLER_GO_ON;
+}
+#ifdef HAVE_PCRE_H
+static int mod_rewrite_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	p->conf.rewrite = s->rewrite;
+	p->conf.context = NULL;
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		if (COMP_HTTP_URL == dc->comp) continue;
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("url.rewrite"))) {
+				p->conf.rewrite = s->rewrite;
+				p->conf.context = dc;
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("url.rewrite-once"))) {
+				p->conf.rewrite = s->rewrite;
+				p->conf.context = dc;
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("url.rewrite-repeat"))) {
+				p->conf.rewrite = s->rewrite;
+				p->conf.context = dc;
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("url.rewrite-final"))) {
+				p->conf.rewrite = s->rewrite;
+				p->conf.context = dc;
+			}
+		}
+	}
+
+	return 0;
+}
+#endif
+URIHANDLER_FUNC(mod_rewrite_con_reset) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (con->plugin_ctx[p->id]) {
+		handler_ctx_free(con->plugin_ctx[p->id]);
+		con->plugin_ctx[p->id] = NULL;
+	}
+
+	return HANDLER_GO_ON;
+}
+
+URIHANDLER_FUNC(mod_rewrite_uri_handler) {
+#ifdef HAVE_PCRE_H
+	plugin_data *p = p_d;
+	size_t i;
+	handler_ctx *hctx;
+
+	/*
+	 * REWRITE URL
+	 *
+	 * e.g. rewrite /base/ to /index.php?section=base
+	 *
+	 */
+
+	if (con->plugin_ctx[p->id]) {
+		hctx = con->plugin_ctx[p->id];
+
+		if (hctx->loops++ > 100) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",
+					"ENDLESS LOOP IN rewrite-rule DETECTED ... aborting request, perhaps you want to use url.rewrite-once instead of url.rewrite-repeat");
+
+			return HANDLER_ERROR;
+		}
+
+		if (hctx->state == REWRITE_STATE_FINISHED) return HANDLER_GO_ON;
+	}
+
+	mod_rewrite_patch_connection(srv, con, p);
+
+	if (!p->conf.rewrite) return HANDLER_GO_ON;
+
+	buffer_copy_string_buffer(p->match_buf, con->request.uri);
+
+	for (i = 0; i < p->conf.rewrite->used; i++) {
+		pcre *match;
+		const char *pattern;
+		size_t pattern_len;
+		int n;
+		rewrite_rule *rule = p->conf.rewrite->ptr[i];
+# define N 10
+		int ovec[N * 3];
+
+		match       = rule->key;
+		pattern     = rule->value->ptr;
+		pattern_len = rule->value->used - 1;
+
+		if ((n = pcre_exec(match, NULL, p->match_buf->ptr, p->match_buf->used - 1, 0, 0, ovec, 3 * N)) < 0) {
+			if (n != PCRE_ERROR_NOMATCH) {
+				log_error_write(srv, __FILE__, __LINE__, "sd",
+						"execution error while matching: ", n);
+				return HANDLER_ERROR;
+			}
+		} else {
+			const char **list;
+			size_t start, end;
+			size_t k;
+
+			/* it matched */
+			pcre_get_substring_list(p->match_buf->ptr, ovec, n, &list);
+
+			/* search for $[0-9] */
+
+			buffer_reset(con->request.uri);
+
+			start = 0; end = pattern_len;
+			for (k = 0; k < pattern_len; k++) {
+				if ((pattern[k] == '$' || pattern[k] == '%') &&
+				    isdigit((unsigned char)pattern[k + 1])) {
+					/* got one */
+
+					size_t num = pattern[k + 1] - '0';
+
+					end = k;
+
+					buffer_append_string_len(con->request.uri, pattern + start, end - start);
+
+					if (pattern[k] == '$') {
+						/* n is always > 0 */
+						if (num < (size_t)n) {
+							buffer_append_string(con->request.uri, list[num]);
+						}
+					} else if (p->conf.context == NULL) {
+						/* we have no context, we are global */
+						log_error_write(srv, __FILE__, __LINE__, "sb",
+								"used a redirect containing a %[0-9]+ in the global scope, ignored:",
+								rule->value);
+
+					} else {
+						config_append_cond_match_buffer(con, p->conf.context, con->request.uri, num);
+					}
+
+					k++;
+					start = k + 1;
+				}
+			}
+
+			buffer_append_string_len(con->request.uri, pattern + start, pattern_len - start);
+
+			pcre_free(list);
+
+			hctx = handler_ctx_init();
+
+			con->plugin_ctx[p->id] = hctx;
+
+			if (rule->once) hctx->state = REWRITE_STATE_FINISHED;
+
+			return HANDLER_COMEBACK;
+		}
+	}
+#undef N
+
+#else
+	UNUSED(srv);
+	UNUSED(con);
+	UNUSED(p_d);
+#endif
+
+	return HANDLER_GO_ON;
+}
+
+int mod_rewrite_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("rewrite");
+
+	p->init        = mod_rewrite_init;
+	/* it has to stay _raw as we are matching on uri + querystring
+	 */
+
+	p->handle_uri_raw = mod_rewrite_uri_handler;
+	p->set_defaults = mod_rewrite_set_defaults;
+	p->cleanup     = mod_rewrite_free;
+	p->connection_reset = mod_rewrite_con_reset;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_rrdtool.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_rrdtool.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_rrdtool.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,449 @@
+#define _GNU_SOURCE
+#include <sys/types.h>
+
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <time.h>
+
+#include "server.h"
+#include "connections.h"
+#include "response.h"
+#include "connections.h"
+#include "log.h"
+
+#include "plugin.h"
+#ifdef HAVE_FORK
+/* no need for waitpid if we don't have fork */
+#include <sys/wait.h>
+#endif
+typedef struct {
+	buffer *path_rrdtool_bin;
+	buffer *path_rrd;
+
+	double requests, *requests_ptr;
+	double bytes_written, *bytes_written_ptr;
+	double bytes_read, *bytes_read_ptr;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *cmd;
+	buffer *resp;
+
+	int read_fd, write_fd;
+	pid_t rrdtool_pid;
+
+	int rrdtool_running;
+
+	plugin_config **config_storage;
+	plugin_config conf;
+} plugin_data;
+
+INIT_FUNC(mod_rrd_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->resp = buffer_init();
+	p->cmd = buffer_init();
+
+	return p;
+}
+
+FREE_FUNC(mod_rrd_free) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			buffer_free(s->path_rrdtool_bin);
+			buffer_free(s->path_rrd);
+
+			free(s);
+		}
+	}
+	buffer_free(p->cmd);
+	buffer_free(p->resp);
+
+	free(p->config_storage);
+
+	if (p->rrdtool_pid) {
+		int status;
+		close(p->read_fd);
+		close(p->write_fd);
+#ifdef HAVE_FORK
+		/* collect status */
+		waitpid(p->rrdtool_pid, &status, 0);
+#endif
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+int mod_rrd_create_pipe(server *srv, plugin_data *p) {
+	pid_t pid;
+
+	int to_rrdtool_fds[2];
+	int from_rrdtool_fds[2];
+#ifdef HAVE_FORK
+	if (pipe(to_rrdtool_fds)) {
+		log_error_write(srv, __FILE__, __LINE__, "ss",
+				"pipe failed: ", strerror(errno));
+		return -1;
+	}
+
+	if (pipe(from_rrdtool_fds)) {
+		log_error_write(srv, __FILE__, __LINE__, "ss",
+				"pipe failed: ", strerror(errno));
+		return -1;
+	}
+
+	/* fork, execve */
+	switch (pid = fork()) {
+	case 0: {
+		/* child */
+		char **args;
+		int argc;
+		int i = 0;
+		char *dash = "-";
+
+		/* move stdout to from_rrdtool_fd[1] */
+		close(STDOUT_FILENO);
+		dup2(from_rrdtool_fds[1], STDOUT_FILENO);
+		close(from_rrdtool_fds[1]);
+		/* not needed */
+		close(from_rrdtool_fds[0]);
+
+		/* move the stdin to to_rrdtool_fd[0] */
+		close(STDIN_FILENO);
+		dup2(to_rrdtool_fds[0], STDIN_FILENO);
+		close(to_rrdtool_fds[0]);
+		/* not needed */
+		close(to_rrdtool_fds[1]);
+
+		close(STDERR_FILENO);
+
+		if (srv->errorlog_mode == ERRORLOG_FILE) {
+			dup2(srv->errorlog_fd, STDERR_FILENO);
+			close(srv->errorlog_fd);
+		}
+
+		/* set up args */
+		argc = 3;
+		args = malloc(sizeof(*args) * argc);
+		i = 0;
+
+		args[i++] = p->conf.path_rrdtool_bin->ptr;
+		args[i++] = dash;
+		args[i++] = NULL;
+
+		/* we don't need the client socket */
+		for (i = 3; i < 256; i++) {
+			close(i);
+		}
+
+		/* exec the cgi */
+		execv(args[0], args);
+
+		log_error_write(srv, __FILE__, __LINE__, "sss", "spawing rrdtool failed: ", strerror(errno), args[0]);
+
+		/* */
+		SEGFAULT();
+		break;
+	}
+	case -1:
+		/* error */
+		log_error_write(srv, __FILE__, __LINE__, "ss", "fork failed: ", strerror(errno));
+		break;
+	default: {
+		/* father */
+
+		close(from_rrdtool_fds[1]);
+		close(to_rrdtool_fds[0]);
+
+		/* register PID and wait for them asyncronously */
+		p->write_fd = to_rrdtool_fds[1];
+		p->read_fd = from_rrdtool_fds[0];
+		p->rrdtool_pid = pid;
+
+		break;
+	}
+	}
+
+	return 0;
+#else
+	return -1;
+#endif
+}
+
+static int mod_rrdtool_create_rrd(server *srv, plugin_data *p, plugin_config *s) {
+	struct stat st;
+
+	/* check if DB already exists */
+	if (0 == stat(s->path_rrd->ptr, &st)) {
+		/* check if it is plain file */
+		if (!S_ISREG(st.st_mode)) {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"not a regular file:", s->path_rrd);
+			return HANDLER_ERROR;
+		}
+	} else {
+		int r ;
+		/* create a new one */
+
+		BUFFER_COPY_STRING_CONST(p->cmd, "create ");
+		buffer_append_string_buffer(p->cmd, s->path_rrd);
+		buffer_append_string(p->cmd, " --step 60 ");
+		buffer_append_string(p->cmd, "DS:InOctets:ABSOLUTE:600:U:U ");
+		buffer_append_string(p->cmd, "DS:OutOctets:ABSOLUTE:600:U:U ");
+		buffer_append_string(p->cmd, "DS:Requests:ABSOLUTE:600:U:U ");
+		buffer_append_string(p->cmd, "RRA:AVERAGE:0.5:1:600 ");
+		buffer_append_string(p->cmd, "RRA:AVERAGE:0.5:6:700 ");
+		buffer_append_string(p->cmd, "RRA:AVERAGE:0.5:24:775 ");
+		buffer_append_string(p->cmd, "RRA:AVERAGE:0.5:288:797 ");
+		buffer_append_string(p->cmd, "RRA:MAX:0.5:1:600 ");
+		buffer_append_string(p->cmd, "RRA:MAX:0.5:6:700 ");
+		buffer_append_string(p->cmd, "RRA:MAX:0.5:24:775 ");
+		buffer_append_string(p->cmd, "RRA:MAX:0.5:288:797 ");
+		buffer_append_string(p->cmd, "RRA:MIN:0.5:1:600 ");
+		buffer_append_string(p->cmd, "RRA:MIN:0.5:6:700 ");
+		buffer_append_string(p->cmd, "RRA:MIN:0.5:24:775 ");
+		buffer_append_string(p->cmd, "RRA:MIN:0.5:288:797\n");
+
+		if (-1 == (r = write(p->write_fd, p->cmd->ptr, p->cmd->used - 1))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+				"rrdtool-write: failed", strerror(errno));
+
+			return HANDLER_ERROR;
+		}
+
+		buffer_prepare_copy(p->resp, 4096);
+		if (-1 == (r = read(p->read_fd, p->resp->ptr, p->resp->size))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+				"rrdtool-read: failed", strerror(errno));
+
+			return HANDLER_ERROR;
+		}
+
+		p->resp->used = r;
+
+		if (p->resp->ptr[0] != 'O' ||
+		    p->resp->ptr[1] != 'K') {
+			log_error_write(srv, __FILE__, __LINE__, "sbb",
+				"rrdtool-response:", p->cmd, p->resp);
+
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_rrd_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(path_rrdtool_bin);
+	PATCH(path_rrd);
+
+	p->conf.bytes_written_ptr = &(s->bytes_written);
+	p->conf.bytes_read_ptr = &(s->bytes_read);
+	p->conf.requests_ptr = &(s->requests);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("rrdtool.db-name"))) {
+				PATCH(path_rrd);
+				/* get pointers to double values */
+
+				p->conf.bytes_written_ptr = &(s->bytes_written);
+				p->conf.bytes_read_ptr = &(s->bytes_read);
+				p->conf.requests_ptr = &(s->requests);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+SETDEFAULTS_FUNC(mod_rrd_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	config_values_t cv[] = {
+		{ "rrdtool.binary",              NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_SERVER },
+		{ "rrdtool.db-name",             NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->path_rrdtool_bin = buffer_init();
+		s->path_rrd = buffer_init();
+		s->requests = 0;
+		s->bytes_written = 0;
+		s->bytes_read = 0;
+
+		cv[0].destination = s->path_rrdtool_bin;
+		cv[1].destination = s->path_rrd;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		if (i > 0 && !buffer_is_empty(s->path_rrdtool_bin)) {
+			/* path_rrdtool_bin is a global option */
+
+			log_error_write(srv, __FILE__, __LINE__, "s",
+					"rrdtool.binary can only be set as a global option.");
+
+			return HANDLER_ERROR;
+		}
+
+	}
+
+	p->conf.path_rrdtool_bin = p->config_storage[0]->path_rrdtool_bin;
+	p->rrdtool_running = 0;
+
+	/* check for dir */
+
+	if (buffer_is_empty(p->conf.path_rrdtool_bin)) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"rrdtool.binary has to be set");
+		return HANDLER_ERROR;
+	}
+
+	/* open the pipe to rrdtool */
+	if (mod_rrd_create_pipe(srv, p)) {
+		return HANDLER_ERROR;
+	}
+
+	p->rrdtool_running = 1;
+
+	return HANDLER_GO_ON;
+}
+
+TRIGGER_FUNC(mod_rrd_trigger) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	if (!p->rrdtool_running) return HANDLER_GO_ON;
+	if ((srv->cur_ts % 60) != 0) return HANDLER_GO_ON;
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s = p->config_storage[i];
+		int r;
+
+		if (buffer_is_empty(s->path_rrd)) continue;
+
+		/* write the data down every minute */
+
+		if (HANDLER_GO_ON != mod_rrdtool_create_rrd(srv, p, s)) return HANDLER_ERROR;
+
+		BUFFER_COPY_STRING_CONST(p->cmd, "update ");
+		buffer_append_string_buffer(p->cmd, s->path_rrd);
+		BUFFER_APPEND_STRING_CONST(p->cmd, " N:");
+		buffer_append_off_t(p->cmd, s->bytes_read);
+		BUFFER_APPEND_STRING_CONST(p->cmd, ":");
+		buffer_append_off_t(p->cmd, s->bytes_written);
+		BUFFER_APPEND_STRING_CONST(p->cmd, ":");
+		buffer_append_long(p->cmd, s->requests);
+		BUFFER_APPEND_STRING_CONST(p->cmd, "\n");
+
+		if (-1 == (r = write(p->write_fd, p->cmd->ptr, p->cmd->used - 1))) {
+			p->rrdtool_running = 0;
+
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"rrdtool-write: failed", strerror(errno));
+
+			return HANDLER_ERROR;
+		}
+
+		buffer_prepare_copy(p->resp, 4096);
+		if (-1 == (r = read(p->read_fd, p->resp->ptr, p->resp->size))) {
+			p->rrdtool_running = 0;
+
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"rrdtool-read: failed", strerror(errno));
+
+			return HANDLER_ERROR;
+		}
+
+		p->resp->used = r;
+
+		if (p->resp->ptr[0] != 'O' ||
+		    p->resp->ptr[1] != 'K') {
+			p->rrdtool_running = 0;
+
+			log_error_write(srv, __FILE__, __LINE__, "sbb",
+					"rrdtool-response:", p->cmd, p->resp);
+
+			return HANDLER_ERROR;
+		}
+		s->requests = 0;
+		s->bytes_written = 0;
+		s->bytes_read = 0;
+	}
+
+	return HANDLER_GO_ON;
+}
+
+REQUESTDONE_FUNC(mod_rrd_account) {
+	plugin_data *p = p_d;
+
+	mod_rrd_patch_connection(srv, con, p);
+
+	*(p->conf.requests_ptr)      += 1;
+	*(p->conf.bytes_written_ptr) += con->bytes_written;
+	*(p->conf.bytes_read_ptr)    += con->bytes_read;
+
+	return HANDLER_GO_ON;
+}
+
+int mod_rrdtool_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("rrd");
+
+	p->init        = mod_rrd_init;
+	p->cleanup     = mod_rrd_free;
+	p->set_defaults= mod_rrd_set_defaults;
+
+	p->handle_trigger      = mod_rrd_trigger;
+	p->handle_request_done = mod_rrd_account;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_scgi.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_scgi.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_scgi.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,3089 @@
+#include <sys/types.h>
+#include <unistd.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <assert.h>
+#include <signal.h>
+
+#include "buffer.h"
+#include "server.h"
+#include "keyvalue.h"
+#include "log.h"
+
+#include "http_chunk.h"
+#include "fdevent.h"
+#include "connections.h"
+#include "response.h"
+#include "joblist.h"
+
+#include "plugin.h"
+
+#include "inet_ntop_cache.h"
+
+#include <stdio.h>
+
+#ifdef HAVE_SYS_FILIO_H
+# include <sys/filio.h>
+#endif
+
+#include "sys-socket.h"
+
+#ifdef HAVE_SYS_UIO_H
+#include <sys/uio.h>
+#endif
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+enum {EOL_UNSET, EOL_N, EOL_RN};
+
+/*
+ *
+ * TODO:
+ *
+ * - add timeout for a connect to a non-scgi process
+ *   (use state_timestamp + state)
+ *
+ */
+
+typedef struct scgi_proc {
+	size_t id; /* id will be between 1 and max_procs */
+	buffer *socket; /* config.socket + "-" + id */
+	unsigned port;  /* config.port + pno */
+
+	pid_t pid;   /* PID of the spawned process (0 if not spawned locally) */
+
+
+	size_t load; /* number of requests waiting on this process */
+
+	time_t last_used; /* see idle_timeout */
+	size_t requests;  /* see max_requests */
+	struct scgi_proc *prev, *next; /* see first */
+
+	time_t disable_ts; /* replace by host->something */
+
+	int is_local;
+
+	enum { PROC_STATE_UNSET,            /* init-phase */
+			PROC_STATE_RUNNING, /* alive */
+			PROC_STATE_DIED_WAIT_FOR_PID,
+			PROC_STATE_KILLED,  /* was killed as we don't have the load anymore */
+			PROC_STATE_DIED,    /* marked as dead, should be restarted */
+			PROC_STATE_DISABLED /* proc disabled as it resulted in an error */
+	} state;
+} scgi_proc;
+
+typedef struct {
+	/* list of processes handling this extension
+	 * sorted by lowest load
+	 *
+	 * whenever a job is done move it up in the list
+	 * until it is sorted, move it down as soon as the
+	 * job is started
+	 */
+	scgi_proc *first;
+	scgi_proc *unused_procs;
+
+	/*
+	 * spawn at least min_procs, at max_procs.
+	 *
+	 * as soon as the load of the first entry
+	 * is max_load_per_proc we spawn a new one
+	 * and add it to the first entry and give it
+	 * the load
+	 *
+	 */
+
+	unsigned short min_procs;
+	unsigned short max_procs;
+	size_t num_procs;    /* how many procs are started */
+	size_t active_procs; /* how many of them are really running */
+
+	unsigned short max_load_per_proc;
+
+	/*
+	 * kick the process from the list if it was not
+	 * used for idle_timeout until min_procs is
+	 * reached. this helps to get the processlist
+	 * small again we had a small peak load.
+	 *
+	 */
+
+	unsigned short idle_timeout;
+
+	/*
+	 * time after a disabled remote connection is tried to be re-enabled
+	 *
+	 *
+	 */
+
+	unsigned short disable_time;
+
+	/*
+	 * same scgi processes get a little bit larger
+	 * than wanted. max_requests_per_proc kills a
+	 * process after a number of handled requests.
+	 *
+	 */
+	size_t max_requests_per_proc;
+
+
+	/* config */
+
+	/*
+	 * host:port
+	 *
+	 * if host is one of the local IP adresses the
+	 * whole connection is local
+	 *
+	 * if tcp/ip should be used host AND port have
+	 * to be specified
+	 *
+	 */
+	buffer *host;
+	unsigned short port;
+
+	/*
+	 * Unix Domain Socket
+	 *
+	 * instead of TCP/IP we can use Unix Domain Sockets
+	 * - more secure (you have fileperms to play with)
+	 * - more control (on locally)
+	 * - more speed (no extra overhead)
+	 */
+	buffer *unixsocket;
+
+	/* if socket is local we can start the scgi
+	 * process ourself
+	 *
+	 * bin-path is the path to the binary
+	 *
+	 * check min_procs and max_procs for the number
+	 * of process to start-up
+	 */
+	buffer *bin_path;
+
+	/* bin-path is set bin-environment is taken to
+	 * create the environement before starting the
+	 * FastCGI process
+	 *
+	 */
+	array *bin_env;
+
+	array *bin_env_copy;
+
+	/*
+	 * docroot-translation between URL->phys and the
+	 * remote host
+	 *
+	 * reasons:
+	 * - different dir-layout if remote
+	 * - chroot if local
+	 *
+	 */
+	buffer *docroot;
+
+	/*
+	 * check_local tell you if the phys file is stat()ed
+	 * or not. FastCGI doesn't care if the service is
+	 * remote. If the web-server side doesn't contain
+	 * the scgi-files we should not stat() for them
+	 * and say '404 not found'.
+	 */
+	unsigned short check_local;
+
+	/*
+	 * append PATH_INFO to SCRIPT_FILENAME
+	 *
+	 * php needs this if cgi.fix_pathinfo is provied
+	 *
+	 */
+
+	ssize_t load; /* replace by host->load */
+
+	size_t max_id; /* corresponds most of the time to
+	num_procs.
+
+	only if a process is killed max_id waits for the process itself
+	to die and decrements its afterwards */
+} scgi_extension_host;
+
+/*
+ * one extension can have multiple hosts assigned
+ * one host can spawn additional processes on the same
+ *   socket (if we control it)
+ *
+ * ext -> host -> procs
+ *    1:n     1:n
+ *
+ * if the scgi process is remote that whole goes down
+ * to
+ *
+ * ext -> host -> procs
+ *    1:n     1:1
+ *
+ * in case of PHP and FCGI_CHILDREN we have again a procs
+ * but we don't control it directly.
+ *
+ */
+
+typedef struct {
+	buffer *key; /* like .php */
+
+	scgi_extension_host **hosts;
+
+	size_t used;
+	size_t size;
+} scgi_extension;
+
+typedef struct {
+	scgi_extension **exts;
+
+	size_t used;
+	size_t size;
+} scgi_exts;
+
+
+typedef struct {
+	scgi_exts *exts;
+
+	int debug;
+} plugin_config;
+
+typedef struct {
+	char **ptr;
+
+	size_t size;
+	size_t used;
+} char_array;
+
+/* generic plugin data, shared between all connections */
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *scgi_env;
+
+	buffer *path;
+	buffer *parse_response;
+
+	plugin_config **config_storage;
+
+	plugin_config conf; /* this is only used as long as no handler_ctx is setup */
+} plugin_data;
+
+/* connection specific data */
+typedef enum { FCGI_STATE_INIT, FCGI_STATE_CONNECT, FCGI_STATE_PREPARE_WRITE,
+		FCGI_STATE_WRITE, FCGI_STATE_READ
+} scgi_connection_state_t;
+
+typedef struct {
+	buffer  *response;
+	size_t   response_len;
+	int      response_type;
+	int      response_padding;
+
+	scgi_proc *proc;
+	scgi_extension_host *host;
+
+	scgi_connection_state_t state;
+	time_t   state_timestamp;
+
+	int      reconnects; /* number of reconnect attempts */
+
+	read_buffer *rb;
+	chunkqueue *wb;
+
+	buffer   *response_header;
+
+	int       delayed;   /* flag to mark that the connect() is delayed */
+
+	size_t    request_id;
+	int       fd;        /* fd to the scgi process */
+	int       fde_ndx;   /* index into the fd-event buffer */
+
+	pid_t     pid;
+	int       got_proc;
+
+	plugin_config conf;
+
+	connection *remote_conn;  /* dumb pointer */
+	plugin_data *plugin_data; /* dumb pointer */
+} handler_ctx;
+
+
+/* ok, we need a prototype */
+static handler_t scgi_handle_fdevent(void *s, void *ctx, int revents);
+
+int scgi_proclist_sort_down(server *srv, scgi_extension_host *host, scgi_proc *proc);
+
+
+
+static handler_ctx * handler_ctx_init() {
+	handler_ctx * hctx;
+
+	hctx = calloc(1, sizeof(*hctx));
+	assert(hctx);
+
+	hctx->fde_ndx = -1;
+
+	hctx->response = buffer_init();
+	hctx->response_header = buffer_init();
+
+	hctx->request_id = 0;
+	hctx->state = FCGI_STATE_INIT;
+	hctx->proc = NULL;
+
+	hctx->response_len = 0;
+	hctx->response_type = 0;
+	hctx->response_padding = 0;
+	hctx->fd = -1;
+
+	hctx->reconnects = 0;
+
+	hctx->wb = chunkqueue_init();
+
+	return hctx;
+}
+
+static void handler_ctx_free(handler_ctx *hctx) {
+	buffer_free(hctx->response);
+	buffer_free(hctx->response_header);
+
+	chunkqueue_free(hctx->wb);
+
+	if (hctx->rb) {
+		if (hctx->rb->ptr) free(hctx->rb->ptr);
+		free(hctx->rb);
+	}
+
+	free(hctx);
+}
+
+scgi_proc *scgi_process_init() {
+	scgi_proc *f;
+
+	f = calloc(1, sizeof(*f));
+	f->socket = buffer_init();
+
+	f->prev = NULL;
+	f->next = NULL;
+
+	return f;
+}
+
+void scgi_process_free(scgi_proc *f) {
+	if (!f) return;
+
+	scgi_process_free(f->next);
+
+	buffer_free(f->socket);
+
+	free(f);
+}
+
+scgi_extension_host *scgi_host_init() {
+	scgi_extension_host *f;
+
+	f = calloc(1, sizeof(*f));
+
+	f->host = buffer_init();
+	f->unixsocket = buffer_init();
+	f->docroot = buffer_init();
+	f->bin_path = buffer_init();
+	f->bin_env = array_init();
+	f->bin_env_copy = array_init();
+
+	return f;
+}
+
+void scgi_host_free(scgi_extension_host *h) {
+	if (!h) return;
+
+	buffer_free(h->host);
+	buffer_free(h->unixsocket);
+	buffer_free(h->docroot);
+	buffer_free(h->bin_path);
+	array_free(h->bin_env);
+	array_free(h->bin_env_copy);
+
+	scgi_process_free(h->first);
+	scgi_process_free(h->unused_procs);
+
+	free(h);
+
+}
+
+scgi_exts *scgi_extensions_init() {
+	scgi_exts *f;
+
+	f = calloc(1, sizeof(*f));
+
+	return f;
+}
+
+void scgi_extensions_free(scgi_exts *f) {
+	size_t i;
+
+	if (!f) return;
+
+	for (i = 0; i < f->used; i++) {
+		scgi_extension *fe;
+		size_t j;
+
+		fe = f->exts[i];
+
+		for (j = 0; j < fe->used; j++) {
+			scgi_extension_host *h;
+
+			h = fe->hosts[j];
+
+			scgi_host_free(h);
+		}
+
+		buffer_free(fe->key);
+		free(fe->hosts);
+
+		free(fe);
+	}
+
+	free(f->exts);
+
+	free(f);
+}
+
+int scgi_extension_insert(scgi_exts *ext, buffer *key, scgi_extension_host *fh) {
+	scgi_extension *fe;
+	size_t i;
+
+	/* there is something */
+
+	for (i = 0; i < ext->used; i++) {
+		if (buffer_is_equal(key, ext->exts[i]->key)) {
+			break;
+		}
+	}
+
+	if (i == ext->used) {
+		/* filextension is new */
+		fe = calloc(1, sizeof(*fe));
+		assert(fe);
+		fe->key = buffer_init();
+		buffer_copy_string_buffer(fe->key, key);
+
+		/* */
+
+		if (ext->size == 0) {
+			ext->size = 8;
+			ext->exts = malloc(ext->size * sizeof(*(ext->exts)));
+			assert(ext->exts);
+		} else if (ext->used == ext->size) {
+			ext->size += 8;
+			ext->exts = realloc(ext->exts, ext->size * sizeof(*(ext->exts)));
+			assert(ext->exts);
+		}
+		ext->exts[ext->used++] = fe;
+	} else {
+		fe = ext->exts[i];
+	}
+
+	if (fe->size == 0) {
+		fe->size = 4;
+		fe->hosts = malloc(fe->size * sizeof(*(fe->hosts)));
+		assert(fe->hosts);
+	} else if (fe->size == fe->used) {
+		fe->size += 4;
+		fe->hosts = realloc(fe->hosts, fe->size * sizeof(*(fe->hosts)));
+		assert(fe->hosts);
+	}
+
+	fe->hosts[fe->used++] = fh;
+
+	return 0;
+
+}
+
+INIT_FUNC(mod_scgi_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->scgi_env = buffer_init();
+
+	p->path = buffer_init();
+	p->parse_response = buffer_init();
+
+	return p;
+}
+
+
+FREE_FUNC(mod_scgi_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	buffer_free(p->scgi_env);
+	buffer_free(p->path);
+	buffer_free(p->parse_response);
+
+	if (p->config_storage) {
+		size_t i, j, n;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+			scgi_exts *exts;
+
+			if (!s) continue;
+
+			exts = s->exts;
+
+			for (j = 0; j < exts->used; j++) {
+				scgi_extension *ex;
+
+				ex = exts->exts[j];
+
+				for (n = 0; n < ex->used; n++) {
+					scgi_proc *proc;
+					scgi_extension_host *host;
+
+					host = ex->hosts[n];
+
+					for (proc = host->first; proc; proc = proc->next) {
+						if (proc->pid != 0) kill(proc->pid, SIGTERM);
+
+						if (proc->is_local &&
+						    !buffer_is_empty(proc->socket)) {
+							unlink(proc->socket->ptr);
+						}
+					}
+
+					for (proc = host->unused_procs; proc; proc = proc->next) {
+						if (proc->pid != 0) kill(proc->pid, SIGTERM);
+
+						if (proc->is_local &&
+						    !buffer_is_empty(proc->socket)) {
+							unlink(proc->socket->ptr);
+						}
+					}
+				}
+			}
+
+			scgi_extensions_free(s->exts);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+static int env_add(char_array *env, const char *key, size_t key_len, const char *val, size_t val_len) {
+	char *dst;
+
+	if (!key || !val) return -1;
+
+	dst = malloc(key_len + val_len + 3);
+	memcpy(dst, key, key_len);
+	dst[key_len] = '=';
+	/* add the \0 from the value */
+	memcpy(dst + key_len + 1, val, val_len + 1);
+
+	if (env->size == 0) {
+		env->size = 16;
+		env->ptr = malloc(env->size * sizeof(*env->ptr));
+	} else if (env->size == env->used) {
+		env->size += 16;
+		env->ptr = realloc(env->ptr, env->size * sizeof(*env->ptr));
+	}
+
+	env->ptr[env->used++] = dst;
+
+	return 0;
+}
+
+static int scgi_spawn_connection(server *srv,
+				 plugin_data *p,
+				 scgi_extension_host *host,
+				 scgi_proc *proc) {
+	int scgi_fd;
+	int socket_type, status;
+	struct timeval tv = { 0, 100 * 1000 };
+#ifdef HAVE_SYS_UN_H
+	struct sockaddr_un scgi_addr_un;
+#endif
+	struct sockaddr_in scgi_addr_in;
+	struct sockaddr *scgi_addr;
+
+	socklen_t servlen;
+
+#ifndef HAVE_FORK
+	return -1;
+#endif
+
+	if (p->conf.debug) {
+		log_error_write(srv, __FILE__, __LINE__, "sdb",
+				"new proc, socket:", proc->port, proc->socket);
+	}
+
+	if (!buffer_is_empty(proc->socket)) {
+		memset(&scgi_addr, 0, sizeof(scgi_addr));
+
+#ifdef HAVE_SYS_UN_H
+		scgi_addr_un.sun_family = AF_UNIX;
+		strcpy(scgi_addr_un.sun_path, proc->socket->ptr);
+
+#ifdef SUN_LEN
+		servlen = SUN_LEN(&scgi_addr_un);
+#else
+		/* stevens says: */
+		servlen = proc->socket->used + sizeof(scgi_addr_un.sun_family);
+#endif
+		socket_type = AF_UNIX;
+		scgi_addr = (struct sockaddr *) &scgi_addr_un;
+#else
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"ERROR: Unix Domain sockets are not supported.");
+		return -1;
+#endif
+	} else {
+		scgi_addr_in.sin_family = AF_INET;
+
+		if (buffer_is_empty(host->host)) {
+			scgi_addr_in.sin_addr.s_addr = htonl(INADDR_ANY);
+		} else {
+			struct hostent *he;
+
+			/* set a usefull default */
+			scgi_addr_in.sin_addr.s_addr = htonl(INADDR_ANY);
+
+
+			if (NULL == (he = gethostbyname(host->host->ptr))) {
+				log_error_write(srv, __FILE__, __LINE__,
+						"sdb", "gethostbyname failed: ",
+						h_errno, host->host);
+				return -1;
+			}
+
+			if (he->h_addrtype != AF_INET) {
+				log_error_write(srv, __FILE__, __LINE__, "sd", "addr-type != AF_INET: ", he->h_addrtype);
+				return -1;
+			}
+
+			if (he->h_length != sizeof(struct in_addr)) {
+				log_error_write(srv, __FILE__, __LINE__, "sd", "addr-length != sizeof(in_addr): ", he->h_length);
+				return -1;
+			}
+
+			memcpy(&(scgi_addr_in.sin_addr.s_addr), he->h_addr_list[0], he->h_length);
+
+		}
+		scgi_addr_in.sin_port = htons(proc->port);
+		servlen = sizeof(scgi_addr_in);
+
+		socket_type = AF_INET;
+		scgi_addr = (struct sockaddr *) &scgi_addr_in;
+	}
+
+	if (-1 == (scgi_fd = socket(socket_type, SOCK_STREAM, 0))) {
+		log_error_write(srv, __FILE__, __LINE__, "ss",
+				"failed:", strerror(errno));
+		return -1;
+	}
+
+	if (-1 == connect(scgi_fd, scgi_addr, servlen)) {
+		/* server is not up, spawn in  */
+		pid_t child;
+		int val;
+
+		if (!buffer_is_empty(proc->socket)) {
+			unlink(proc->socket->ptr);
+		}
+
+		close(scgi_fd);
+
+		/* reopen socket */
+		if (-1 == (scgi_fd = socket(socket_type, SOCK_STREAM, 0))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+				"socket failed:", strerror(errno));
+			return -1;
+		}
+
+		val = 1;
+		if (setsockopt(scgi_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"socketsockopt failed:", strerror(errno));
+			return -1;
+		}
+
+		/* create socket */
+		if (-1 == bind(scgi_fd, scgi_addr, servlen)) {
+			log_error_write(srv, __FILE__, __LINE__, "sbds",
+				"bind failed for:",
+				proc->socket,
+				proc->port,
+				strerror(errno));
+			return -1;
+		}
+
+		if (-1 == listen(scgi_fd, 1024)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+				"listen failed:", strerror(errno));
+			return -1;
+		}
+
+#ifdef HAVE_FORK
+		switch ((child = fork())) {
+		case 0: {
+			buffer *b;
+			size_t i = 0;
+			int fd = 0;
+			char_array env;
+
+
+			/* create environment */
+			env.ptr = NULL;
+			env.size = 0;
+			env.used = 0;
+
+			/* we don't need the client socket */
+			for (fd = 3; fd < 256; fd++) {
+				if (fd != 2 && fd != scgi_fd) close(fd);
+			}
+
+			/* build clean environment */
+			if (host->bin_env_copy->used) {
+				for (i = 0; i < host->bin_env_copy->used; i++) {
+					data_string *ds = (data_string *)host->bin_env_copy->data[i];
+					char *ge;
+
+					if (NULL != (ge = getenv(ds->value->ptr))) {
+						env_add(&env, CONST_BUF_LEN(ds->value), ge, strlen(ge));
+					}
+				}
+			} else {
+				for (i = 0; environ[i]; i++) {
+					char *eq;
+
+					if (NULL != (eq = strchr(environ[i], '='))) {
+						env_add(&env, environ[i], eq - environ[i], eq+1, strlen(eq+1));
+					}
+				}
+			}
+
+			/* create environment */
+			for (i = 0; i < host->bin_env->used; i++) {
+				data_string *ds = (data_string *)host->bin_env->data[i];
+
+				env_add(&env, CONST_BUF_LEN(ds->key), CONST_BUF_LEN(ds->value));
+			}
+
+			for (i = 0; i < env.used; i++) {
+				/* search for PHP_FCGI_CHILDREN */
+				if (0 == strncmp(env.ptr[i], "PHP_FCGI_CHILDREN=", sizeof("PHP_FCGI_CHILDREN=") - 1)) break;
+			}
+
+			/* not found, add a default */
+			if (i == env.used) {
+				env_add(&env, CONST_STR_LEN("PHP_FCGI_CHILDREN"), CONST_STR_LEN("1"));
+			}
+
+			env.ptr[env.used] = NULL;
+
+			b = buffer_init();
+			buffer_copy_string(b, "exec ");
+			buffer_append_string_buffer(b, host->bin_path);
+
+			/* exec the cgi */
+			execle("/bin/sh", "sh", "-c", b->ptr, (char *)NULL, env.ptr);
+
+			log_error_write(srv, __FILE__, __LINE__, "sbs",
+					"execl failed for:", host->bin_path, strerror(errno));
+
+			exit(errno);
+
+			break;
+		}
+		case -1:
+			/* error */
+			break;
+		default:
+			/* father */
+
+			/* wait */
+			select(0, NULL, NULL, NULL, &tv);
+
+			switch (waitpid(child, &status, WNOHANG)) {
+			case 0:
+				/* child still running after timeout, good */
+				break;
+			case -1:
+				/* no PID found ? should never happen */
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"pid not found:", strerror(errno));
+				return -1;
+			default:
+				/* the child should not terminate at all */
+				if (WIFEXITED(status)) {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+							"child exited (is this a SCGI binary ?):",
+							WEXITSTATUS(status));
+				} else if (WIFSIGNALED(status)) {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+							"child signaled:",
+							WTERMSIG(status));
+				} else {
+					log_error_write(srv, __FILE__, __LINE__, "sd",
+							"child died somehow:",
+							status);
+				}
+				return -1;
+			}
+
+			/* register process */
+			proc->pid = child;
+			proc->last_used = srv->cur_ts;
+			proc->is_local = 1;
+
+			break;
+		}
+#endif
+	} else {
+		proc->is_local = 0;
+		proc->pid = 0;
+
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"(debug) socket is already used, won't spawn:",
+					proc->socket);
+		}
+	}
+
+	proc->state = PROC_STATE_RUNNING;
+	host->active_procs++;
+
+	close(scgi_fd);
+
+	return 0;
+}
+
+
+SETDEFAULTS_FUNC(mod_scgi_set_defaults) {
+	plugin_data *p = p_d;
+	data_unset *du;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "scgi.server",              NULL, T_CONFIG_LOCAL, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "scgi.debug",               NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+		array *ca;
+
+		s = malloc(sizeof(plugin_config));
+		s->exts          = scgi_extensions_init();
+		s->debug         = 0;
+
+		cv[0].destination = s->exts;
+		cv[1].destination = &(s->debug);
+
+		p->config_storage[i] = s;
+		ca = ((data_config *)srv->config_context->data[i])->value;
+
+		if (0 != config_insert_values_global(srv, ca, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		/*
+		 * <key> = ( ... )
+		 */
+
+		if (NULL != (du = array_get_element(ca, "scgi.server"))) {
+			size_t j;
+			data_array *da = (data_array *)du;
+
+			if (du->type != TYPE_ARRAY) {
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"unexpected type for key: ", "scgi.server", "array of strings");
+
+				return HANDLER_ERROR;
+			}
+
+
+			/*
+			 * scgi.server = ( "<ext>" => ( ... ),
+			 *                    "<ext>" => ( ... ) )
+			 */
+
+			for (j = 0; j < da->value->used; j++) {
+				size_t n;
+				data_array *da_ext = (data_array *)da->value->data[j];
+
+				if (da->value->data[j]->type != TYPE_ARRAY) {
+					log_error_write(srv, __FILE__, __LINE__, "sssbs",
+							"unexpected type for key: ", "scgi.server",
+							"[", da->value->data[j]->key, "](string)");
+
+					return HANDLER_ERROR;
+				}
+
+				/*
+				 * da_ext->key == name of the extension
+				 */
+
+				/*
+				 * scgi.server = ( "<ext>" =>
+				 *                     ( "<host>" => ( ... ),
+				 *                       "<host>" => ( ... )
+				 *                     ),
+				 *                    "<ext>" => ... )
+				 */
+
+				for (n = 0; n < da_ext->value->used; n++) {
+					data_array *da_host = (data_array *)da_ext->value->data[n];
+
+					scgi_extension_host *df;
+
+					config_values_t fcv[] = {
+						{ "host",              NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+						{ "docroot",           NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+						{ "socket",            NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 2 */
+						{ "bin-path",          NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 3 */
+
+						{ "check-local",       NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },      /* 4 */
+						{ "port",              NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 5 */
+						{ "min-procs-not-working",         NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 7 this is broken for now */
+						{ "max-procs",         NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 7 */
+						{ "max-load-per-proc", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 8 */
+						{ "idle-timeout",      NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 9 */
+						{ "disable-time",      NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 10 */
+
+						{ "bin-environment",   NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },        /* 11 */
+						{ "bin-copy-environment", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },     /* 12 */
+
+
+						{ NULL,                NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+					};
+
+					if (da_host->type != TYPE_ARRAY) {
+						log_error_write(srv, __FILE__, __LINE__, "ssSBS",
+								"unexpected type for key:",
+								"scgi.server",
+								"[", da_host->key, "](string)");
+
+						return HANDLER_ERROR;
+					}
+
+					df = scgi_host_init();
+
+					df->check_local  = 1;
+					df->min_procs    = 4;
+					df->max_procs    = 4;
+					df->max_load_per_proc = 1;
+					df->idle_timeout = 60;
+					df->disable_time = 60;
+
+					fcv[0].destination = df->host;
+					fcv[1].destination = df->docroot;
+					fcv[2].destination = df->unixsocket;
+					fcv[3].destination = df->bin_path;
+
+					fcv[4].destination = &(df->check_local);
+					fcv[5].destination = &(df->port);
+					fcv[6].destination = &(df->min_procs);
+					fcv[7].destination = &(df->max_procs);
+					fcv[8].destination = &(df->max_load_per_proc);
+					fcv[9].destination = &(df->idle_timeout);
+					fcv[10].destination = &(df->disable_time);
+
+					fcv[11].destination = df->bin_env;
+					fcv[12].destination = df->bin_env_copy;
+
+
+					if (0 != config_insert_values_internal(srv, da_host->value, fcv)) {
+						return HANDLER_ERROR;
+					}
+
+					if ((!buffer_is_empty(df->host) || df->port) &&
+					    !buffer_is_empty(df->unixsocket)) {
+						log_error_write(srv, __FILE__, __LINE__, "s",
+								"either host+port or socket");
+
+						return HANDLER_ERROR;
+					}
+
+					if (!buffer_is_empty(df->unixsocket)) {
+						/* unix domain socket */
+						struct sockaddr_un un;
+
+						if (df->unixsocket->used > sizeof(un.sun_path) - 2) {
+							log_error_write(srv, __FILE__, __LINE__, "s",
+									"path of the unixdomain socket is too large");
+							return HANDLER_ERROR;
+						}
+					} else {
+						/* tcp/ip */
+
+						if (buffer_is_empty(df->host) &&
+						    buffer_is_empty(df->bin_path)) {
+							log_error_write(srv, __FILE__, __LINE__, "sbbbs",
+									"missing key (string):",
+									da->key,
+									da_ext->key,
+									da_host->key,
+									"host");
+
+							return HANDLER_ERROR;
+						} else if (df->port == 0) {
+							log_error_write(srv, __FILE__, __LINE__, "sbbbs",
+									"missing key (short):",
+									da->key,
+									da_ext->key,
+									da_host->key,
+									"port");
+							return HANDLER_ERROR;
+						}
+					}
+
+					if (!buffer_is_empty(df->bin_path)) {
+						/* a local socket + self spawning */
+						size_t pno;
+
+						/* HACK:  just to make sure the adaptive spawing is disabled */
+						df->min_procs = df->max_procs;
+
+						if (df->min_procs > df->max_procs) df->max_procs = df->min_procs;
+						if (df->max_load_per_proc < 1) df->max_load_per_proc = 0;
+
+						if (s->debug) {
+							log_error_write(srv, __FILE__, __LINE__, "ssbsdsbsdsd",
+									"--- scgi spawning local",
+									"\n\tproc:", df->bin_path,
+									"\n\tport:", df->port,
+									"\n\tsocket", df->unixsocket,
+									"\n\tmin-procs:", df->min_procs,
+									"\n\tmax-procs:", df->max_procs);
+						}
+
+						for (pno = 0; pno < df->min_procs; pno++) {
+							scgi_proc *proc;
+
+							proc = scgi_process_init();
+							proc->id = df->num_procs++;
+							df->max_id++;
+
+							if (buffer_is_empty(df->unixsocket)) {
+								proc->port = df->port + pno;
+							} else {
+								buffer_copy_string_buffer(proc->socket, df->unixsocket);
+								buffer_append_string(proc->socket, "-");
+								buffer_append_long(proc->socket, pno);
+							}
+
+							if (s->debug) {
+								log_error_write(srv, __FILE__, __LINE__, "ssdsbsdsd",
+										"--- scgi spawning",
+										"\n\tport:", df->port,
+										"\n\tsocket", df->unixsocket,
+										"\n\tcurrent:", pno, "/", df->min_procs);
+							}
+
+							if (scgi_spawn_connection(srv, p, df, proc)) {
+								log_error_write(srv, __FILE__, __LINE__, "s",
+										"[ERROR]: spawning fcgi failed.");
+								return HANDLER_ERROR;
+							}
+
+							proc->next = df->first;
+							if (df->first) 	df->first->prev = proc;
+
+							df->first = proc;
+						}
+					} else {
+						scgi_proc *fp;
+
+						fp = scgi_process_init();
+						fp->id = df->num_procs++;
+						df->max_id++;
+						df->active_procs++;
+						fp->state = PROC_STATE_RUNNING;
+
+						if (buffer_is_empty(df->unixsocket)) {
+							fp->port = df->port;
+						} else {
+							buffer_copy_string_buffer(fp->socket, df->unixsocket);
+						}
+
+						df->first = fp;
+
+						df->min_procs = 1;
+						df->max_procs = 1;
+					}
+
+					/* if extension already exists, take it */
+					scgi_extension_insert(s->exts, da_ext->key, df);
+				}
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+static int scgi_set_state(server *srv, handler_ctx *hctx, scgi_connection_state_t state) {
+	hctx->state = state;
+	hctx->state_timestamp = srv->cur_ts;
+
+	return 0;
+}
+
+
+void scgi_connection_cleanup(server *srv, handler_ctx *hctx) {
+	plugin_data *p;
+	connection  *con;
+
+	if (NULL == hctx) return;
+
+	p    = hctx->plugin_data;
+	con  = hctx->remote_conn;
+
+	if (con->mode != p->id) {
+		WP();
+		return;
+	}
+
+	if (hctx->fd != -1) {
+		fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+		fdevent_unregister(srv->ev, hctx->fd);
+		close(hctx->fd);
+		srv->cur_fds--;
+	}
+
+	if (hctx->host && hctx->proc) {
+		hctx->host->load--;
+
+		if (hctx->got_proc) {
+			/* after the connect the process gets a load */
+			hctx->proc->load--;
+
+			if (p->conf.debug) {
+				log_error_write(srv, __FILE__, __LINE__, "sddb",
+						"release proc:",
+						hctx->fd,
+						hctx->proc->pid, hctx->proc->socket);
+			}
+		}
+
+		scgi_proclist_sort_down(srv, hctx->host, hctx->proc);
+	}
+
+
+	handler_ctx_free(hctx);
+	con->plugin_ctx[p->id] = NULL;
+}
+
+static int scgi_reconnect(server *srv, handler_ctx *hctx) {
+	plugin_data *p    = hctx->plugin_data;
+
+	/* child died
+	 *
+	 * 1.
+	 *
+	 * connect was ok, connection was accepted
+	 * but the php accept loop checks after the accept if it should die or not.
+	 *
+	 * if yes we can only detect it at a write()
+	 *
+	 * next step is resetting this attemp and setup a connection again
+	 *
+	 * if we have more then 5 reconnects for the same request, die
+	 *
+	 * 2.
+	 *
+	 * we have a connection but the child died by some other reason
+	 *
+	 */
+
+	fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+	fdevent_unregister(srv->ev, hctx->fd);
+	close(hctx->fd);
+	srv->cur_fds--;
+
+	scgi_set_state(srv, hctx, FCGI_STATE_INIT);
+
+	hctx->request_id = 0;
+	hctx->reconnects++;
+
+	if (p->conf.debug) {
+		log_error_write(srv, __FILE__, __LINE__, "sddb",
+				"release proc:",
+				hctx->fd,
+				hctx->proc->pid, hctx->proc->socket);
+	}
+
+	hctx->proc->load--;
+	scgi_proclist_sort_down(srv, hctx->host, hctx->proc);
+
+	return 0;
+}
+
+
+static handler_t scgi_connection_reset(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+
+	scgi_connection_cleanup(srv, con->plugin_ctx[p->id]);
+
+	return HANDLER_GO_ON;
+}
+
+
+static int scgi_env_add(buffer *env, const char *key, size_t key_len, const char *val, size_t val_len) {
+	size_t len;
+
+	if (!key || !val) return -1;
+
+	len = key_len + val_len + 2;
+
+	buffer_prepare_append(env, len);
+
+	/* include the NUL */
+	memcpy(env->ptr + env->used, key, key_len + 1);
+	env->used += key_len + 1;
+	memcpy(env->ptr + env->used, val, val_len + 1);
+	env->used += val_len + 1;
+
+	return 0;
+}
+
+
+/**
+ *
+ * returns
+ *   -1 error
+ *    0 connected
+ *    1 not connected yet
+ */
+
+static int scgi_establish_connection(server *srv, handler_ctx *hctx) {
+	struct sockaddr *scgi_addr;
+	struct sockaddr_in scgi_addr_in;
+#ifdef HAVE_SYS_UN_H
+	struct sockaddr_un scgi_addr_un;
+#endif
+	socklen_t servlen;
+
+	scgi_extension_host *host = hctx->host;
+	scgi_proc *proc   = hctx->proc;
+	int scgi_fd       = hctx->fd;
+
+	memset(&scgi_addr, 0, sizeof(scgi_addr));
+
+	if (!buffer_is_empty(proc->socket)) {
+#ifdef HAVE_SYS_UN_H
+		/* use the unix domain socket */
+		scgi_addr_un.sun_family = AF_UNIX;
+		strcpy(scgi_addr_un.sun_path, proc->socket->ptr);
+#ifdef SUN_LEN
+		servlen = SUN_LEN(&scgi_addr_un);
+#else
+		/* stevens says: */
+		servlen = proc->socket->used + sizeof(scgi_addr_un.sun_family);
+#endif
+		scgi_addr = (struct sockaddr *) &scgi_addr_un;
+#else
+		return -1;
+#endif
+	} else {
+		scgi_addr_in.sin_family = AF_INET;
+		if (0 == inet_aton(host->host->ptr, &(scgi_addr_in.sin_addr))) {
+			log_error_write(srv, __FILE__, __LINE__, "sbs",
+					"converting IP-adress failed for", host->host,
+					"\nBe sure to specify an IP address here");
+
+			return -1;
+		}
+		scgi_addr_in.sin_port = htons(proc->port);
+		servlen = sizeof(scgi_addr_in);
+
+		scgi_addr = (struct sockaddr *) &scgi_addr_in;
+	}
+
+	if (-1 == connect(scgi_fd, scgi_addr, servlen)) {
+		if (errno == EINPROGRESS ||
+		    errno == EALREADY ||
+		    errno == EINTR) {
+			if (hctx->conf.debug) {
+				log_error_write(srv, __FILE__, __LINE__, "sd",
+						"connect delayed, will continue later:", scgi_fd);
+			}
+
+			return 1;
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sdsddb",
+					"connect failed:", scgi_fd,
+					strerror(errno), errno,
+					proc->port, proc->socket);
+
+			if (errno == EAGAIN) {
+				/* this is Linux only */
+
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"If this happend on Linux: You have been run out of local ports. "
+						"Check the manual, section Performance how to handle this.");
+			}
+
+			return -1;
+		}
+	}
+	if (hctx->conf.debug > 1) {
+		log_error_write(srv, __FILE__, __LINE__, "sd",
+				"connect succeeded: ", scgi_fd);
+	}
+
+
+
+	return 0;
+}
+
+static int scgi_env_add_request_headers(server *srv, connection *con, plugin_data *p) {
+	size_t i;
+
+	for (i = 0; i < con->request.headers->used; i++) {
+		data_string *ds;
+
+		ds = (data_string *)con->request.headers->data[i];
+
+		if (ds->value->used && ds->key->used) {
+			size_t j;
+			buffer_reset(srv->tmp_buf);
+
+			if (0 != strcasecmp(ds->key->ptr, "CONTENT-TYPE")) {
+				BUFFER_COPY_STRING_CONST(srv->tmp_buf, "HTTP_");
+				srv->tmp_buf->used--;
+			}
+
+			buffer_prepare_append(srv->tmp_buf, ds->key->used + 2);
+			for (j = 0; j < ds->key->used - 1; j++) {
+				srv->tmp_buf->ptr[srv->tmp_buf->used++] =
+					light_isalpha(ds->key->ptr[j]) ?
+					ds->key->ptr[j] & ~32 : '_';
+			}
+			srv->tmp_buf->ptr[srv->tmp_buf->used++] = '\0';
+
+			scgi_env_add(p->scgi_env, CONST_BUF_LEN(srv->tmp_buf), CONST_BUF_LEN(ds->value));
+		}
+	}
+
+	for (i = 0; i < con->environment->used; i++) {
+		data_string *ds;
+
+		ds = (data_string *)con->environment->data[i];
+
+		if (ds->value->used && ds->key->used) {
+			size_t j;
+			buffer_reset(srv->tmp_buf);
+
+			buffer_prepare_append(srv->tmp_buf, ds->key->used + 2);
+			for (j = 0; j < ds->key->used - 1; j++) {
+				srv->tmp_buf->ptr[srv->tmp_buf->used++] =
+					isalpha((unsigned char)ds->key->ptr[j]) ?
+					toupper((unsigned char)ds->key->ptr[j]) : '_';
+			}
+			srv->tmp_buf->ptr[srv->tmp_buf->used++] = '\0';
+
+			scgi_env_add(p->scgi_env, CONST_BUF_LEN(srv->tmp_buf), CONST_BUF_LEN(ds->value));
+		}
+	}
+
+	return 0;
+}
+
+
+static int scgi_create_env(server *srv, handler_ctx *hctx) {
+	char buf[32];
+	const char *s;
+#ifdef HAVE_IPV6
+	char b2[INET6_ADDRSTRLEN + 1];
+#endif
+	buffer *b;
+
+	plugin_data *p    = hctx->plugin_data;
+	scgi_extension_host *host= hctx->host;
+
+	connection *con   = hctx->remote_conn;
+	server_socket *srv_sock = con->srv_socket;
+
+	sock_addr our_addr;
+	socklen_t our_addr_len;
+
+	buffer_prepare_copy(p->scgi_env, 1024);
+
+	/* CGI-SPEC 6.1.2, FastCGI spec 6.3 and SCGI spec */
+
+	/* request.content_length < SSIZE_MAX, see request.c */
+	LI_ltostr(buf, con->request.content_length);
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("CONTENT_LENGTH"), buf, strlen(buf));
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("SCGI"), CONST_STR_LEN("1"));
+
+
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("SERVER_SOFTWARE"), CONST_STR_LEN(PACKAGE_NAME"/"PACKAGE_VERSION));
+
+	if (con->server_name->used) {
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("SERVER_NAME"), CONST_BUF_LEN(con->server_name));
+	} else {
+#ifdef HAVE_IPV6
+		s = inet_ntop(srv_sock->addr.plain.sa_family,
+			      srv_sock->addr.plain.sa_family == AF_INET6 ?
+			      (const void *) &(srv_sock->addr.ipv6.sin6_addr) :
+			      (const void *) &(srv_sock->addr.ipv4.sin_addr),
+			      b2, sizeof(b2)-1);
+#else
+		s = inet_ntoa(srv_sock->addr.ipv4.sin_addr);
+#endif
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("SERVER_NAME"), s, strlen(s));
+	}
+
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("GATEWAY_INTERFACE"), CONST_STR_LEN("CGI/1.1"));
+
+	LI_ltostr(buf,
+#ifdef HAVE_IPV6
+	       ntohs(srv_sock->addr.plain.sa_family ? srv_sock->addr.ipv6.sin6_port : srv_sock->addr.ipv4.sin_port)
+#else
+	       ntohs(srv_sock->addr.ipv4.sin_port)
+#endif
+	       );
+
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("SERVER_PORT"), buf, strlen(buf));
+
+	/* get the server-side of the connection to the client */
+	our_addr_len = sizeof(our_addr);
+
+	if (-1 == getsockname(con->fd, &(our_addr.plain), &our_addr_len)) {
+		s = inet_ntop_cache_get_ip(srv, &(srv_sock->addr));
+	} else {
+		s = inet_ntop_cache_get_ip(srv, &(our_addr));
+	}
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("SERVER_ADDR"), s, strlen(s));
+
+	LI_ltostr(buf,
+#ifdef HAVE_IPV6
+	       ntohs(con->dst_addr.plain.sa_family ? con->dst_addr.ipv6.sin6_port : con->dst_addr.ipv4.sin_port)
+#else
+	       ntohs(con->dst_addr.ipv4.sin_port)
+#endif
+	       );
+
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("REMOTE_PORT"), buf, strlen(buf));
+
+	s = inet_ntop_cache_get_ip(srv, &(con->dst_addr));
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("REMOTE_ADDR"), s, strlen(s));
+
+	if (!buffer_is_empty(con->authed_user)) {
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("REMOTE_USER"),
+			     CONST_BUF_LEN(con->authed_user));
+	}
+
+
+	/*
+	 * SCRIPT_NAME, PATH_INFO and PATH_TRANSLATED according to
+	 * http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html
+	 * (6.1.14, 6.1.6, 6.1.7)
+	 */
+
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("SCRIPT_NAME"), CONST_BUF_LEN(con->uri.path));
+
+	if (!buffer_is_empty(con->request.pathinfo)) {
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("PATH_INFO"), CONST_BUF_LEN(con->request.pathinfo));
+
+		/* PATH_TRANSLATED is only defined if PATH_INFO is set */
+
+		if (!buffer_is_empty(host->docroot)) {
+			buffer_copy_string_buffer(p->path, host->docroot);
+		} else {
+			buffer_copy_string_buffer(p->path, con->physical.doc_root);
+		}
+		buffer_append_string_buffer(p->path, con->request.pathinfo);
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("PATH_TRANSLATED"), CONST_BUF_LEN(p->path));
+	} else {
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("PATH_INFO"), CONST_STR_LEN(""));
+	}
+
+	/*
+	 * SCRIPT_FILENAME and DOCUMENT_ROOT for php. The PHP manual
+	 * http://www.php.net/manual/en/reserved.variables.php
+	 * treatment of PATH_TRANSLATED is different from the one of CGI specs.
+	 * TODO: this code should be checked against cgi.fix_pathinfo php
+	 * parameter.
+	 */
+
+	if (!buffer_is_empty(host->docroot)) {
+		/*
+		 * rewrite SCRIPT_FILENAME
+		 *
+		 */
+
+		buffer_copy_string_buffer(p->path, host->docroot);
+		buffer_append_string_buffer(p->path, con->uri.path);
+
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(p->path));
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(host->docroot));
+	} else {
+		buffer_copy_string_buffer(p->path, con->physical.path);
+
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("SCRIPT_FILENAME"), CONST_BUF_LEN(p->path));
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("DOCUMENT_ROOT"), CONST_BUF_LEN(con->physical.doc_root));
+	}
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("REQUEST_URI"), CONST_BUF_LEN(con->request.orig_uri));
+	if (!buffer_is_equal(con->request.uri, con->request.orig_uri)) {
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("REDIRECT_URI"), CONST_BUF_LEN(con->request.uri));
+	}
+	if (!buffer_is_empty(con->uri.query)) {
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("QUERY_STRING"), CONST_BUF_LEN(con->uri.query));
+	} else {
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("QUERY_STRING"), CONST_STR_LEN(""));
+	}
+
+	s = get_http_method_name(con->request.http_method);
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("REQUEST_METHOD"), s, strlen(s));
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("REDIRECT_STATUS"), CONST_STR_LEN("200")); /* if php is compiled with --force-redirect */
+	s = get_http_version_name(con->request.http_version);
+	scgi_env_add(p->scgi_env, CONST_STR_LEN("SERVER_PROTOCOL"), s, strlen(s));
+
+#ifdef USE_OPENSSL
+	if (srv_sock->is_ssl) {
+		scgi_env_add(p->scgi_env, CONST_STR_LEN("HTTPS"), CONST_STR_LEN("on"));
+	}
+#endif
+
+	scgi_env_add_request_headers(srv, con, p);
+
+	b = chunkqueue_get_append_buffer(hctx->wb);
+
+	buffer_append_long(b, p->scgi_env->used);
+	buffer_append_string_len(b, CONST_STR_LEN(":"));
+	buffer_append_string_len(b, (const char *)p->scgi_env->ptr, p->scgi_env->used);
+	buffer_append_string_len(b, CONST_STR_LEN(","));
+
+	hctx->wb->bytes_in += b->used - 1;
+
+	if (con->request.content_length) {
+		chunkqueue *req_cq = con->request_content_queue;
+		chunk *req_c;
+		off_t offset;
+
+		/* something to send ? */
+		for (offset = 0, req_c = req_cq->first; offset != req_cq->bytes_in; req_c = req_c->next) {
+			off_t weWant = req_cq->bytes_in - offset;
+			off_t weHave = 0;
+
+			/* we announce toWrite octects
+			 * now take all the request_content chunk that we need to fill this request
+			 * */
+
+			switch (req_c->type) {
+			case FILE_CHUNK:
+				weHave = req_c->file.length - req_c->offset;
+
+				if (weHave > weWant) weHave = weWant;
+
+				chunkqueue_append_file(hctx->wb, req_c->file.name, req_c->offset, weHave);
+
+				req_c->offset += weHave;
+				req_cq->bytes_out += weHave;
+
+				hctx->wb->bytes_in += weHave;
+
+				break;
+			case MEM_CHUNK:
+				/* append to the buffer */
+				weHave = req_c->mem->used - 1 - req_c->offset;
+
+				if (weHave > weWant) weHave = weWant;
+
+				b = chunkqueue_get_append_buffer(hctx->wb);
+				buffer_append_memory(b, req_c->mem->ptr + req_c->offset, weHave);
+				b->used++; /* add virtual \0 */
+
+				req_c->offset += weHave;
+				req_cq->bytes_out += weHave;
+
+				hctx->wb->bytes_in += weHave;
+
+				break;
+			default:
+				break;
+			}
+
+			offset += weHave;
+		}
+	}
+
+#if 0
+	for (i = 0; i < hctx->write_buffer->used; i++) {
+		fprintf(stderr, "%02x ", hctx->write_buffer->ptr[i]);
+		if ((i+1) % 16 == 0) {
+			size_t j;
+			for (j = i-15; j <= i; j++) {
+				fprintf(stderr, "%c",
+					isprint((unsigned char)hctx->write_buffer->ptr[j]) ? hctx->write_buffer->ptr[j] : '.');
+			}
+			fprintf(stderr, "\n");
+		}
+	}
+#endif
+
+	return 0;
+}
+
+static int scgi_response_parse(server *srv, connection *con, plugin_data *p, buffer *in, int eol) {
+	char *ns;
+	const char *s;
+	int line = 0;
+
+	UNUSED(srv);
+
+	buffer_copy_string_buffer(p->parse_response, in);
+
+	for (s = p->parse_response->ptr;
+	     NULL != (ns = (eol == EOL_RN ? strstr(s, "\r\n") : strchr(s, '\n')));
+	     s = ns + (eol == EOL_RN ? 2 : 1), line++) {
+		const char *key, *value;
+		int key_len;
+		data_string *ds;
+
+		ns[0] = '\0';
+
+		if (line == 0 &&
+		    0 == strncmp(s, "HTTP/1.", 7)) {
+			/* non-parsed header ... we parse them anyway */
+
+			if ((s[7] == '1' ||
+			     s[7] == '0') &&
+			    s[8] == ' ') {
+				int status;
+				/* after the space should be a status code for us */
+
+				status = strtol(s+9, NULL, 10);
+
+				if (con->http_status >= 100 &&
+				    con->http_status < 1000) {
+					/* we expected 3 digits and didn't got them */
+					con->parsed_response |= HTTP_STATUS;
+					con->http_status = status;
+				}
+			}
+		} else {
+
+			key = s;
+			if (NULL == (value = strchr(s, ':'))) {
+				/* we expect: "<key>: <value>\r\n" */
+				continue;
+			}
+
+			key_len = value - key;
+			value += 1;
+
+			/* skip LWS */
+			while (*value == ' ' || *value == '\t') value++;
+
+			if (NULL == (ds = (data_string *)array_get_unused_element(con->response.headers, TYPE_STRING))) {
+				ds = data_response_init();
+			}
+			buffer_copy_string_len(ds->key, key, key_len);
+			buffer_copy_string(ds->value, value);
+
+			array_insert_unique(con->response.headers, (data_unset *)ds);
+
+			switch(key_len) {
+			case 4:
+				if (0 == strncasecmp(key, "Date", key_len)) {
+					con->parsed_response |= HTTP_DATE;
+				}
+				break;
+			case 6:
+				if (0 == strncasecmp(key, "Status", key_len)) {
+					con->http_status = strtol(value, NULL, 10);
+					con->parsed_response |= HTTP_STATUS;
+				}
+				break;
+			case 8:
+				if (0 == strncasecmp(key, "Location", key_len)) {
+					con->parsed_response |= HTTP_LOCATION;
+				}
+				break;
+			case 10:
+				if (0 == strncasecmp(key, "Connection", key_len)) {
+					con->response.keep_alive = (0 == strcasecmp(value, "Keep-Alive")) ? 1 : 0;
+					con->parsed_response |= HTTP_CONNECTION;
+				}
+				break;
+			case 14:
+				if (0 == strncasecmp(key, "Content-Length", key_len)) {
+					con->response.content_length = strtol(value, NULL, 10);
+					con->parsed_response |= HTTP_CONTENT_LENGTH;
+				}
+				break;
+			default:
+				break;
+			}
+		}
+	}
+
+	/* CGI/1.1 rev 03 - 7.2.1.2 */
+	if ((con->parsed_response & HTTP_LOCATION) &&
+	    !(con->parsed_response & HTTP_STATUS)) {
+		con->http_status = 302;
+	}
+
+	return 0;
+}
+
+
+static int scgi_demux_response(server *srv, handler_ctx *hctx) {
+	plugin_data *p    = hctx->plugin_data;
+	connection  *con  = hctx->remote_conn;
+
+	while(1) {
+		int n;
+
+		buffer_prepare_copy(hctx->response, 1024);
+		if (-1 == (n = read(hctx->fd, hctx->response->ptr, hctx->response->size - 1))) {
+			if (errno == EAGAIN || errno == EINTR) {
+				/* would block, wait for signal */
+				return 0;
+			}
+			/* error */
+			log_error_write(srv, __FILE__, __LINE__, "sdd", strerror(errno), con->fd, hctx->fd);
+			return -1;
+		}
+
+		if (n == 0) {
+			/* read finished */
+
+			con->file_finished = 1;
+
+			/* send final chunk */
+			http_chunk_append_mem(srv, con, NULL, 0);
+			joblist_append(srv, con);
+
+			return 1;
+		}
+
+		hctx->response->ptr[n] = '\0';
+		hctx->response->used = n+1;
+
+		/* split header from body */
+
+		if (con->file_started == 0) {
+			char *c;
+			int in_header = 0;
+			int header_end = 0;
+			int cp, eol = EOL_UNSET;
+			size_t used = 0;
+
+			buffer_append_string_buffer(hctx->response_header, hctx->response);
+
+			/* nph (non-parsed headers) */
+			if (0 == strncmp(hctx->response_header->ptr, "HTTP/1.", 7)) in_header = 1;
+
+			/* search for the \r\n\r\n or \n\n in the string */
+			for (c = hctx->response_header->ptr, cp = 0, used = hctx->response_header->used - 1; used; c++, cp++, used--) {
+				if (*c == ':') in_header = 1;
+				else if (*c == '\n') {
+					if (in_header == 0) {
+						/* got a response without a response header */
+
+						c = NULL;
+						header_end = 1;
+						break;
+					}
+
+					if (eol == EOL_UNSET) eol = EOL_N;
+
+					if (*(c+1) == '\n') {
+						header_end = 1;
+						break;
+					}
+
+				} else if (used > 1 && *c == '\r' && *(c+1) == '\n') {
+					if (in_header == 0) {
+						/* got a response without a response header */
+
+						c = NULL;
+						header_end = 1;
+						break;
+					}
+
+					if (eol == EOL_UNSET) eol = EOL_RN;
+
+					if (used > 3 &&
+					    *(c+2) == '\r' &&
+					    *(c+3) == '\n') {
+						header_end = 1;
+						break;
+					}
+
+					/* skip the \n */
+					c++;
+					cp++;
+					used--;
+				}
+			}
+
+			if (header_end) {
+				if (c == NULL) {
+					/* no header, but a body */
+
+					if (con->request.http_version == HTTP_VERSION_1_1) {
+						con->response.transfer_encoding = HTTP_TRANSFER_ENCODING_CHUNKED;
+					}
+
+					http_chunk_append_mem(srv, con, hctx->response_header->ptr, hctx->response_header->used);
+					joblist_append(srv, con);
+				} else {
+					size_t hlen = c - hctx->response_header->ptr + (eol == EOL_RN ? 4 : 2);
+					size_t blen = hctx->response_header->used - hlen - 1;
+
+					/* a small hack: terminate after at the second \r */
+					hctx->response_header->used = hlen + 1 - (eol == EOL_RN ? 2 : 1);
+					hctx->response_header->ptr[hlen - (eol == EOL_RN ? 2 : 1)] = '\0';
+
+					/* parse the response header */
+					scgi_response_parse(srv, con, p, hctx->response_header, eol);
+
+					/* enable chunked-transfer-encoding */
+					if (con->request.http_version == HTTP_VERSION_1_1 &&
+					    !(con->parsed_response & HTTP_CONTENT_LENGTH)) {
+						con->response.transfer_encoding = HTTP_TRANSFER_ENCODING_CHUNKED;
+					}
+
+					if ((hctx->response->used != hlen) && blen > 0) {
+						http_chunk_append_mem(srv, con, c + (eol == EOL_RN ? 4: 2), blen + 1);
+						joblist_append(srv, con);
+					}
+				}
+
+				con->file_started = 1;
+			}
+		} else {
+			http_chunk_append_mem(srv, con, hctx->response->ptr, hctx->response->used);
+			joblist_append(srv, con);
+		}
+
+#if 0
+		log_error_write(srv, __FILE__, __LINE__, "ddss", con->fd, hctx->fd, connection_get_state(con->state), b->ptr);
+#endif
+	}
+
+	return 0;
+}
+
+
+int scgi_proclist_sort_up(server *srv, scgi_extension_host *host, scgi_proc *proc) {
+	scgi_proc *p;
+
+	UNUSED(srv);
+
+	/* we have been the smallest of the current list
+	 * and we want to insert the node sorted as soon
+	 * possible
+	 *
+	 * 1 0 0 0 1 1 1
+	 * |      ^
+	 * |      |
+	 * +------+
+	 *
+	 */
+
+	/* nothing to sort, only one element */
+	if (host->first == proc && proc->next == NULL) return 0;
+
+	for (p = proc; p->next && p->next->load < proc->load; p = p->next);
+
+	/* no need to move something
+	 *
+	 * 1 2 2 2 3 3 3
+	 * ^
+	 * |
+	 * +
+	 *
+	 */
+	if (p == proc) return 0;
+
+	if (host->first == proc) {
+		/* we have been the first elememt */
+
+		host->first = proc->next;
+		host->first->prev = NULL;
+	}
+
+	/* disconnect proc */
+
+	if (proc->prev) proc->prev->next = proc->next;
+	if (proc->next) proc->next->prev = proc->prev;
+
+	/* proc should be right of p */
+
+	proc->next = p->next;
+	proc->prev = p;
+	if (p->next) p->next->prev = proc;
+	p->next = proc;
+#if 0
+	for(p = host->first; p; p = p->next) {
+		log_error_write(srv, __FILE__, __LINE__, "dd",
+				p->pid, p->load);
+	}
+#else
+	UNUSED(srv);
+#endif
+
+	return 0;
+}
+
+int scgi_proclist_sort_down(server *srv, scgi_extension_host *host, scgi_proc *proc) {
+	scgi_proc *p;
+
+	UNUSED(srv);
+
+	/* we have been the smallest of the current list
+	 * and we want to insert the node sorted as soon
+	 * possible
+	 *
+	 *  0 0 0 0 1 0 1
+	 * ^          |
+	 * |          |
+	 * +----------+
+	 *
+	 *
+	 * the basic is idea is:
+	 * - the last active scgi process should be still
+	 *   in ram and is not swapped out yet
+	 * - processes that are not reused will be killed
+	 *   after some time by the trigger-handler
+	 * - remember it as:
+	 *   everything > 0 is hot
+	 *   all unused procs are colder the more right they are
+	 *   ice-cold processes are propably unused since more
+	 *   than 'unused-timeout', are swaped out and won't be
+	 *   reused in the next seconds anyway.
+	 *
+	 */
+
+	/* nothing to sort, only one element */
+	if (host->first == proc && proc->next == NULL) return 0;
+
+	for (p = host->first; p != proc && p->load < proc->load; p = p->next);
+
+
+	/* no need to move something
+	 *
+	 * 1 2 2 2 3 3 3
+	 * ^
+	 * |
+	 * +
+	 *
+	 */
+	if (p == proc) return 0;
+
+	/* we have to move left. If we are already the first element
+	 * we are done */
+	if (host->first == proc) return 0;
+
+	/* release proc */
+	if (proc->prev) proc->prev->next = proc->next;
+	if (proc->next) proc->next->prev = proc->prev;
+
+	/* proc should be left of p */
+	proc->next = p;
+	proc->prev = p->prev;
+	if (p->prev) p->prev->next = proc;
+	p->prev = proc;
+
+	if (proc->prev == NULL) host->first = proc;
+#if 0
+	for(p = host->first; p; p = p->next) {
+		log_error_write(srv, __FILE__, __LINE__, "dd",
+				p->pid, p->load);
+	}
+#else
+	UNUSED(srv);
+#endif
+
+	return 0;
+}
+
+static int scgi_restart_dead_procs(server *srv, plugin_data *p, scgi_extension_host *host) {
+	scgi_proc *proc;
+
+	for (proc = host->first; proc; proc = proc->next) {
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__,  "sbdbdddd",
+					"proc:",
+					host->host, proc->port,
+					proc->socket,
+					proc->state,
+					proc->is_local,
+					proc->load,
+					proc->pid);
+		}
+
+		if (0 == proc->is_local) {
+			/*
+			 * external servers might get disabled
+			 *
+			 * enable the server again, perhaps it is back again
+			 */
+
+			if ((proc->state == PROC_STATE_DISABLED) &&
+			    (srv->cur_ts - proc->disable_ts > host->disable_time)) {
+				proc->state = PROC_STATE_RUNNING;
+				host->active_procs++;
+
+				log_error_write(srv, __FILE__, __LINE__,  "sbdb",
+						"fcgi-server re-enabled:",
+						host->host, host->port,
+						host->unixsocket);
+			}
+		} else {
+			/* the child should not terminate at all */
+			int status;
+
+			if (proc->state == PROC_STATE_DIED_WAIT_FOR_PID) {
+				switch(waitpid(proc->pid, &status, WNOHANG)) {
+				case 0:
+					/* child is still alive */
+					break;
+				case -1:
+					break;
+				default:
+					if (WIFEXITED(status)) {
+#if 0
+						log_error_write(srv, __FILE__, __LINE__, "sdsd",
+								"child exited, pid:", proc->pid,
+								"status:", WEXITSTATUS(status));
+#endif
+					} else if (WIFSIGNALED(status)) {
+						log_error_write(srv, __FILE__, __LINE__, "sd",
+								"child signaled:",
+								WTERMSIG(status));
+					} else {
+						log_error_write(srv, __FILE__, __LINE__, "sd",
+								"child died somehow:",
+								status);
+					}
+
+					proc->state = PROC_STATE_DIED;
+					break;
+				}
+			}
+
+			/*
+			 * local servers might died, but we restart them
+			 *
+			 */
+			if (proc->state == PROC_STATE_DIED &&
+			    proc->load == 0) {
+				/* restart the child */
+
+				if (p->conf.debug) {
+					log_error_write(srv, __FILE__, __LINE__, "ssdsbsdsd",
+							"--- scgi spawning",
+							"\n\tport:", host->port,
+							"\n\tsocket", host->unixsocket,
+							"\n\tcurrent:", 1, "/", host->min_procs);
+				}
+
+				if (scgi_spawn_connection(srv, p, host, proc)) {
+					log_error_write(srv, __FILE__, __LINE__, "s",
+							"ERROR: spawning fcgi failed.");
+					return HANDLER_ERROR;
+				}
+
+				scgi_proclist_sort_down(srv, host, proc);
+			}
+		}
+	}
+
+	return 0;
+}
+
+
+static handler_t scgi_write_request(server *srv, handler_ctx *hctx) {
+	plugin_data *p    = hctx->plugin_data;
+	scgi_extension_host *host= hctx->host;
+	connection *con   = hctx->remote_conn;
+
+	int ret;
+
+	/* sanity check */
+	if (!host ||
+	    ((!host->host->used || !host->port) && !host->unixsocket->used)) {
+		log_error_write(srv, __FILE__, __LINE__, "sxddd",
+				"write-req: error",
+				host,
+				host->host->used,
+				host->port,
+				host->unixsocket->used);
+		return HANDLER_ERROR;
+	}
+
+
+	switch(hctx->state) {
+	case FCGI_STATE_INIT:
+		ret = host->unixsocket->used ? AF_UNIX : AF_INET;
+
+		if (-1 == (hctx->fd = socket(ret, SOCK_STREAM, 0))) {
+			if (errno == EMFILE ||
+			    errno == EINTR) {
+				log_error_write(srv, __FILE__, __LINE__, "sd",
+						"wait for fd at connection:", con->fd);
+
+				return HANDLER_WAIT_FOR_FD;
+			}
+
+			log_error_write(srv, __FILE__, __LINE__, "ssdd",
+					"socket failed:", strerror(errno), srv->cur_fds, srv->max_fds);
+			return HANDLER_ERROR;
+		}
+		hctx->fde_ndx = -1;
+
+		srv->cur_fds++;
+
+		fdevent_register(srv->ev, hctx->fd, scgi_handle_fdevent, hctx);
+
+		if (-1 == fdevent_fcntl_set(srv->ev, hctx->fd)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"fcntl failed: ", strerror(errno));
+
+			return HANDLER_ERROR;
+		}
+
+		/* fall through */
+	case FCGI_STATE_CONNECT:
+		if (hctx->state == FCGI_STATE_INIT) {
+			for (hctx->proc = hctx->host->first;
+			     hctx->proc && hctx->proc->state != PROC_STATE_RUNNING;
+			     hctx->proc = hctx->proc->next);
+
+			/* all childs are dead */
+			if (hctx->proc == NULL) {
+				hctx->fde_ndx = -1;
+
+				return HANDLER_ERROR;
+			}
+
+			if (hctx->proc->is_local) {
+				hctx->pid = hctx->proc->pid;
+			}
+
+			switch (scgi_establish_connection(srv, hctx)) {
+			case 1:
+				scgi_set_state(srv, hctx, FCGI_STATE_CONNECT);
+
+				/* connection is in progress, wait for an event and call getsockopt() below */
+
+				fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+				return HANDLER_WAIT_FOR_EVENT;
+			case -1:
+				/* if ECONNREFUSED choose another connection -> FIXME */
+				hctx->fde_ndx = -1;
+
+				return HANDLER_ERROR;
+			default:
+				/* everything is ok, go on */
+				break;
+			}
+
+
+		} else {
+			int socket_error;
+			socklen_t socket_error_len = sizeof(socket_error);
+
+			/* try to finish the connect() */
+			if (0 != getsockopt(hctx->fd, SOL_SOCKET, SO_ERROR, &socket_error, &socket_error_len)) {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+						"getsockopt failed:", strerror(errno));
+
+				return HANDLER_ERROR;
+			}
+			if (socket_error != 0) {
+				if (!hctx->proc->is_local || p->conf.debug) {
+					/* local procs get restarted */
+
+					log_error_write(srv, __FILE__, __LINE__, "ss",
+							"establishing connection failed:", strerror(socket_error),
+							"port:", hctx->proc->port);
+				}
+
+				return HANDLER_ERROR;
+			}
+		}
+
+		/* ok, we have the connection */
+
+		hctx->proc->load++;
+		hctx->proc->last_used = srv->cur_ts;
+		hctx->got_proc = 1;
+
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__, "sddbdd",
+					"got proc:",
+					hctx->fd,
+					hctx->proc->pid,
+					hctx->proc->socket,
+					hctx->proc->port,
+					hctx->proc->load);
+		}
+
+		/* move the proc-list entry down the list */
+		scgi_proclist_sort_up(srv, hctx->host, hctx->proc);
+
+		scgi_set_state(srv, hctx, FCGI_STATE_PREPARE_WRITE);
+		/* fall through */
+	case FCGI_STATE_PREPARE_WRITE:
+		scgi_create_env(srv, hctx);
+
+		scgi_set_state(srv, hctx, FCGI_STATE_WRITE);
+
+		/* fall through */
+	case FCGI_STATE_WRITE:
+		ret = srv->network_backend_write(srv, con, hctx->fd, hctx->wb);
+
+		chunkqueue_remove_finished_chunks(hctx->wb);
+
+		if (-1 == ret) {
+			if (errno == ENOTCONN) {
+				/* the connection got dropped after accept()
+				 *
+				 * this is most of the time a PHP which dies
+				 * after PHP_FCGI_MAX_REQUESTS
+				 *
+				 */
+				if (hctx->wb->bytes_out == 0 &&
+				    hctx->reconnects < 5) {
+					usleep(10000); /* take away the load of the webserver
+							* to let the php a chance to restart
+							*/
+
+					scgi_reconnect(srv, hctx);
+
+					return HANDLER_WAIT_FOR_FD;
+				}
+
+				/* not reconnected ... why
+				 *
+				 * far@#lighttpd report this for FreeBSD
+				 *
+				 */
+
+				log_error_write(srv, __FILE__, __LINE__, "ssosd",
+						"[REPORT ME] connection was dropped after accept(). reconnect() denied:",
+						"write-offset:", hctx->wb->bytes_out,
+						"reconnect attempts:", hctx->reconnects);
+
+				return HANDLER_ERROR;
+			}
+
+			if ((errno != EAGAIN) &&
+			    (errno != EINTR)) {
+
+				log_error_write(srv, __FILE__, __LINE__, "ssd",
+						"write failed:", strerror(errno), errno);
+
+				return HANDLER_ERROR;
+			} else {
+				fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+				return HANDLER_WAIT_FOR_EVENT;
+			}
+		}
+
+		if (hctx->wb->bytes_out == hctx->wb->bytes_in) {
+			/* we don't need the out event anymore */
+			fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd);
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_IN);
+			scgi_set_state(srv, hctx, FCGI_STATE_READ);
+		} else {
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+			return HANDLER_WAIT_FOR_EVENT;
+		}
+
+		break;
+	case FCGI_STATE_READ:
+		/* waiting for a response */
+		break;
+	default:
+		log_error_write(srv, __FILE__, __LINE__, "s", "(debug) unknown state");
+		return HANDLER_ERROR;
+	}
+
+	return HANDLER_WAIT_FOR_EVENT;
+}
+
+SUBREQUEST_FUNC(mod_scgi_handle_subrequest) {
+	plugin_data *p = p_d;
+
+	handler_ctx *hctx = con->plugin_ctx[p->id];
+	scgi_proc *proc;
+	scgi_extension_host *host;
+
+	if (NULL == hctx) return HANDLER_GO_ON;
+
+	/* not my job */
+	if (con->mode != p->id) return HANDLER_GO_ON;
+
+	/* ok, create the request */
+	switch(scgi_write_request(srv, hctx)) {
+	case HANDLER_ERROR:
+		proc = hctx->proc;
+		host = hctx->host;
+
+		if (proc &&
+		    0 == proc->is_local &&
+		    proc->state != PROC_STATE_DISABLED) {
+			/* only disable remote servers as we don't manage them*/
+
+			log_error_write(srv, __FILE__, __LINE__,  "sbdb", "fcgi-server disabled:",
+					host->host,
+					proc->port,
+					proc->socket);
+
+			/* disable this server */
+			proc->disable_ts = srv->cur_ts;
+			proc->state = PROC_STATE_DISABLED;
+			host->active_procs--;
+		}
+
+		if (hctx->state == FCGI_STATE_INIT ||
+		    hctx->state == FCGI_STATE_CONNECT) {
+			/* connect() or getsockopt() failed,
+			 * restart the request-handling
+			 */
+			if (proc && proc->is_local) {
+
+				if (p->conf.debug) {
+					log_error_write(srv, __FILE__, __LINE__,  "sbdb", "connect() to scgi failed, restarting the request-handling:",
+							host->host,
+							proc->port,
+							proc->socket);
+				}
+
+				/*
+				 * several hctx might reference the same proc
+				 *
+				 * Only one of them should mark the proc as dead all the other
+				 * ones should just take a new one.
+				 *
+				 * If a new proc was started with the old struct this might lead
+				 * the mark a perfect proc as dead otherwise
+				 *
+				 */
+				if (proc->state == PROC_STATE_RUNNING &&
+				    hctx->pid == proc->pid) {
+					proc->state = PROC_STATE_DIED_WAIT_FOR_PID;
+				}
+			}
+			scgi_restart_dead_procs(srv, p, host);
+
+			scgi_connection_cleanup(srv, hctx);
+
+			buffer_reset(con->physical.path);
+			con->mode = DIRECT;
+			joblist_append(srv, con);
+
+			/* mis-using HANDLER_WAIT_FOR_FD to break out of the loop
+			 * and hope that the childs will be restarted
+			 *
+			 */
+			return HANDLER_WAIT_FOR_FD;
+		} else {
+			scgi_connection_cleanup(srv, hctx);
+
+			buffer_reset(con->physical.path);
+			con->mode = DIRECT;
+			con->http_status = 503;
+
+			return HANDLER_FINISHED;
+		}
+	case HANDLER_WAIT_FOR_EVENT:
+		if (con->file_started == 1) {
+			return HANDLER_FINISHED;
+		} else {
+			return HANDLER_WAIT_FOR_EVENT;
+		}
+	case HANDLER_WAIT_FOR_FD:
+		return HANDLER_WAIT_FOR_FD;
+	default:
+		log_error_write(srv, __FILE__, __LINE__, "s", "subrequest write-req default");
+		return HANDLER_ERROR;
+	}
+}
+
+static handler_t scgi_connection_close(server *srv, handler_ctx *hctx) {
+	plugin_data *p;
+	connection  *con;
+
+	if (NULL == hctx) return HANDLER_GO_ON;
+
+	p    = hctx->plugin_data;
+	con  = hctx->remote_conn;
+
+	if (con->mode != p->id) return HANDLER_GO_ON;
+
+	log_error_write(srv, __FILE__, __LINE__, "ssdsd",
+			"emergency exit: scgi:",
+			"connection-fd:", con->fd,
+			"fcgi-fd:", hctx->fd);
+
+
+
+	scgi_connection_cleanup(srv, hctx);
+
+	return HANDLER_FINISHED;
+}
+
+
+static handler_t scgi_handle_fdevent(void *s, void *ctx, int revents) {
+	server      *srv  = (server *)s;
+	handler_ctx *hctx = ctx;
+	connection  *con  = hctx->remote_conn;
+	plugin_data *p    = hctx->plugin_data;
+
+	scgi_proc *proc   = hctx->proc;
+	scgi_extension_host *host= hctx->host;
+
+	if ((revents & FDEVENT_IN) &&
+	    hctx->state == FCGI_STATE_READ) {
+		switch (scgi_demux_response(srv, hctx)) {
+		case 0:
+			break;
+		case 1:
+			/* we are done */
+			scgi_connection_cleanup(srv, hctx);
+
+			joblist_append(srv, con);
+			return HANDLER_FINISHED;
+		case -1:
+			if (proc->pid && proc->state != PROC_STATE_DIED) {
+				int status;
+
+				/* only fetch the zombie if it is not already done */
+
+				switch(waitpid(proc->pid, &status, WNOHANG)) {
+				case 0:
+					/* child is still alive */
+					break;
+				case -1:
+					break;
+				default:
+					/* the child should not terminate at all */
+					if (WIFEXITED(status)) {
+						log_error_write(srv, __FILE__, __LINE__, "sdsd",
+								"child exited, pid:", proc->pid,
+								"status:", WEXITSTATUS(status));
+					} else if (WIFSIGNALED(status)) {
+						log_error_write(srv, __FILE__, __LINE__, "sd",
+								"child signaled:",
+								WTERMSIG(status));
+					} else {
+						log_error_write(srv, __FILE__, __LINE__, "sd",
+								"child died somehow:",
+								status);
+					}
+
+					if (p->conf.debug) {
+						log_error_write(srv, __FILE__, __LINE__, "ssdsbsdsd",
+								"--- scgi spawning",
+								"\n\tport:", host->port,
+								"\n\tsocket", host->unixsocket,
+								"\n\tcurrent:", 1, "/", host->min_procs);
+					}
+
+					if (scgi_spawn_connection(srv, p, host, proc)) {
+						/* child died */
+						proc->state = PROC_STATE_DIED;
+					} else {
+						scgi_proclist_sort_down(srv, host, proc);
+					}
+
+					break;
+				}
+			}
+
+			if (con->file_started == 0) {
+				/* nothing has been send out yet, try to use another child */
+
+				if (hctx->wb->bytes_out == 0 &&
+				    hctx->reconnects < 5) {
+					scgi_reconnect(srv, hctx);
+
+					log_error_write(srv, __FILE__, __LINE__, "ssdsd",
+						"response not sent, request not sent, reconnection.",
+						"connection-fd:", con->fd,
+						"fcgi-fd:", hctx->fd);
+
+					return HANDLER_WAIT_FOR_FD;
+				}
+
+				log_error_write(srv, __FILE__, __LINE__, "sosdsd",
+						"response not sent, request sent:", hctx->wb->bytes_out,
+						"connection-fd:", con->fd,
+						"fcgi-fd:", hctx->fd);
+
+				scgi_connection_cleanup(srv, hctx);
+
+				connection_set_state(srv, con, CON_STATE_HANDLE_REQUEST);
+				buffer_reset(con->physical.path);
+				con->http_status = 500;
+				con->mode = DIRECT;
+			} else {
+				/* response might have been already started, kill the connection */
+				scgi_connection_cleanup(srv, hctx);
+
+				log_error_write(srv, __FILE__, __LINE__, "ssdsd",
+						"response already sent out, termination connection",
+						"connection-fd:", con->fd,
+						"fcgi-fd:", hctx->fd);
+
+				connection_set_state(srv, con, CON_STATE_ERROR);
+			}
+
+			/* */
+
+
+			joblist_append(srv, con);
+			return HANDLER_FINISHED;
+		}
+	}
+
+	if (revents & FDEVENT_OUT) {
+		if (hctx->state == FCGI_STATE_CONNECT ||
+		    hctx->state == FCGI_STATE_WRITE) {
+			/* we are allowed to send something out
+			 *
+			 * 1. in a unfinished connect() call
+			 * 2. in a unfinished write() call (long POST request)
+			 */
+			return mod_scgi_handle_subrequest(srv, con, p);
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"got a FDEVENT_OUT and didn't know why:",
+					hctx->state);
+		}
+	}
+
+	/* perhaps this issue is already handled */
+	if (revents & FDEVENT_HUP) {
+		if (hctx->state == FCGI_STATE_CONNECT) {
+			/* getoptsock will catch this one (right ?)
+			 *
+			 * if we are in connect we might get a EINPROGRESS
+			 * in the first call and a FDEVENT_HUP in the
+			 * second round
+			 *
+			 * FIXME: as it is a bit ugly.
+			 *
+			 */
+			return mod_scgi_handle_subrequest(srv, con, p);
+		} else if (hctx->state == FCGI_STATE_READ &&
+			   hctx->proc->port == 0) {
+			/* FIXME:
+			 *
+			 * ioctl says 8192 bytes to read from PHP and we receive directly a HUP for the socket
+			 * even if the FCGI_FIN packet is not received yet
+			 */
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sbSBSDSd",
+					"error: unexpected close of scgi connection for",
+					con->uri.path,
+					"(no scgi process on host: ",
+					host->host,
+					", port: ",
+					host->port,
+					" ?)",
+					hctx->state);
+
+			connection_set_state(srv, con, CON_STATE_ERROR);
+			scgi_connection_close(srv, hctx);
+			joblist_append(srv, con);
+		}
+	} else if (revents & FDEVENT_ERR) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"fcgi: got a FDEVENT_ERR. Don't know why.");
+		/* kill all connections to the scgi process */
+
+
+		connection_set_state(srv, con, CON_STATE_ERROR);
+		scgi_connection_close(srv, hctx);
+		joblist_append(srv, con);
+	}
+
+	return HANDLER_FINISHED;
+}
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int scgi_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(exts);
+	PATCH(debug);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("scgi.server"))) {
+				PATCH(exts);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("scgi.debug"))) {
+				PATCH(debug);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+
+static handler_t scgi_check_extension(server *srv, connection *con, void *p_d, int uri_path_handler) {
+	plugin_data *p = p_d;
+	size_t s_len;
+	int used = -1;
+	int ndx;
+	size_t k;
+	buffer *fn;
+	scgi_extension *extension = NULL;
+
+	/* Possibly, we processed already this request */
+	if (con->file_started == 1) return HANDLER_GO_ON;
+
+	fn = uri_path_handler ? con->uri.path : con->physical.path;
+
+	if (buffer_is_empty(fn)) return HANDLER_GO_ON;
+
+	s_len = fn->used - 1;
+
+	scgi_patch_connection(srv, con, p);
+
+	/* check if extension matches */
+	for (k = 0; k < p->conf.exts->used; k++) {
+		size_t ct_len;
+
+		extension = p->conf.exts->exts[k];
+
+		if (extension->key->used == 0) continue;
+
+		ct_len = extension->key->used - 1;
+
+		if (s_len < ct_len) continue;
+
+		/* check extension in the form "/scgi_pattern" */
+		if (*(extension->key->ptr) == '/') {
+			if (strncmp(fn->ptr, extension->key->ptr, ct_len) == 0)
+				break;
+		} else if (0 == strncmp(fn->ptr + s_len - ct_len, extension->key->ptr, ct_len)) {
+			/* check extension in the form ".fcg" */
+			break;
+		}
+	}
+
+	/* extension doesn't match */
+	if (k == p->conf.exts->used) {
+		return HANDLER_GO_ON;
+	}
+
+	/* get best server */
+	for (k = 0, ndx = -1; k < extension->used; k++) {
+		scgi_extension_host *host = extension->hosts[k];
+
+		/* we should have at least one proc that can do somthing */
+		if (host->active_procs == 0) continue;
+
+		if (used == -1 || host->load < used) {
+			used = host->load;
+
+			ndx = k;
+		}
+	}
+
+	/* found a server */
+	if (ndx != -1) {
+		scgi_extension_host *host = extension->hosts[ndx];
+
+		/*
+		 * if check-local is disabled, use the uri.path handler
+		 *
+		 */
+
+		/* init handler-context */
+		if (uri_path_handler) {
+			if (host->check_local == 0) {
+				handler_ctx *hctx;
+				char *pathinfo;
+
+				hctx = handler_ctx_init();
+
+				hctx->remote_conn      = con;
+				hctx->plugin_data      = p;
+				hctx->host             = host;
+				hctx->proc	       = NULL;
+
+				hctx->conf.exts        = p->conf.exts;
+				hctx->conf.debug       = p->conf.debug;
+
+				con->plugin_ctx[p->id] = hctx;
+
+				host->load++;
+
+				con->mode = p->id;
+
+				if (con->conf.log_request_handling) {
+					log_error_write(srv, __FILE__, __LINE__, "s", "handling it in mod_scgi");
+				}
+
+				/* the prefix is the SCRIPT_NAME,
+				 * everthing from start to the next slash
+				 * this is important for check-local = "disable"
+				 *
+				 * if prefix = /admin.fcgi
+				 *
+				 * /admin.fcgi/foo/bar
+				 *
+				 * SCRIPT_NAME = /admin.fcgi
+				 * PATH_INFO   = /foo/bar
+				 *
+				 * if prefix = /fcgi-bin/
+				 *
+				 * /fcgi-bin/foo/bar
+				 *
+				 * SCRIPT_NAME = /fcgi-bin/foo
+				 * PATH_INFO   = /bar
+				 *
+				 */
+
+				/* the rewrite is only done for /prefix/? matches */
+				if (extension->key->ptr[0] == '/' &&
+				    con->uri.path->used > extension->key->used &&
+				    NULL != (pathinfo = strchr(con->uri.path->ptr + extension->key->used - 1, '/'))) {
+					/* rewrite uri.path and pathinfo */
+
+					buffer_copy_string(con->request.pathinfo, pathinfo);
+
+					con->uri.path->used -= con->request.pathinfo->used - 1;
+					con->uri.path->ptr[con->uri.path->used - 1] = '\0';
+				}
+			}
+			return HANDLER_GO_ON;
+		} else {
+			handler_ctx *hctx;
+			hctx = handler_ctx_init();
+
+			hctx->remote_conn      = con;
+			hctx->plugin_data      = p;
+			hctx->host             = host;
+			hctx->proc             = NULL;
+
+			hctx->conf.exts        = p->conf.exts;
+			hctx->conf.debug       = p->conf.debug;
+
+			con->plugin_ctx[p->id] = hctx;
+
+			host->load++;
+
+			con->mode = p->id;
+
+			if (con->conf.log_request_handling) {
+				log_error_write(srv, __FILE__, __LINE__, "s", "handling it in mod_fastcgi");
+			}
+
+			return HANDLER_GO_ON;
+		}
+	} else {
+		/* no handler found */
+		buffer_reset(con->physical.path);
+		con->http_status = 500;
+
+		log_error_write(srv, __FILE__, __LINE__,  "sb",
+				"no fcgi-handler found for:",
+				fn);
+
+		return HANDLER_FINISHED;
+	}
+	return HANDLER_GO_ON;
+}
+
+/* uri-path handler */
+static handler_t scgi_check_extension_1(server *srv, connection *con, void *p_d) {
+	return scgi_check_extension(srv, con, p_d, 1);
+}
+
+/* start request handler */
+static handler_t scgi_check_extension_2(server *srv, connection *con, void *p_d) {
+	return scgi_check_extension(srv, con, p_d, 0);
+}
+
+JOBLIST_FUNC(mod_scgi_handle_joblist) {
+	plugin_data *p = p_d;
+	handler_ctx *hctx = con->plugin_ctx[p->id];
+
+	if (hctx == NULL) return HANDLER_GO_ON;
+
+	if (hctx->fd != -1) {
+		switch (hctx->state) {
+		case FCGI_STATE_READ:
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_IN);
+
+			break;
+		case FCGI_STATE_CONNECT:
+		case FCGI_STATE_WRITE:
+			fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_OUT);
+
+			break;
+		case FCGI_STATE_INIT:
+			/* at reconnect */
+			break;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "sd", "unhandled fcgi.state", hctx->state);
+			break;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+
+static handler_t scgi_connection_close_callback(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+
+	return scgi_connection_close(srv, con->plugin_ctx[p->id]);
+}
+
+TRIGGER_FUNC(mod_scgi_handle_trigger) {
+	plugin_data *p = p_d;
+	size_t i, j, n;
+
+
+	/* perhaps we should kill a connect attempt after 10-15 seconds
+	 *
+	 * currently we wait for the TCP timeout which is on Linux 180 seconds
+	 *
+	 *
+	 *
+	 */
+
+	/* check all childs if they are still up */
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *conf;
+		scgi_exts *exts;
+
+		conf = p->config_storage[i];
+
+		exts = conf->exts;
+
+		for (j = 0; j < exts->used; j++) {
+			scgi_extension *ex;
+
+			ex = exts->exts[j];
+
+			for (n = 0; n < ex->used; n++) {
+
+				scgi_proc *proc;
+				unsigned long sum_load = 0;
+				scgi_extension_host *host;
+
+				host = ex->hosts[n];
+
+				scgi_restart_dead_procs(srv, p, host);
+
+				for (proc = host->first; proc; proc = proc->next) {
+					sum_load += proc->load;
+				}
+
+				if (host->num_procs &&
+				    host->num_procs < host->max_procs &&
+				    (sum_load / host->num_procs) > host->max_load_per_proc) {
+					/* overload, spawn new child */
+					scgi_proc *fp = NULL;
+
+					if (p->conf.debug) {
+						log_error_write(srv, __FILE__, __LINE__, "s",
+								"overload detected, spawning a new child");
+					}
+
+					for (fp = host->unused_procs; fp && fp->pid != 0; fp = fp->next);
+
+					if (fp) {
+						if (fp == host->unused_procs) host->unused_procs = fp->next;
+
+						if (fp->next) fp->next->prev = NULL;
+
+						host->max_id++;
+					} else {
+						fp = scgi_process_init();
+						fp->id = host->max_id++;
+					}
+
+					host->num_procs++;
+
+					if (buffer_is_empty(host->unixsocket)) {
+						fp->port = host->port + fp->id;
+					} else {
+						buffer_copy_string_buffer(fp->socket, host->unixsocket);
+						buffer_append_string(fp->socket, "-");
+						buffer_append_long(fp->socket, fp->id);
+					}
+
+					if (scgi_spawn_connection(srv, p, host, fp)) {
+						log_error_write(srv, __FILE__, __LINE__, "s",
+								"ERROR: spawning fcgi failed.");
+						return HANDLER_ERROR;
+					}
+
+					fp->prev = NULL;
+					fp->next = host->first;
+					if (host->first) {
+						host->first->prev = fp;
+					}
+					host->first = fp;
+				}
+
+				for (proc = host->first; proc; proc = proc->next) {
+					if (proc->load != 0) break;
+					if (host->num_procs <= host->min_procs) break;
+					if (proc->pid == 0) continue;
+
+					if (srv->cur_ts - proc->last_used > host->idle_timeout) {
+						/* a proc is idling for a long time now,
+						 * terminated it */
+
+						if (p->conf.debug) {
+							log_error_write(srv, __FILE__, __LINE__, "ssbsd",
+									"idle-timeout reached, terminating child:",
+									"socket:", proc->socket,
+									"pid", proc->pid);
+						}
+
+
+						if (proc->next) proc->next->prev = proc->prev;
+						if (proc->prev) proc->prev->next = proc->next;
+
+						if (proc->prev == NULL) host->first = proc->next;
+
+						proc->prev = NULL;
+						proc->next = host->unused_procs;
+
+						if (host->unused_procs) host->unused_procs->prev = proc;
+						host->unused_procs = proc;
+
+						kill(proc->pid, SIGTERM);
+
+						proc->state = PROC_STATE_KILLED;
+
+						log_error_write(srv, __FILE__, __LINE__, "ssbsd",
+									"killed:",
+									"socket:", proc->socket,
+									"pid", proc->pid);
+
+						host->num_procs--;
+
+						/* proc is now in unused, let the next second handle the next process */
+						break;
+					}
+				}
+
+				for (proc = host->unused_procs; proc; proc = proc->next) {
+					int status;
+
+					if (proc->pid == 0) continue;
+
+					switch (waitpid(proc->pid, &status, WNOHANG)) {
+					case 0:
+						/* child still running after timeout, good */
+						break;
+					case -1:
+						if (errno != EINTR) {
+							/* no PID found ? should never happen */
+							log_error_write(srv, __FILE__, __LINE__, "sddss",
+									"pid ", proc->pid, proc->state,
+									"not found:", strerror(errno));
+
+#if 0
+							if (errno == ECHILD) {
+								/* someone else has cleaned up for us */
+								proc->pid = 0;
+								proc->state = PROC_STATE_UNSET;
+							}
+#endif
+						}
+						break;
+					default:
+						/* the child should not terminate at all */
+						if (WIFEXITED(status)) {
+							if (proc->state != PROC_STATE_KILLED) {
+								log_error_write(srv, __FILE__, __LINE__, "sdb",
+										"child exited:",
+										WEXITSTATUS(status), proc->socket);
+							}
+						} else if (WIFSIGNALED(status)) {
+							if (WTERMSIG(status) != SIGTERM) {
+								log_error_write(srv, __FILE__, __LINE__, "sd",
+										"child signaled:",
+										WTERMSIG(status));
+							}
+						} else {
+							log_error_write(srv, __FILE__, __LINE__, "sd",
+									"child died somehow:",
+									status);
+						}
+						proc->pid = 0;
+						proc->state = PROC_STATE_UNSET;
+						host->max_id--;
+					}
+				}
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+
+int mod_scgi_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name         = buffer_init_string("scgi");
+
+	p->init         = mod_scgi_init;
+	p->cleanup      = mod_scgi_free;
+	p->set_defaults = mod_scgi_set_defaults;
+	p->connection_reset        = scgi_connection_reset;
+	p->handle_connection_close = scgi_connection_close_callback;
+	p->handle_uri_clean        = scgi_check_extension_1;
+	p->handle_subrequest_start = scgi_check_extension_2;
+	p->handle_subrequest       = mod_scgi_handle_subrequest;
+	p->handle_joblist          = mod_scgi_handle_joblist;
+	p->handle_trigger          = mod_scgi_handle_trigger;
+
+	p->data         = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_secure_download.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_secure_download.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_secure_download.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,306 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef USE_OPENSSL
+# include <openssl/md5.h>
+#else
+# include "md5.h"
+#endif
+
+#define HASHLEN 16
+typedef unsigned char HASH[HASHLEN];
+#define HASHHEXLEN 32
+typedef char HASHHEX[HASHHEXLEN+1];
+#ifdef USE_OPENSSL
+#define IN const
+#else
+#define IN
+#endif
+#define OUT
+
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	buffer *doc_root;
+	buffer *secret;
+	buffer *uri_prefix;
+
+	unsigned short timeout;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *md5;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_secdownload_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->md5 = buffer_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_secdownload_free) {
+	plugin_data *p = p_d;
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			buffer_free(s->secret);
+			buffer_free(s->doc_root);
+			buffer_free(s->uri_prefix);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	buffer_free(p->md5);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_secdownload_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "secdownload.secret",            NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "secdownload.document-root",     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+		{ "secdownload.uri-prefix",        NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 2 */
+		{ "secdownload.timeout",           NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 3 */
+		{ NULL,                            NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->secret        = buffer_init();
+		s->doc_root      = buffer_init();
+		s->uri_prefix    = buffer_init();
+		s->timeout       = 60;
+
+		cv[0].destination = s->secret;
+		cv[1].destination = s->doc_root;
+		cv[2].destination = s->uri_prefix;
+		cv[3].destination = &(s->timeout);
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+/**
+ * checks if the supplied string is a MD5 string
+ *
+ * @param str a possible MD5 string
+ * @return if the supplied string is a valid MD5 string 1 is returned otherwise 0
+ */
+
+int is_hex_len(const char *str, size_t len) {
+	size_t i;
+
+	if (NULL == str) return 0;
+
+	for (i = 0; i < len && *str; i++, str++) {
+		/* illegal characters */
+		if (!((*str >= '0' && *str <= '9') ||
+		      (*str >= 'a' && *str <= 'f') ||
+		      (*str >= 'A' && *str <= 'F'))
+		    ) {
+			return 0;
+		}
+	}
+
+	return i == len;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_secdownload_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(secret);
+	PATCH(doc_root);
+	PATCH(uri_prefix);
+	PATCH(timeout);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("secdownload.secret"))) {
+				PATCH(secret);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("secdownload.document-root"))) {
+				PATCH(doc_root);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("secdownload.uri-prefix"))) {
+				PATCH(uri_prefix);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("secdownload.timeout"))) {
+				PATCH(timeout);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+
+URIHANDLER_FUNC(mod_secdownload_uri_handler) {
+	plugin_data *p = p_d;
+	MD5_CTX Md5Ctx;
+	HASH HA1;
+	const char *rel_uri, *ts_str, *md5_str;
+	time_t ts = 0;
+	size_t i;
+
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+
+	mod_secdownload_patch_connection(srv, con, p);
+
+	if (buffer_is_empty(p->conf.uri_prefix)) return HANDLER_GO_ON;
+
+	if (buffer_is_empty(p->conf.secret)) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"secdownload.secret has to be set");
+		return HANDLER_ERROR;
+	}
+
+	if (buffer_is_empty(p->conf.doc_root)) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"secdownload.document-root has to be set");
+		return HANDLER_ERROR;
+	}
+
+	/*
+	 *  /<uri-prefix>[a-f0-9]{32}/[a-f0-9]{8}/<rel-path>
+	 */
+
+	if (0 != strncmp(con->uri.path->ptr, p->conf.uri_prefix->ptr, p->conf.uri_prefix->used - 1)) return HANDLER_GO_ON;
+
+	md5_str = con->uri.path->ptr + p->conf.uri_prefix->used - 1;
+
+	if (!is_hex_len(md5_str, 32)) return HANDLER_GO_ON;
+	if (*(md5_str + 32) != '/') return HANDLER_GO_ON;
+
+	ts_str = md5_str + 32 + 1;
+
+	if (!is_hex_len(ts_str, 8)) return HANDLER_GO_ON;
+	if (*(ts_str + 8) != '/') return HANDLER_GO_ON;
+
+	for (i = 0; i < 8; i++) {
+		ts = (ts << 4) + hex2int(*(ts_str + i));
+	}
+
+	/* timed-out */
+	if (srv->cur_ts - ts > p->conf.timeout ||
+	    srv->cur_ts - ts < -p->conf.timeout) {
+		/* "Gone" as the url will never be valid again instead of "408 - Timeout" where the request may be repeated */
+		con->http_status = 410;
+
+		return HANDLER_FINISHED;
+	}
+
+	rel_uri = ts_str + 8;
+
+	/* checking MD5
+	 *
+	 * <secret><rel-path><timestamp-hex>
+	 */
+
+	buffer_copy_string_buffer(p->md5, p->conf.secret);
+	buffer_append_string(p->md5, rel_uri);
+	buffer_append_string_len(p->md5, ts_str, 8);
+
+	MD5_Init(&Md5Ctx);
+	MD5_Update(&Md5Ctx, (unsigned char *)p->md5->ptr, p->md5->used - 1);
+	MD5_Final(HA1, &Md5Ctx);
+
+	buffer_copy_string_hex(p->md5, (char *)HA1, 16);
+
+	if (0 != strncmp(md5_str, p->md5->ptr, 32)) {
+		con->http_status = 403;
+
+		log_error_write(srv, __FILE__, __LINE__, "sss",
+				"md5 invalid:",
+				md5_str, p->md5->ptr);
+
+		return HANDLER_FINISHED;
+	}
+
+	/* starting with the last / we should have relative-path to the docroot
+	 */
+
+	buffer_copy_string_buffer(con->physical.doc_root, p->conf.doc_root);
+	buffer_copy_string(con->physical.rel_path, rel_uri);
+	buffer_copy_string_buffer(con->physical.path, con->physical.doc_root);
+	buffer_append_string_buffer(con->physical.path, con->physical.rel_path);
+
+	return HANDLER_GO_ON;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_secdownload_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("secdownload");
+
+	p->init        = mod_secdownload_init;
+	p->handle_physical  = mod_secdownload_uri_handler;
+	p->set_defaults  = mod_secdownload_set_defaults;
+	p->cleanup     = mod_secdownload_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_setenv.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_setenv.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_setenv.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,247 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#include "response.h"
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	int handled; /* make sure that we only apply the headers once */
+} handler_ctx;
+
+typedef struct {
+	array *request_header;
+	array *response_header;
+
+	array *environment;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+static handler_ctx * handler_ctx_init() {
+	handler_ctx * hctx;
+
+	hctx = calloc(1, sizeof(*hctx));
+
+	hctx->handled = 0;
+
+	return hctx;
+}
+
+static void handler_ctx_free(handler_ctx *hctx) {
+	free(hctx);
+}
+
+
+/* init the plugin data */
+INIT_FUNC(mod_setenv_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_setenv_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			array_free(s->request_header);
+			array_free(s->response_header);
+			array_free(s->environment);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_setenv_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "setenv.add-request-header",  NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "setenv.add-response-header", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+		{ "setenv.add-environment",     NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 2 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->request_header   = array_init();
+		s->response_header  = array_init();
+		s->environment      = array_init();
+
+		cv[0].destination = s->request_header;
+		cv[1].destination = s->response_header;
+		cv[2].destination = s->environment;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_setenv_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(request_header);
+	PATCH(response_header);
+	PATCH(environment);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("setenv.add-request-header"))) {
+				PATCH(request_header);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("setenv.add-response-header"))) {
+				PATCH(response_header);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("setenv.add-environment"))) {
+				PATCH(environment);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+URIHANDLER_FUNC(mod_setenv_uri_handler) {
+	plugin_data *p = p_d;
+	size_t k;
+	handler_ctx *hctx;
+
+	if (con->plugin_ctx[p->id]) {
+		hctx = con->plugin_ctx[p->id];
+	} else {
+		hctx = handler_ctx_init();
+
+		con->plugin_ctx[p->id] = hctx;
+	}
+
+	if (hctx->handled) {
+		return HANDLER_GO_ON;
+	}
+
+	hctx->handled = 1;
+
+	mod_setenv_patch_connection(srv, con, p);
+
+	for (k = 0; k < p->conf.request_header->used; k++) {
+		data_string *ds = (data_string *)p->conf.request_header->data[k];
+		data_string *ds_dst;
+
+		if (NULL == (ds_dst = (data_string *)array_get_unused_element(con->request.headers, TYPE_STRING))) {
+			ds_dst = data_string_init();
+		}
+
+		buffer_copy_string_buffer(ds_dst->key, ds->key);
+		buffer_copy_string_buffer(ds_dst->value, ds->value);
+
+		array_insert_unique(con->request.headers, (data_unset *)ds_dst);
+	}
+
+	for (k = 0; k < p->conf.environment->used; k++) {
+		data_string *ds = (data_string *)p->conf.environment->data[k];
+		data_string *ds_dst;
+
+		if (NULL == (ds_dst = (data_string *)array_get_unused_element(con->environment, TYPE_STRING))) {
+			ds_dst = data_string_init();
+		}
+
+		buffer_copy_string_buffer(ds_dst->key, ds->key);
+		buffer_copy_string_buffer(ds_dst->value, ds->value);
+
+		array_insert_unique(con->environment, (data_unset *)ds_dst);
+	}
+
+	for (k = 0; k < p->conf.response_header->used; k++) {
+		data_string *ds = (data_string *)p->conf.response_header->data[k];
+
+		response_header_insert(srv, con, CONST_BUF_LEN(ds->key), CONST_BUF_LEN(ds->value));
+	}
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+
+REQUESTDONE_FUNC(mod_setenv_reset) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (con->plugin_ctx[p->id]) {
+		handler_ctx_free(con->plugin_ctx[p->id]);
+		con->plugin_ctx[p->id] = NULL;
+	}
+
+	return HANDLER_GO_ON;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_setenv_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("setenv");
+
+	p->init        = mod_setenv_init;
+	p->handle_uri_clean  = mod_setenv_uri_handler;
+	p->set_defaults  = mod_setenv_set_defaults;
+	p->cleanup     = mod_setenv_free;
+
+	p->handle_request_done  = mod_setenv_reset;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_simple_vhost.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_simple_vhost.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_simple_vhost.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,281 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+#include "stat_cache.h"
+
+#include "plugin.h"
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+typedef struct {
+	buffer *server_root;
+	buffer *default_host;
+	buffer *document_root;
+
+	buffer *docroot_cache_key;
+	buffer *docroot_cache_value;
+	buffer *docroot_cache_servername;
+
+	unsigned short debug;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *doc_root;
+
+	plugin_config **config_storage;
+	plugin_config conf;
+} plugin_data;
+
+INIT_FUNC(mod_simple_vhost_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->doc_root = buffer_init();
+
+	return p;
+}
+
+FREE_FUNC(mod_simple_vhost_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			buffer_free(s->document_root);
+			buffer_free(s->default_host);
+			buffer_free(s->server_root);
+
+			buffer_free(s->docroot_cache_key);
+			buffer_free(s->docroot_cache_value);
+			buffer_free(s->docroot_cache_servername);
+
+			free(s);
+		}
+
+		free(p->config_storage);
+	}
+
+	buffer_free(p->doc_root);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+SETDEFAULTS_FUNC(mod_simple_vhost_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	config_values_t cv[] = {
+		{ "simple-vhost.server-root",       NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "simple-vhost.default-host",      NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "simple-vhost.document-root",     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "simple-vhost.debug",             NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },
+		{ NULL,                             NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+
+		s->server_root = buffer_init();
+		s->default_host = buffer_init();
+		s->document_root = buffer_init();
+
+		s->docroot_cache_key = buffer_init();
+		s->docroot_cache_value = buffer_init();
+		s->docroot_cache_servername = buffer_init();
+
+		s->debug = 0;
+
+		cv[0].destination = s->server_root;
+		cv[1].destination = s->default_host;
+		cv[2].destination = s->document_root;
+		cv[3].destination = &(s->debug);
+
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+static int build_doc_root(server *srv, connection *con, plugin_data *p, buffer *out, buffer *host) {
+	stat_cache_entry *sce = NULL;
+
+	buffer_prepare_copy(out, 128);
+
+	if (p->conf.server_root->used) {
+		buffer_copy_string_buffer(out, p->conf.server_root);
+
+		if (host->used) {
+			/* a hostname has to start with a alpha-numerical character
+			 * and must not contain a slash "/"
+			 */
+			char *dp;
+
+			BUFFER_APPEND_SLASH(out);
+
+			if (NULL == (dp = strchr(host->ptr, ':'))) {
+				buffer_append_string_buffer(out, host);
+			} else {
+				buffer_append_string_len(out, host->ptr, dp - host->ptr);
+			}
+		}
+		BUFFER_APPEND_SLASH(out);
+
+		if (p->conf.document_root->used > 2 && p->conf.document_root->ptr[0] == '/') {
+			buffer_append_string_len(out, p->conf.document_root->ptr + 1, p->conf.document_root->used - 2);
+		} else {
+			buffer_append_string_buffer(out, p->conf.document_root);
+			BUFFER_APPEND_SLASH(out);
+		}
+	} else {
+		buffer_copy_string_buffer(out, con->conf.document_root);
+		BUFFER_APPEND_SLASH(out);
+	}
+
+	if (HANDLER_ERROR == stat_cache_get_entry(srv, con, out, &sce)) {
+		if (p->conf.debug) {
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					strerror(errno), out);
+		}
+		return -1;
+	} else if (!S_ISDIR(sce->st.st_mode)) {
+		return -1;
+	}
+
+	return 0;
+}
+
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_simple_vhost_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(server_root);
+	PATCH(default_host);
+	PATCH(document_root);
+
+	PATCH(docroot_cache_key);
+	PATCH(docroot_cache_value);
+	PATCH(docroot_cache_servername);
+
+	PATCH(debug);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("simple-vhost.server-root"))) {
+				PATCH(server_root);
+				PATCH(docroot_cache_key);
+				PATCH(docroot_cache_value);
+				PATCH(docroot_cache_servername);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("simple-vhost.default-host"))) {
+				PATCH(default_host);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("simple-vhost.document-root"))) {
+				PATCH(document_root);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("simple-vhost.debug"))) {
+				PATCH(debug);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+static handler_t mod_simple_vhost_docroot(server *srv, connection *con, void *p_data) {
+	plugin_data *p = p_data;
+
+	/*
+	 * cache the last successfull translation from hostname (authority) to docroot
+	 * - this saves us a stat() call
+	 *
+	 */
+
+	mod_simple_vhost_patch_connection(srv, con, p);
+
+	if (p->conf.docroot_cache_key->used &&
+	    con->uri.authority->used &&
+	    buffer_is_equal(p->conf.docroot_cache_key, con->uri.authority)) {
+		/* cache hit */
+		buffer_copy_string_buffer(con->physical.doc_root, p->conf.docroot_cache_value);
+		buffer_copy_string_buffer(con->server_name,       p->conf.docroot_cache_servername);
+	} else {
+		/* build document-root */
+		if ((con->uri.authority->used == 0) ||
+		    build_doc_root(srv, con, p, p->doc_root, con->uri.authority)) {
+			/* not found, fallback the default-host */
+			if (build_doc_root(srv, con, p,
+					   p->doc_root,
+					   p->conf.default_host)) {
+				return HANDLER_GO_ON;
+			} else {
+				buffer_copy_string_buffer(con->server_name, p->conf.default_host);
+			}
+		} else {
+			buffer_copy_string_buffer(con->server_name, con->uri.authority);
+		}
+
+		/* copy to cache */
+		buffer_copy_string_buffer(p->conf.docroot_cache_key,        con->uri.authority);
+		buffer_copy_string_buffer(p->conf.docroot_cache_value,      p->doc_root);
+		buffer_copy_string_buffer(p->conf.docroot_cache_servername, con->server_name);
+
+		buffer_copy_string_buffer(con->physical.doc_root, p->doc_root);
+	}
+
+	return HANDLER_GO_ON;
+}
+
+
+int mod_simple_vhost_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("simple_vhost");
+
+	p->init        = mod_simple_vhost_init;
+	p->set_defaults = mod_simple_vhost_set_defaults;
+	p->handle_docroot  = mod_simple_vhost_docroot;
+	p->cleanup     = mod_simple_vhost_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_skeleton.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_skeleton.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_skeleton.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,210 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/**
+ * this is a skeleton for a lighttpd plugin
+ *
+ * just replaces every occurance of 'skeleton' by your plugin name
+ *
+ * e.g. in vim:
+ *
+ *   :%s/skeleton/myhandler/
+ *
+ */
+
+
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	array *match;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *match_buf;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+typedef struct {
+	size_t foo;
+} handler_ctx;
+
+static handler_ctx * handler_ctx_init() {
+	handler_ctx * hctx;
+
+	hctx = calloc(1, sizeof(*hctx));
+
+	return hctx;
+}
+
+static void handler_ctx_free(handler_ctx *hctx) {
+
+	free(hctx);
+}
+
+/* init the plugin data */
+INIT_FUNC(mod_skeleton_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->match_buf = buffer_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_skeleton_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			array_free(s->match);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	buffer_free(p->match_buf);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_skeleton_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "skeleton.array",             NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->match    = array_init();
+
+		cv[0].destination = s->match;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_skeleton_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(match);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("skeleton.array"))) {
+				PATCH(match);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+URIHANDLER_FUNC(mod_skeleton_uri_handler) {
+	plugin_data *p = p_d;
+	int s_len;
+	size_t k, i;
+
+	UNUSED(srv);
+
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+
+	mod_skeleton_patch_connection(srv, con, p);
+
+	s_len = con->uri.path->used - 1;
+
+	for (k = 0; k < p->conf.match->used; k++) {
+		data_string *ds = (data_string *)p->conf.match->data[k];
+		int ct_len = ds->value->used - 1;
+
+		if (ct_len > s_len) continue;
+		if (ds->value->used == 0) continue;
+
+		if (0 == strncmp(con->uri.path->ptr + s_len - ct_len, ds->value->ptr, ct_len)) {
+			con->http_status = 403;
+
+			return HANDLER_FINISHED;
+		}
+	}
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_skeleton_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("skeleton");
+
+	p->init        = mod_skeleton_init;
+	p->handle_uri_clean  = mod_skeleton_uri_handler;
+	p->set_defaults  = mod_skeleton_set_defaults;
+	p->cleanup     = mod_skeleton_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1136 @@
+#include <sys/types.h>
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+#include <unistd.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+#include "stat_cache.h"
+
+#include "plugin.h"
+#include "stream.h"
+
+#include "response.h"
+
+#include "mod_ssi.h"
+
+#include "inet_ntop_cache.h"
+
+#include "sys-socket.h"
+
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+
+#ifdef HAVE_FORK
+#include <sys/wait.h>
+#endif
+
+#ifdef HAVE_SYS_FILIO_H
+#include <sys/filio.h>
+#endif
+
+#include "etag.h"
+
+/* The newest modified time of included files for include statement */
+static volatile time_t include_file_last_mtime = 0;
+
+/* init the plugin data */
+INIT_FUNC(mod_ssi_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->timefmt = buffer_init();
+	p->stat_fn = buffer_init();
+
+	p->ssi_vars = array_init();
+	p->ssi_cgi_env = array_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_ssi_free) {
+	plugin_data *p = p_d;
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			array_free(s->ssi_extension);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	array_free(p->ssi_vars);
+	array_free(p->ssi_cgi_env);
+#ifdef HAVE_PCRE_H
+	pcre_free(p->ssi_regex);
+#endif
+	buffer_free(p->timefmt);
+	buffer_free(p->stat_fn);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_ssi_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+#ifdef HAVE_PCRE_H
+	const char *errptr;
+	int erroff;
+#endif
+
+	config_values_t cv[] = {
+		{ "ssi.extension",              NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->ssi_extension  = array_init();
+
+		cv[0].destination = s->ssi_extension;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+#ifdef HAVE_PCRE_H
+	/* allow 2 params */
+	if (NULL == (p->ssi_regex = pcre_compile("<!--#([a-z]+)\\s+(?:([a-z]+)=\"(.*?)(?<!\\\\)\"\\s*)?(?:([a-z]+)=\"(.*?)(?<!\\\\)\"\\s*)?-->", 0, &errptr, &erroff, NULL))) {
+		log_error_write(srv, __FILE__, __LINE__, "sds",
+				"ssi: pcre ",
+				erroff, errptr);
+		return HANDLER_ERROR;
+	}
+#else
+	log_error_write(srv, __FILE__, __LINE__, "s",
+			"mod_ssi: pcre support is missing, please recompile with pcre support or remove mod_ssi from the list of modules");
+	return HANDLER_ERROR;
+#endif
+
+	return HANDLER_GO_ON;
+}
+
+int ssi_env_add(array *env, const char *key, const char *val) {
+	data_string *ds;
+
+	if (NULL == (ds = (data_string *)array_get_unused_element(env, TYPE_STRING))) {
+		ds = data_string_init();
+	}
+	buffer_copy_string(ds->key,   key);
+	buffer_copy_string(ds->value, val);
+
+	array_insert_unique(env, (data_unset *)ds);
+
+	return 0;
+}
+
+/**
+ *
+ *  the next two functions are take from fcgi.c
+ *
+ */
+
+static int ssi_env_add_request_headers(server *srv, connection *con, plugin_data *p) {
+	size_t i;
+
+	for (i = 0; i < con->request.headers->used; i++) {
+		data_string *ds;
+
+		ds = (data_string *)con->request.headers->data[i];
+
+		if (ds->value->used && ds->key->used) {
+			size_t j;
+			buffer_reset(srv->tmp_buf);
+
+			/* don't forward the Authorization: Header */
+			if (0 == strcasecmp(ds->key->ptr, "AUTHORIZATION")) {
+				continue;
+			}
+
+			if (0 != strcasecmp(ds->key->ptr, "CONTENT-TYPE")) {
+				buffer_copy_string(srv->tmp_buf, "HTTP_");
+				srv->tmp_buf->used--;
+			}
+
+			buffer_prepare_append(srv->tmp_buf, ds->key->used + 2);
+			for (j = 0; j < ds->key->used - 1; j++) {
+				char c = '_';
+				if (light_isalpha(ds->key->ptr[j])) {
+					/* upper-case */
+					c = ds->key->ptr[j] & ~32;
+				} else if (light_isdigit(ds->key->ptr[j])) {
+					/* copy */
+					c = ds->key->ptr[j];
+				}
+				srv->tmp_buf->ptr[srv->tmp_buf->used++] = c;
+			}
+			srv->tmp_buf->ptr[srv->tmp_buf->used] = '\0';
+
+			ssi_env_add(p->ssi_cgi_env, srv->tmp_buf->ptr, ds->value->ptr);
+		}
+	}
+
+	return 0;
+}
+
+static int build_ssi_cgi_vars(server *srv, connection *con, plugin_data *p) {
+	char buf[32];
+
+	server_socket *srv_sock = con->srv_socket;
+
+#ifdef HAVE_IPV6
+	char b2[INET6_ADDRSTRLEN + 1];
+#endif
+
+#define CONST_STRING(x) \
+		x
+
+	array_reset(p->ssi_cgi_env);
+
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("SERVER_SOFTWARE"), PACKAGE_NAME"/"PACKAGE_VERSION);
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("SERVER_NAME"),
+#ifdef HAVE_IPV6
+		     inet_ntop(srv_sock->addr.plain.sa_family,
+			       srv_sock->addr.plain.sa_family == AF_INET6 ?
+			       (const void *) &(srv_sock->addr.ipv6.sin6_addr) :
+			       (const void *) &(srv_sock->addr.ipv4.sin_addr),
+			       b2, sizeof(b2)-1)
+#else
+		     inet_ntoa(srv_sock->addr.ipv4.sin_addr)
+#endif
+		     );
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("GATEWAY_INTERFACE"), "CGI/1.1");
+
+	LI_ltostr(buf,
+#ifdef HAVE_IPV6
+	       ntohs(srv_sock->addr.plain.sa_family ? srv_sock->addr.ipv6.sin6_port : srv_sock->addr.ipv4.sin_port)
+#else
+	       ntohs(srv_sock->addr.ipv4.sin_port)
+#endif
+	       );
+
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("SERVER_PORT"), buf);
+
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("REMOTE_ADDR"),
+		    inet_ntop_cache_get_ip(srv, &(con->dst_addr)));
+
+	if (con->authed_user->used) {
+		ssi_env_add(p->ssi_cgi_env, CONST_STRING("REMOTE_USER"),
+			     con->authed_user->ptr);
+	}
+
+	if (con->request.content_length > 0) {
+		/* CGI-SPEC 6.1.2 and FastCGI spec 6.3 */
+
+		/* request.content_length < SSIZE_MAX, see request.c */
+		LI_ltostr(buf, con->request.content_length);
+		ssi_env_add(p->ssi_cgi_env, CONST_STRING("CONTENT_LENGTH"), buf);
+	}
+
+	/*
+	 * SCRIPT_NAME, PATH_INFO and PATH_TRANSLATED according to
+	 * http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html
+	 * (6.1.14, 6.1.6, 6.1.7)
+	 */
+
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("SCRIPT_NAME"), con->uri.path->ptr);
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("PATH_INFO"), "");
+
+	/*
+	 * SCRIPT_FILENAME and DOCUMENT_ROOT for php. The PHP manual
+	 * http://www.php.net/manual/en/reserved.variables.php
+	 * treatment of PATH_TRANSLATED is different from the one of CGI specs.
+	 * TODO: this code should be checked against cgi.fix_pathinfo php
+	 * parameter.
+	 */
+
+	if (con->request.pathinfo->used) {
+		ssi_env_add(p->ssi_cgi_env, CONST_STRING("PATH_INFO"), con->request.pathinfo->ptr);
+	}
+
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("SCRIPT_FILENAME"), con->physical.path->ptr);
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("DOCUMENT_ROOT"), con->physical.doc_root->ptr);
+
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("REQUEST_URI"), con->request.uri->ptr);
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("QUERY_STRING"), con->uri.query->used ? con->uri.query->ptr : "");
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("REQUEST_METHOD"), get_http_method_name(con->request.http_method));
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("REDIRECT_STATUS"), "200");
+	ssi_env_add(p->ssi_cgi_env, CONST_STRING("SERVER_PROTOCOL"), get_http_version_name(con->request.http_version));
+
+	ssi_env_add_request_headers(srv, con, p);
+
+	return 0;
+}
+
+static int process_ssi_stmt(server *srv, connection *con, plugin_data *p,
+			    const char **l, size_t n) {
+	size_t i, ssicmd = 0;
+	char buf[255];
+	buffer *b = NULL;
+
+	struct {
+		const char *var;
+		enum { SSI_UNSET, SSI_ECHO, SSI_FSIZE, SSI_INCLUDE, SSI_FLASTMOD,
+				SSI_CONFIG, SSI_PRINTENV, SSI_SET, SSI_IF, SSI_ELIF,
+				SSI_ELSE, SSI_ENDIF, SSI_EXEC } type;
+	} ssicmds[] = {
+		{ "echo",     SSI_ECHO },
+		{ "include",  SSI_INCLUDE },
+		{ "flastmod", SSI_FLASTMOD },
+		{ "fsize",    SSI_FSIZE },
+		{ "config",   SSI_CONFIG },
+		{ "printenv", SSI_PRINTENV },
+		{ "set",      SSI_SET },
+		{ "if",       SSI_IF },
+		{ "elif",     SSI_ELIF },
+		{ "endif",    SSI_ENDIF },
+		{ "else",     SSI_ELSE },
+		{ "exec",     SSI_EXEC },
+
+		{ NULL, SSI_UNSET }
+	};
+
+	for (i = 0; ssicmds[i].var; i++) {
+		if (0 == strcmp(l[1], ssicmds[i].var)) {
+			ssicmd = ssicmds[i].type;
+			break;
+		}
+	}
+
+	switch(ssicmd) {
+	case SSI_ECHO: {
+		/* echo */
+		int var = 0, enc = 0;
+		const char *var_val = NULL;
+		stat_cache_entry *sce = NULL;
+
+		struct {
+			const char *var;
+			enum { SSI_ECHO_UNSET, SSI_ECHO_DATE_GMT, SSI_ECHO_DATE_LOCAL, SSI_ECHO_DOCUMENT_NAME, SSI_ECHO_DOCUMENT_URI,
+					SSI_ECHO_LAST_MODIFIED, SSI_ECHO_USER_NAME } type;
+		} echovars[] = {
+			{ "DATE_GMT",      SSI_ECHO_DATE_GMT },
+			{ "DATE_LOCAL",    SSI_ECHO_DATE_LOCAL },
+			{ "DOCUMENT_NAME", SSI_ECHO_DOCUMENT_NAME },
+			{ "DOCUMENT_URI",  SSI_ECHO_DOCUMENT_URI },
+			{ "LAST_MODIFIED", SSI_ECHO_LAST_MODIFIED },
+			{ "USER_NAME",     SSI_ECHO_USER_NAME },
+
+			{ NULL, SSI_ECHO_UNSET }
+		};
+
+		struct {
+			const char *var;
+			enum { SSI_ENC_UNSET, SSI_ENC_URL, SSI_ENC_NONE, SSI_ENC_ENTITY } type;
+		} encvars[] = {
+			{ "url",          SSI_ENC_URL },
+			{ "none",         SSI_ENC_NONE },
+			{ "entity",       SSI_ENC_ENTITY },
+
+			{ NULL, SSI_ENC_UNSET }
+		};
+
+		for (i = 2; i < n; i += 2) {
+			if (0 == strcmp(l[i], "var")) {
+				int j;
+
+				var_val = l[i+1];
+
+				for (j = 0; echovars[j].var; j++) {
+					if (0 == strcmp(l[i+1], echovars[j].var)) {
+						var = echovars[j].type;
+						break;
+					}
+				}
+			} else if (0 == strcmp(l[i], "encoding")) {
+				int j;
+
+				for (j = 0; encvars[j].var; j++) {
+					if (0 == strcmp(l[i+1], encvars[j].var)) {
+						enc = encvars[j].type;
+						break;
+					}
+				}
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"ssi: unknow attribute for ",
+						l[1], l[i]);
+			}
+		}
+
+		if (p->if_is_false) break;
+
+		if (!var_val) {
+			log_error_write(srv, __FILE__, __LINE__, "sss",
+					"ssi: ",
+					l[1], "var is missing");
+			break;
+		}
+
+		stat_cache_get_entry(srv, con, con->physical.path, &sce);
+
+		switch(var) {
+		case SSI_ECHO_USER_NAME: {
+			struct passwd *pw;
+
+			b = chunkqueue_get_append_buffer(con->write_queue);
+#ifdef HAVE_PWD_H
+			if (NULL == (pw = getpwuid(sce->st.st_uid))) {
+				buffer_copy_long(b, sce->st.st_uid);
+			} else {
+				buffer_copy_string(b, pw->pw_name);
+			}
+#else
+			buffer_copy_long(b, sce->st.st_uid);
+#endif
+			break;
+		}
+		case SSI_ECHO_LAST_MODIFIED:	{
+			time_t t = sce->st.st_mtime;
+
+			b = chunkqueue_get_append_buffer(con->write_queue);
+			if (0 == strftime(buf, sizeof(buf), p->timefmt->ptr, localtime(&t))) {
+				buffer_copy_string(b, "(none)");
+			} else {
+				buffer_copy_string(b, buf);
+			}
+			break;
+		}
+		case SSI_ECHO_DATE_LOCAL: {
+			time_t t = time(NULL);
+
+			b = chunkqueue_get_append_buffer(con->write_queue);
+			if (0 == strftime(buf, sizeof(buf), p->timefmt->ptr, localtime(&t))) {
+				buffer_copy_string(b, "(none)");
+			} else {
+				buffer_copy_string(b, buf);
+			}
+			break;
+		}
+		case SSI_ECHO_DATE_GMT: {
+			time_t t = time(NULL);
+
+			b = chunkqueue_get_append_buffer(con->write_queue);
+			if (0 == strftime(buf, sizeof(buf), p->timefmt->ptr, gmtime(&t))) {
+				buffer_copy_string(b, "(none)");
+			} else {
+				buffer_copy_string(b, buf);
+			}
+			break;
+		}
+		case SSI_ECHO_DOCUMENT_NAME: {
+			char *sl;
+
+			b = chunkqueue_get_append_buffer(con->write_queue);
+			if (NULL == (sl = strrchr(con->physical.path->ptr, '/'))) {
+				buffer_copy_string_buffer(b, con->physical.path);
+			} else {
+				buffer_copy_string(b, sl + 1);
+			}
+			break;
+		}
+		case SSI_ECHO_DOCUMENT_URI: {
+			b = chunkqueue_get_append_buffer(con->write_queue);
+			buffer_copy_string_buffer(b, con->uri.path);
+			break;
+		}
+		default: {
+			data_string *ds;
+			/* check if it is a cgi-var */
+
+			b = chunkqueue_get_append_buffer(con->write_queue);
+
+			if (NULL != (ds = (data_string *)array_get_element(p->ssi_cgi_env, var_val))) {
+				buffer_copy_string_buffer(b, ds->value);
+			} else {
+				buffer_copy_string(b, "(none)");
+			}
+
+			break;
+		}
+		}
+		break;
+	}
+	case SSI_INCLUDE:
+	case SSI_FLASTMOD:
+	case SSI_FSIZE: {
+		const char * file_path = NULL, *virt_path = NULL;
+		struct stat st;
+		char *sl;
+
+		for (i = 2; i < n; i += 2) {
+			if (0 == strcmp(l[i], "file")) {
+				file_path = l[i+1];
+			} else if (0 == strcmp(l[i], "virtual")) {
+				virt_path = l[i+1];
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"ssi: unknow attribute for ",
+						l[1], l[i]);
+			}
+		}
+
+		if (!file_path && !virt_path) {
+			log_error_write(srv, __FILE__, __LINE__, "sss",
+					"ssi: ",
+					l[1], "file or virtual are missing");
+			break;
+		}
+
+		if (file_path && virt_path) {
+			log_error_write(srv, __FILE__, __LINE__, "sss",
+					"ssi: ",
+					l[1], "only one of file and virtual is allowed here");
+			break;
+		}
+
+
+		if (p->if_is_false) break;
+
+		if (file_path) {
+			/* current doc-root */
+			if (NULL == (sl = strrchr(con->physical.path->ptr, '/'))) {
+				buffer_copy_string(p->stat_fn, "/");
+			} else {
+				buffer_copy_string_len(p->stat_fn, con->physical.path->ptr, sl - con->physical.path->ptr + 1);
+			}
+
+			buffer_copy_string(srv->tmp_buf, file_path);
+			buffer_urldecode_path(srv->tmp_buf);
+			buffer_path_simplify(srv->tmp_buf, srv->tmp_buf);
+			buffer_append_string_buffer(p->stat_fn, srv->tmp_buf);
+		} else {
+			/* virtual */
+
+			if (virt_path[0] == '/') {
+				buffer_copy_string(p->stat_fn, virt_path);
+			} else {
+				/* there is always a / */
+				sl = strrchr(con->uri.path->ptr, '/');
+
+				buffer_copy_string_len(p->stat_fn, con->uri.path->ptr, sl - con->uri.path->ptr + 1);
+				buffer_append_string(p->stat_fn, virt_path);
+			}
+
+			buffer_urldecode_path(p->stat_fn);
+			buffer_path_simplify(srv->tmp_buf, p->stat_fn);
+
+			/* we have an uri */
+
+			buffer_copy_string_buffer(p->stat_fn, con->physical.doc_root);
+			buffer_append_string_buffer(p->stat_fn, srv->tmp_buf);
+		}
+
+		if (0 == stat(p->stat_fn->ptr, &st)) {
+			time_t t = st.st_mtime;
+
+			switch (ssicmd) {
+			case SSI_FSIZE:
+				b = chunkqueue_get_append_buffer(con->write_queue);
+				if (p->sizefmt) {
+					int j = 0;
+					const char *abr[] = { " B", " kB", " MB", " GB", " TB", NULL };
+
+					off_t s = st.st_size;
+
+					for (j = 0; s > 1024 && abr[j+1]; s /= 1024, j++);
+
+					buffer_copy_off_t(b, s);
+					buffer_append_string(b, abr[j]);
+				} else {
+					buffer_copy_off_t(b, st.st_size);
+				}
+				break;
+			case SSI_FLASTMOD:
+				b = chunkqueue_get_append_buffer(con->write_queue);
+				if (0 == strftime(buf, sizeof(buf), p->timefmt->ptr, localtime(&t))) {
+					buffer_copy_string(b, "(none)");
+				} else {
+					buffer_copy_string(b, buf);
+				}
+				break;
+			case SSI_INCLUDE:
+				chunkqueue_append_file(con->write_queue, p->stat_fn, 0, st.st_size);
+
+				/* Keep the newest mtime of included files */
+				if (st.st_mtime > include_file_last_mtime)
+				  include_file_last_mtime = st.st_mtime;
+
+				break;
+			}
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sbs",
+					"ssi: stating failed ",
+					p->stat_fn, strerror(errno));
+		}
+		break;
+	}
+	case SSI_SET: {
+		const char *key = NULL, *val = NULL;
+		for (i = 2; i < n; i += 2) {
+			if (0 == strcmp(l[i], "var")) {
+				key = l[i+1];
+			} else if (0 == strcmp(l[i], "value")) {
+				val = l[i+1];
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"ssi: unknow attribute for ",
+						l[1], l[i]);
+			}
+		}
+
+		if (p->if_is_false) break;
+
+		if (key && val) {
+			data_string *ds;
+
+			if (NULL == (ds = (data_string *)array_get_unused_element(p->ssi_vars, TYPE_STRING))) {
+				ds = data_string_init();
+			}
+			buffer_copy_string(ds->key,   key);
+			buffer_copy_string(ds->value, val);
+
+			array_insert_unique(p->ssi_vars, (data_unset *)ds);
+		} else {
+			log_error_write(srv, __FILE__, __LINE__, "sss",
+					"ssi: var and value have to be set in",
+					l[0], l[1]);
+		}
+		break;
+	}
+	case SSI_CONFIG:
+		if (p->if_is_false) break;
+
+		for (i = 2; i < n; i += 2) {
+			if (0 == strcmp(l[i], "timefmt")) {
+				buffer_copy_string(p->timefmt, l[i+1]);
+			} else if (0 == strcmp(l[i], "sizefmt")) {
+				if (0 == strcmp(l[i+1], "abbrev")) {
+					p->sizefmt = 1;
+				} else if (0 == strcmp(l[i+1], "abbrev")) {
+					p->sizefmt = 0;
+				} else {
+					log_error_write(srv, __FILE__, __LINE__, "sssss",
+							"ssi: unknow value for attribute '",
+							l[i],
+							"' for ",
+							l[1], l[i+1]);
+				}
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"ssi: unknow attribute for ",
+						l[1], l[i]);
+			}
+		}
+		break;
+	case SSI_PRINTENV:
+		if (p->if_is_false) break;
+
+		b = chunkqueue_get_append_buffer(con->write_queue);
+		buffer_copy_string(b, "<pre>");
+		for (i = 0; i < p->ssi_vars->used; i++) {
+			data_string *ds = (data_string *)p->ssi_vars->data[p->ssi_vars->sorted[i]];
+
+			buffer_append_string_buffer(b, ds->key);
+			buffer_append_string(b, ": ");
+			buffer_append_string_buffer(b, ds->value);
+			buffer_append_string(b, "<br />");
+
+		}
+		buffer_append_string(b, "</pre>");
+
+		break;
+	case SSI_EXEC: {
+		const char *cmd = NULL;
+		pid_t pid;
+		int from_exec_fds[2];
+
+		for (i = 2; i < n; i += 2) {
+			if (0 == strcmp(l[i], "cmd")) {
+				cmd = l[i+1];
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"ssi: unknow attribute for ",
+						l[1], l[i]);
+			}
+		}
+
+		if (p->if_is_false) break;
+
+		/* create a return pipe and send output to the html-page
+		 *
+		 * as exec is assumed evil it is implemented synchronously
+		 */
+
+		if (!cmd) break;
+#ifdef HAVE_FORK
+		if (pipe(from_exec_fds)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"pipe failed: ", strerror(errno));
+			return -1;
+		}
+
+		/* fork, execve */
+		switch (pid = fork()) {
+		case 0: {
+			/* move stdout to from_rrdtool_fd[1] */
+			close(STDOUT_FILENO);
+			dup2(from_exec_fds[1], STDOUT_FILENO);
+			close(from_exec_fds[1]);
+			/* not needed */
+			close(from_exec_fds[0]);
+
+			/* close stdin */
+			close(STDIN_FILENO);
+
+			execl("/bin/sh", "sh", "-c", cmd, (char *)NULL);
+
+			log_error_write(srv, __FILE__, __LINE__, "sss", "spawing exec failed:", strerror(errno), cmd);
+
+			/* */
+			SEGFAULT();
+			break;
+		}
+		case -1:
+			/* error */
+			log_error_write(srv, __FILE__, __LINE__, "ss", "fork failed:", strerror(errno));
+			break;
+		default: {
+			/* father */
+			int status;
+			ssize_t r;
+			int was_interrupted = 0;
+
+			close(from_exec_fds[1]);
+
+			/* wait for the client to end */
+
+			/*
+			 * OpenBSD and Solaris send a EINTR on SIGCHILD even if we ignore it
+			 */
+			do {
+				if (-1 == waitpid(pid, &status, 0)) {
+					if (errno == EINTR) {
+						was_interrupted++;
+					} else {
+						was_interrupted = 0;
+						log_error_write(srv, __FILE__, __LINE__, "ss", "waitpid failed:", strerror(errno));
+					}
+				} else if (WIFEXITED(status)) {
+					int toread;
+					/* read everything from client and paste it into the output */
+					was_interrupted = 0;
+	
+					while(1) {
+						if (ioctl(from_exec_fds[0], FIONREAD, &toread)) {
+							log_error_write(srv, __FILE__, __LINE__, "s",
+								"unexpected end-of-file (perhaps the ssi-exec process died)");
+							return -1;
+						}
+	
+						if (toread > 0) {
+							b = chunkqueue_get_append_buffer(con->write_queue);
+	
+							buffer_prepare_copy(b, toread + 1);
+	
+							if ((r = read(from_exec_fds[0], b->ptr, b->size - 1)) < 0) {
+								/* read failed */
+								break;
+							} else {
+								b->used = r;
+								b->ptr[b->used++] = '\0';
+							}
+						} else {
+							break;
+						}
+					}
+				} else {
+					was_interrupted = 0;
+					log_error_write(srv, __FILE__, __LINE__, "s", "process exited abnormally");
+				}
+			} while (was_interrupted > 0 && was_interrupted < 4); /* if waitpid() gets interrupted, retry, but max 4 times */
+
+			close(from_exec_fds[0]);
+
+			break;
+		}
+		}
+#else
+
+		return -1;
+#endif
+
+		break;
+	}
+	case SSI_IF: {
+		const char *expr = NULL;
+
+		for (i = 2; i < n; i += 2) {
+			if (0 == strcmp(l[i], "expr")) {
+				expr = l[i+1];
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"ssi: unknow attribute for ",
+						l[1], l[i]);
+			}
+		}
+
+		if (!expr) {
+			log_error_write(srv, __FILE__, __LINE__, "sss",
+					"ssi: ",
+					l[1], "expr missing");
+			break;
+		}
+
+		if ((!p->if_is_false) &&
+		    ((p->if_is_false_level == 0) ||
+		     (p->if_level < p->if_is_false_level))) {
+			switch (ssi_eval_expr(srv, con, p, expr)) {
+			case -1:
+			case 0:
+				p->if_is_false = 1;
+				p->if_is_false_level = p->if_level;
+				break;
+			case 1:
+				p->if_is_false = 0;
+				break;
+			}
+		}
+
+		p->if_level++;
+
+		break;
+	}
+	case SSI_ELSE:
+		p->if_level--;
+
+		if (p->if_is_false) {
+			if ((p->if_level == p->if_is_false_level) &&
+			    (p->if_is_false_endif == 0)) {
+				p->if_is_false = 0;
+			}
+		} else {
+			p->if_is_false = 1;
+
+			p->if_is_false_level = p->if_level;
+		}
+		p->if_level++;
+
+		break;
+	case SSI_ELIF: {
+		const char *expr = NULL;
+		for (i = 2; i < n; i += 2) {
+			if (0 == strcmp(l[i], "expr")) {
+				expr = l[i+1];
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sss",
+						"ssi: unknow attribute for ",
+						l[1], l[i]);
+			}
+		}
+
+		if (!expr) {
+			log_error_write(srv, __FILE__, __LINE__, "sss",
+					"ssi: ",
+					l[1], "expr missing");
+			break;
+		}
+
+		p->if_level--;
+
+		if (p->if_level == p->if_is_false_level) {
+			if ((p->if_is_false) &&
+			    (p->if_is_false_endif == 0)) {
+				switch (ssi_eval_expr(srv, con, p, expr)) {
+				case -1:
+				case 0:
+					p->if_is_false = 1;
+					p->if_is_false_level = p->if_level;
+					break;
+				case 1:
+					p->if_is_false = 0;
+					break;
+				}
+			} else {
+				p->if_is_false = 1;
+				p->if_is_false_level = p->if_level;
+				p->if_is_false_endif = 1;
+			}
+		}
+
+		p->if_level++;
+
+		break;
+	}
+	case SSI_ENDIF:
+		p->if_level--;
+
+		if (p->if_level == p->if_is_false_level) {
+			p->if_is_false = 0;
+			p->if_is_false_endif = 0;
+		}
+
+		break;
+	default:
+		log_error_write(srv, __FILE__, __LINE__, "ss",
+				"ssi: unknow ssi-command:",
+				l[1]);
+		break;
+	}
+
+	return 0;
+
+}
+
+static int mod_ssi_handle_request(server *srv, connection *con, plugin_data *p) {
+	stream s;
+#ifdef  HAVE_PCRE_H
+	int i, n;
+
+#define N 10
+	int ovec[N * 3];
+#endif
+
+	/* get a stream to the file */
+
+	array_reset(p->ssi_vars);
+	array_reset(p->ssi_cgi_env);
+	buffer_copy_string(p->timefmt, "%a, %d %b %Y %H:%M:%S %Z");
+	p->sizefmt = 0;
+	build_ssi_cgi_vars(srv, con, p);
+	p->if_is_false = 0;
+
+	/* Reset the modified time of included files */
+	include_file_last_mtime = 0;
+
+	if (-1 == stream_open(&s, con->physical.path)) {
+		log_error_write(srv, __FILE__, __LINE__, "sb",
+				"stream-open: ", con->physical.path);
+		return -1;
+	}
+
+
+	/**
+	 * <!--#element attribute=value attribute=value ... -->
+	 *
+	 * config       DONE
+	 *   errmsg     -- missing
+	 *   sizefmt    DONE
+	 *   timefmt    DONE
+	 * echo         DONE
+	 *   var        DONE
+	 *   encoding   -- missing
+	 * exec         DONE
+	 *   cgi        -- never
+	 *   cmd        DONE
+	 * fsize        DONE
+	 *   file       DONE
+	 *   virtual    DONE
+	 * flastmod     DONE
+	 *   file       DONE
+	 *   virtual    DONE
+	 * include      DONE
+	 *   file       DONE
+	 *   virtual    DONE
+	 * printenv     DONE
+	 * set          DONE
+	 *   var        DONE
+	 *   value      DONE
+	 *
+	 * if           DONE
+	 * elif         DONE
+	 * else         DONE
+	 * endif        DONE
+	 *
+	 *
+	 * expressions
+	 * AND, OR      DONE
+	 * comp         DONE
+	 * ${...}       -- missing
+	 * $...         DONE
+	 * '...'        DONE
+	 * ( ... )      DONE
+	 *
+	 *
+	 *
+	 * ** all DONE **
+	 * DATE_GMT
+	 *   The current date in Greenwich Mean Time.
+	 * DATE_LOCAL
+	 *   The current date in the local time zone.
+	 * DOCUMENT_NAME
+	 *   The filename (excluding directories) of the document requested by the user.
+	 * DOCUMENT_URI
+	 *   The (%-decoded) URL path of the document requested by the user. Note that in the case of nested include files, this is not then URL for the current document.
+	 * LAST_MODIFIED
+	 *   The last modification date of the document requested by the user.
+	 * USER_NAME
+	 *   Contains the owner of the file which included it.
+	 *
+	 */
+#ifdef HAVE_PCRE_H
+	for (i = 0; (n = pcre_exec(p->ssi_regex, NULL, s.start, s.size, i, 0, ovec, N * 3)) > 0; i = ovec[1]) {
+		const char **l;
+		/* take everything from last offset to current match pos */
+
+		if (!p->if_is_false) chunkqueue_append_file(con->write_queue, con->physical.path, i, ovec[0] - i);
+
+		pcre_get_substring_list(s.start, ovec, n, &l);
+		process_ssi_stmt(srv, con, p, l, n);
+		pcre_free_substring_list(l);
+	}
+
+	switch(n) {
+	case PCRE_ERROR_NOMATCH:
+		/* copy everything/the rest */
+		chunkqueue_append_file(con->write_queue, con->physical.path, i, s.size - i);
+
+		break;
+	default:
+		log_error_write(srv, __FILE__, __LINE__, "sd",
+				"execution error while matching: ", n);
+		break;
+	}
+#endif
+
+
+	stream_close(&s);
+
+	con->file_started  = 1;
+	con->file_finished = 1;
+
+	response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/html"));
+
+	{
+  	/* Generate "ETag" & "Last-Modified" headers */
+
+		stat_cache_entry *sce = NULL;
+		time_t lm_time = 0;
+		buffer *mtime = NULL;
+
+		stat_cache_get_entry(srv, con, con->physical.path, &sce);
+
+		etag_mutate(con->physical.etag, sce->etag);
+		response_header_overwrite(srv, con, CONST_STR_LEN("ETag"), CONST_BUF_LEN(con->physical.etag));
+
+		if (sce->st.st_mtime > include_file_last_mtime)
+			lm_time = sce->st.st_mtime;
+		else
+			lm_time = include_file_last_mtime;
+
+		mtime = strftime_cache_get(srv, lm_time);
+		response_header_overwrite(srv, con, CONST_STR_LEN("Last-Modified"), CONST_BUF_LEN(mtime));
+	}
+
+	/* Reset the modified time of included files */
+	include_file_last_mtime = 0;
+
+	/* reset physical.path */
+	buffer_reset(con->physical.path);
+
+	return 0;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_ssi_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(ssi_extension);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("ssi.extension"))) {
+				PATCH(ssi_extension);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+URIHANDLER_FUNC(mod_ssi_physical_path) {
+	plugin_data *p = p_d;
+	size_t k;
+
+	if (con->physical.path->used == 0) return HANDLER_GO_ON;
+
+	mod_ssi_patch_connection(srv, con, p);
+
+	for (k = 0; k < p->conf.ssi_extension->used; k++) {
+		data_string *ds = (data_string *)p->conf.ssi_extension->data[k];
+
+		if (ds->value->used == 0) continue;
+
+		if (buffer_is_equal_right_len(con->physical.path, ds->value, ds->value->used - 1)) {
+			/* handle ssi-request */
+
+			if (mod_ssi_handle_request(srv, con, p)) {
+				/* on error */
+				con->http_status = 500;
+			}
+
+			return HANDLER_FINISHED;
+		}
+	}
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_ssi_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("ssi");
+
+	p->init        = mod_ssi_init;
+	p->handle_subrequest_start = mod_ssi_physical_path;
+	p->set_defaults  = mod_ssi_set_defaults;
+	p->cleanup     = mod_ssi_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,43 @@
+#ifndef _MOD_SSI_H_
+#define _MOD_SSI_H_
+
+#include "base.h"
+#include "buffer.h"
+#include "array.h"
+
+#include "plugin.h"
+
+#ifdef HAVE_PCRE_H
+#include <pcre.h>
+#endif
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	array *ssi_extension;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+#ifdef HAVE_PCRE_H
+	pcre *ssi_regex;
+#endif
+	buffer *timefmt;
+	int sizefmt;
+
+	buffer *stat_fn;
+
+	array *ssi_vars;
+	array *ssi_cgi_env;
+
+	int if_level, if_is_false_level, if_is_false, if_is_false_endif;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+int ssi_eval_expr(server *srv, connection *con, plugin_data *p, const char *expr);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_expr.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_expr.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_expr.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,324 @@
+#include <ctype.h>
+#include <string.h>
+
+#include "buffer.h"
+#include "log.h"
+#include "mod_ssi.h"
+#include "mod_ssi_expr.h"
+#include "mod_ssi_exprparser.h"
+
+typedef struct {
+	const char *input;
+	size_t offset;
+	size_t size;
+
+	int line_pos;
+
+	int in_key;
+	int in_brace;
+	int in_cond;
+} ssi_tokenizer_t;
+
+ssi_val_t *ssi_val_init() {
+	ssi_val_t *s;
+
+	s = calloc(1, sizeof(*s));
+
+	return s;
+}
+
+void ssi_val_free(ssi_val_t *s) {
+	if (s->str) buffer_free(s->str);
+
+	free(s);
+}
+
+int ssi_val_tobool(ssi_val_t *B) {
+	if (B->type == SSI_TYPE_STRING) {
+		return B->str->used > 1 ? 1 : 0;
+	} else {
+		return B->bo;
+	}
+}
+
+static int ssi_expr_tokenizer(server *srv, connection *con, plugin_data *p,
+			      ssi_tokenizer_t *t, int *token_id, buffer *token) {
+	int tid = 0;
+	size_t i;
+
+	UNUSED(con);
+
+	for (tid = 0; tid == 0 && t->offset < t->size && t->input[t->offset] ; ) {
+		char c = t->input[t->offset];
+		data_string *ds;
+
+		switch (c) {
+		case '=':
+			tid = TK_EQ;
+
+			t->offset++;
+			t->line_pos++;
+
+			buffer_copy_string(token, "(=)");
+
+			break;
+		case '>':
+			if (t->input[t->offset + 1] == '=') {
+				t->offset += 2;
+				t->line_pos += 2;
+
+				tid = TK_GE;
+
+				buffer_copy_string(token, "(>=)");
+			} else {
+				t->offset += 1;
+				t->line_pos += 1;
+
+				tid = TK_GT;
+
+				buffer_copy_string(token, "(>)");
+			}
+
+			break;
+		case '<':
+			if (t->input[t->offset + 1] == '=') {
+				t->offset += 2;
+				t->line_pos += 2;
+
+				tid = TK_LE;
+
+				buffer_copy_string(token, "(<=)");
+			} else {
+				t->offset += 1;
+				t->line_pos += 1;
+
+				tid = TK_LT;
+
+				buffer_copy_string(token, "(<)");
+			}
+
+			break;
+
+		case '!':
+			if (t->input[t->offset + 1] == '=') {
+				t->offset += 2;
+				t->line_pos += 2;
+
+				tid = TK_NE;
+
+				buffer_copy_string(token, "(!=)");
+			} else {
+				t->offset += 1;
+				t->line_pos += 1;
+
+				tid = TK_NOT;
+
+				buffer_copy_string(token, "(!)");
+			}
+
+			break;
+		case '&':
+			if (t->input[t->offset + 1] == '&') {
+				t->offset += 2;
+				t->line_pos += 2;
+
+				tid = TK_AND;
+
+				buffer_copy_string(token, "(&&)");
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"pos:", t->line_pos,
+						"missing second &");
+				return -1;
+			}
+
+			break;
+		case '|':
+			if (t->input[t->offset + 1] == '|') {
+				t->offset += 2;
+				t->line_pos += 2;
+
+				tid = TK_OR;
+
+				buffer_copy_string(token, "(||)");
+			} else {
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"pos:", t->line_pos,
+						"missing second |");
+				return -1;
+			}
+
+			break;
+		case '\t':
+		case ' ':
+			t->offset++;
+			t->line_pos++;
+			break;
+
+		case '\'':
+			/* search for the terminating " */
+			for (i = 1; t->input[t->offset + i] && t->input[t->offset + i] != '\'';  i++);
+
+			if (t->input[t->offset + i]) {
+				tid = TK_VALUE;
+
+				buffer_copy_string_len(token, t->input + t->offset + 1, i-1);
+
+				t->offset += i + 1;
+				t->line_pos += i + 1;
+			} else {
+				/* ERROR */
+
+				log_error_write(srv, __FILE__, __LINE__, "sds",
+						"pos:", t->line_pos,
+						"missing closing quote");
+
+				return -1;
+			}
+
+			break;
+		case '(':
+			t->offset++;
+			t->in_brace++;
+
+			tid = TK_LPARAN;
+
+			buffer_copy_string(token, "(");
+			break;
+		case ')':
+			t->offset++;
+			t->in_brace--;
+
+			tid = TK_RPARAN;
+
+			buffer_copy_string(token, ")");
+			break;
+		case '$':
+			if (t->input[t->offset + 1] == '{') {
+				for (i = 2; t->input[t->offset + i] && t->input[t->offset + i] != '}';  i++);
+
+				if (t->input[t->offset + i] != '}') {
+					log_error_write(srv, __FILE__, __LINE__, "sds",
+							"pos:", t->line_pos,
+							"missing closing quote");
+
+					return -1;
+				}
+
+				buffer_copy_string_len(token, t->input + t->offset + 2, i-3);
+			} else {
+				for (i = 1; isalpha(t->input[t->offset + i]) || t->input[t->offset + i] == '_';  i++);
+
+				buffer_copy_string_len(token, t->input + t->offset + 1, i-1);
+			}
+
+			tid = TK_VALUE;
+
+			if (NULL != (ds = (data_string *)array_get_element(p->ssi_cgi_env, token->ptr))) {
+				buffer_copy_string_buffer(token, ds->value);
+			} else if (NULL != (ds = (data_string *)array_get_element(p->ssi_vars, token->ptr))) {
+				buffer_copy_string_buffer(token, ds->value);
+			} else {
+				buffer_copy_string(token, "");
+			}
+
+			t->offset += i;
+			t->line_pos += i;
+
+			break;
+		default:
+			for (i = 0; isgraph(t->input[t->offset + i]);  i++) {
+				char d = t->input[t->offset + i];
+				switch(d) {
+				case ' ':
+				case '\t':
+				case ')':
+				case '(':
+				case '\'':
+				case '=':
+				case '!':
+				case '<':
+				case '>':
+				case '&':
+				case '|':
+					break;
+				}
+			}
+
+			tid = TK_VALUE;
+
+			buffer_copy_string_len(token, t->input + t->offset, i);
+
+			t->offset += i;
+			t->line_pos += i;
+
+			break;
+		}
+	}
+
+	if (tid) {
+		*token_id = tid;
+
+		return 1;
+	} else if (t->offset < t->size) {
+		log_error_write(srv, __FILE__, __LINE__, "sds",
+				"pos:", t->line_pos,
+				"foobar");
+	}
+	return 0;
+}
+
+int ssi_eval_expr(server *srv, connection *con, plugin_data *p, const char *expr) {
+	ssi_tokenizer_t t;
+	void *pParser;
+	int token_id;
+	buffer *token;
+	ssi_ctx_t context;
+	int ret;
+
+	t.input = expr;
+	t.offset = 0;
+	t.size = strlen(expr);
+	t.line_pos = 1;
+
+	t.in_key = 1;
+	t.in_brace = 0;
+	t.in_cond = 0;
+
+	context.ok = 1;
+	context.srv = srv;
+
+	/* default context */
+
+	pParser = ssiexprparserAlloc( malloc );
+	token = buffer_init();
+	while((1 == (ret = ssi_expr_tokenizer(srv, con, p, &t, &token_id, token))) && context.ok) {
+		ssiexprparser(pParser, token_id, token, &context);
+
+		token = buffer_init();
+	}
+	ssiexprparser(pParser, 0, token, &context);
+	ssiexprparserFree(pParser, free );
+
+	buffer_free(token);
+
+	if (ret == -1) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"expr parser failed");
+		return -1;
+	}
+
+	if (context.ok == 0) {
+		log_error_write(srv, __FILE__, __LINE__, "sds",
+				"pos:", t.line_pos,
+				"parser failed somehow near here");
+		return -1;
+	}
+#if 0
+	log_error_write(srv, __FILE__, __LINE__, "ssd",
+			"expr: ",
+			expr,
+			context.val.bo);
+#endif
+	return context.val.bo;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_expr.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_expr.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_expr.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,31 @@
+#ifndef _MOD_SSI_EXPR_H_
+#define _MOD_SSI_EXPR_H_
+
+#include "buffer.h"
+
+typedef struct {
+	enum { SSI_TYPE_UNSET, SSI_TYPE_BOOL, SSI_TYPE_STRING } type;
+
+	buffer *str;
+	int     bo;
+} ssi_val_t;
+
+typedef struct {
+	int     ok;
+
+	ssi_val_t val;
+
+	void   *srv;
+} ssi_ctx_t;
+
+typedef enum { SSI_COND_UNSET, SSI_COND_LE, SSI_COND_GE, SSI_COND_EQ, SSI_COND_NE, SSI_COND_LT, SSI_COND_GT } ssi_expr_cond;
+
+void *ssiexprparserAlloc(void *(*mallocProc)(size_t));
+void ssiexprparserFree(void *p, void (*freeProc)(void*));
+void ssiexprparser(void *yyp, int yymajor, buffer *yyminor, ssi_ctx_t *ctx);
+
+int ssi_val_tobool(ssi_val_t *B);
+ssi_val_t *ssi_val_init();
+void ssi_val_free(ssi_val_t *s);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,951 @@
+/* Driver template for the LEMON parser generator.
+** The author disclaims copyright to this source code.
+*/
+/* First off, code is include which follows the "include" declaration
+** in the input file. */
+#include <stdio.h>
+#line 6 "./mod_ssi_exprparser.y"
+
+#include <assert.h>
+#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "mod_ssi_expr.h"
+#include "buffer.h"
+
+#line 18 "mod_ssi_exprparser.c"
+/* Next is all token values, in a form suitable for use by makeheaders.
+** This section will be null unless lemon is run with the -m switch.
+*/
+/*
+** These constants (all generated automatically by the parser generator)
+** specify the various kinds of tokens (terminals) that the parser
+** understands.
+**
+** Each symbol here is a terminal symbol in the grammar.
+*/
+/* Make sure the INTERFACE macro is defined.
+*/
+#ifndef INTERFACE
+# define INTERFACE 1
+#endif
+/* The next thing included is series of defines which control
+** various aspects of the generated parser.
+**    YYCODETYPE         is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 terminals
+**                       and nonterminals.  "int" is used otherwise.
+**    YYNOCODE           is a number of type YYCODETYPE which corresponds
+**                       to no legal terminal or nonterminal number.  This
+**                       number is used to fill in empty slots of the hash
+**                       table.
+**    YYFALLBACK         If defined, this indicates that one or more tokens
+**                       have fall-back values which should be used if the
+**                       original value of the token will not parse.
+**    YYACTIONTYPE       is the data type used for storing terminal
+**                       and nonterminal numbers.  "unsigned char" is
+**                       used if there are fewer than 250 rules and
+**                       states combined.  "int" is used otherwise.
+**    ssiexprparserTOKENTYPE     is the data type used for minor tokens given
+**                       directly to the parser from the tokenizer.
+**    YYMINORTYPE        is the data type used for all minor tokens.
+**                       This is typically a union of many types, one of
+**                       which is ssiexprparserTOKENTYPE.  The entry in the union
+**                       for base tokens is called "yy0".
+**    YYSTACKDEPTH       is the maximum depth of the parser's stack.
+**    ssiexprparserARG_SDECL     A static variable declaration for the %extra_argument
+**    ssiexprparserARG_PDECL     A parameter declaration for the %extra_argument
+**    ssiexprparserARG_STORE     Code to store %extra_argument into yypParser
+**    ssiexprparserARG_FETCH     Code to extract %extra_argument from yypParser
+**    YYNSTATE           the combined number of states.
+**    YYNRULE            the number of rules in the grammar
+**    YYERRORSYMBOL      is the code number of the error symbol.  If not
+**                       defined, then do no error processing.
+*/
+/*  */
+#define YYCODETYPE unsigned char
+#define YYNOCODE 20
+#define YYACTIONTYPE unsigned char
+#define ssiexprparserTOKENTYPE buffer *
+typedef union {
+  ssiexprparserTOKENTYPE yy0;
+  int yy8;
+  buffer * yy19;
+  ssi_val_t * yy29;
+  int yy39;
+} YYMINORTYPE;
+#define YYSTACKDEPTH 100
+#define ssiexprparserARG_SDECL ssi_ctx_t *ctx;
+#define ssiexprparserARG_PDECL ,ssi_ctx_t *ctx
+#define ssiexprparserARG_FETCH ssi_ctx_t *ctx = yypParser->ctx
+#define ssiexprparserARG_STORE yypParser->ctx = ctx
+#define YYNSTATE 23
+#define YYNRULE 16
+#define YYERRORSYMBOL 13
+#define YYERRSYMDT yy39
+#define YY_NO_ACTION      (YYNSTATE+YYNRULE+2)
+#define YY_ACCEPT_ACTION  (YYNSTATE+YYNRULE+1)
+#define YY_ERROR_ACTION   (YYNSTATE+YYNRULE)
+
+/* Next are that tables used to determine what action to take based on the
+** current state and lookahead token.  These tables are used to implement
+** functions that take a state number and lookahead value and return an
+** action integer.
+**
+** Suppose the action integer is N.  Then the action is determined as
+** follows
+**
+**   0 <= N < YYNSTATE                  Shift N.  That is, push the lookahead
+**                                      token onto the stack and goto state N.
+**
+**   YYNSTATE <= N < YYNSTATE+YYNRULE   Reduce by rule N-YYNSTATE.
+**
+**   N == YYNSTATE+YYNRULE              A syntax error has occurred.
+**
+**   N == YYNSTATE+YYNRULE+1            The parser accepts its input.
+**
+**   N == YYNSTATE+YYNRULE+2            No such action.  Denotes unused
+**                                      slots in the yy_action[] table.
+**
+** The action table is constructed as a single large table named yy_action[].
+** Given state S and lookahead X, the action is computed as
+**
+**      yy_action[ yy_shift_ofst[S] + X ]
+**
+** If the index value yy_shift_ofst[S]+X is out of range or if the value
+** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
+** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
+** and that yy_default[S] should be used instead.
+**
+** The formula above is for computing the action when the lookahead is
+** a terminal symbol.  If the lookahead is a non-terminal (as occurs after
+** a reduce action) then the yy_reduce_ofst[] array is used in place of
+** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
+** YY_SHIFT_USE_DFLT.
+**
+** The following are the tables generated in this section:
+**
+**  yy_action[]        A single table containing all actions.
+**  yy_lookahead[]     A table containing the lookahead for each entry in
+**                     yy_action.  Used to detect hash collisions.
+**  yy_shift_ofst[]    For each state, the offset into yy_action for
+**                     shifting terminals.
+**  yy_reduce_ofst[]   For each state, the offset into yy_action for
+**                     shifting non-terminals after a reduce.
+**  yy_default[]       Default action for each state.
+*/
+static YYACTIONTYPE yy_action[] = {
+ /*     0 */     5,    7,   17,   18,   22,   20,   21,   19,    2,   14,
+ /*    10 */     1,   23,   40,    9,   11,    3,   16,    2,   14,   12,
+ /*    20 */     4,   14,    5,    7,    6,   14,    7,    8,   14,   10,
+ /*    30 */    14,   13,   37,   37,   15,
+};
+static YYCODETYPE yy_lookahead[] = {
+ /*     0 */     1,    2,    3,    4,    5,    6,    7,    8,   14,   15,
+ /*    10 */    16,    0,   18,    9,   10,   17,   12,   14,   15,   16,
+ /*    20 */    14,   15,    1,    2,   14,   15,    2,   14,   15,   14,
+ /*    30 */    15,   11,   19,   19,   12,
+};
+#define YY_SHIFT_USE_DFLT (-2)
+static signed char yy_shift_ofst[] = {
+ /*     0 */     4,   11,   -1,    4,   21,    4,   24,    4,   -2,    4,
+ /*    10 */    -2,    4,   20,   -2,   22,   -2,   -2,   -2,   -2,   -2,
+ /*    20 */    -2,   -2,   -2,
+};
+#define YY_REDUCE_USE_DFLT (-7)
+static signed char yy_reduce_ofst[] = {
+ /*     0 */    -6,   -7,   -2,    6,   -7,   10,   -7,   13,   -7,   15,
+ /*    10 */    -7,    3,   -7,   -7,   -7,   -7,   -7,   -7,   -7,   -7,
+ /*    20 */    -7,   -7,   -7,
+};
+static YYACTIONTYPE yy_default[] = {
+ /*     0 */    39,   39,   25,   39,   24,   39,   26,   39,   27,   39,
+ /*    10 */    28,   39,   39,   29,   30,   32,   31,   33,   34,   35,
+ /*    20 */    36,   37,   38,
+};
+#define YY_SZ_ACTTAB (sizeof(yy_action)/sizeof(yy_action[0]))
+
+/* The next table maps tokens into fallback tokens.  If a construct
+** like the following:
+**
+**      %fallback ID X Y Z.
+**
+** appears in the grammer, then ID becomes a fallback token for X, Y,
+** and Z.  Whenever one of the tokens X, Y, or Z is input to the parser
+** but it does not parse, the type of the token is changed to ID and
+** the parse is retried before an error is thrown.
+*/
+#ifdef YYFALLBACK
+static const YYCODETYPE yyFallback[] = {
+};
+#endif /* YYFALLBACK */
+
+/* The following structure represents a single element of the
+** parser's stack.  Information stored includes:
+**
+**   +  The state number for the parser at this level of the stack.
+**
+**   +  The value of the token stored at this level of the stack.
+**      (In other words, the "major" token.)
+**
+**   +  The semantic value stored at this level of the stack.  This is
+**      the information used by the action routines in the grammar.
+**      It is sometimes called the "minor" token.
+*/
+struct yyStackEntry {
+  int stateno;       /* The state-number */
+  int major;         /* The major token value.  This is the code
+                     ** number for the token at this stack level */
+  YYMINORTYPE minor; /* The user-supplied minor token value.  This
+                     ** is the value of the token  */
+};
+typedef struct yyStackEntry yyStackEntry;
+
+/* The state of the parser is completely contained in an instance of
+** the following structure */
+struct yyParser {
+  int yyidx;                    /* Index of top element in stack */
+  int yyerrcnt;                 /* Shifts left before out of the error */
+  ssiexprparserARG_SDECL                /* A place to hold %extra_argument */
+  yyStackEntry yystack[YYSTACKDEPTH];  /* The parser's stack */
+};
+typedef struct yyParser yyParser;
+
+#ifndef NDEBUG
+#include <stdio.h>
+static FILE *yyTraceFILE = 0;
+static char *yyTracePrompt = 0;
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/*
+** Turn parser tracing on by giving a stream to which to write the trace
+** and a prompt to preface each trace message.  Tracing is turned off
+** by making either argument NULL
+**
+** Inputs:
+** <ul>
+** <li> A FILE* to which trace output should be written.
+**      If NULL, then tracing is turned off.
+** <li> A prefix string written at the beginning of every
+**      line of trace output.  If NULL, then tracing is
+**      turned off.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void ssiexprparserTrace(FILE *TraceFILE, char *zTracePrompt){
+  yyTraceFILE = TraceFILE;
+  yyTracePrompt = zTracePrompt;
+  if( yyTraceFILE==0 ) yyTracePrompt = 0;
+  else if( yyTracePrompt==0 ) yyTraceFILE = 0;
+}
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing shifts, the names of all terminals and nonterminals
+** are required.  The following table supplies these names */
+static const char *yyTokenName[] = {
+  "$",             "AND",           "OR",            "EQ",          
+  "NE",            "GT",            "GE",            "LT",          
+  "LE",            "NOT",           "LPARAN",        "RPARAN",      
+  "VALUE",         "error",         "expr",          "value",       
+  "exprline",      "cond",          "input",       
+};
+#endif /* NDEBUG */
+
+#ifndef NDEBUG
+/* For tracing reduce actions, the names of all rules are required.
+*/
+static const char *yyRuleName[] = {
+ /*   0 */ "input ::= exprline",
+ /*   1 */ "exprline ::= expr cond expr",
+ /*   2 */ "exprline ::= expr",
+ /*   3 */ "expr ::= expr AND expr",
+ /*   4 */ "expr ::= expr OR expr",
+ /*   5 */ "expr ::= NOT expr",
+ /*   6 */ "expr ::= LPARAN exprline RPARAN",
+ /*   7 */ "expr ::= value",
+ /*   8 */ "value ::= VALUE",
+ /*   9 */ "value ::= value VALUE",
+ /*  10 */ "cond ::= EQ",
+ /*  11 */ "cond ::= NE",
+ /*  12 */ "cond ::= LE",
+ /*  13 */ "cond ::= GE",
+ /*  14 */ "cond ::= LT",
+ /*  15 */ "cond ::= GT",
+};
+#endif /* NDEBUG */
+
+/*
+** This function returns the symbolic name associated with a token
+** value.
+*/
+const char *ssiexprparserTokenName(int tokenType){
+#ifndef NDEBUG
+  if( tokenType>0 && tokenType<(sizeof(yyTokenName)/sizeof(yyTokenName[0])) ){
+    return yyTokenName[tokenType];
+  }else{
+    return "Unknown";
+  }
+#else
+  return "";
+#endif
+}
+
+/*
+** This function allocates a new parser.
+** The only argument is a pointer to a function which works like
+** malloc.
+**
+** Inputs:
+** A pointer to the function used to allocate memory.
+**
+** Outputs:
+** A pointer to a parser.  This pointer is used in subsequent calls
+** to ssiexprparser and ssiexprparserFree.
+*/
+void *ssiexprparserAlloc(void *(*mallocProc)(size_t)){
+  yyParser *pParser;
+  pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
+  if( pParser ){
+    pParser->yyidx = -1;
+  }
+  return pParser;
+}
+
+/* The following function deletes the value associated with a
+** symbol.  The symbol can be either a terminal or nonterminal.
+** "yymajor" is the symbol code, and "yypminor" is a pointer to
+** the value.
+*/
+static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
+  switch( yymajor ){
+    /* Here is inserted the actions which take place when a
+    ** terminal or non-terminal is destroyed.  This can happen
+    ** when the symbol is popped from the stack during a
+    ** reduce or during error processing or when a parser is
+    ** being destroyed before it is finished parsing.
+    **
+    ** Note: during a reduce, the only symbols destroyed are those
+    ** which appear on the RHS of the rule, but which are not used
+    ** inside the C code.
+    */
+    case 1:
+    case 2:
+    case 3:
+    case 4:
+    case 5:
+    case 6:
+    case 7:
+    case 8:
+    case 9:
+    case 10:
+    case 11:
+    case 12:
+#line 24 "./mod_ssi_exprparser.y"
+{ buffer_free((yypminor->yy0)); }
+#line 350 "mod_ssi_exprparser.c"
+      break;
+    default:  break;   /* If no destructor action specified: do nothing */
+  }
+}
+
+/*
+** Pop the parser's stack once.
+**
+** If there is a destructor routine associated with the token which
+** is popped from the stack, then call it.
+**
+** Return the major token number for the symbol popped.
+*/
+static int yy_pop_parser_stack(yyParser *pParser){
+  YYCODETYPE yymajor;
+  yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
+
+  if( pParser->yyidx<0 ) return 0;
+#ifndef NDEBUG
+  if( yyTraceFILE && pParser->yyidx>=0 ){
+    fprintf(yyTraceFILE,"%sPopping %s\n",
+      yyTracePrompt,
+      yyTokenName[yytos->major]);
+  }
+#endif
+  yymajor = yytos->major;
+  yy_destructor( yymajor, &yytos->minor);
+  pParser->yyidx--;
+  return yymajor;
+}
+
+/*
+** Deallocate and destroy a parser.  Destructors are all called for
+** all stack elements before shutting the parser down.
+**
+** Inputs:
+** <ul>
+** <li>  A pointer to the parser.  This should be a pointer
+**       obtained from ssiexprparserAlloc.
+** <li>  A pointer to a function used to reclaim memory obtained
+**       from malloc.
+** </ul>
+*/
+void ssiexprparserFree(
+  void *p,                    /* The parser to be deleted */
+  void (*freeProc)(void*)     /* Function used to reclaim memory */
+){
+  yyParser *pParser = (yyParser*)p;
+  if( pParser==0 ) return;
+  while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
+  (*freeProc)((void*)pParser);
+}
+
+/*
+** Find the appropriate action for a parser given the terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_shift_action(
+  yyParser *pParser,        /* The parser */
+  int iLookAhead            /* The look-ahead token */
+){
+  int i;
+  int stateno = pParser->yystack[pParser->yyidx].stateno;
+
+  /* if( pParser->yyidx<0 ) return YY_NO_ACTION;  */
+  i = yy_shift_ofst[stateno];
+  if( i==YY_SHIFT_USE_DFLT ){
+    return yy_default[stateno];
+  }
+  if( iLookAhead==YYNOCODE ){
+    return YY_NO_ACTION;
+  }
+  i += iLookAhead;
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+#ifdef YYFALLBACK
+    int iFallback;            /* Fallback token */
+    if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
+           && (iFallback = yyFallback[iLookAhead])!=0 ){
+#ifndef NDEBUG
+      if( yyTraceFILE ){
+        fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
+           yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
+      }
+#endif
+      return yy_find_shift_action(pParser, iFallback);
+    }
+#endif
+    return yy_default[stateno];
+  }else{
+    return yy_action[i];
+  }
+}
+
+/*
+** Find the appropriate action for a parser given the non-terminal
+** look-ahead token iLookAhead.
+**
+** If the look-ahead token is YYNOCODE, then check to see if the action is
+** independent of the look-ahead.  If it is, return the action, otherwise
+** return YY_NO_ACTION.
+*/
+static int yy_find_reduce_action(
+  yyParser *pParser,        /* The parser */
+  int iLookAhead            /* The look-ahead token */
+){
+  int i;
+  int stateno = pParser->yystack[pParser->yyidx].stateno;
+
+  i = yy_reduce_ofst[stateno];
+  if( i==YY_REDUCE_USE_DFLT ){
+    return yy_default[stateno];
+  }
+  if( iLookAhead==YYNOCODE ){
+    return YY_NO_ACTION;
+  }
+  i += iLookAhead;
+  if( i<0 || i>=YY_SZ_ACTTAB || yy_lookahead[i]!=iLookAhead ){
+    return yy_default[stateno];
+  }else{
+    return yy_action[i];
+  }
+}
+
+/*
+** Perform a shift action.
+*/
+static void yy_shift(
+  yyParser *yypParser,          /* The parser to be shifted */
+  int yyNewState,               /* The new state to shift in */
+  int yyMajor,                  /* The major token to shift in */
+  YYMINORTYPE *yypMinor         /* Pointer ot the minor token to shift in */
+){
+  yyStackEntry *yytos;
+  yypParser->yyidx++;
+  if( yypParser->yyidx>=YYSTACKDEPTH ){
+     ssiexprparserARG_FETCH;
+     yypParser->yyidx--;
+#ifndef NDEBUG
+     if( yyTraceFILE ){
+       fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
+     }
+#endif
+     while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+     /* Here code is inserted which will execute if the parser
+     ** stack every overflows */
+     ssiexprparserARG_STORE; /* Suppress warning about unused %extra_argument var */
+     return;
+  }
+  yytos = &yypParser->yystack[yypParser->yyidx];
+  yytos->stateno = yyNewState;
+  yytos->major = yyMajor;
+  yytos->minor = *yypMinor;
+#ifndef NDEBUG
+  if( yyTraceFILE && yypParser->yyidx>0 ){
+    int i;
+    fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
+    fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
+    for(i=1; i<=yypParser->yyidx; i++)
+      fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
+    fprintf(yyTraceFILE,"\n");
+  }
+#endif
+}
+
+/* The following table contains information about every rule that
+** is used during the reduce.
+*/
+static struct {
+  YYCODETYPE lhs;         /* Symbol on the left-hand side of the rule */
+  unsigned char nrhs;     /* Number of right-hand side symbols in the rule */
+} yyRuleInfo[] = {
+  { 18, 1 },
+  { 16, 3 },
+  { 16, 1 },
+  { 14, 3 },
+  { 14, 3 },
+  { 14, 2 },
+  { 14, 3 },
+  { 14, 1 },
+  { 15, 1 },
+  { 15, 2 },
+  { 17, 1 },
+  { 17, 1 },
+  { 17, 1 },
+  { 17, 1 },
+  { 17, 1 },
+  { 17, 1 },
+};
+
+static void yy_accept(yyParser*);  /* Forward Declaration */
+
+/*
+** Perform a reduce action and the shift that must immediately
+** follow the reduce.
+*/
+static void yy_reduce(
+  yyParser *yypParser,         /* The parser */
+  int yyruleno                 /* Number of the rule by which to reduce */
+){
+  int yygoto;                     /* The next state */
+  int yyact;                      /* The next action */
+  YYMINORTYPE yygotominor;        /* The LHS of the rule reduced */
+  yyStackEntry *yymsp;            /* The top of the parser's stack */
+  int yysize;                     /* Amount to pop the stack */
+  ssiexprparserARG_FETCH;
+  yymsp = &yypParser->yystack[yypParser->yyidx];
+#ifndef NDEBUG
+  if( yyTraceFILE && yyruleno>=0
+        && yyruleno<sizeof(yyRuleName)/sizeof(yyRuleName[0]) ){
+    fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
+      yyRuleName[yyruleno]);
+  }
+#endif /* NDEBUG */
+
+  switch( yyruleno ){
+  /* Beginning here are the reduction cases.  A typical example
+  ** follows:
+  **   case 0:
+  **  #line <lineno> <grammarfile>
+  **     { ... }           // User supplied code
+  **  #line <lineno> <thisfile>
+  **     break;
+  */
+      case 0:
+#line 31 "./mod_ssi_exprparser.y"
+{
+  ctx->val.bo = ssi_val_tobool(yymsp[0].minor.yy29);
+  ctx->val.type = SSI_TYPE_BOOL;
+
+  ssi_val_free(yymsp[0].minor.yy29);
+}
+#line 586 "mod_ssi_exprparser.c"
+        break;
+      case 1:
+#line 38 "./mod_ssi_exprparser.y"
+{
+  int cmp;
+
+  if (yymsp[-2].minor.yy29->type == SSI_TYPE_STRING &&
+      yymsp[0].minor.yy29->type == SSI_TYPE_STRING) {
+       cmp = strcmp(yymsp[-2].minor.yy29->str->ptr, yymsp[0].minor.yy29->str->ptr);
+  } else {
+    cmp = ssi_val_tobool(yymsp[-2].minor.yy29) - ssi_val_tobool(yymsp[0].minor.yy29);
+  }
+
+  yygotominor.yy29 = yymsp[-2].minor.yy29;
+
+  switch(yymsp[-1].minor.yy8) {
+  case SSI_COND_EQ: yygotominor.yy29->bo = (cmp == 0) ? 1 : 0; break;
+  case SSI_COND_NE: yygotominor.yy29->bo = (cmp != 0) ? 1 : 0; break;
+  case SSI_COND_GE: yygotominor.yy29->bo = (cmp >= 0) ? 1 : 0; break;
+  case SSI_COND_GT: yygotominor.yy29->bo = (cmp > 0) ? 1 : 0; break;
+  case SSI_COND_LE: yygotominor.yy29->bo = (cmp <= 0) ? 1 : 0; break;
+  case SSI_COND_LT: yygotominor.yy29->bo = (cmp < 0) ? 1 : 0; break;
+  }
+
+  yygotominor.yy29->type = SSI_TYPE_BOOL;
+
+  ssi_val_free(yymsp[0].minor.yy29);
+}
+#line 615 "mod_ssi_exprparser.c"
+        break;
+      case 2:
+#line 63 "./mod_ssi_exprparser.y"
+{
+  yygotominor.yy29 = yymsp[0].minor.yy29;
+}
+#line 622 "mod_ssi_exprparser.c"
+        break;
+      case 3:
+#line 66 "./mod_ssi_exprparser.y"
+{
+  int e;
+
+  e = ssi_val_tobool(yymsp[-2].minor.yy29) && ssi_val_tobool(yymsp[0].minor.yy29);
+
+  yygotominor.yy29 = yymsp[-2].minor.yy29;
+  yygotominor.yy29->bo = e;
+  yygotominor.yy29->type = SSI_TYPE_BOOL;
+  ssi_val_free(yymsp[0].minor.yy29);
+}
+#line 636 "mod_ssi_exprparser.c"
+  yy_destructor(1,&yymsp[-1].minor);
+        break;
+      case 4:
+#line 77 "./mod_ssi_exprparser.y"
+{
+  int e;
+
+  e = ssi_val_tobool(yymsp[-2].minor.yy29) || ssi_val_tobool(yymsp[0].minor.yy29);
+
+  yygotominor.yy29 = yymsp[-2].minor.yy29;
+  yygotominor.yy29->bo = e;
+  yygotominor.yy29->type = SSI_TYPE_BOOL;
+  ssi_val_free(yymsp[0].minor.yy29);
+}
+#line 651 "mod_ssi_exprparser.c"
+  yy_destructor(2,&yymsp[-1].minor);
+        break;
+      case 5:
+#line 88 "./mod_ssi_exprparser.y"
+{
+  int e;
+
+  e = !ssi_val_tobool(yymsp[0].minor.yy29);
+
+  yygotominor.yy29 = yymsp[0].minor.yy29;
+  yygotominor.yy29->bo = e;
+  yygotominor.yy29->type = SSI_TYPE_BOOL;
+}
+#line 665 "mod_ssi_exprparser.c"
+  yy_destructor(9,&yymsp[-1].minor);
+        break;
+      case 6:
+#line 97 "./mod_ssi_exprparser.y"
+{
+  yygotominor.yy29 = yymsp[-1].minor.yy29;
+}
+#line 673 "mod_ssi_exprparser.c"
+  yy_destructor(10,&yymsp[-2].minor);
+  yy_destructor(11,&yymsp[0].minor);
+        break;
+      case 7:
+#line 101 "./mod_ssi_exprparser.y"
+{
+  yygotominor.yy29 = ssi_val_init();
+  yygotominor.yy29->str = yymsp[0].minor.yy19;
+  yygotominor.yy29->type = SSI_TYPE_STRING;
+}
+#line 684 "mod_ssi_exprparser.c"
+        break;
+      case 8:
+#line 107 "./mod_ssi_exprparser.y"
+{
+  yygotominor.yy19 = buffer_init_string(yymsp[0].minor.yy0->ptr);
+}
+#line 691 "mod_ssi_exprparser.c"
+        break;
+      case 9:
+#line 111 "./mod_ssi_exprparser.y"
+{
+  yygotominor.yy19 = yymsp[-1].minor.yy19;
+  buffer_append_string_buffer(yygotominor.yy19, yymsp[0].minor.yy0);
+}
+#line 699 "mod_ssi_exprparser.c"
+        break;
+      case 10:
+#line 116 "./mod_ssi_exprparser.y"
+{ yygotominor.yy8 = SSI_COND_EQ; }
+#line 704 "mod_ssi_exprparser.c"
+  yy_destructor(3,&yymsp[0].minor);
+        break;
+      case 11:
+#line 117 "./mod_ssi_exprparser.y"
+{ yygotominor.yy8 = SSI_COND_NE; }
+#line 710 "mod_ssi_exprparser.c"
+  yy_destructor(4,&yymsp[0].minor);
+        break;
+      case 12:
+#line 118 "./mod_ssi_exprparser.y"
+{ yygotominor.yy8 = SSI_COND_LE; }
+#line 716 "mod_ssi_exprparser.c"
+  yy_destructor(8,&yymsp[0].minor);
+        break;
+      case 13:
+#line 119 "./mod_ssi_exprparser.y"
+{ yygotominor.yy8 = SSI_COND_GE; }
+#line 722 "mod_ssi_exprparser.c"
+  yy_destructor(6,&yymsp[0].minor);
+        break;
+      case 14:
+#line 120 "./mod_ssi_exprparser.y"
+{ yygotominor.yy8 = SSI_COND_LT; }
+#line 728 "mod_ssi_exprparser.c"
+  yy_destructor(7,&yymsp[0].minor);
+        break;
+      case 15:
+#line 121 "./mod_ssi_exprparser.y"
+{ yygotominor.yy8 = SSI_COND_GT; }
+#line 734 "mod_ssi_exprparser.c"
+  yy_destructor(5,&yymsp[0].minor);
+        break;
+  };
+  yygoto = yyRuleInfo[yyruleno].lhs;
+  yysize = yyRuleInfo[yyruleno].nrhs;
+  yypParser->yyidx -= yysize;
+  yyact = yy_find_reduce_action(yypParser,yygoto);
+  if( yyact < YYNSTATE ){
+    yy_shift(yypParser,yyact,yygoto,&yygotominor);
+  }else if( yyact == YYNSTATE + YYNRULE + 1 ){
+    yy_accept(yypParser);
+  }
+}
+
+/*
+** The following code executes when the parse fails
+*/
+static void yy_parse_failed(
+  yyParser *yypParser           /* The parser */
+){
+  ssiexprparserARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser fails */
+#line 16 "./mod_ssi_exprparser.y"
+
+  ctx->ok = 0;
+
+#line 768 "mod_ssi_exprparser.c"
+  ssiexprparserARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following code executes when a syntax error first occurs.
+*/
+static void yy_syntax_error(
+  yyParser *yypParser,           /* The parser */
+  int yymajor,                   /* The major type of the error token */
+  YYMINORTYPE yyminor            /* The minor type of the error token */
+){
+  ssiexprparserARG_FETCH;
+#define TOKEN (yyminor.yy0)
+  ssiexprparserARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/*
+** The following is executed when the parser accepts
+*/
+static void yy_accept(
+  yyParser *yypParser           /* The parser */
+){
+  ssiexprparserARG_FETCH;
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
+  }
+#endif
+  while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
+  /* Here code is inserted which will be executed whenever the
+  ** parser accepts */
+  ssiexprparserARG_STORE; /* Suppress warning about unused %extra_argument variable */
+}
+
+/* The main parser program.
+** The first argument is a pointer to a structure obtained from
+** "ssiexprparserAlloc" which describes the current state of the parser.
+** The second argument is the major token number.  The third is
+** the minor token.  The fourth optional argument is whatever the
+** user wants (and specified in the grammar) and is available for
+** use by the action routines.
+**
+** Inputs:
+** <ul>
+** <li> A pointer to the parser (an opaque structure.)
+** <li> The major token number.
+** <li> The minor token number.
+** <li> An option argument of a grammar-specified type.
+** </ul>
+**
+** Outputs:
+** None.
+*/
+void ssiexprparser(
+  void *yyp,                   /* The parser */
+  int yymajor,                 /* The major token code number */
+  ssiexprparserTOKENTYPE yyminor       /* The value for the token */
+  ssiexprparserARG_PDECL               /* Optional %extra_argument parameter */
+){
+  YYMINORTYPE yyminorunion;
+  int yyact;            /* The parser action. */
+  int yyendofinput;     /* True if we are at the end of input */
+  int yyerrorhit = 0;   /* True if yymajor has invoked an error */
+  yyParser *yypParser;  /* The parser */
+
+  /* (re)initialize the parser, if necessary */
+  yypParser = (yyParser*)yyp;
+  if( yypParser->yyidx<0 ){
+    if( yymajor==0 ) return;
+    yypParser->yyidx = 0;
+    yypParser->yyerrcnt = -1;
+    yypParser->yystack[0].stateno = 0;
+    yypParser->yystack[0].major = 0;
+  }
+  yyminorunion.yy0 = yyminor;
+  yyendofinput = (yymajor==0);
+  ssiexprparserARG_STORE;
+
+#ifndef NDEBUG
+  if( yyTraceFILE ){
+    fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
+  }
+#endif
+
+  do{
+    yyact = yy_find_shift_action(yypParser,yymajor);
+    if( yyact<YYNSTATE ){
+      yy_shift(yypParser,yyact,yymajor,&yyminorunion);
+      yypParser->yyerrcnt--;
+      if( yyendofinput && yypParser->yyidx>=0 ){
+        yymajor = 0;
+      }else{
+        yymajor = YYNOCODE;
+      }
+    }else if( yyact < YYNSTATE + YYNRULE ){
+      yy_reduce(yypParser,yyact-YYNSTATE);
+    }else if( yyact == YY_ERROR_ACTION ){
+      int yymx;
+#ifndef NDEBUG
+      if( yyTraceFILE ){
+        fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
+      }
+#endif
+#ifdef YYERRORSYMBOL
+      /* A syntax error has occurred.
+      ** The response to an error depends upon whether or not the
+      ** grammar defines an error token "ERROR".
+      **
+      ** This is what we do if the grammar does define ERROR:
+      **
+      **  * Call the %syntax_error function.
+      **
+      **  * Begin popping the stack until we enter a state where
+      **    it is legal to shift the error symbol, then shift
+      **    the error symbol.
+      **
+      **  * Set the error count to three.
+      **
+      **  * Begin accepting and shifting new tokens.  No new error
+      **    processing will occur until three tokens have been
+      **    shifted successfully.
+      **
+      */
+      if( yypParser->yyerrcnt<0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yymx = yypParser->yystack[yypParser->yyidx].major;
+      if( yymx==YYERRORSYMBOL || yyerrorhit ){
+#ifndef NDEBUG
+        if( yyTraceFILE ){
+          fprintf(yyTraceFILE,"%sDiscard input token %s\n",
+             yyTracePrompt,yyTokenName[yymajor]);
+        }
+#endif
+        yy_destructor(yymajor,&yyminorunion);
+        yymajor = YYNOCODE;
+      }else{
+         while(
+          yypParser->yyidx >= 0 &&
+          yymx != YYERRORSYMBOL &&
+          (yyact = yy_find_shift_action(yypParser,YYERRORSYMBOL)) >= YYNSTATE
+        ){
+          yy_pop_parser_stack(yypParser);
+        }
+        if( yypParser->yyidx < 0 || yymajor==0 ){
+          yy_destructor(yymajor,&yyminorunion);
+          yy_parse_failed(yypParser);
+          yymajor = YYNOCODE;
+        }else if( yymx!=YYERRORSYMBOL ){
+          YYMINORTYPE u2;
+          u2.YYERRSYMDT = 0;
+          yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
+        }
+      }
+      yypParser->yyerrcnt = 3;
+      yyerrorhit = 1;
+#else  /* YYERRORSYMBOL is not defined */
+      /* This is what we do if the grammar does not define ERROR:
+      **
+      **  * Report an error message, and throw away the input token.
+      **
+      **  * If the input token is $, then fail the parse.
+      **
+      ** As before, subsequent error messages are suppressed until
+      ** three input tokens have been successfully shifted.
+      */
+      if( yypParser->yyerrcnt<=0 ){
+        yy_syntax_error(yypParser,yymajor,yyminorunion);
+      }
+      yypParser->yyerrcnt = 3;
+      yy_destructor(yymajor,&yyminorunion);
+      if( yyendofinput ){
+        yy_parse_failed(yypParser);
+      }
+      yymajor = YYNOCODE;
+#endif
+    }else{
+      yy_accept(yypParser);
+      yymajor = YYNOCODE;
+    }
+  }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
+  return;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,12 @@
+#define TK_AND                             1
+#define TK_OR                              2
+#define TK_EQ                              3
+#define TK_NE                              4
+#define TK_GT                              5
+#define TK_GE                              6
+#define TK_LT                              7
+#define TK_LE                              8
+#define TK_NOT                             9
+#define TK_LPARAN                         10
+#define TK_RPARAN                         11
+#define TK_VALUE                          12

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.y
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.y	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_ssi_exprparser.y	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,121 @@
+%token_prefix TK_
+%token_type {buffer *}
+%extra_argument {ssi_ctx_t *ctx}
+%name ssiexprparser
+
+%include {
+#include <assert.h>
+#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include "mod_ssi_expr.h"
+#include "buffer.h"
+}
+
+%parse_failure {
+  ctx->ok = 0;
+}
+
+%type expr { ssi_val_t * }
+%type value { buffer * }
+%type exprline { ssi_val_t * }
+%type cond { int }
+%token_destructor { buffer_free($$); }
+
+%left AND.
+%left OR.
+%nonassoc EQ NE GT GE LT LE.
+%right NOT.
+
+input ::= exprline(B). {
+  ctx->val.bo = ssi_val_tobool(B);
+  ctx->val.type = SSI_TYPE_BOOL;
+
+  ssi_val_free(B);
+}
+
+exprline(A) ::= expr(B) cond(C) expr(D). {
+  int cmp;
+
+  if (B->type == SSI_TYPE_STRING &&
+      D->type == SSI_TYPE_STRING) {
+       cmp = strcmp(B->str->ptr, D->str->ptr);
+  } else {
+    cmp = ssi_val_tobool(B) - ssi_val_tobool(D);
+  }
+
+  A = B;
+
+  switch(C) {
+  case SSI_COND_EQ: A->bo = (cmp == 0) ? 1 : 0; break;
+  case SSI_COND_NE: A->bo = (cmp != 0) ? 1 : 0; break;
+  case SSI_COND_GE: A->bo = (cmp >= 0) ? 1 : 0; break;
+  case SSI_COND_GT: A->bo = (cmp > 0) ? 1 : 0; break;
+  case SSI_COND_LE: A->bo = (cmp <= 0) ? 1 : 0; break;
+  case SSI_COND_LT: A->bo = (cmp < 0) ? 1 : 0; break;
+  }
+
+  A->type = SSI_TYPE_BOOL;
+
+  ssi_val_free(D);
+}
+exprline(A) ::= expr(B). {
+  A = B;
+}
+expr(A) ::= expr(B) AND expr(C). {
+  int e;
+
+  e = ssi_val_tobool(B) && ssi_val_tobool(C);
+
+  A = B;
+  A->bo = e;
+  A->type = SSI_TYPE_BOOL;
+  ssi_val_free(C);
+}
+
+expr(A) ::= expr(B) OR expr(C). {
+  int e;
+
+  e = ssi_val_tobool(B) || ssi_val_tobool(C);
+
+  A = B;
+  A->bo = e;
+  A->type = SSI_TYPE_BOOL;
+  ssi_val_free(C);
+}
+
+expr(A) ::= NOT expr(B). {
+  int e;
+
+  e = !ssi_val_tobool(B);
+
+  A = B;
+  A->bo = e;
+  A->type = SSI_TYPE_BOOL;
+}
+expr(A) ::= LPARAN exprline(B) RPARAN. {
+  A = B;
+}
+
+expr(A) ::= value(B). {
+  A = ssi_val_init();
+  A->str = B;
+  A->type = SSI_TYPE_STRING;
+}
+
+value(A) ::= VALUE(B). {
+  A = buffer_init_string(B->ptr);
+}
+
+value(A) ::= value(B) VALUE(C). {
+  A = B;
+  buffer_append_string_buffer(A, C);
+}
+
+cond(A) ::= EQ. { A = SSI_COND_EQ; }
+cond(A) ::= NE. { A = SSI_COND_NE; }
+cond(A) ::= LE. { A = SSI_COND_LE; }
+cond(A) ::= GE. { A = SSI_COND_GE; }
+cond(A) ::= LT. { A = SSI_COND_LT; }
+cond(A) ::= GT. { A = SSI_COND_GT; }

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_staticfile.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_staticfile.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_staticfile.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,547 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#include "stat_cache.h"
+#include "etag.h"
+#include "http_chunk.h"
+#include "response.h"
+
+/**
+ * this is a staticfile for a lighttpd plugin
+ *
+ */
+
+
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	array *exclude_ext;
+	unsigned short etags_used;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *range_buf;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_staticfile_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->range_buf = buffer_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_staticfile_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			array_free(s->exclude_ext);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+	buffer_free(p->range_buf);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_staticfile_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "static-file.exclude-extensions", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "static-file.etags",    NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION }, /* 1 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->exclude_ext    = array_init();
+		s->etags_used     = 1;
+
+		cv[0].destination = s->exclude_ext;
+		cv[1].destination = &(s->etags_used);
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_staticfile_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(exclude_ext);
+	PATCH(etags_used);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("static-file.exclude-extensions"))) {
+				PATCH(exclude_ext);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("static-file.etags"))) {
+				PATCH(etags_used);
+			} 
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+static int http_response_parse_range(server *srv, connection *con, plugin_data *p) {
+	int multipart = 0;
+	int error;
+	off_t start, end;
+	const char *s, *minus;
+	char *boundary = "fkj49sn38dcn3";
+	data_string *ds;
+	stat_cache_entry *sce = NULL;
+	buffer *content_type = NULL;
+
+	if (HANDLER_ERROR == stat_cache_get_entry(srv, con, con->physical.path, &sce)) {
+		SEGFAULT();
+	}
+
+	start = 0;
+	end = sce->st.st_size - 1;
+
+	con->response.content_length = 0;
+
+	if (NULL != (ds = (data_string *)array_get_element(con->response.headers, "Content-Type"))) {
+		content_type = ds->value;
+	}
+
+	for (s = con->request.http_range, error = 0;
+	     !error && *s && NULL != (minus = strchr(s, '-')); ) {
+		char *err;
+		off_t la, le;
+
+		if (s == minus) {
+			/* -<stop> */
+
+			le = strtoll(s, &err, 10);
+
+			if (le == 0) {
+				/* RFC 2616 - 14.35.1 */
+
+				con->http_status = 416;
+				error = 1;
+			} else if (*err == '\0') {
+				/* end */
+				s = err;
+
+				end = sce->st.st_size - 1;
+				start = sce->st.st_size + le;
+			} else if (*err == ',') {
+				multipart = 1;
+				s = err + 1;
+
+				end = sce->st.st_size - 1;
+				start = sce->st.st_size + le;
+			} else {
+				error = 1;
+			}
+
+		} else if (*(minus+1) == '\0' || *(minus+1) == ',') {
+			/* <start>- */
+
+			la = strtoll(s, &err, 10);
+
+			if (err == minus) {
+				/* ok */
+
+				if (*(err + 1) == '\0') {
+					s = err + 1;
+
+					end = sce->st.st_size - 1;
+					start = la;
+
+				} else if (*(err + 1) == ',') {
+					multipart = 1;
+					s = err + 2;
+
+					end = sce->st.st_size - 1;
+					start = la;
+				} else {
+					error = 1;
+				}
+			} else {
+				/* error */
+				error = 1;
+			}
+		} else {
+			/* <start>-<stop> */
+
+			la = strtoll(s, &err, 10);
+
+			if (err == minus) {
+				le = strtoll(minus+1, &err, 10);
+
+				/* RFC 2616 - 14.35.1 */
+				if (la > le) {
+					error = 1;
+				}
+
+				if (*err == '\0') {
+					/* ok, end*/
+					s = err;
+
+					end = le;
+					start = la;
+				} else if (*err == ',') {
+					multipart = 1;
+					s = err + 1;
+
+					end = le;
+					start = la;
+				} else {
+					/* error */
+
+					error = 1;
+				}
+			} else {
+				/* error */
+
+				error = 1;
+			}
+		}
+
+		if (!error) {
+			if (start < 0) start = 0;
+
+			/* RFC 2616 - 14.35.1 */
+			if (end > sce->st.st_size - 1) end = sce->st.st_size - 1;
+
+			if (start > sce->st.st_size - 1) {
+				error = 1;
+
+				con->http_status = 416;
+			}
+		}
+
+		if (!error) {
+			if (multipart) {
+				/* write boundary-header */
+				buffer *b;
+
+				b = chunkqueue_get_append_buffer(con->write_queue);
+
+				buffer_copy_string(b, "\r\n--");
+				buffer_append_string(b, boundary);
+
+				/* write Content-Range */
+				buffer_append_string(b, "\r\nContent-Range: bytes ");
+				buffer_append_off_t(b, start);
+				buffer_append_string(b, "-");
+				buffer_append_off_t(b, end);
+				buffer_append_string(b, "/");
+				buffer_append_off_t(b, sce->st.st_size);
+
+				buffer_append_string(b, "\r\nContent-Type: ");
+				buffer_append_string_buffer(b, content_type);
+
+				/* write END-OF-HEADER */
+				buffer_append_string(b, "\r\n\r\n");
+
+				con->response.content_length += b->used - 1;
+
+			}
+
+			chunkqueue_append_file(con->write_queue, con->physical.path, start, end - start + 1);
+			con->response.content_length += end - start + 1;
+		}
+	}
+
+	/* something went wrong */
+	if (error) return -1;
+
+	if (multipart) {
+		/* add boundary end */
+		buffer *b;
+
+		b = chunkqueue_get_append_buffer(con->write_queue);
+
+		buffer_copy_string_len(b, "\r\n--", 4);
+		buffer_append_string(b, boundary);
+		buffer_append_string_len(b, "--\r\n", 4);
+
+		con->response.content_length += b->used - 1;
+
+		/* set header-fields */
+
+		buffer_copy_string(p->range_buf, "multipart/byteranges; boundary=");
+		buffer_append_string(p->range_buf, boundary);
+
+		/* overwrite content-type */
+		response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(p->range_buf));
+	} else {
+		/* add Content-Range-header */
+
+		buffer_copy_string(p->range_buf, "bytes ");
+		buffer_append_off_t(p->range_buf, start);
+		buffer_append_string(p->range_buf, "-");
+		buffer_append_off_t(p->range_buf, end);
+		buffer_append_string(p->range_buf, "/");
+		buffer_append_off_t(p->range_buf, sce->st.st_size);
+
+		response_header_insert(srv, con, CONST_STR_LEN("Content-Range"), CONST_BUF_LEN(p->range_buf));
+	}
+
+	/* ok, the file is set-up */
+	return 0;
+}
+
+URIHANDLER_FUNC(mod_staticfile_subrequest) {
+	plugin_data *p = p_d;
+	size_t k;
+	int s_len;
+	stat_cache_entry *sce = NULL;
+	buffer *mtime = NULL;
+	data_string *ds;
+	int allow_caching = 1;
+
+	/* someone else has done a decision for us */
+	if (con->http_status != 0) return HANDLER_GO_ON;
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+	if (con->physical.path->used == 0) return HANDLER_GO_ON;
+
+	/* someone else has handled this request */
+	if (con->mode != DIRECT) return HANDLER_GO_ON;
+
+	/* we only handle GET, POST and HEAD */
+	switch(con->request.http_method) {
+	case HTTP_METHOD_GET:
+	case HTTP_METHOD_POST:
+	case HTTP_METHOD_HEAD:
+		break;
+	default:
+		return HANDLER_GO_ON;
+	}
+
+	mod_staticfile_patch_connection(srv, con, p);
+
+	s_len = con->uri.path->used - 1;
+
+	/* ignore certain extensions */
+	for (k = 0; k < p->conf.exclude_ext->used; k++) {
+		ds = (data_string *)p->conf.exclude_ext->data[k];
+
+		if (ds->value->used == 0) continue;
+
+		if (buffer_is_equal_right_len(con->physical.path, ds->value, ds->value->used - 1)) {
+			return HANDLER_GO_ON;
+		}
+	}
+
+
+	if (con->conf.log_request_handling) {
+		log_error_write(srv, __FILE__, __LINE__,  "s",  "-- handling file as static file");
+	}
+
+	if (HANDLER_ERROR == stat_cache_get_entry(srv, con, con->physical.path, &sce)) {
+		con->http_status = 403;
+
+		log_error_write(srv, __FILE__, __LINE__, "sbsb",
+				"not a regular file:", con->uri.path,
+				"->", con->physical.path);
+
+		return HANDLER_FINISHED;
+	}
+
+	/* we only handline regular files */
+#ifdef HAVE_LSTAT
+	if ((sce->is_symlink == 1) && !con->conf.follow_symlink) {
+		con->http_status = 403;
+
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",  "-- access denied due symlink restriction");
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+		}
+
+		buffer_reset(con->physical.path);
+		return HANDLER_FINISHED;
+	}
+#endif
+	if (!S_ISREG(sce->st.st_mode)) {
+		con->http_status = 404;
+
+		if (con->conf.log_file_not_found) {
+			log_error_write(srv, __FILE__, __LINE__, "sbsb",
+					"not a regular file:", con->uri.path,
+					"->", sce->name);
+		}
+
+		return HANDLER_FINISHED;
+	}
+
+	/* mod_compress might set several data directly, don't overwrite them */
+
+	/* set response content-type, if not set already */
+
+	if (NULL == array_get_element(con->response.headers, "Content-Type")) {
+		if (buffer_is_empty(sce->content_type)) {
+			/* we are setting application/octet-stream, but also announce that
+			 * this header field might change in the seconds few requests 
+			 *
+			 * This should fix the aggressive caching of FF and the script download
+			 * seen by the first installations
+			 */
+			response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("application/octet-stream"));
+
+			allow_caching = 0;
+		} else {
+			response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_BUF_LEN(sce->content_type));
+		}
+	}
+
+	if (con->conf.range_requests) {
+		response_header_overwrite(srv, con, CONST_STR_LEN("Accept-Ranges"), CONST_STR_LEN("bytes"));
+	}
+
+	if (allow_caching) {
+		if (p->conf.etags_used && con->etag_flags != 0 && !buffer_is_empty(sce->etag)) {
+			if (NULL == array_get_element(con->response.headers, "ETag")) {
+				/* generate e-tag */
+				etag_mutate(con->physical.etag, sce->etag);
+
+				response_header_overwrite(srv, con, CONST_STR_LEN("ETag"), CONST_BUF_LEN(con->physical.etag));
+			}
+		}
+
+		/* prepare header */
+		if (NULL == (ds = (data_string *)array_get_element(con->response.headers, "Last-Modified"))) {
+			mtime = strftime_cache_get(srv, sce->st.st_mtime);
+			response_header_overwrite(srv, con, CONST_STR_LEN("Last-Modified"), CONST_BUF_LEN(mtime));
+		} else {
+			mtime = ds->value;
+		}
+
+		if (HANDLER_FINISHED == http_response_handle_cachable(srv, con, mtime)) {
+			return HANDLER_FINISHED;
+		}
+	}
+
+	if (con->request.http_range && con->conf.range_requests) {
+		int do_range_request = 1;
+		/* check if we have a conditional GET */
+
+		if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "If-Range"))) {
+			/* if the value is the same as our ETag, we do a Range-request,
+			 * otherwise a full 200 */
+
+			if (ds->value->ptr[0] == '"') {
+				/**
+				 * client wants a ETag
+				 */
+				if (!con->physical.etag) {
+					do_range_request = 0;
+				} else if (!buffer_is_equal(ds->value, con->physical.etag)) {
+					do_range_request = 0;
+				}
+			} else if (!mtime) {
+				/**
+				 * we don't have a Last-Modified and can match the If-Range: 
+				 *
+				 * sending all
+				 */
+				do_range_request = 0;
+			} else if (!buffer_is_equal(ds->value, mtime)) {
+				do_range_request = 0;
+			}
+		}
+
+		if (do_range_request) {
+			/* content prepared, I'm done */
+			con->file_finished = 1;
+
+			if (0 == http_response_parse_range(srv, con, p)) {
+				con->http_status = 206;
+			}
+			return HANDLER_FINISHED;
+		}
+	}
+
+	/* if we are still here, prepare body */
+
+	/* we add it here for all requests
+	 * the HEAD request will drop it afterwards again
+	 */
+	http_chunk_append_file(srv, con, con->physical.path, 0, sce->st.st_size);
+
+	con->http_status = 200;
+	con->file_finished = 1;
+
+	return HANDLER_FINISHED;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_staticfile_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("staticfile");
+
+	p->init        = mod_staticfile_init;
+	p->handle_subrequest_start = mod_staticfile_subrequest;
+	p->set_defaults  = mod_staticfile_set_defaults;
+	p->cleanup     = mod_staticfile_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_status.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_status.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_status.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,873 @@
+#define _GNU_SOURCE
+#include <sys/types.h>
+
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <time.h>
+#include <stdio.h>
+
+#include "server.h"
+#include "connections.h"
+#include "response.h"
+#include "connections.h"
+#include "log.h"
+
+#include "plugin.h"
+
+#include "inet_ntop_cache.h"
+
+typedef struct {
+	buffer *config_url;
+	buffer *status_url;
+	buffer *statistics_url;
+
+	int     sort;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	double traffic_out;
+	double requests;
+
+	double mod_5s_traffic_out[5];
+	double mod_5s_requests[5];
+	size_t mod_5s_ndx;
+
+	double rel_traffic_out;
+	double rel_requests;
+
+	double abs_traffic_out;
+	double abs_requests;
+
+	double bytes_written;
+
+	buffer *module_list;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+INIT_FUNC(mod_status_init) {
+	plugin_data *p;
+	size_t i;
+
+	p = calloc(1, sizeof(*p));
+
+	p->traffic_out = p->requests = 0;
+	p->rel_traffic_out = p->rel_requests = 0;
+	p->abs_traffic_out = p->abs_requests = 0;
+	p->bytes_written = 0;
+	p->module_list = buffer_init();
+
+	for (i = 0; i < 5; i++) {
+		p->mod_5s_traffic_out[i] = p->mod_5s_requests[i] = 0;
+	}
+
+	return p;
+}
+
+FREE_FUNC(mod_status_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	buffer_free(p->module_list);
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			buffer_free(s->status_url);
+			buffer_free(s->statistics_url);
+			buffer_free(s->config_url);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+SETDEFAULTS_FUNC(mod_status_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	config_values_t cv[] = {
+		{ "status.status-url",           NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "status.config-url",           NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ "status.enable-sort",          NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },
+		{ "status.statistics-url",       NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },
+		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->config_url    = buffer_init();
+		s->status_url    = buffer_init();
+		s->sort          = 1;
+		s->statistics_url    = buffer_init();
+
+		cv[0].destination = s->status_url;
+		cv[1].destination = s->config_url;
+		cv[2].destination = &(s->sort);
+		cv[3].destination = s->statistics_url;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+
+
+static int mod_status_row_append(buffer *b, const char *key, const char *value) {
+	BUFFER_APPEND_STRING_CONST(b, "   <tr>\n");
+	BUFFER_APPEND_STRING_CONST(b, "    <td><b>");
+	buffer_append_string(b, key);
+	BUFFER_APPEND_STRING_CONST(b, "</b></td>\n");
+	BUFFER_APPEND_STRING_CONST(b, "    <td>");
+	buffer_append_string(b, value);
+	BUFFER_APPEND_STRING_CONST(b, "</td>\n");
+	BUFFER_APPEND_STRING_CONST(b, "   </tr>\n");
+
+	return 0;
+}
+
+static int mod_status_header_append(buffer *b, const char *key) {
+	BUFFER_APPEND_STRING_CONST(b, "   <tr>\n");
+	BUFFER_APPEND_STRING_CONST(b, "    <th colspan=\"2\">");
+	buffer_append_string(b, key);
+	BUFFER_APPEND_STRING_CONST(b, "</th>\n");
+	BUFFER_APPEND_STRING_CONST(b, "   </tr>\n");
+
+	return 0;
+}
+
+static int mod_status_header_append_sort(buffer *b, void *p_d, const char* key) {
+	plugin_data *p = p_d;
+
+	if (p->conf.sort) {
+		BUFFER_APPEND_STRING_CONST(b, "<th class=\"status\"><a href=\"#\" class=\"sortheader\" onclick=\"resort(this);return false;\">");
+		buffer_append_string(b, key);
+		BUFFER_APPEND_STRING_CONST(b, "<span class=\"sortarrow\">:</span></a></th>\n");
+	} else {
+		BUFFER_APPEND_STRING_CONST(b, "<th class=\"status\">");
+		buffer_append_string(b, key);
+		BUFFER_APPEND_STRING_CONST(b, "</th>\n");
+	}
+
+	return 0;
+}
+
+static int mod_status_get_multiplier(double *avg, char *multiplier, int size) {
+	*multiplier = ' ';
+
+	if (*avg > size) { *avg /= size; *multiplier = 'k'; }
+	if (*avg > size) { *avg /= size; *multiplier = 'M'; }
+	if (*avg > size) { *avg /= size; *multiplier = 'G'; }
+	if (*avg > size) { *avg /= size; *multiplier = 'T'; }
+	if (*avg > size) { *avg /= size; *multiplier = 'P'; }
+	if (*avg > size) { *avg /= size; *multiplier = 'E'; }
+	if (*avg > size) { *avg /= size; *multiplier = 'Z'; }
+	if (*avg > size) { *avg /= size; *multiplier = 'Y'; }
+
+	return 0;
+}
+
+static handler_t mod_status_handle_server_status_html(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+	buffer *b;
+	size_t j;
+	double avg;
+	char multiplier = '\0';
+	char buf[32];
+	time_t ts;
+
+	int days, hours, mins, seconds;
+
+	b = chunkqueue_get_append_buffer(con->write_queue);
+
+	BUFFER_COPY_STRING_CONST(b,
+				 "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"
+				 "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n"
+				 "         \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"
+				 "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"
+				 " <head>\n"
+				 "  <title>Status</title>\n");
+
+	BUFFER_APPEND_STRING_CONST(b,
+				   "  <style type=\"text/css\">\n"
+				   "    table.status { border: black solid thin; }\n"
+				   "    td { white-space: nowrap; }\n"
+				   "    td.int { background-color: #f0f0f0; text-align: right }\n"
+				   "    td.string { background-color: #f0f0f0; text-align: left }\n"
+				   "    th.status { background-color: black; color: white; font-weight: bold; }\n"
+				   "    a.sortheader { background-color: black; color: white; font-weight: bold; text-decoration: none; display: block; }\n"
+				   "    span.sortarrow { color: white; text-decoration: none; }\n"
+				   "  </style>\n");
+
+	if (p->conf.sort) {
+		BUFFER_APPEND_STRING_CONST(b,
+					   "<script type=\"text/javascript\">\n"
+					   "// <!--\n"
+					   "var sort_column;\n"
+					   "var prev_span = null;\n");
+
+		BUFFER_APPEND_STRING_CONST(b,
+					   "function get_inner_text(el) {\n"
+					   " if((typeof el == 'string')||(typeof el == 'undefined'))\n"
+					   "  return el;\n"
+					   " if(el.innerText)\n"
+					   "  return el.innerText;\n"
+					   " else {\n"
+					   "  var str = \"\";\n"
+					   "  var cs = el.childNodes;\n"
+					   "  var l = cs.length;\n"
+					   "  for (i=0;i<l;i++) {\n"
+					   "   if (cs[i].nodeType==1) str += get_inner_text(cs[i]);\n"
+					   "   else if (cs[i].nodeType==3) str += cs[i].nodeValue;\n"
+					   "  }\n"
+					   " }\n"
+					   " return str;\n"
+					   "}\n");
+
+		BUFFER_APPEND_STRING_CONST(b,
+					   "function sortfn(a,b) {\n"
+					   " var at = get_inner_text(a.cells[sort_column]);\n"
+					   " var bt = get_inner_text(b.cells[sort_column]);\n"
+					   " if (a.cells[sort_column].className == 'int') {\n"
+					   "  return parseInt(at)-parseInt(bt);\n"
+					   " } else {\n"
+					   "  aa = at.toLowerCase();\n"
+					   "  bb = bt.toLowerCase();\n"
+					   "  if (aa==bb) return 0;\n"
+					   "  else if (aa<bb) return -1;\n"
+					   "  else return 1;\n"
+					   " }\n"
+					   "}\n");
+
+		BUFFER_APPEND_STRING_CONST(b,
+					   "function resort(lnk) {\n"
+					   " var span = lnk.childNodes[1];\n"
+					   " var table = lnk.parentNode.parentNode.parentNode.parentNode;\n"
+					   " var rows = new Array();\n"
+					   " for (j=1;j<table.rows.length;j++)\n"
+					   "  rows[j-1] = table.rows[j];\n"
+					   " sort_column = lnk.parentNode.cellIndex;\n"
+					   " rows.sort(sortfn);\n");
+
+		BUFFER_APPEND_STRING_CONST(b,
+					   " if (prev_span != null) prev_span.innerHTML = '';\n"
+					   " if (span.getAttribute('sortdir')=='down') {\n"
+					   "  span.innerHTML = '↑';\n"
+					   "  span.setAttribute('sortdir','up');\n"
+					   "  rows.reverse();\n"
+					   " } else {\n"
+					   "  span.innerHTML = '↓';\n"
+					   "  span.setAttribute('sortdir','down');\n"
+					   " }\n"
+					   " for (i=0;i<rows.length;i++)\n"
+					   "  table.tBodies[0].appendChild(rows[i]);\n"
+					   " prev_span = span;\n"
+					   "}\n"
+					   "// -->\n"
+					   "</script>\n");
+	}
+
+	BUFFER_APPEND_STRING_CONST(b,
+				 " </head>\n"
+				 " <body>\n");
+
+
+
+	/* connection listing */
+	BUFFER_APPEND_STRING_CONST(b, "<h1>Server-Status</h1>");
+
+	BUFFER_APPEND_STRING_CONST(b, "<table summary=\"status\" class=\"status\">");
+	BUFFER_APPEND_STRING_CONST(b, "<tr><td>Hostname</td><td class=\"string\">");
+	buffer_append_string_buffer(b, con->uri.authority);
+	BUFFER_APPEND_STRING_CONST(b, " (");
+	buffer_append_string_buffer(b, con->server_name);
+	BUFFER_APPEND_STRING_CONST(b, ")</td></tr>\n");
+	BUFFER_APPEND_STRING_CONST(b, "<tr><td>Uptime</td><td class=\"string\">");
+
+	ts = srv->cur_ts - srv->startup_ts;
+
+	days = ts / (60 * 60 * 24);
+	ts %= (60 * 60 * 24);
+
+	hours = ts / (60 * 60);
+	ts %= (60 * 60);
+
+	mins = ts / (60);
+	ts %= (60);
+
+	seconds = ts;
+
+	if (days) {
+		buffer_append_long(b, days);
+		BUFFER_APPEND_STRING_CONST(b, " days ");
+	}
+
+	if (hours) {
+		buffer_append_long(b, hours);
+		BUFFER_APPEND_STRING_CONST(b, " hours ");
+	}
+
+	if (mins) {
+		buffer_append_long(b, mins);
+		BUFFER_APPEND_STRING_CONST(b, " min ");
+	}
+
+	buffer_append_long(b, seconds);
+	BUFFER_APPEND_STRING_CONST(b, " s");
+
+	BUFFER_APPEND_STRING_CONST(b, "</td></tr>\n");
+	BUFFER_APPEND_STRING_CONST(b, "<tr><td>Started at</td><td class=\"string\">");
+
+	ts = srv->startup_ts;
+
+	strftime(buf, sizeof(buf) - 1, "%Y-%m-%d %H:%M:%S", localtime(&ts));
+	buffer_append_string(b, buf);
+	BUFFER_APPEND_STRING_CONST(b, "</td></tr>\n");
+
+
+	BUFFER_APPEND_STRING_CONST(b, "<tr><th colspan=\"2\">absolute (since start)</th></tr>\n");
+
+	BUFFER_APPEND_STRING_CONST(b, "<tr><td>Requests</td><td class=\"string\">");
+	avg = p->abs_requests;
+
+	mod_status_get_multiplier(&avg, &multiplier, 1000);
+
+	buffer_append_long(b, avg);
+	BUFFER_APPEND_STRING_CONST(b, " ");
+	if (multiplier)	buffer_append_string_len(b, &multiplier, 1);
+	BUFFER_APPEND_STRING_CONST(b, "req</td></tr>\n");
+
+	BUFFER_APPEND_STRING_CONST(b, "<tr><td>Traffic</td><td class=\"string\">");
+	avg = p->abs_traffic_out;
+
+	mod_status_get_multiplier(&avg, &multiplier, 1024);
+
+	sprintf(buf, "%.2f", avg);
+	buffer_append_string(b, buf);
+	BUFFER_APPEND_STRING_CONST(b, " ");
+	if (multiplier)	buffer_append_string_len(b, &multiplier, 1);
+	BUFFER_APPEND_STRING_CONST(b, "byte</td></tr>\n");
+
+
+
+	BUFFER_APPEND_STRING_CONST(b, "<tr><th colspan=\"2\">average (since start)</th></tr>\n");
+
+	BUFFER_APPEND_STRING_CONST(b, "<tr><td>Requests</td><td class=\"string\">");
+	avg = p->abs_requests / (srv->cur_ts - srv->startup_ts);
+
+	mod_status_get_multiplier(&avg, &multiplier, 1000);
+
+	buffer_append_long(b, avg);
+	BUFFER_APPEND_STRING_CONST(b, " ");
+	if (multiplier)	buffer_append_string_len(b, &multiplier, 1);
+	BUFFER_APPEND_STRING_CONST(b, "req/s</td></tr>\n");
+
+	BUFFER_APPEND_STRING_CONST(b, "<tr><td>Traffic</td><td class=\"string\">");
+	avg = p->abs_traffic_out / (srv->cur_ts - srv->startup_ts);
+
+	mod_status_get_multiplier(&avg, &multiplier, 1024);
+
+	sprintf(buf, "%.2f", avg);
+	buffer_append_string(b, buf);
+	BUFFER_APPEND_STRING_CONST(b, " ");
+	if (multiplier)	buffer_append_string_len(b, &multiplier, 1);
+	BUFFER_APPEND_STRING_CONST(b, "byte/s</td></tr>\n");
+
+
+
+	BUFFER_APPEND_STRING_CONST(b, "<tr><th colspan=\"2\">average (5s sliding average)</th></tr>\n");
+	for (j = 0, avg = 0; j < 5; j++) {
+		avg += p->mod_5s_requests[j];
+	}
+
+	avg /= 5;
+
+	BUFFER_APPEND_STRING_CONST(b, "<tr><td>Requests</td><td class=\"string\">");
+
+	mod_status_get_multiplier(&avg, &multiplier, 1000);
+
+	buffer_append_long(b, avg);
+	BUFFER_APPEND_STRING_CONST(b, " ");
+	if (multiplier)	buffer_append_string_len(b, &multiplier, 1);
+
+	BUFFER_APPEND_STRING_CONST(b, "req/s</td></tr>\n");
+
+	for (j = 0, avg = 0; j < 5; j++) {
+		avg += p->mod_5s_traffic_out[j];
+	}
+
+	avg /= 5;
+
+	BUFFER_APPEND_STRING_CONST(b, "<tr><td>Traffic</td><td class=\"string\">");
+
+	mod_status_get_multiplier(&avg, &multiplier, 1024);
+
+	sprintf(buf, "%.2f", avg);
+	buffer_append_string(b, buf);
+	BUFFER_APPEND_STRING_CONST(b, " ");
+	if (multiplier)	buffer_append_string_len(b, &multiplier, 1);
+	BUFFER_APPEND_STRING_CONST(b, "byte/s</td></tr>\n");
+
+	BUFFER_APPEND_STRING_CONST(b, "</table>\n");
+
+
+	BUFFER_APPEND_STRING_CONST(b, "<hr />\n<pre><b>legend</b>\n");
+	BUFFER_APPEND_STRING_CONST(b, ". = connect, C = close, E = hard error\n");
+	BUFFER_APPEND_STRING_CONST(b, "r = read, R = read-POST, W = write, h = handle-request\n");
+	BUFFER_APPEND_STRING_CONST(b, "q = request-start,  Q = request-end\n");
+	BUFFER_APPEND_STRING_CONST(b, "s = response-start, S = response-end\n");
+
+	BUFFER_APPEND_STRING_CONST(b, "<b>");
+	buffer_append_long(b, srv->conns->used);
+	BUFFER_APPEND_STRING_CONST(b, " connections</b>\n");
+
+	for (j = 0; j < srv->conns->used; j++) {
+		connection *c = srv->conns->ptr[j];
+		const char *state = connection_get_short_state(c->state);
+
+		buffer_append_string_len(b, state, 1);
+
+		if (((j + 1) % 50) == 0) {
+			BUFFER_APPEND_STRING_CONST(b, "\n");
+		}
+	}
+
+	BUFFER_APPEND_STRING_CONST(b, "\n</pre><hr />\n<h2>Connections</h2>\n");
+
+	BUFFER_APPEND_STRING_CONST(b, "<table summary=\"status\" class=\"status\">\n");
+	BUFFER_APPEND_STRING_CONST(b, "<tr>");
+	mod_status_header_append_sort(b, p_d, "Client IP");
+	mod_status_header_append_sort(b, p_d, "Read");
+	mod_status_header_append_sort(b, p_d, "Written");
+	mod_status_header_append_sort(b, p_d, "State");
+	mod_status_header_append_sort(b, p_d, "Time");
+	mod_status_header_append_sort(b, p_d, "Host");
+	mod_status_header_append_sort(b, p_d, "URI");
+	mod_status_header_append_sort(b, p_d, "File");
+	BUFFER_APPEND_STRING_CONST(b, "</tr>\n");
+
+	for (j = 0; j < srv->conns->used; j++) {
+		connection *c = srv->conns->ptr[j];
+
+		BUFFER_APPEND_STRING_CONST(b, "<tr><td class=\"string\">");
+
+		buffer_append_string(b, inet_ntop_cache_get_ip(srv, &(c->dst_addr)));
+
+		BUFFER_APPEND_STRING_CONST(b, "</td><td class=\"int\">");
+
+		if (con->request.content_length) {
+			buffer_append_long(b, c->request_content_queue->bytes_in);
+			BUFFER_APPEND_STRING_CONST(b, "/");
+			buffer_append_long(b, c->request.content_length);
+		} else {
+			BUFFER_APPEND_STRING_CONST(b, "0/0");
+		}
+
+		BUFFER_APPEND_STRING_CONST(b, "</td><td class=\"int\">");
+
+		buffer_append_off_t(b, chunkqueue_written(c->write_queue));
+		BUFFER_APPEND_STRING_CONST(b, "/");
+		buffer_append_off_t(b, chunkqueue_length(c->write_queue));
+
+		BUFFER_APPEND_STRING_CONST(b, "</td><td class=\"string\">");
+
+		buffer_append_string(b, connection_get_state(c->state));
+
+		BUFFER_APPEND_STRING_CONST(b, "</td><td class=\"int\">");
+
+		buffer_append_long(b, srv->cur_ts - c->request_start);
+
+		BUFFER_APPEND_STRING_CONST(b, "</td><td class=\"string\">");
+
+		if (buffer_is_empty(c->server_name)) {
+			buffer_append_string_buffer(b, c->uri.authority);
+		}
+		else {
+			buffer_append_string_buffer(b, c->server_name);
+		}
+
+		BUFFER_APPEND_STRING_CONST(b, "</td><td class=\"string\">");
+
+		if (!buffer_is_empty(c->uri.path)) {
+			buffer_append_string_encoded(b, CONST_BUF_LEN(c->uri.path), ENCODING_HTML);
+		}
+
+		if (!buffer_is_empty(c->uri.query)) {
+			BUFFER_APPEND_STRING_CONST(b, "?");
+			buffer_append_string_encoded(b, CONST_BUF_LEN(c->uri.query), ENCODING_HTML);
+		}
+
+		if (!buffer_is_empty(c->request.orig_uri)) {
+			BUFFER_APPEND_STRING_CONST(b, " (");
+			buffer_append_string_encoded(b, CONST_BUF_LEN(c->request.orig_uri), ENCODING_HTML);
+			BUFFER_APPEND_STRING_CONST(b, ")");
+		}
+		BUFFER_APPEND_STRING_CONST(b, "</td><td class=\"string\">");
+
+		buffer_append_string_buffer(b, c->physical.path);
+
+		BUFFER_APPEND_STRING_CONST(b, "</td></tr>\n");
+	}
+
+
+	BUFFER_APPEND_STRING_CONST(b,
+		      "</table>\n");
+
+
+	BUFFER_APPEND_STRING_CONST(b,
+		      " </body>\n"
+		      "</html>\n"
+		      );
+
+	response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/html"));
+
+	return 0;
+}
+
+
+static handler_t mod_status_handle_server_status_text(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+	buffer *b;
+	double avg;
+	time_t ts;
+	char buf[32];
+	unsigned int k;
+	unsigned int l;
+
+	b = chunkqueue_get_append_buffer(con->write_queue);
+
+	/* output total number of requests */
+	BUFFER_APPEND_STRING_CONST(b, "Total Accesses: ");
+	avg = p->abs_requests;
+	snprintf(buf, sizeof(buf) - 1, "%.0f", avg);
+	buffer_append_string(b, buf);
+	BUFFER_APPEND_STRING_CONST(b, "\n");
+
+	/* output total traffic out in kbytes */
+	BUFFER_APPEND_STRING_CONST(b, "Total kBytes: ");
+	avg = p->abs_traffic_out / 1024;
+	snprintf(buf, sizeof(buf) - 1, "%.0f", avg);
+	buffer_append_string(b, buf);
+	BUFFER_APPEND_STRING_CONST(b, "\n");
+
+	/* output uptime */
+	BUFFER_APPEND_STRING_CONST(b, "Uptime: ");
+	ts = srv->cur_ts - srv->startup_ts;
+	buffer_append_long(b, ts);
+	BUFFER_APPEND_STRING_CONST(b, "\n");
+
+	/* output busy servers */
+	BUFFER_APPEND_STRING_CONST(b, "BusyServers: ");
+	buffer_append_long(b, srv->conns->used);
+	BUFFER_APPEND_STRING_CONST(b, "\n");
+
+	BUFFER_APPEND_STRING_CONST(b, "IdleServers: ");
+       buffer_append_long(b, srv->conns->size - srv->conns->used);
+       BUFFER_APPEND_STRING_CONST(b, "\n");
+
+       /* output scoreboard */
+       BUFFER_APPEND_STRING_CONST(b, "Scoreboard: ");
+       for (k = 0; k < srv->conns->used; k++) {
+        	connection *c = srv->conns->ptr[k];
+		const char *state = connection_get_short_state(c->state);
+		buffer_append_string_len(b, state, 1);
+	}
+	for (l = 0; l < srv->conns->size - srv->conns->used; l++) {
+		BUFFER_APPEND_STRING_CONST(b, "_");
+	}
+	BUFFER_APPEND_STRING_CONST(b, "\n");
+
+	/* set text/plain output */
+
+	response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/plain"));
+
+	return 0;
+}
+
+static handler_t mod_status_handle_server_statistics(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+	buffer *b = p->module_list;
+	size_t i;
+	array *st = srv->status;
+
+	if (0 == st->used) {
+		/* we have nothing to send */
+		con->http_status = 204;
+		con->file_finished = 1;
+
+		return HANDLER_FINISHED;
+	}
+
+	b = chunkqueue_get_append_buffer(con->write_queue);
+
+	for (i = 0; i < st->used; i++) {
+		size_t ndx = st->sorted[i];
+
+		buffer_append_string_buffer(b, st->data[ndx]->key);
+		buffer_append_string(b, ": ");
+		buffer_append_long(b, ((data_integer *)(st->data[ndx]))->value);
+		buffer_append_string(b, "\n");
+	}
+
+	response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/plain"));
+
+	con->http_status = 200;
+	con->file_finished = 1;
+
+	return HANDLER_FINISHED;
+}
+
+
+static handler_t mod_status_handle_server_status(server *srv, connection *con, void *p_d) {
+
+	if (buffer_is_equal_string(con->uri.query, CONST_STR_LEN("auto"))) {
+		mod_status_handle_server_status_text(srv, con, p_d);
+	} else {
+		mod_status_handle_server_status_html(srv, con, p_d);
+	}
+
+	con->http_status = 200;
+	con->file_finished = 1;
+
+	return HANDLER_FINISHED;
+}
+
+
+static handler_t mod_status_handle_server_config(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+	buffer *b, *m = p->module_list;
+	size_t i;
+
+	struct ev_map { fdevent_handler_t et; const char *name; } event_handlers[] =
+	{
+		/* - poll is most reliable
+		 * - select works everywhere
+		 * - linux-* are experimental
+		 */
+#ifdef USE_POLL
+		{ FDEVENT_HANDLER_POLL,           "poll" },
+#endif
+#ifdef USE_SELECT
+		{ FDEVENT_HANDLER_SELECT,         "select" },
+#endif
+#ifdef USE_LINUX_EPOLL
+		{ FDEVENT_HANDLER_LINUX_SYSEPOLL, "linux-sysepoll" },
+#endif
+#ifdef USE_LINUX_SIGIO
+		{ FDEVENT_HANDLER_LINUX_RTSIG,    "linux-rtsig" },
+#endif
+#ifdef USE_SOLARIS_DEVPOLL
+		{ FDEVENT_HANDLER_SOLARIS_DEVPOLL,"solaris-devpoll" },
+#endif
+#ifdef USE_FREEBSD_KQUEUE
+		{ FDEVENT_HANDLER_FREEBSD_KQUEUE, "freebsd-kqueue" },
+#endif
+		{ FDEVENT_HANDLER_UNSET,          NULL }
+	};
+
+	b = chunkqueue_get_append_buffer(con->write_queue);
+
+	BUFFER_COPY_STRING_CONST(b,
+			   "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"
+			   "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n"
+			   "         \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"
+			   "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"
+			   " <head>\n"
+			   "  <title>Status</title>\n"
+			   " </head>\n"
+			   " <body>\n"
+			   "  <h1>" PACKAGE_NAME " " PACKAGE_VERSION "</h1>\n"
+			   "  <table summary=\"status\" border=\"1\">\n");
+
+	mod_status_header_append(b, "Server-Features");
+#ifdef HAVE_PCRE_H
+	mod_status_row_append(b, "RegEx Conditionals", "enabled");
+#else
+	mod_status_row_append(b, "RegEx Conditionals", "disabled - pcre missing");
+#endif
+	mod_status_header_append(b, "Network Engine");
+
+	for (i = 0; event_handlers[i].name; i++) {
+		if (event_handlers[i].et == srv->event_handler) {
+			mod_status_row_append(b, "fd-Event-Handler", event_handlers[i].name);
+			break;
+		}
+	}
+
+	mod_status_header_append(b, "Config-File-Settings");
+
+	for (i = 0; i < srv->plugins.used; i++) {
+		plugin **ps = srv->plugins.ptr;
+
+		plugin *pl = ps[i];
+
+		if (i == 0) {
+			buffer_copy_string_buffer(m, pl->name);
+		} else {
+			BUFFER_APPEND_STRING_CONST(m, "<br />");
+			buffer_append_string_buffer(m, pl->name);
+		}
+	}
+
+	mod_status_row_append(b, "Loaded Modules", m->ptr);
+
+	BUFFER_APPEND_STRING_CONST(b, "  </table>\n");
+
+	BUFFER_APPEND_STRING_CONST(b,
+		      " </body>\n"
+		      "</html>\n"
+		      );
+
+	response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/html"));
+
+	con->http_status = 200;
+	con->file_finished = 1;
+
+	return HANDLER_FINISHED;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_status_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(status_url);
+	PATCH(config_url);
+	PATCH(sort);
+	PATCH(statistics_url);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("status.status-url"))) {
+				PATCH(status_url);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("status.config-url"))) {
+				PATCH(config_url);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("status.enable-sort"))) {
+				PATCH(sort);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("status.statistics-url"))) {
+				PATCH(statistics_url);
+			}
+		}
+	}
+
+	return 0;
+}
+
+static handler_t mod_status_handler(server *srv, connection *con, void *p_d) {
+	plugin_data *p = p_d;
+
+	mod_status_patch_connection(srv, con, p);
+
+	if (!buffer_is_empty(p->conf.status_url) &&
+	    buffer_is_equal(p->conf.status_url, con->uri.path)) {
+		return mod_status_handle_server_status(srv, con, p_d);
+	} else if (!buffer_is_empty(p->conf.config_url) &&
+	    buffer_is_equal(p->conf.config_url, con->uri.path)) {
+		return mod_status_handle_server_config(srv, con, p_d);
+	} else if (!buffer_is_empty(p->conf.statistics_url) &&
+	    buffer_is_equal(p->conf.statistics_url, con->uri.path)) {
+		return mod_status_handle_server_statistics(srv, con, p_d);
+	}
+
+	return HANDLER_GO_ON;
+}
+
+TRIGGER_FUNC(mod_status_trigger) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	/* check all connections */
+	for (i = 0; i < srv->conns->used; i++) {
+		connection *c = srv->conns->ptr[i];
+
+		p->bytes_written += c->bytes_written_cur_second;
+	}
+
+	/* a sliding average */
+	p->mod_5s_traffic_out[p->mod_5s_ndx] = p->bytes_written;
+	p->mod_5s_requests   [p->mod_5s_ndx] = p->requests;
+
+	p->mod_5s_ndx = (p->mod_5s_ndx+1) % 5;
+
+	p->abs_traffic_out += p->bytes_written;
+	p->rel_traffic_out += p->bytes_written;
+
+	p->bytes_written = 0;
+
+	/* reset storage - second */
+	p->traffic_out = 0;
+	p->requests    = 0;
+
+	return HANDLER_GO_ON;
+}
+
+REQUESTDONE_FUNC(mod_status_account) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	p->requests++;
+	p->rel_requests++;
+	p->abs_requests++;
+
+	p->bytes_written += con->bytes_written_cur_second;
+
+	return HANDLER_GO_ON;
+}
+
+int mod_status_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("status");
+
+	p->init        = mod_status_init;
+	p->cleanup     = mod_status_free;
+	p->set_defaults= mod_status_set_defaults;
+
+	p->handle_uri_clean    = mod_status_handler;
+	p->handle_trigger      = mod_status_trigger;
+	p->handle_request_done = mod_status_account;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_trigger_b4_dl.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_trigger_b4_dl.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_trigger_b4_dl.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,586 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+#include "response.h"
+#include "inet_ntop_cache.h"
+
+#if defined(HAVE_GDBM_H)
+#include <gdbm.h>
+#endif
+
+#if defined(HAVE_PCRE_H)
+#include <pcre.h>
+#endif
+
+#if defined(HAVE_MEMCACHE_H)
+#include <memcache.h>
+#endif
+
+/**
+ * this is a trigger_b4_dl for a lighttpd plugin
+ *
+ */
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	buffer *db_filename;
+
+	buffer *trigger_url;
+	buffer *download_url;
+	buffer *deny_url;
+
+	array  *mc_hosts;
+	buffer *mc_namespace;
+#if defined(HAVE_PCRE_H)
+	pcre *trigger_regex;
+	pcre *download_regex;
+#endif
+#if defined(HAVE_GDBM_H)
+	GDBM_FILE db;
+#endif
+
+#if defined(HAVE_MEMCACHE_H)
+	struct memcache *mc;
+#endif
+
+	unsigned short trigger_timeout;
+	unsigned short debug;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *tmp_buf;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_trigger_b4_dl_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->tmp_buf = buffer_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_trigger_b4_dl_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			buffer_free(s->db_filename);
+			buffer_free(s->download_url);
+			buffer_free(s->trigger_url);
+			buffer_free(s->deny_url);
+
+			buffer_free(s->mc_namespace);
+			array_free(s->mc_hosts);
+
+#if defined(HAVE_PCRE_H)
+			if (s->trigger_regex) pcre_free(s->trigger_regex);
+			if (s->download_regex) pcre_free(s->download_regex);
+#endif
+#if defined(HAVE_GDBM_H)
+			if (s->db) gdbm_close(s->db);
+#endif
+#if defined(HAVE_MEMCACHE_H)
+			if (s->mc) mc_free(s->mc);
+#endif
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	buffer_free(p->tmp_buf);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_trigger_b4_dl_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+
+	config_values_t cv[] = {
+		{ "trigger-before-download.gdbm-filename",   NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "trigger-before-download.trigger-url",     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+		{ "trigger-before-download.download-url",    NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 2 */
+		{ "trigger-before-download.deny-url",        NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 3 */
+		{ "trigger-before-download.trigger-timeout", NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 4 */
+		{ "trigger-before-download.memcache-hosts",  NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION },        /* 5 */
+		{ "trigger-before-download.memcache-namespace", NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },    /* 6 */
+		{ "trigger-before-download.debug",           NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },      /* 7 */
+		{ NULL,                        NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+#if defined(HAVE_PCRE_H)
+		const char *errptr;
+		int erroff;
+#endif
+
+		s = calloc(1, sizeof(plugin_config));
+		s->db_filename    = buffer_init();
+		s->download_url   = buffer_init();
+		s->trigger_url    = buffer_init();
+		s->deny_url       = buffer_init();
+		s->mc_hosts       = array_init();
+		s->mc_namespace   = buffer_init();
+
+		cv[0].destination = s->db_filename;
+		cv[1].destination = s->trigger_url;
+		cv[2].destination = s->download_url;
+		cv[3].destination = s->deny_url;
+		cv[4].destination = &(s->trigger_timeout);
+		cv[5].destination = s->mc_hosts;
+		cv[6].destination = s->mc_namespace;
+		cv[7].destination = &(s->debug);
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+#if defined(HAVE_GDBM_H)
+		if (!buffer_is_empty(s->db_filename)) {
+			if (NULL == (s->db = gdbm_open(s->db_filename->ptr, 4096, GDBM_WRCREAT | GDBM_NOLOCK, S_IRUSR | S_IWUSR, 0))) {
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"gdbm-open failed");
+				return HANDLER_ERROR;
+			}
+		}
+#endif
+#if defined(HAVE_PCRE_H)
+		if (!buffer_is_empty(s->download_url)) {
+			if (NULL == (s->download_regex = pcre_compile(s->download_url->ptr,
+								      0, &errptr, &erroff, NULL))) {
+
+				log_error_write(srv, __FILE__, __LINE__, "sbss",
+						"compiling regex for download-url failed:",
+						s->download_url, "pos:", erroff);
+				return HANDLER_ERROR;
+			}
+		}
+
+		if (!buffer_is_empty(s->trigger_url)) {
+			if (NULL == (s->trigger_regex = pcre_compile(s->trigger_url->ptr,
+								     0, &errptr, &erroff, NULL))) {
+
+				log_error_write(srv, __FILE__, __LINE__, "sbss",
+						"compiling regex for trigger-url failed:",
+						s->trigger_url, "pos:", erroff);
+
+				return HANDLER_ERROR;
+			}
+		}
+#endif
+
+		if (s->mc_hosts->used) {
+#if defined(HAVE_MEMCACHE_H)
+			size_t k;
+			s->mc = mc_new();
+
+			for (k = 0; k < s->mc_hosts->used; k++) {
+				data_string *ds = (data_string *)s->mc_hosts->data[k];
+
+				if (0 != mc_server_add4(s->mc, ds->value->ptr)) {
+					log_error_write(srv, __FILE__, __LINE__, "sb",
+							"connection to host failed:",
+							ds->value);
+
+					return HANDLER_ERROR;
+				}
+			}
+#else
+			log_error_write(srv, __FILE__, __LINE__, "s",
+					"memcache support is not compiled in but trigger-before-download.memcache-hosts is set, aborting");
+			return HANDLER_ERROR;
+#endif
+		}
+
+
+#if (!defined(HAVE_GDBM_H) && !defined(HAVE_MEMCACHE_H)) || !defined(HAVE_PCRE_H)
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"(either gdbm or libmemcache) and pcre are require, but were not found, aborting");
+		return HANDLER_ERROR;
+#endif
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_trigger_b4_dl_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+#if defined(HAVE_GDBM)
+	PATCH(db);
+#endif
+#if defined(HAVE_PCRE_H)
+	PATCH(download_regex);
+	PATCH(trigger_regex);
+#endif
+	PATCH(trigger_timeout);
+	PATCH(deny_url);
+	PATCH(mc_namespace);
+	PATCH(debug);
+#if defined(HAVE_MEMCACHE_H)
+	PATCH(mc);
+#endif
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("trigger-before-download.download-url"))) {
+#if defined(HAVE_PCRE_H)
+				PATCH(download_regex);
+#endif
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("trigger-before-download.trigger-url"))) {
+# if defined(HAVE_PCRE_H)
+				PATCH(trigger_regex);
+# endif
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("trigger-before-download.gdbm-filename"))) {
+#if defined(HAVE_GDBM_H)
+				PATCH(db);
+#endif
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("trigger-before-download.trigger-timeout"))) {
+				PATCH(trigger_timeout);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("trigger-before-download.debug"))) {
+				PATCH(debug);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("trigger-before-download.deny-url"))) {
+				PATCH(deny_url);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("trigger-before-download.memcache-namespace"))) {
+				PATCH(mc_namespace);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("trigger-before-download.memcache-hosts"))) {
+#if defined(HAVE_MEMCACHE_H)
+				PATCH(mc);
+#endif
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+URIHANDLER_FUNC(mod_trigger_b4_dl_uri_handler) {
+	plugin_data *p = p_d;
+	const char *remote_ip;
+	data_string *ds;
+
+#if defined(HAVE_PCRE_H)
+	int n;
+# define N 10
+	int ovec[N * 3];
+
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+
+	mod_trigger_b4_dl_patch_connection(srv, con, p);
+
+	if (!p->conf.trigger_regex || !p->conf.download_regex) return HANDLER_GO_ON;
+
+# if !defined(HAVE_GDBM_H) && !defined(HAVE_MEMCACHE_H)
+	return HANDLER_GO_ON;
+# elif defined(HAVE_GDBM_H) && defined(HAVE_MEMCACHE_H)
+	if (!p->conf.db && !p->conf.mc) return HANDLER_GO_ON;
+	if (p->conf.db && p->conf.mc) {
+		/* can't decide which one */
+
+		return HANDLER_GO_ON;
+	}
+# elif defined(HAVE_GDBM_H)
+	if (!p->conf.db) return HANDLER_GO_ON;
+# else
+	if (!p->conf.mc) return HANDLER_GO_ON;
+# endif
+
+	if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "X-Forwarded-For"))) {
+		/* X-Forwarded-For contains the ip behind the proxy */
+
+		remote_ip = ds->value->ptr;
+
+		/* memcache can't handle spaces */
+	} else {
+		remote_ip = inet_ntop_cache_get_ip(srv, &(con->dst_addr));
+	}
+
+	if (p->conf.debug) {
+		log_error_write(srv, __FILE__, __LINE__, "ss", "(debug) remote-ip:", remote_ip);
+	}
+
+	/* check if URL is a trigger -> insert IP into DB */
+	if ((n = pcre_exec(p->conf.trigger_regex, NULL, con->uri.path->ptr, con->uri.path->used - 1, 0, 0, ovec, 3 * N)) < 0) {
+		if (n != PCRE_ERROR_NOMATCH) {
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"execution error while matching:", n);
+
+			return HANDLER_ERROR;
+		}
+	} else {
+# if defined(HAVE_GDBM_H)
+		if (p->conf.db) {
+			/* the trigger matched */
+			datum key, val;
+
+			key.dptr = (char *)remote_ip;
+			key.dsize = strlen(remote_ip);
+
+			val.dptr = (char *)&(srv->cur_ts);
+			val.dsize = sizeof(srv->cur_ts);
+
+			if (0 != gdbm_store(p->conf.db, key, val, GDBM_REPLACE)) {
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"insert failed");
+			}
+		}
+# endif
+# if defined(HAVE_MEMCACHE_H)
+		if (p->conf.mc) {
+			size_t i;
+			buffer_copy_string_buffer(p->tmp_buf, p->conf.mc_namespace);
+			buffer_append_string(p->tmp_buf, remote_ip);
+
+			for (i = 0; i < p->tmp_buf->used - 1; i++) {
+				if (p->tmp_buf->ptr[i] == ' ') p->tmp_buf->ptr[i] = '-';
+			}
+
+			if (p->conf.debug) {
+				log_error_write(srv, __FILE__, __LINE__, "sb", "(debug) triggered IP:", p->tmp_buf);
+			}
+
+			if (0 != mc_set(p->conf.mc,
+					CONST_BUF_LEN(p->tmp_buf),
+					(char *)&(srv->cur_ts), sizeof(srv->cur_ts),
+					p->conf.trigger_timeout, 0)) {
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"insert failed");
+			}
+		}
+# endif
+	}
+
+	/* check if URL is a download -> check IP in DB, update timestamp */
+	if ((n = pcre_exec(p->conf.download_regex, NULL, con->uri.path->ptr, con->uri.path->used - 1, 0, 0, ovec, 3 * N)) < 0) {
+		if (n != PCRE_ERROR_NOMATCH) {
+			log_error_write(srv, __FILE__, __LINE__, "sd",
+					"execution error while matching: ", n);
+			return HANDLER_ERROR;
+		}
+	} else {
+		/* the download uri matched */
+# if defined(HAVE_GDBM_H)
+		if (p->conf.db) {
+			datum key, val;
+			time_t last_hit;
+
+			key.dptr = (char *)remote_ip;
+			key.dsize = strlen(remote_ip);
+
+			val = gdbm_fetch(p->conf.db, key);
+
+			if (val.dptr == NULL) {
+				/* not found, redirect */
+
+				response_header_insert(srv, con, CONST_STR_LEN("Location"), CONST_BUF_LEN(p->conf.deny_url));
+
+				con->http_status = 307;
+
+				return HANDLER_FINISHED;
+			}
+
+			last_hit = *(time_t *)(val.dptr);
+
+			free(val.dptr);
+
+			if (srv->cur_ts - last_hit > p->conf.trigger_timeout) {
+				/* found, but timeout, redirect */
+
+				response_header_insert(srv, con, CONST_STR_LEN("Location"), CONST_BUF_LEN(p->conf.deny_url));
+				con->http_status = 307;
+
+				if (p->conf.db) {
+					if (0 != gdbm_delete(p->conf.db, key)) {
+						log_error_write(srv, __FILE__, __LINE__, "s",
+								"delete failed");
+					}
+				}
+
+				return HANDLER_FINISHED;
+			}
+
+			val.dptr = (char *)&(srv->cur_ts);
+			val.dsize = sizeof(srv->cur_ts);
+
+			if (0 != gdbm_store(p->conf.db, key, val, GDBM_REPLACE)) {
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"insert failed");
+			}
+		}
+# endif
+
+# if defined(HAVE_MEMCACHE_H)
+		if (p->conf.mc) {
+			void *r;
+			size_t i;
+
+			buffer_copy_string_buffer(p->tmp_buf, p->conf.mc_namespace);
+			buffer_append_string(p->tmp_buf, remote_ip);
+
+			for (i = 0; i < p->tmp_buf->used - 1; i++) {
+				if (p->tmp_buf->ptr[i] == ' ') p->tmp_buf->ptr[i] = '-';
+			}
+
+			if (p->conf.debug) {
+				log_error_write(srv, __FILE__, __LINE__, "sb", "(debug) checking IP:", p->tmp_buf);
+			}
+
+			/**
+			 *
+			 * memcached is do expiration for us, as long as we can fetch it every thing is ok
+			 * and the timestamp is updated
+			 *
+			 */
+			if (NULL == (r = mc_aget(p->conf.mc,
+						 CONST_BUF_LEN(p->tmp_buf)
+						 ))) {
+
+				response_header_insert(srv, con, CONST_STR_LEN("Location"), CONST_BUF_LEN(p->conf.deny_url));
+
+				con->http_status = 307;
+
+				return HANDLER_FINISHED;
+			}
+
+			free(r);
+
+			/* set a new timeout */
+			if (0 != mc_set(p->conf.mc,
+					CONST_BUF_LEN(p->tmp_buf),
+					(char *)&(srv->cur_ts), sizeof(srv->cur_ts),
+					p->conf.trigger_timeout, 0)) {
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"insert failed");
+			}
+		}
+# endif
+	}
+
+#else
+	UNUSED(srv);
+	UNUSED(con);
+	UNUSED(p_d);
+#endif
+
+	return HANDLER_GO_ON;
+}
+
+#if defined(HAVE_GDBM_H)
+TRIGGER_FUNC(mod_trigger_b4_dl_handle_trigger) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	/* check DB each minute */
+	if (srv->cur_ts % 60 != 0) return HANDLER_GO_ON;
+
+	/* cleanup */
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s = p->config_storage[i];
+		datum key, val, okey;
+
+		if (!s->db) continue;
+
+		okey.dptr = NULL;
+
+		/* according to the manual this loop + delete does delete all entries on its way
+		 *
+		 * we don't care as the next round will remove them. We don't have to perfect here.
+		 */
+		for (key = gdbm_firstkey(s->db); key.dptr; key = gdbm_nextkey(s->db, okey)) {
+			time_t last_hit;
+			if (okey.dptr) {
+				free(okey.dptr);
+				okey.dptr = NULL;
+			}
+
+			val = gdbm_fetch(s->db, key);
+
+			last_hit = *(time_t *)(val.dptr);
+
+			free(val.dptr);
+
+			if (srv->cur_ts - last_hit > s->trigger_timeout) {
+				gdbm_delete(s->db, key);
+			}
+
+			okey = key;
+		}
+		if (okey.dptr) free(okey.dptr);
+
+		/* reorg once a day */
+		if ((srv->cur_ts % (60 * 60 * 24) != 0)) gdbm_reorganize(s->db);
+	}
+	return HANDLER_GO_ON;
+}
+#endif
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_trigger_b4_dl_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("trigger_b4_dl");
+
+	p->init        = mod_trigger_b4_dl_init;
+	p->handle_uri_clean  = mod_trigger_b4_dl_uri_handler;
+	p->set_defaults  = mod_trigger_b4_dl_set_defaults;
+#if defined(HAVE_GDBM_H)
+	p->handle_trigger  = mod_trigger_b4_dl_handle_trigger;
+#endif
+	p->cleanup     = mod_trigger_b4_dl_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_userdir.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_userdir.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_userdir.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,310 @@
+#include <sys/types.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "response.h"
+
+#include "plugin.h"
+
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+
+/* plugin config for all request/connections */
+typedef struct {
+	array *exclude_user;
+	array *include_user;
+	buffer *path;
+	buffer *basepath;
+	unsigned short letterhomes;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *username;
+	buffer *temp_path;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_userdir_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->username = buffer_init();
+	p->temp_path = buffer_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_userdir_free) {
+	plugin_data *p = p_d;
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			array_free(s->include_user);
+			array_free(s->exclude_user);
+			buffer_free(s->path);
+			buffer_free(s->basepath);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	buffer_free(p->username);
+	buffer_free(p->temp_path);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_userdir_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i;
+
+	config_values_t cv[] = {
+		{ "userdir.path",               NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "userdir.exclude-user",       NULL, T_CONFIG_ARRAY,  T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+		{ "userdir.include-user",       NULL, T_CONFIG_ARRAY,  T_CONFIG_SCOPE_CONNECTION },       /* 2 */
+		{ "userdir.basepath",           NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 3 */
+		{ "userdir.letterhomes",	NULL, T_CONFIG_BOOLEAN,T_CONFIG_SCOPE_CONNECTION },	  /* 4 */
+		{ NULL,                         NULL, T_CONFIG_UNSET,  T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->exclude_user = array_init();
+		s->include_user = array_init();
+		s->path = buffer_init();
+		s->basepath = buffer_init();
+		s->letterhomes = 0;
+
+		cv[0].destination = s->path;
+		cv[1].destination = s->exclude_user;
+		cv[2].destination = s->include_user;
+		cv[3].destination = s->basepath;
+		cv[4].destination = &(s->letterhomes);
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_userdir_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(path);
+	PATCH(exclude_user);
+	PATCH(include_user);
+	PATCH(basepath);
+	PATCH(letterhomes);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("userdir.path"))) {
+				PATCH(path);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("userdir.exclude-user"))) {
+				PATCH(exclude_user);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("userdir.include-user"))) {
+				PATCH(include_user);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("userdir.basepath"))) {
+				PATCH(basepath);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("userdir.letterhomes"))) {
+				PATCH(letterhomes);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+URIHANDLER_FUNC(mod_userdir_docroot_handler) {
+	plugin_data *p = p_d;
+	int uri_len;
+	size_t k;
+	char *rel_url;
+#ifdef HAVE_PWD_H
+	struct passwd *pwd = NULL;
+#endif
+
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+
+	mod_userdir_patch_connection(srv, con, p);
+
+	/* enforce the userdir.path to be set in the config, ugly fix for #1587;
+	 * should be replaced with a clean .enabled option in 1.5
+	 */
+	if (p->conf.path->used == 0) return HANDLER_GO_ON;
+
+	uri_len = con->uri.path->used - 1;
+
+	/* /~user/foo.html -> /home/user/public_html/foo.html */
+
+	if (con->uri.path->ptr[0] != '/' ||
+	    con->uri.path->ptr[1] != '~') return HANDLER_GO_ON;
+
+	if (NULL == (rel_url = strchr(con->uri.path->ptr + 2, '/'))) {
+		/* / is missing -> redirect to .../ as we are a user - DIRECTORY ! :) */
+		http_response_redirect_to_directory(srv, con);
+
+		return HANDLER_FINISHED;
+	}
+
+	/* /~/ is a empty username, catch it directly */
+	if (0 == rel_url - (con->uri.path->ptr + 2)) {
+		return HANDLER_GO_ON;
+	}
+
+	buffer_copy_string_len(p->username, con->uri.path->ptr + 2, rel_url - (con->uri.path->ptr + 2));
+
+	if (buffer_is_empty(p->conf.basepath)
+#ifdef HAVE_PWD_H
+	    && NULL == (pwd = getpwnam(p->username->ptr))
+#endif
+	    ) {
+		/* user not found */
+		return HANDLER_GO_ON;
+	}
+
+
+	for (k = 0; k < p->conf.exclude_user->used; k++) {
+		data_string *ds = (data_string *)p->conf.exclude_user->data[k];
+
+		if (buffer_is_equal(ds->value, p->username)) {
+			/* user in exclude list */
+			return HANDLER_GO_ON;
+		}
+	}
+
+	if (p->conf.include_user->used) {
+		int found_user = 0;
+		for (k = 0; k < p->conf.include_user->used; k++) {
+			data_string *ds = (data_string *)p->conf.include_user->data[k];
+
+			if (buffer_is_equal(ds->value, p->username)) {
+				/* user in include list */
+				found_user = 1;
+				break;
+			}
+		}
+
+		if (!found_user) return HANDLER_GO_ON;
+	}
+
+	/* we build the physical path */
+
+	if (buffer_is_empty(p->conf.basepath)) {
+#ifdef HAVE_PWD_H
+		buffer_copy_string(p->temp_path, pwd->pw_dir);
+#endif
+	} else {
+		char *cp;
+		/* check if the username is valid
+		 * a request for /~../ should lead to a directory traversal
+		 * limiting to [-_a-z0-9.] should fix it */
+
+		for (cp = p->username->ptr; *cp; cp++) {
+			char c = *cp;
+
+			if (!(c == '-' ||
+			      c == '_' ||
+			      c == '.' ||
+			      (c >= 'a' && c <= 'z') ||
+			      (c >= 'A' && c <= 'Z') ||
+			      (c >= '0' && c <= '9'))) {
+
+				return HANDLER_GO_ON;
+			}
+		}
+
+		buffer_copy_string_buffer(p->temp_path, p->conf.basepath);
+		BUFFER_APPEND_SLASH(p->temp_path);
+		if (p->conf.letterhomes) {
+			buffer_append_string_len(p->temp_path, p->username->ptr, 1);
+			BUFFER_APPEND_SLASH(p->temp_path);
+		}
+		buffer_append_string_buffer(p->temp_path, p->username);
+	}
+	BUFFER_APPEND_SLASH(p->temp_path);
+	buffer_append_string_buffer(p->temp_path, p->conf.path);
+
+	if (buffer_is_empty(p->conf.basepath)) {
+		struct stat st;
+		int ret;
+
+		ret = stat(p->temp_path->ptr, &st);
+		if (ret < 0 || S_ISDIR(st.st_mode) != 1) {
+			return HANDLER_GO_ON;
+		}
+	}
+
+	BUFFER_APPEND_SLASH(p->temp_path);
+	buffer_append_string(p->temp_path, rel_url + 1); /* skip the / */
+	buffer_copy_string_buffer(con->physical.path, p->temp_path);
+
+	buffer_reset(p->temp_path);
+
+	return HANDLER_GO_ON;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_userdir_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("userdir");
+
+	p->init           = mod_userdir_init;
+	p->handle_physical = mod_userdir_docroot_handler;
+	p->set_defaults   = mod_userdir_set_defaults;
+	p->cleanup        = mod_userdir_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_usertrack.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_usertrack.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_usertrack.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,270 @@
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+
+#include "plugin.h"
+
+#ifdef USE_OPENSSL
+# include <openssl/md5.h>
+#else
+# include "md5.h"
+#endif
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	buffer *cookie_name;
+	buffer *cookie_domain;
+	unsigned short cookie_max_age;
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_usertrack_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_usertrack_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			buffer_free(s->cookie_name);
+			buffer_free(s->cookie_domain);
+
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_usertrack_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "usertrack.cookie-name",       NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "usertrack.cookie-max-age",    NULL, T_CONFIG_SHORT, T_CONFIG_SCOPE_CONNECTION },        /* 1 */
+		{ "usertrack.cookie-domain",     NULL, T_CONFIG_STRING, T_CONFIG_SCOPE_CONNECTION },       /* 2 */
+
+		{ "usertrack.cookiename",        NULL, T_CONFIG_DEPRECATED, T_CONFIG_SCOPE_CONNECTION },
+		{ NULL,                          NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->cookie_name    = buffer_init();
+		s->cookie_domain  = buffer_init();
+		s->cookie_max_age = 0;
+
+		cv[0].destination = s->cookie_name;
+		cv[1].destination = &(s->cookie_max_age);
+		cv[2].destination = s->cookie_domain;
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		if (buffer_is_empty(s->cookie_name)) {
+			buffer_copy_string(s->cookie_name, "TRACKID");
+		} else {
+			size_t j;
+			for (j = 0; j < s->cookie_name->used - 1; j++) {
+				char c = s->cookie_name->ptr[j] | 32;
+				if (c < 'a' || c > 'z') {
+					log_error_write(srv, __FILE__, __LINE__, "sb",
+							"invalid character in usertrack.cookie-name:",
+							s->cookie_name);
+
+					return HANDLER_ERROR;
+				}
+			}
+		}
+
+		if (!buffer_is_empty(s->cookie_domain)) {
+			size_t j;
+			for (j = 0; j < s->cookie_domain->used - 1; j++) {
+				char c = s->cookie_domain->ptr[j];
+				if (c <= 32 || c >= 127 || c == '"' || c == '\\') {
+					log_error_write(srv, __FILE__, __LINE__, "sb",
+							"invalid character in usertrack.cookie-domain:",
+							s->cookie_domain);
+
+					return HANDLER_ERROR;
+				}
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH(x) \
+	p->conf.x = s->x;
+static int mod_usertrack_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH(cookie_name);
+	PATCH(cookie_domain);
+	PATCH(cookie_max_age);
+
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("usertrack.cookie-name"))) {
+				PATCH(cookie_name);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("usertrack.cookie-max-age"))) {
+				PATCH(cookie_max_age);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("usertrack.cookie-domain"))) {
+				PATCH(cookie_domain);
+			}
+		}
+	}
+
+	return 0;
+}
+#undef PATCH
+
+URIHANDLER_FUNC(mod_usertrack_uri_handler) {
+	plugin_data *p = p_d;
+	data_string *ds;
+	unsigned char h[16];
+	MD5_CTX Md5Ctx;
+	char hh[32];
+
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+
+	mod_usertrack_patch_connection(srv, con, p);
+
+	if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Cookie"))) {
+		char *g;
+		/* we have a cookie, does it contain a valid name ? */
+
+		/* parse the cookie
+		 *
+		 * check for cookiename + (WS | '=')
+		 *
+		 */
+
+		if (NULL != (g = strstr(ds->value->ptr, p->conf.cookie_name->ptr))) {
+			char *nc;
+
+			/* skip WS */
+			for (nc = g + p->conf.cookie_name->used-1; *nc == ' ' || *nc == '\t'; nc++);
+
+			if (*nc == '=') {
+				/* ok, found the key of our own cookie */
+
+				if (strlen(nc) > 32) {
+					/* i'm lazy */
+					return HANDLER_GO_ON;
+				}
+			}
+		}
+	}
+
+	/* set a cookie */
+	if (NULL == (ds = (data_string *)array_get_unused_element(con->response.headers, TYPE_STRING))) {
+		ds = data_response_init();
+	}
+	buffer_copy_string(ds->key, "Set-Cookie");
+	buffer_copy_string_buffer(ds->value, p->conf.cookie_name);
+	buffer_append_string(ds->value, "=");
+
+
+	/* taken from mod_auth.c */
+
+	/* generate shared-secret */
+	MD5_Init(&Md5Ctx);
+	MD5_Update(&Md5Ctx, (unsigned char *)con->uri.path->ptr, con->uri.path->used - 1);
+	MD5_Update(&Md5Ctx, (unsigned char *)"+", 1);
+
+	/* we assume sizeof(time_t) == 4 here, but if not it ain't a problem at all */
+	LI_ltostr(hh, srv->cur_ts);
+	MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
+	LI_ltostr(hh, rand());
+	MD5_Update(&Md5Ctx, (unsigned char *)hh, strlen(hh));
+
+	MD5_Final(h, &Md5Ctx);
+
+	buffer_append_string_encoded(ds->value, (char *)h, 16, ENCODING_HEX);
+	buffer_append_string(ds->value, "; Path=/");
+	buffer_append_string(ds->value, "; Version=1");
+
+	if (!buffer_is_empty(p->conf.cookie_domain)) {
+		buffer_append_string(ds->value, "; Domain=");
+		buffer_append_string_encoded(ds->value, CONST_BUF_LEN(p->conf.cookie_domain), ENCODING_REL_URI);
+	}
+
+	if (p->conf.cookie_max_age) {
+		buffer_append_string(ds->value, "; max-age=");
+		buffer_append_long(ds->value, p->conf.cookie_max_age);
+	}
+
+	array_insert_unique(con->response.headers, (data_unset *)ds);
+
+	return HANDLER_GO_ON;
+}
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_usertrack_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("usertrack");
+
+	p->init        = mod_usertrack_init;
+	p->handle_uri_clean  = mod_usertrack_uri_handler;
+	p->set_defaults  = mod_usertrack_set_defaults;
+	p->cleanup     = mod_usertrack_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/mod_webdav.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/mod_webdav.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/mod_webdav.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,2476 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include <unistd.h>
+#include <dirent.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#if defined(HAVE_LIBXML_H) && defined(HAVE_SQLITE3_H)
+#define USE_PROPPATCH
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+
+#include <sqlite3.h>
+#endif
+
+#if defined(HAVE_LIBXML_H) && defined(HAVE_SQLITE3_H) && defined(HAVE_UUID_UUID_H)
+#define USE_LOCKS
+#include <uuid/uuid.h>
+#endif
+
+#include "base.h"
+#include "log.h"
+#include "buffer.h"
+#include "response.h"
+
+#include "plugin.h"
+
+#include "stream.h"
+#include "stat_cache.h"
+
+#include "sys-mmap.h"
+
+/**
+ * this is a webdav for a lighttpd plugin
+ *
+ * at least a very basic one.
+ * - for now it is read-only and we only support PROPFIND
+ *
+ */
+
+#define WEBDAV_FILE_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
+#define WEBDAV_DIR_MODE  S_IRWXU | S_IRWXG | S_IRWXO
+
+/* plugin config for all request/connections */
+
+typedef struct {
+	unsigned short enabled;
+	unsigned short is_readonly;
+	unsigned short log_xml;
+
+	buffer *sqlite_db_name;
+#ifdef USE_PROPPATCH
+	sqlite3 *sql;
+	sqlite3_stmt *stmt_update_prop;
+	sqlite3_stmt *stmt_delete_prop;
+	sqlite3_stmt *stmt_select_prop;
+	sqlite3_stmt *stmt_select_propnames;
+
+	sqlite3_stmt *stmt_delete_uri;
+	sqlite3_stmt *stmt_move_uri;
+	sqlite3_stmt *stmt_copy_uri;
+
+	sqlite3_stmt *stmt_remove_lock;
+	sqlite3_stmt *stmt_create_lock;
+	sqlite3_stmt *stmt_read_lock;
+	sqlite3_stmt *stmt_read_lock_by_uri;
+	sqlite3_stmt *stmt_refresh_lock;
+#endif
+} plugin_config;
+
+typedef struct {
+	PLUGIN_DATA;
+
+	buffer *tmp_buf;
+	request_uri uri;
+	physical physical;
+
+	plugin_config **config_storage;
+
+	plugin_config conf;
+} plugin_data;
+
+/* init the plugin data */
+INIT_FUNC(mod_webdav_init) {
+	plugin_data *p;
+
+	p = calloc(1, sizeof(*p));
+
+	p->tmp_buf = buffer_init();
+
+	p->uri.scheme = buffer_init();
+	p->uri.path_raw = buffer_init();
+	p->uri.path = buffer_init();
+	p->uri.authority = buffer_init();
+
+	p->physical.path = buffer_init();
+	p->physical.rel_path = buffer_init();
+	p->physical.doc_root = buffer_init();
+	p->physical.basedir = buffer_init();
+
+	return p;
+}
+
+/* detroy the plugin data */
+FREE_FUNC(mod_webdav_free) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (!p) return HANDLER_GO_ON;
+
+	if (p->config_storage) {
+		size_t i;
+		for (i = 0; i < srv->config_context->used; i++) {
+			plugin_config *s = p->config_storage[i];
+
+			if (!s) continue;
+
+			buffer_free(s->sqlite_db_name);
+#ifdef USE_PROPPATCH
+			if (s->sql) {
+				sqlite3_finalize(s->stmt_delete_prop);
+				sqlite3_finalize(s->stmt_delete_uri);
+				sqlite3_finalize(s->stmt_copy_uri);
+				sqlite3_finalize(s->stmt_move_uri);
+				sqlite3_finalize(s->stmt_update_prop);
+				sqlite3_finalize(s->stmt_select_prop);
+				sqlite3_finalize(s->stmt_select_propnames);
+
+				sqlite3_finalize(s->stmt_read_lock);
+				sqlite3_finalize(s->stmt_read_lock_by_uri);
+				sqlite3_finalize(s->stmt_create_lock);
+				sqlite3_finalize(s->stmt_remove_lock);
+				sqlite3_finalize(s->stmt_refresh_lock);
+				sqlite3_close(s->sql);
+			}
+#endif
+			free(s);
+		}
+		free(p->config_storage);
+	}
+
+	buffer_free(p->uri.scheme);
+	buffer_free(p->uri.path_raw);
+	buffer_free(p->uri.path);
+	buffer_free(p->uri.authority);
+
+	buffer_free(p->physical.path);
+	buffer_free(p->physical.rel_path);
+	buffer_free(p->physical.doc_root);
+	buffer_free(p->physical.basedir);
+
+	buffer_free(p->tmp_buf);
+
+	free(p);
+
+	return HANDLER_GO_ON;
+}
+
+/* handle plugin config and check values */
+
+SETDEFAULTS_FUNC(mod_webdav_set_defaults) {
+	plugin_data *p = p_d;
+	size_t i = 0;
+
+	config_values_t cv[] = {
+		{ "webdav.activate",            NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },       /* 0 */
+		{ "webdav.is-readonly",         NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },       /* 1 */
+		{ "webdav.sqlite-db-name",      NULL, T_CONFIG_STRING,  T_CONFIG_SCOPE_CONNECTION },       /* 2 */
+		{ "webdav.log-xml",             NULL, T_CONFIG_BOOLEAN, T_CONFIG_SCOPE_CONNECTION },       /* 3 */
+		{ NULL,                         NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET }
+	};
+
+	if (!p) return HANDLER_ERROR;
+
+	p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *));
+
+	for (i = 0; i < srv->config_context->used; i++) {
+		plugin_config *s;
+
+		s = calloc(1, sizeof(plugin_config));
+		s->sqlite_db_name = buffer_init();
+
+		cv[0].destination = &(s->enabled);
+		cv[1].destination = &(s->is_readonly);
+		cv[2].destination = s->sqlite_db_name;
+		cv[3].destination = &(s->log_xml);
+
+		p->config_storage[i] = s;
+
+		if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv)) {
+			return HANDLER_ERROR;
+		}
+
+		if (!buffer_is_empty(s->sqlite_db_name)) {
+#ifdef USE_PROPPATCH
+			const char *next_stmt;
+			char *err;
+
+			if (SQLITE_OK != sqlite3_open(s->sqlite_db_name->ptr, &(s->sql))) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs", "sqlite3_open failed for",
+						s->sqlite_db_name,
+						sqlite3_errmsg(s->sql));
+				return HANDLER_ERROR;
+			}
+
+			if (SQLITE_OK != sqlite3_exec(s->sql,
+					"CREATE TABLE properties ("
+					"  resource TEXT NOT NULL,"
+					"  prop TEXT NOT NULL,"
+					"  ns TEXT NOT NULL,"
+					"  value TEXT NOT NULL,"
+					"  PRIMARY KEY(resource, prop, ns))",
+					NULL, NULL, &err)) {
+
+				if (0 != strcmp(err, "table properties already exists")) {
+					log_error_write(srv, __FILE__, __LINE__, "ss", "can't open transaction:", err);
+					sqlite3_free(err);
+
+					return HANDLER_ERROR;
+				}
+				sqlite3_free(err);
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("SELECT value FROM properties WHERE resource = ? AND prop = ? AND ns = ?"),
+				&(s->stmt_select_prop), &next_stmt)) {
+				/* prepare failed */
+
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed:", sqlite3_errmsg(s->sql));
+				return HANDLER_ERROR;
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("SELECT ns, prop FROM properties WHERE resource = ?"),
+				&(s->stmt_select_propnames), &next_stmt)) {
+				/* prepare failed */
+
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed:", sqlite3_errmsg(s->sql));
+				return HANDLER_ERROR;
+			}
+
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("REPLACE INTO properties (resource, prop, ns, value) VALUES (?, ?, ?, ?)"),
+				&(s->stmt_update_prop), &next_stmt)) {
+				/* prepare failed */
+
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed:", sqlite3_errmsg(s->sql));
+				return HANDLER_ERROR;
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("DELETE FROM properties WHERE resource = ? AND prop = ? AND ns = ?"),
+				&(s->stmt_delete_prop), &next_stmt)) {
+				/* prepare failed */
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed", sqlite3_errmsg(s->sql));
+
+				return HANDLER_ERROR;
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("DELETE FROM properties WHERE resource = ?"),
+				&(s->stmt_delete_uri), &next_stmt)) {
+				/* prepare failed */
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed", sqlite3_errmsg(s->sql));
+
+				return HANDLER_ERROR;
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("INSERT INTO properties SELECT ?, prop, ns, value FROM properties WHERE resource = ?"),
+				&(s->stmt_copy_uri), &next_stmt)) {
+				/* prepare failed */
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed", sqlite3_errmsg(s->sql));
+
+				return HANDLER_ERROR;
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("UPDATE properties SET resource = ? WHERE resource = ?"),
+				&(s->stmt_move_uri), &next_stmt)) {
+				/* prepare failed */
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed", sqlite3_errmsg(s->sql));
+
+				return HANDLER_ERROR;
+			}
+
+			/* LOCKS */
+
+			if (SQLITE_OK != sqlite3_exec(s->sql,
+					"CREATE TABLE locks ("
+					"  locktoken TEXT NOT NULL,"
+					"  resource TEXT NOT NULL,"
+					"  lockscope TEXT NOT NULL,"
+					"  locktype TEXT NOT NULL,"
+					"  owner TEXT NOT NULL,"
+					"  depth INT NOT NULL,"
+					"  timeout TIMESTAMP NOT NULL,"
+					"  PRIMARY KEY(locktoken))",
+					NULL, NULL, &err)) {
+
+				if (0 != strcmp(err, "table locks already exists")) {
+					log_error_write(srv, __FILE__, __LINE__, "ss", "can't open transaction:", err);
+					sqlite3_free(err);
+
+					return HANDLER_ERROR;
+				}
+				sqlite3_free(err);
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("INSERT INTO locks (locktoken, resource, lockscope, locktype, owner, depth, timeout) VALUES (?,?,?,?,?,?, CURRENT_TIME + 600)"),
+				&(s->stmt_create_lock), &next_stmt)) {
+				/* prepare failed */
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed", sqlite3_errmsg(s->sql));
+
+				return HANDLER_ERROR;
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("DELETE FROM locks WHERE locktoken = ?"),
+				&(s->stmt_remove_lock), &next_stmt)) {
+				/* prepare failed */
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed", sqlite3_errmsg(s->sql));
+
+				return HANDLER_ERROR;
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("SELECT locktoken, resource, lockscope, locktype, owner, depth, timeout FROM locks WHERE locktoken = ?"),
+				&(s->stmt_read_lock), &next_stmt)) {
+				/* prepare failed */
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed", sqlite3_errmsg(s->sql));
+
+				return HANDLER_ERROR;
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("SELECT locktoken, resource, lockscope, locktype, owner, depth, timeout FROM locks WHERE resource = ?"),
+				&(s->stmt_read_lock_by_uri), &next_stmt)) {
+				/* prepare failed */
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed", sqlite3_errmsg(s->sql));
+
+				return HANDLER_ERROR;
+			}
+
+			if (SQLITE_OK != sqlite3_prepare(s->sql,
+				CONST_STR_LEN("UPDATE locks SET timeout = CURRENT_TIME + 600 WHERE locktoken = ?"),
+				&(s->stmt_refresh_lock), &next_stmt)) {
+				/* prepare failed */
+				log_error_write(srv, __FILE__, __LINE__, "ss", "sqlite3_prepare failed", sqlite3_errmsg(s->sql));
+
+				return HANDLER_ERROR;
+			}
+
+
+#else
+			log_error_write(srv, __FILE__, __LINE__, "s", "Sorry, no sqlite3 and libxml2 support include, compile with --with-webdav-props");
+			return HANDLER_ERROR;
+#endif
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+#define PATCH_OPTION(x) \
+	p->conf.x = s->x;
+static int mod_webdav_patch_connection(server *srv, connection *con, plugin_data *p) {
+	size_t i, j;
+	plugin_config *s = p->config_storage[0];
+
+	PATCH_OPTION(enabled);
+	PATCH_OPTION(is_readonly);
+	PATCH_OPTION(log_xml);
+
+#ifdef USE_PROPPATCH
+	PATCH_OPTION(sql);
+	PATCH_OPTION(stmt_update_prop);
+	PATCH_OPTION(stmt_delete_prop);
+	PATCH_OPTION(stmt_select_prop);
+	PATCH_OPTION(stmt_select_propnames);
+
+	PATCH_OPTION(stmt_delete_uri);
+	PATCH_OPTION(stmt_move_uri);
+	PATCH_OPTION(stmt_copy_uri);
+
+	PATCH_OPTION(stmt_remove_lock);
+	PATCH_OPTION(stmt_refresh_lock);
+	PATCH_OPTION(stmt_create_lock);
+	PATCH_OPTION(stmt_read_lock);
+	PATCH_OPTION(stmt_read_lock_by_uri);
+#endif
+	/* skip the first, the global context */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		s = p->config_storage[i];
+
+		/* condition didn't match */
+		if (!config_check_cond(srv, con, dc)) continue;
+
+		/* merge config */
+		for (j = 0; j < dc->value->used; j++) {
+			data_unset *du = dc->value->data[j];
+
+			if (buffer_is_equal_string(du->key, CONST_STR_LEN("webdav.activate"))) {
+				PATCH_OPTION(enabled);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("webdav.is-readonly"))) {
+				PATCH_OPTION(is_readonly);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("webdav.log-xml"))) {
+				PATCH_OPTION(log_xml);
+			} else if (buffer_is_equal_string(du->key, CONST_STR_LEN("webdav.sqlite-db-name"))) {
+#ifdef USE_PROPPATCH
+				PATCH_OPTION(sql);
+				PATCH_OPTION(stmt_update_prop);
+				PATCH_OPTION(stmt_delete_prop);
+				PATCH_OPTION(stmt_select_prop);
+				PATCH_OPTION(stmt_select_propnames);
+
+				PATCH_OPTION(stmt_delete_uri);
+				PATCH_OPTION(stmt_move_uri);
+				PATCH_OPTION(stmt_copy_uri);
+
+				PATCH_OPTION(stmt_remove_lock);
+				PATCH_OPTION(stmt_refresh_lock);
+				PATCH_OPTION(stmt_create_lock);
+				PATCH_OPTION(stmt_read_lock);
+				PATCH_OPTION(stmt_read_lock_by_uri);
+#endif
+			}
+		}
+	}
+
+	return 0;
+}
+
+URIHANDLER_FUNC(mod_webdav_uri_handler) {
+	plugin_data *p = p_d;
+
+	UNUSED(srv);
+
+	if (con->uri.path->used == 0) return HANDLER_GO_ON;
+
+	mod_webdav_patch_connection(srv, con, p);
+
+	if (!p->conf.enabled) return HANDLER_GO_ON;
+
+	switch (con->request.http_method) {
+	case HTTP_METHOD_OPTIONS:
+		/* we fake a little bit but it makes MS W2k happy and it let's us mount the volume */
+		response_header_overwrite(srv, con, CONST_STR_LEN("DAV"), CONST_STR_LEN("1,2"));
+		response_header_overwrite(srv, con, CONST_STR_LEN("MS-Author-Via"), CONST_STR_LEN("DAV"));
+
+		if (p->conf.is_readonly) {
+			response_header_insert(srv, con, CONST_STR_LEN("Allow"), CONST_STR_LEN("PROPFIND"));
+		} else {
+			response_header_insert(srv, con, CONST_STR_LEN("Allow"), CONST_STR_LEN("PROPFIND, DELETE, MKCOL, PUT, MOVE, COPY, PROPPATCH, LOCK, UNLOCK"));
+		}
+		break;
+	default:
+		break;
+	}
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+static int webdav_gen_prop_tag(server *srv, connection *con,
+		char *prop_name,
+		char *prop_ns,
+		char *value,
+		buffer *b) {
+
+	UNUSED(srv);
+	UNUSED(con);
+
+	if (value) {
+		buffer_append_string(b,"<");
+		buffer_append_string(b, prop_name);
+		buffer_append_string(b, " xmlns=\"");
+		buffer_append_string(b, prop_ns);
+		buffer_append_string(b, "\">");
+
+		buffer_append_string(b, value);
+
+		buffer_append_string(b,"</");
+		buffer_append_string(b, prop_name);
+		buffer_append_string(b, ">");
+	} else {
+		buffer_append_string(b,"<");
+		buffer_append_string(b, prop_name);
+		buffer_append_string(b, " xmlns=\"");
+		buffer_append_string(b, prop_ns);
+		buffer_append_string(b, "\"/>");
+	}
+
+	return 0;
+}
+
+
+static int webdav_gen_response_status_tag(server *srv, connection *con, physical *dst, int status, buffer *b) {
+	UNUSED(srv);
+
+	buffer_append_string(b,"<D:response xmlns:ns0=\"urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/\">\n");
+
+	buffer_append_string(b,"<D:href>\n");
+	buffer_append_string_buffer(b, dst->rel_path);
+	buffer_append_string(b,"</D:href>\n");
+	buffer_append_string(b,"<D:status>\n");
+
+	if (con->request.http_version == HTTP_VERSION_1_1) {
+		BUFFER_COPY_STRING_CONST(b, "HTTP/1.1 ");
+	} else {
+		BUFFER_COPY_STRING_CONST(b, "HTTP/1.0 ");
+	}
+	buffer_append_long(b, status);
+	BUFFER_APPEND_STRING_CONST(b, " ");
+	buffer_append_string(b, get_http_status_name(status));
+
+	buffer_append_string(b,"</D:status>\n");
+	buffer_append_string(b,"</D:response>\n");
+
+	return 0;
+}
+
+static int webdav_delete_file(server *srv, connection *con, plugin_data *p, physical *dst, buffer *b) {
+	int status = 0;
+
+	/* try to unlink it */
+	if (-1 == unlink(dst->path->ptr)) {
+		switch(errno) {
+		case EACCES:
+		case EPERM:
+			/* 403 */
+			status = 403;
+			break;
+		default:
+			status = 501;
+			break;
+		}
+		webdav_gen_response_status_tag(srv, con, dst, status, b);
+	} else {
+#ifdef USE_PROPPATCH
+		sqlite3_stmt *stmt = p->conf.stmt_delete_uri;
+
+		if (!stmt) {
+			status = 403;
+			webdav_gen_response_status_tag(srv, con, dst, status, b);
+		} else {
+			sqlite3_reset(stmt);
+
+			/* bind the values to the insert */
+
+			sqlite3_bind_text(stmt, 1,
+					  dst->rel_path->ptr,
+					  dst->rel_path->used - 1,
+					  SQLITE_TRANSIENT);
+
+			if (SQLITE_DONE != sqlite3_step(stmt)) {
+				/* */
+			}
+		}
+#endif
+	}
+
+	return (status != 0);
+}
+
+static int webdav_delete_dir(server *srv, connection *con, plugin_data *p, physical *dst, buffer *b) {
+	DIR *dir;
+	int have_multi_status = 0;
+	physical d;
+
+	d.path = buffer_init();
+	d.rel_path = buffer_init();
+
+	if (NULL != (dir = opendir(dst->path->ptr))) {
+		struct dirent *de;
+
+		while(NULL != (de = readdir(dir))) {
+			struct stat st;
+			int status = 0;
+
+			if ((de->d_name[0] == '.' && de->d_name[1] == '\0')  ||
+			    (de->d_name[0] == '.' && de->d_name[1] == '.' && de->d_name[2] == '\0')) {
+				continue;
+				/* ignore the parent dir */
+			}
+
+			buffer_copy_string_buffer(d.path, dst->path);
+			BUFFER_APPEND_SLASH(d.path);
+			buffer_append_string(d.path, de->d_name);
+
+			buffer_copy_string_buffer(d.rel_path, dst->rel_path);
+			BUFFER_APPEND_SLASH(d.rel_path);
+			buffer_append_string(d.rel_path, de->d_name);
+
+			/* stat and unlink afterwards */
+			if (-1 == stat(d.path->ptr, &st)) {
+				/* don't about it yet, rmdir will fail too */
+			} else if (S_ISDIR(st.st_mode)) {
+				have_multi_status = webdav_delete_dir(srv, con, p, &d, b);
+
+				/* try to unlink it */
+				if (-1 == rmdir(d.path->ptr)) {
+					switch(errno) {
+					case EACCES:
+					case EPERM:
+						/* 403 */
+						status = 403;
+						break;
+					default:
+						status = 501;
+						break;
+					}
+					have_multi_status = 1;
+
+					webdav_gen_response_status_tag(srv, con, &d, status, b);
+				} else {
+#ifdef USE_PROPPATCH
+					sqlite3_stmt *stmt = p->conf.stmt_delete_uri;
+
+					status = 0;
+
+					if (stmt) {
+						sqlite3_reset(stmt);
+
+						/* bind the values to the insert */
+
+						sqlite3_bind_text(stmt, 1,
+								  d.rel_path->ptr,
+								  d.rel_path->used - 1,
+								  SQLITE_TRANSIENT);
+
+						if (SQLITE_DONE != sqlite3_step(stmt)) {
+							/* */
+						}
+					}
+#endif
+				}
+			} else {
+				have_multi_status = webdav_delete_file(srv, con, p, &d, b);
+			}
+		}
+		closedir(dir);
+
+		buffer_free(d.path);
+		buffer_free(d.rel_path);
+	}
+
+	return have_multi_status;
+}
+
+static int webdav_copy_file(server *srv, connection *con, plugin_data *p, physical *src, physical *dst, int overwrite) {
+	stream s;
+	int status = 0, ofd;
+	UNUSED(srv);
+	UNUSED(con);
+
+	if (stream_open(&s, src->path)) {
+		return 403;
+	}
+
+	if (-1 == (ofd = open(dst->path->ptr, O_WRONLY|O_TRUNC|O_CREAT|(overwrite ? 0 : O_EXCL), WEBDAV_FILE_MODE))) {
+		/* opening the destination failed for some reason */
+		switch(errno) {
+		case EEXIST:
+			status = 412;
+			break;
+		case EISDIR:
+			status = 409;
+			break;
+		case ENOENT:
+			/* at least one part in the middle wasn't existing */
+			status = 409;
+			break;
+		default:
+			status = 403;
+			break;
+		}
+		stream_close(&s);
+		return status;
+	}
+
+	if (-1 == write(ofd, s.start, s.size)) {
+		switch(errno) {
+		case ENOSPC:
+			status = 507;
+			break;
+		default:
+			status = 403;
+			break;
+		}
+	}
+
+	stream_close(&s);
+	close(ofd);
+
+#ifdef USE_PROPPATCH
+	if (0 == status) {
+		/* copy worked fine, copy connected properties */
+		sqlite3_stmt *stmt = p->conf.stmt_copy_uri;
+
+		if (stmt) {
+			sqlite3_reset(stmt);
+
+			/* bind the values to the insert */
+			sqlite3_bind_text(stmt, 1,
+					  dst->rel_path->ptr,
+					  dst->rel_path->used - 1,
+					  SQLITE_TRANSIENT);
+
+			sqlite3_bind_text(stmt, 2,
+					  src->rel_path->ptr,
+					  src->rel_path->used - 1,
+					  SQLITE_TRANSIENT);
+
+			if (SQLITE_DONE != sqlite3_step(stmt)) {
+				/* */
+			}
+		}
+	}
+#endif
+	return status;
+}
+
+static int webdav_copy_dir(server *srv, connection *con, plugin_data *p, physical *src, physical *dst, int overwrite) {
+	DIR *srcdir;
+	int status = 0;
+
+	if (NULL != (srcdir = opendir(src->path->ptr))) {
+		struct dirent *de;
+		physical s, d;
+
+		s.path = buffer_init();
+		s.rel_path = buffer_init();
+
+		d.path = buffer_init();
+		d.rel_path = buffer_init();
+
+		while (NULL != (de = readdir(srcdir))) {
+			struct stat st;
+
+			if ((de->d_name[0] == '.' && de->d_name[1] == '\0') ||
+		            (de->d_name[0] == '.' && de->d_name[1] == '.' && de->d_name[2] == '\0')) {
+				continue;
+			}
+
+			buffer_copy_string_buffer(s.path, src->path);
+			BUFFER_APPEND_SLASH(s.path);
+			buffer_append_string(s.path, de->d_name);
+
+			buffer_copy_string_buffer(d.path, dst->path);
+			BUFFER_APPEND_SLASH(d.path);
+			buffer_append_string(d.path, de->d_name);
+
+			buffer_copy_string_buffer(s.rel_path, src->rel_path);
+			BUFFER_APPEND_SLASH(s.rel_path);
+			buffer_append_string(s.rel_path, de->d_name);
+
+			buffer_copy_string_buffer(d.rel_path, dst->rel_path);
+			BUFFER_APPEND_SLASH(d.rel_path);
+			buffer_append_string(d.rel_path, de->d_name);
+
+			if (-1 == stat(s.path->ptr, &st)) {
+				/* why ? */
+			} else if (S_ISDIR(st.st_mode)) {
+				/* a directory */
+				if (-1 == mkdir(d.path->ptr, WEBDAV_DIR_MODE) &&
+				    errno != EEXIST) {
+					/* WTH ? */
+				} else {
+#ifdef USE_PROPPATCH
+					sqlite3_stmt *stmt = p->conf.stmt_copy_uri;
+
+					if (0 != (status = webdav_copy_dir(srv, con, p, &s, &d, overwrite))) {
+						break;
+					}
+					/* directory is copied, copy the properties too */
+
+					if (stmt) {
+						sqlite3_reset(stmt);
+
+						/* bind the values to the insert */
+						sqlite3_bind_text(stmt, 1,
+							  dst->rel_path->ptr,
+							  dst->rel_path->used - 1,
+							  SQLITE_TRANSIENT);
+
+						sqlite3_bind_text(stmt, 2,
+							  src->rel_path->ptr,
+							  src->rel_path->used - 1,
+							  SQLITE_TRANSIENT);
+
+						if (SQLITE_DONE != sqlite3_step(stmt)) {
+							/* */
+						}
+					}
+#endif
+				}
+			} else if (S_ISREG(st.st_mode)) {
+				/* a plain file */
+				if (0 != (status = webdav_copy_file(srv, con, p, &s, &d, overwrite))) {
+					break;
+				}
+			}
+		}
+
+		buffer_free(s.path);
+		buffer_free(s.rel_path);
+		buffer_free(d.path);
+		buffer_free(d.rel_path);
+
+		closedir(srcdir);
+	}
+
+	return status;
+}
+
+static int webdav_get_live_property(server *srv, connection *con, plugin_data *p, physical *dst, char *prop_name, buffer *b) {
+	stat_cache_entry *sce = NULL;
+	int found = 0;
+
+	UNUSED(p);
+
+	if (HANDLER_ERROR != (stat_cache_get_entry(srv, con, dst->path, &sce))) {
+		char ctime_buf[] = "2005-08-18T07:27:16Z";
+		char mtime_buf[] = "Thu, 18 Aug 2005 07:27:16 GMT";
+		size_t k;
+
+		if (0 == strcmp(prop_name, "resourcetype")) {
+			if (S_ISDIR(sce->st.st_mode)) {
+				buffer_append_string(b, "<D:resourcetype><D:collection/></D:resourcetype>");
+				found = 1;
+			}
+		} else if (0 == strcmp(prop_name, "getcontenttype")) {
+			if (S_ISDIR(sce->st.st_mode)) {
+				buffer_append_string(b, "<D:getcontenttype>httpd/unix-directory</D:getcontenttype>");
+				found = 1;
+			} else if(S_ISREG(sce->st.st_mode)) {
+				for (k = 0; k < con->conf.mimetypes->used; k++) {
+					data_string *ds = (data_string *)con->conf.mimetypes->data[k];
+
+					if (ds->key->used == 0) continue;
+
+					if (buffer_is_equal_right_len(dst->path, ds->key, ds->key->used - 1)) {
+						buffer_append_string(b,"<D:getcontenttype>");
+						buffer_append_string_buffer(b, ds->value);
+						buffer_append_string(b, "</D:getcontenttype>");
+						found = 1;
+
+						break;
+					}
+				}
+			}
+		} else if (0 == strcmp(prop_name, "creationdate")) {
+			buffer_append_string(b, "<D:creationdate ns0:dt=\"dateTime.tz\">");
+			strftime(ctime_buf, sizeof(ctime_buf), "%Y-%m-%dT%H:%M:%SZ", gmtime(&(sce->st.st_ctime)));
+			buffer_append_string(b, ctime_buf);
+			buffer_append_string(b, "</D:creationdate>");
+			found = 1;
+		} else if (0 == strcmp(prop_name, "getlastmodified")) {
+			buffer_append_string(b,"<D:getlastmodified ns0:dt=\"dateTime.rfc1123\">");
+			strftime(mtime_buf, sizeof(mtime_buf), "%a, %d %b %Y %H:%M:%S GMT", gmtime(&(sce->st.st_mtime)));
+			buffer_append_string(b, mtime_buf);
+			buffer_append_string(b, "</D:getlastmodified>");
+			found = 1;
+		} else if (0 == strcmp(prop_name, "getcontentlength")) {
+			buffer_append_string(b,"<D:getcontentlength>");
+			buffer_append_off_t(b, sce->st.st_size);
+			buffer_append_string(b, "</D:getcontentlength>");
+			found = 1;
+		} else if (0 == strcmp(prop_name, "getcontentlanguage")) {
+			buffer_append_string(b,"<D:getcontentlanguage>");
+			buffer_append_string(b, "en");
+			buffer_append_string(b, "</D:getcontentlanguage>");
+			found = 1;
+		}
+	}
+
+	return found ? 0 : -1;
+}
+
+static int webdav_get_property(server *srv, connection *con, plugin_data *p, physical *dst, char *prop_name, char *prop_ns, buffer *b) {
+	if (0 == strcmp(prop_ns, "DAV:")) {
+		/* a local 'live' property */
+		return webdav_get_live_property(srv, con, p, dst, prop_name, b);
+	} else {
+		int found = 0;
+#ifdef USE_PROPPATCH
+		sqlite3_stmt *stmt = p->conf.stmt_select_prop;
+
+		if (stmt) {
+			/* perhaps it is in sqlite3 */
+			sqlite3_reset(stmt);
+
+			/* bind the values to the insert */
+
+			sqlite3_bind_text(stmt, 1,
+					  dst->rel_path->ptr,
+					  dst->rel_path->used - 1,
+					  SQLITE_TRANSIENT);
+			sqlite3_bind_text(stmt, 2,
+					  prop_name,
+					  strlen(prop_name),
+					  SQLITE_TRANSIENT);
+			sqlite3_bind_text(stmt, 3,
+					  prop_ns,
+					  strlen(prop_ns),
+					  SQLITE_TRANSIENT);
+
+			/* it is the PK */
+			while (SQLITE_ROW == sqlite3_step(stmt)) {
+				/* there is a row for us, we only expect a single col 'value' */
+				webdav_gen_prop_tag(srv, con, prop_name, prop_ns, (char *)sqlite3_column_text(stmt, 0), b);
+				found = 1;
+			}
+		}
+#endif
+		return found ? 0 : -1;
+	}
+
+	/* not found */
+	return -1;
+}
+
+typedef struct {
+	char *ns;
+	char *prop;
+} webdav_property;
+
+webdav_property live_properties[] = {
+	{ "DAV:", "creationdate" },
+	{ "DAV:", "displayname" },
+	{ "DAV:", "getcontentlanguage" },
+	{ "DAV:", "getcontentlength" },
+	{ "DAV:", "getcontenttype" },
+	{ "DAV:", "getetag" },
+	{ "DAV:", "getlastmodified" },
+	{ "DAV:", "resourcetype" },
+	{ "DAV:", "lockdiscovery" },
+	{ "DAV:", "source" },
+	{ "DAV:", "supportedlock" },
+
+	{ NULL, NULL }
+};
+
+typedef struct {
+	webdav_property **ptr;
+
+	size_t used;
+	size_t size;
+} webdav_properties;
+
+static int webdav_get_props(server *srv, connection *con, plugin_data *p, physical *dst, webdav_properties *props, buffer *b_200, buffer *b_404) {
+	size_t i;
+
+	if (props) {
+		for (i = 0; i < props->used; i++) {
+			webdav_property *prop;
+
+			prop = props->ptr[i];
+
+			if (0 != webdav_get_property(srv, con, p,
+				dst, prop->prop, prop->ns, b_200)) {
+				webdav_gen_prop_tag(srv, con, prop->prop, prop->ns, NULL, b_404);
+			}
+		}
+	} else {
+		for (i = 0; live_properties[i].prop; i++) {
+			/* a local 'live' property */
+			webdav_get_live_property(srv, con, p, dst, live_properties[i].prop, b_200);
+		}
+	}
+
+	return 0;
+}
+
+#ifdef USE_PROPPATCH
+static int webdav_parse_chunkqueue(server *srv, connection *con, plugin_data *p, chunkqueue *cq, xmlDoc **ret_xml) {
+	xmlParserCtxtPtr ctxt;
+	xmlDoc *xml;
+	int res;
+	int err;
+
+	chunk *c;
+
+	UNUSED(con);
+
+	/* read the chunks in to the XML document */
+	ctxt = xmlCreatePushParserCtxt(NULL, NULL, NULL, 0, NULL);
+
+	for (c = cq->first; cq->bytes_out != cq->bytes_in; c = cq->first) {
+		size_t weWant = cq->bytes_out - cq->bytes_in;
+		size_t weHave;
+
+		switch(c->type) {
+		case FILE_CHUNK:
+			weHave = c->file.length - c->offset;
+
+			if (weHave > weWant) weHave = weWant;
+
+			/* xml chunks are always memory, mmap() is our friend */
+			if (c->file.mmap.start == MAP_FAILED) {
+				if (-1 == c->file.fd &&  /* open the file if not already open */
+				    -1 == (c->file.fd = open(c->file.name->ptr, O_RDONLY))) {
+					log_error_write(srv, __FILE__, __LINE__, "ss", "open failed: ", strerror(errno));
+
+					return -1;
+				}
+
+				if (MAP_FAILED == (c->file.mmap.start = mmap(0, c->file.length, PROT_READ, MAP_SHARED, c->file.fd, 0))) {
+					log_error_write(srv, __FILE__, __LINE__, "ssbd", "mmap failed: ",
+							strerror(errno), c->file.name,  c->file.fd);
+
+					return -1;
+				}
+
+				close(c->file.fd);
+				c->file.fd = -1;
+
+				c->file.mmap.length = c->file.length;
+
+				/* chunk_reset() or chunk_free() will cleanup for us */
+			}
+
+			if (XML_ERR_OK != (err = xmlParseChunk(ctxt, c->file.mmap.start + c->offset, weHave, 0))) {
+				log_error_write(srv, __FILE__, __LINE__, "sodd", "xmlParseChunk failed at:", cq->bytes_out, weHave, err);
+			}
+
+			c->offset += weHave;
+			cq->bytes_out += weHave;
+
+			break;
+		case MEM_CHUNK:
+			/* append to the buffer */
+			weHave = c->mem->used - 1 - c->offset;
+
+			if (weHave > weWant) weHave = weWant;
+
+			if (p->conf.log_xml) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "XML-request-body:", c->mem->ptr + c->offset);
+			}
+
+			if (XML_ERR_OK != (err = xmlParseChunk(ctxt, c->mem->ptr + c->offset, weHave, 0))) {
+				log_error_write(srv, __FILE__, __LINE__, "sodd", "xmlParseChunk failed at:", cq->bytes_out, weHave, err);
+			}
+
+			c->offset += weHave;
+			cq->bytes_out += weHave;
+
+			break;
+		case UNUSED_CHUNK:
+			break;
+		}
+		chunkqueue_remove_finished_chunks(cq);
+	}
+
+
+	switch ((err = xmlParseChunk(ctxt, 0, 0, 1))) {
+	case XML_ERR_DOCUMENT_END:
+	case XML_ERR_OK:
+		break;
+	default:
+		log_error_write(srv, __FILE__, __LINE__, "sd", "xmlParseChunk failed at final packet:", err);
+		break;
+	}
+
+	xml = ctxt->myDoc;
+	res = ctxt->wellFormed;
+	xmlFreeParserCtxt(ctxt);
+
+	if (res == 0) {
+		xmlFreeDoc(xml);
+	} else {
+		*ret_xml = xml;
+	}
+
+	return res;
+}
+#endif
+
+int webdav_lockdiscovery(server *srv, connection *con,
+		buffer *locktoken, const char *lockscope, const char *locktype, int depth) {
+
+	buffer *b;
+
+	response_header_overwrite(srv, con, CONST_STR_LEN("Lock-Token"), CONST_BUF_LEN(locktoken));
+
+	response_header_overwrite(srv, con,
+		CONST_STR_LEN("Content-Type"),
+		CONST_STR_LEN("text/xml; charset=\"utf-8\""));
+
+	b = chunkqueue_get_append_buffer(con->write_queue);
+
+	buffer_copy_string(b, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+
+	buffer_append_string(b,"<D:prop xmlns:D=\"DAV:\" xmlns:ns0=\"urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/\">\n");
+	buffer_append_string(b,"<D:lockdiscovery>\n");
+	buffer_append_string(b,"<D:activelock>\n");
+
+	buffer_append_string(b,"<D:lockscope>");
+	buffer_append_string(b,"<D:");
+	buffer_append_string(b, lockscope);
+	buffer_append_string(b, "/>");
+	buffer_append_string(b,"</D:lockscope>\n");
+
+	buffer_append_string(b,"<D:locktype>");
+	buffer_append_string(b,"<D:");
+	buffer_append_string(b, locktype);
+	buffer_append_string(b, "/>");
+	buffer_append_string(b,"</D:locktype>\n");
+
+	buffer_append_string(b,"<D:depth>");
+	buffer_append_string(b, depth == 0 ? "0" : "infinity");
+	buffer_append_string(b,"</D:depth>\n");
+
+	buffer_append_string(b,"<D:timeout>");
+	buffer_append_string(b, "Second-600");
+	buffer_append_string(b,"</D:timeout>\n");
+
+	buffer_append_string(b,"<D:owner>");
+	buffer_append_string(b,"</D:owner>\n");
+
+	buffer_append_string(b,"<D:locktoken>");
+	buffer_append_string(b, "<D:href>");
+	buffer_append_string_buffer(b, locktoken);
+	buffer_append_string(b, "</D:href>");
+	buffer_append_string(b,"</D:locktoken>\n");
+
+	buffer_append_string(b,"</D:activelock>\n");
+	buffer_append_string(b,"</D:lockdiscovery>\n");
+	buffer_append_string(b,"</D:prop>\n");
+
+	return 0;
+}
+/**
+ * check if resource is having the right locks to access to resource
+ *
+ *
+ *
+ */
+int webdav_has_lock(server *srv, connection *con, plugin_data *p, buffer *uri) {
+	int has_lock = 1;
+
+#ifdef USE_LOCKS
+	data_string *ds;
+
+	/**
+	 * This implementation is more fake than real
+	 * we need a parser for the If: header to really handle the full scope
+	 *
+	 * X-Litmus: locks: 11 (owner_modify)
+	 * If: <http://127.0.0.1:1025/dav/litmus/lockme> (<opaquelocktoken:2165478d-0611-49c4-be92-e790d68a38f1>)
+	 * - a tagged check:
+	 *   if http://127.0.0.1:1025/dav/litmus/lockme is locked with
+	 *   opaquelocktoken:2165478d-0611-49c4-be92-e790d68a38f1, go on
+	 *
+	 * X-Litmus: locks: 16 (fail_cond_put)
+	 * If: (<DAV:no-lock> ["-1622396671"])
+	 * - untagged:
+	 *   go on if the resource has the etag [...] and the lock
+	 */
+	if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "If"))) {
+		/* Ooh, ooh. A if tag, now the fun begins.
+		 *
+		 * this can only work with a real parser
+		 **/
+	} else {
+		/* we didn't provided a lock-token -> */
+		/* if the resource is locked -> 423 */
+
+		sqlite3_stmt *stmt = p->conf.stmt_read_lock_by_uri;
+
+		sqlite3_reset(stmt);
+
+		sqlite3_bind_text(stmt, 1,
+			  CONST_BUF_LEN(uri),
+			  SQLITE_TRANSIENT);
+
+		while (SQLITE_ROW == sqlite3_step(stmt)) {
+			has_lock = 0;
+		}
+	}
+#endif
+
+	return has_lock;
+}
+
+URIHANDLER_FUNC(mod_webdav_subrequest_handler) {
+	plugin_data *p = p_d;
+	buffer *b;
+	DIR *dir;
+	data_string *ds;
+	int depth = -1;
+	struct stat st;
+	buffer *prop_200;
+	buffer *prop_404;
+	webdav_properties *req_props;
+	stat_cache_entry *sce = NULL;
+
+	UNUSED(srv);
+
+	if (!p->conf.enabled) return HANDLER_GO_ON;
+	/* physical path is setup */
+	if (con->physical.path->used == 0) return HANDLER_GO_ON;
+
+	/* PROPFIND need them */
+	if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Depth"))) {
+		depth = strtol(ds->value->ptr, NULL, 10);
+	}
+
+	switch (con->request.http_method) {
+	case HTTP_METHOD_PROPFIND:
+		/* they want to know the properties of the directory */
+		req_props = NULL;
+
+		/* is there a content-body ? */
+
+		switch (stat_cache_get_entry(srv, con, con->physical.path, &sce)) {
+		case HANDLER_ERROR:
+			if (errno == ENOENT) {
+				con->http_status = 404;
+				return HANDLER_FINISHED;
+			}
+			break;
+		default:
+			break;
+		}
+
+
+#ifdef USE_PROPPATCH
+		/* any special requests or just allprop ? */
+		if (con->request.content_length) {
+			xmlDocPtr xml;
+
+			if (1 == webdav_parse_chunkqueue(srv, con, p, con->request_content_queue, &xml)) {
+				xmlNode *rootnode = xmlDocGetRootElement(xml);
+
+				assert(rootnode);
+
+				if (0 == xmlStrcmp(rootnode->name, BAD_CAST "propfind")) {
+					xmlNode *cmd;
+
+					req_props = calloc(1, sizeof(*req_props));
+
+					for (cmd = rootnode->children; cmd; cmd = cmd->next) {
+
+						if (0 == xmlStrcmp(cmd->name, BAD_CAST "prop")) {
+							/* get prop by name */
+							xmlNode *prop;
+
+							for (prop = cmd->children; prop; prop = prop->next) {
+								if (prop->type == XML_TEXT_NODE) continue; /* ignore WS */
+
+								if (prop->ns &&
+								    (0 == xmlStrcmp(prop->ns->href, BAD_CAST "")) &&
+								    (0 != xmlStrcmp(prop->ns->prefix, BAD_CAST ""))) {
+									size_t i;
+									log_error_write(srv, __FILE__, __LINE__, "ss",
+											"no name space for:",
+											prop->name);
+
+									xmlFreeDoc(xml);
+
+									for (i = 0; i < req_props->used; i++) {
+										free(req_props->ptr[i]->ns);
+										free(req_props->ptr[i]->prop);
+										free(req_props->ptr[i]);
+									}
+									free(req_props->ptr);
+									free(req_props);
+
+									con->http_status = 400;
+									return HANDLER_FINISHED;
+								}
+
+								/* add property to requested list */
+								if (req_props->size == 0) {
+									req_props->size = 16;
+									req_props->ptr = malloc(sizeof(*(req_props->ptr)) * req_props->size);
+								} else if (req_props->used == req_props->size) {
+									req_props->size += 16;
+									req_props->ptr = realloc(req_props->ptr, sizeof(*(req_props->ptr)) * req_props->size);
+								}
+
+								req_props->ptr[req_props->used] = malloc(sizeof(webdav_property));
+								req_props->ptr[req_props->used]->ns = (char *)xmlStrdup(prop->ns ? prop->ns->href : (xmlChar *)"");
+								req_props->ptr[req_props->used]->prop = (char *)xmlStrdup(prop->name);
+								req_props->used++;
+							}
+						} else if (0 == xmlStrcmp(cmd->name, BAD_CAST "propname")) {
+							sqlite3_stmt *stmt = p->conf.stmt_select_propnames;
+
+							if (stmt) {
+								/* get all property names (EMPTY) */
+								sqlite3_reset(stmt);
+								/* bind the values to the insert */
+
+								sqlite3_bind_text(stmt, 1,
+										  con->uri.path->ptr,
+										  con->uri.path->used - 1,
+										  SQLITE_TRANSIENT);
+
+								if (SQLITE_DONE != sqlite3_step(stmt)) {
+								}
+							}
+						} else if (0 == xmlStrcmp(cmd->name, BAD_CAST "allprop")) {
+							/* get all properties (EMPTY) */
+						}
+					}
+				}
+
+				xmlFreeDoc(xml);
+			} else {
+				con->http_status = 400;
+				return HANDLER_FINISHED;
+			}
+		}
+#endif
+		con->http_status = 207;
+
+		response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/xml; charset=\"utf-8\""));
+
+		b = chunkqueue_get_append_buffer(con->write_queue);
+
+		buffer_copy_string(b, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+
+		buffer_append_string(b,"<D:multistatus xmlns:D=\"DAV:\" xmlns:ns0=\"urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/\">\n");
+
+		/* allprop */
+
+		prop_200 = buffer_init();
+		prop_404 = buffer_init();
+
+		switch(depth) {
+		case 0:
+			/* Depth: 0 */
+			webdav_get_props(srv, con, p, &(con->physical), req_props, prop_200, prop_404);
+
+			buffer_append_string(b,"<D:response>\n");
+			buffer_append_string(b,"<D:href>");
+			buffer_append_string_buffer(b, con->uri.scheme);
+			buffer_append_string(b,"://");
+			buffer_append_string_buffer(b, con->uri.authority);
+			buffer_append_string_encoded(b, CONST_BUF_LEN(con->uri.path), ENCODING_REL_URI);
+			buffer_append_string(b,"</D:href>\n");
+
+			if (!buffer_is_empty(prop_200)) {
+				buffer_append_string(b,"<D:propstat>\n");
+				buffer_append_string(b,"<D:prop>\n");
+
+				buffer_append_string_buffer(b, prop_200);
+
+				buffer_append_string(b,"</D:prop>\n");
+
+				buffer_append_string(b,"<D:status>HTTP/1.1 200 OK</D:status>\n");
+
+				buffer_append_string(b,"</D:propstat>\n");
+			}
+			if (!buffer_is_empty(prop_404)) {
+				buffer_append_string(b,"<D:propstat>\n");
+				buffer_append_string(b,"<D:prop>\n");
+
+				buffer_append_string_buffer(b, prop_404);
+
+				buffer_append_string(b,"</D:prop>\n");
+
+				buffer_append_string(b,"<D:status>HTTP/1.1 404 Not Found</D:status>\n");
+
+				buffer_append_string(b,"</D:propstat>\n");
+			}
+
+			buffer_append_string(b,"</D:response>\n");
+
+			break;
+		case 1:
+			if (NULL != (dir = opendir(con->physical.path->ptr))) {
+				struct dirent *de;
+				physical d;
+				physical *dst = &(con->physical);
+
+				d.path = buffer_init();
+				d.rel_path = buffer_init();
+
+				while(NULL != (de = readdir(dir))) {
+					if (de->d_name[0] == '.' && de->d_name[1] == '.' && de->d_name[2] == '\0') {
+						continue;
+						/* ignore the parent dir */
+					}
+
+					buffer_copy_string_buffer(d.path, dst->path);
+					BUFFER_APPEND_SLASH(d.path);
+
+					buffer_copy_string_buffer(d.rel_path, dst->rel_path);
+					BUFFER_APPEND_SLASH(d.rel_path);
+
+					if (de->d_name[0] == '.' && de->d_name[1] == '\0') {
+						/* don't append the . */
+					} else {
+						buffer_append_string(d.path, de->d_name);
+						buffer_append_string(d.rel_path, de->d_name);
+					}
+
+					buffer_reset(prop_200);
+					buffer_reset(prop_404);
+
+					webdav_get_props(srv, con, p, &d, req_props, prop_200, prop_404);
+
+					buffer_append_string(b,"<D:response>\n");
+					buffer_append_string(b,"<D:href>");
+					buffer_append_string_buffer(b, con->uri.scheme);
+					buffer_append_string(b,"://");
+					buffer_append_string_buffer(b, con->uri.authority);
+					buffer_append_string_encoded(b, CONST_BUF_LEN(d.rel_path), ENCODING_REL_URI);
+					buffer_append_string(b,"</D:href>\n");
+
+					if (!buffer_is_empty(prop_200)) {
+						buffer_append_string(b,"<D:propstat>\n");
+						buffer_append_string(b,"<D:prop>\n");
+
+						buffer_append_string_buffer(b, prop_200);
+
+						buffer_append_string(b,"</D:prop>\n");
+
+						buffer_append_string(b,"<D:status>HTTP/1.1 200 OK</D:status>\n");
+
+						buffer_append_string(b,"</D:propstat>\n");
+					}
+					if (!buffer_is_empty(prop_404)) {
+						buffer_append_string(b,"<D:propstat>\n");
+						buffer_append_string(b,"<D:prop>\n");
+
+						buffer_append_string_buffer(b, prop_404);
+
+						buffer_append_string(b,"</D:prop>\n");
+
+						buffer_append_string(b,"<D:status>HTTP/1.1 404 Not Found</D:status>\n");
+
+						buffer_append_string(b,"</D:propstat>\n");
+					}
+
+					buffer_append_string(b,"</D:response>\n");
+				}
+				closedir(dir);
+				buffer_free(d.path);
+				buffer_free(d.rel_path);
+			}
+			break;
+		}
+
+		if (req_props) {
+			size_t i;
+			for (i = 0; i < req_props->used; i++) {
+				free(req_props->ptr[i]->ns);
+				free(req_props->ptr[i]->prop);
+				free(req_props->ptr[i]);
+			}
+			free(req_props->ptr);
+			free(req_props);
+		}
+
+		buffer_free(prop_200);
+		buffer_free(prop_404);
+
+		buffer_append_string(b,"</D:multistatus>\n");
+
+		if (p->conf.log_xml) {
+			log_error_write(srv, __FILE__, __LINE__, "sb", "XML-response-body:", b);
+		}
+		con->file_finished = 1;
+
+		return HANDLER_FINISHED;
+	case HTTP_METHOD_MKCOL:
+		if (p->conf.is_readonly) {
+			con->http_status = 403;
+			return HANDLER_FINISHED;
+		}
+
+		if (con->request.content_length != 0) {
+			/* we don't support MKCOL with a body */
+			con->http_status = 415;
+
+			return HANDLER_FINISHED;
+		}
+
+		/* let's create the directory */
+
+		if (-1 == mkdir(con->physical.path->ptr, WEBDAV_DIR_MODE)) {
+			switch(errno) {
+			case EPERM:
+				con->http_status = 403;
+				break;
+			case ENOENT:
+			case ENOTDIR:
+				con->http_status = 409;
+				break;
+			case EEXIST:
+			default:
+				con->http_status = 405; /* not allowed */
+				break;
+			}
+		} else {
+			con->http_status = 201;
+			con->file_finished = 1;
+		}
+
+		return HANDLER_FINISHED;
+	case HTTP_METHOD_DELETE:
+		if (p->conf.is_readonly) {
+			con->http_status = 403;
+			return HANDLER_FINISHED;
+		}
+
+		/* does the client have a lock for this connection ? */
+		if (!webdav_has_lock(srv, con, p, con->uri.path)) {
+			con->http_status = 423;
+			return HANDLER_FINISHED;
+		}
+
+		/* stat and unlink afterwards */
+		if (-1 == stat(con->physical.path->ptr, &st)) {
+			/* don't about it yet, unlink will fail too */
+			switch(errno) {
+			case ENOENT:
+				 con->http_status = 404;
+				 break;
+			default:
+				 con->http_status = 403;
+				 break;
+			}
+		} else if (S_ISDIR(st.st_mode)) {
+			buffer *multi_status_resp = buffer_init();
+
+			if (webdav_delete_dir(srv, con, p, &(con->physical), multi_status_resp)) {
+				/* we got an error somewhere in between, build a 207 */
+				response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/xml; charset=\"utf-8\""));
+
+				b = chunkqueue_get_append_buffer(con->write_queue);
+
+				buffer_copy_string(b, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
+
+				buffer_append_string(b,"<D:multistatus xmlns:D=\"DAV:\">\n");
+
+				buffer_append_string_buffer(b, multi_status_resp);
+
+				buffer_append_string(b,"</D:multistatus>\n");
+
+				if (p->conf.log_xml) {
+					log_error_write(srv, __FILE__, __LINE__, "sb", "XML-response-body:", b);
+				}
+
+				con->http_status = 207;
+				con->file_finished = 1;
+			} else {
+				/* everything went fine, remove the directory */
+
+				if (-1 == rmdir(con->physical.path->ptr)) {
+					switch(errno) {
+					case ENOENT:
+						con->http_status = 404;
+						break;
+					default:
+						con->http_status = 501;
+						break;
+					}
+				} else {
+					con->http_status = 204;
+				}
+			}
+
+			buffer_free(multi_status_resp);
+		} else if (-1 == unlink(con->physical.path->ptr)) {
+			switch(errno) {
+			case EPERM:
+				con->http_status = 403;
+				break;
+			case ENOENT:
+				con->http_status = 404;
+				break;
+			default:
+				con->http_status = 501;
+				break;
+			}
+		} else {
+			con->http_status = 204;
+		}
+		return HANDLER_FINISHED;
+	case HTTP_METHOD_PUT: {
+		int fd;
+		chunkqueue *cq = con->request_content_queue;
+		chunk *c;
+		data_string *ds_range;
+
+		if (p->conf.is_readonly) {
+			con->http_status = 403;
+			return HANDLER_FINISHED;
+		}
+
+		/* is a exclusive lock set on the source */
+		if (!webdav_has_lock(srv, con, p, con->uri.path)) {
+			con->http_status = 423;
+			return HANDLER_FINISHED;
+		}
+
+
+		assert(chunkqueue_length(cq) == (off_t)con->request.content_length);
+
+		/* RFC2616 Section 9.6 PUT requires us to send 501 on all Content-* we don't support
+		 * - most important Content-Range
+		 *
+		 *
+		 * Example: Content-Range: bytes 100-1037/1038 */
+
+		if (NULL != (ds_range = (data_string *)array_get_element(con->request.headers, "Content-Range"))) {
+			const char *num = ds_range->value->ptr;
+			off_t offset;
+			char *err = NULL;
+
+			if (0 != strncmp(num, "bytes ", 6)) {
+				con->http_status = 501; /* not implemented */
+
+				return HANDLER_FINISHED;
+			}
+
+			/* we only support <num>- ... */
+
+			num += 6;
+
+			/* skip WS */
+			while (*num == ' ' || *num == '\t') num++;
+
+			if (*num == '\0') {
+				con->http_status = 501; /* not implemented */
+
+				return HANDLER_FINISHED;
+			}
+
+			offset = strtoll(num, &err, 10);
+
+			if (*err != '-' || offset < 0) {
+				con->http_status = 501; /* not implemented */
+
+				return HANDLER_FINISHED;
+			}
+
+			if (-1 == (fd = open(con->physical.path->ptr, O_WRONLY, WEBDAV_FILE_MODE))) {
+				switch (errno) {
+				case ENOENT:
+					con->http_status = 404; /* not found */
+					break;
+				default:
+					con->http_status = 403; /* not found */
+					break;
+				}
+				return HANDLER_FINISHED;
+			}
+
+			if (-1 == lseek(fd, offset, SEEK_SET)) {
+				con->http_status = 501; /* not implemented */
+
+				close(fd);
+
+				return HANDLER_FINISHED;
+			}
+			con->http_status = 200; /* modified */
+		} else {
+			/* take what we have in the request-body and write it to a file */
+
+			/* if the file doesn't exist, create it */
+			if (-1 == (fd = open(con->physical.path->ptr, O_WRONLY|O_TRUNC, WEBDAV_FILE_MODE))) {
+				if (errno == ENOENT &&
+				    -1 == (fd = open(con->physical.path->ptr, O_WRONLY|O_CREAT|O_TRUNC|O_EXCL, WEBDAV_FILE_MODE))) {
+					/* we can't open the file */
+					con->http_status = 403;
+
+					return HANDLER_FINISHED;
+				} else {
+					con->http_status = 201; /* created */
+				}
+			} else {
+				con->http_status = 200; /* modified */
+			}
+		}
+
+		con->file_finished = 1;
+
+		for (c = cq->first; c; c = cq->first) {
+			int r = 0;
+
+			/* copy all chunks */
+			switch(c->type) {
+			case FILE_CHUNK:
+
+				if (c->file.mmap.start == MAP_FAILED) {
+					if (-1 == c->file.fd &&  /* open the file if not already open */
+					    -1 == (c->file.fd = open(c->file.name->ptr, O_RDONLY))) {
+						log_error_write(srv, __FILE__, __LINE__, "ss", "open failed: ", strerror(errno));
+
+						return HANDLER_ERROR;
+					}
+
+					if (MAP_FAILED == (c->file.mmap.start = mmap(0, c->file.length, PROT_READ, MAP_SHARED, c->file.fd, 0))) {
+						log_error_write(srv, __FILE__, __LINE__, "ssbd", "mmap failed: ",
+								strerror(errno), c->file.name,  c->file.fd);
+
+						return HANDLER_ERROR;
+					}
+
+					c->file.mmap.length = c->file.length;
+
+					close(c->file.fd);
+					c->file.fd = -1;
+
+					/* chunk_reset() or chunk_free() will cleanup for us */
+				}
+
+				if ((r = write(fd, c->file.mmap.start + c->offset, c->file.length - c->offset)) < 0) {
+					switch(errno) {
+					case ENOSPC:
+						con->http_status = 507;
+
+						break;
+					default:
+						con->http_status = 403;
+						break;
+					}
+				}
+				break;
+			case MEM_CHUNK:
+				if ((r = write(fd, c->mem->ptr + c->offset, c->mem->used - c->offset - 1)) < 0) {
+					switch(errno) {
+					case ENOSPC:
+						con->http_status = 507;
+
+						break;
+					default:
+						con->http_status = 403;
+						break;
+					}
+				}
+				break;
+			case UNUSED_CHUNK:
+				break;
+			}
+
+			if (r > 0) {
+				c->offset += r;
+				cq->bytes_out += r;
+			} else {
+				break;
+			}
+			chunkqueue_remove_finished_chunks(cq);
+		}
+		close(fd);
+
+		return HANDLER_FINISHED;
+	}
+	case HTTP_METHOD_MOVE:
+	case HTTP_METHOD_COPY: {
+		buffer *destination = NULL;
+		char *sep, *start;
+		int overwrite = 1;
+
+		if (p->conf.is_readonly) {
+			con->http_status = 403;
+			return HANDLER_FINISHED;
+		}
+
+		/* is a exclusive lock set on the source */
+		if (con->request.http_method == HTTP_METHOD_MOVE) {
+			if (!webdav_has_lock(srv, con, p, con->uri.path)) {
+				con->http_status = 423;
+				return HANDLER_FINISHED;
+			}
+		}
+
+		if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Destination"))) {
+			destination = ds->value;
+		} else {
+			con->http_status = 400;
+			return HANDLER_FINISHED;
+		}
+
+		if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Overwrite"))) {
+			if (ds->value->used != 2 ||
+			    (ds->value->ptr[0] != 'F' &&
+			     ds->value->ptr[0] != 'T') )  {
+				con->http_status = 400;
+				return HANDLER_FINISHED;
+			}
+			overwrite = (ds->value->ptr[0] == 'F' ? 0 : 1);
+		}
+		/* let's parse the Destination
+		 *
+		 * http://127.0.0.1:1025/dav/litmus/copydest
+		 *
+		 * - host has to be the same as the Host: header we got
+		 * - we have to stay inside the document root
+		 * - the query string is thrown away
+		 *  */
+
+		buffer_reset(p->uri.scheme);
+		buffer_reset(p->uri.path_raw);
+		buffer_reset(p->uri.authority);
+
+		start = destination->ptr;
+
+		if (NULL == (sep = strstr(start, "://"))) {
+			con->http_status = 400;
+			return HANDLER_FINISHED;
+		}
+		buffer_copy_string_len(p->uri.scheme, start, sep - start);
+
+		start = sep + 3;
+
+		if (NULL == (sep = strchr(start, '/'))) {
+			con->http_status = 400;
+			return HANDLER_FINISHED;
+		}
+		buffer_copy_string_len(p->uri.authority, start, sep - start);
+
+		start = sep + 1;
+
+		if (NULL == (sep = strchr(start, '?'))) {
+			/* no query string, good */
+			buffer_copy_string(p->uri.path_raw, start);
+		} else {
+			buffer_copy_string_len(p->uri.path_raw, start, sep - start);
+		}
+
+		if (!buffer_is_equal(p->uri.authority, con->uri.authority)) {
+			/* not the same host */
+			con->http_status = 502;
+			return HANDLER_FINISHED;
+		}
+
+		buffer_copy_string_buffer(p->tmp_buf, p->uri.path_raw);
+		buffer_urldecode_path(p->tmp_buf);
+		buffer_path_simplify(p->uri.path, p->tmp_buf);
+
+		/* we now have a URI which is clean. transform it into a physical path */
+		buffer_copy_string_buffer(p->physical.doc_root, con->physical.doc_root);
+		buffer_copy_string_buffer(p->physical.rel_path, p->uri.path);
+
+		if (con->conf.force_lowercase_filenames) {
+			buffer_to_lower(p->physical.rel_path);
+		}
+
+		buffer_copy_string_buffer(p->physical.path, p->physical.doc_root);
+		BUFFER_APPEND_SLASH(p->physical.path);
+		buffer_copy_string_buffer(p->physical.basedir, p->physical.path);
+
+		/* don't add a second / */
+		if (p->physical.rel_path->ptr[0] == '/') {
+			buffer_append_string_len(p->physical.path, p->physical.rel_path->ptr + 1, p->physical.rel_path->used - 2);
+		} else {
+			buffer_append_string_buffer(p->physical.path, p->physical.rel_path);
+		}
+
+		/* let's see if the source is a directory
+		 * if yes, we fail with 501 */
+
+		if (-1 == stat(con->physical.path->ptr, &st)) {
+			/* don't about it yet, unlink will fail too */
+			switch(errno) {
+			case ENOENT:
+				 con->http_status = 404;
+				 break;
+			default:
+				 con->http_status = 403;
+				 break;
+			}
+		} else if (S_ISDIR(st.st_mode)) {
+			int r;
+			/* src is a directory */
+
+			if (-1 == stat(p->physical.path->ptr, &st)) {
+				if (-1 == mkdir(p->physical.path->ptr, WEBDAV_DIR_MODE)) {
+					con->http_status = 403;
+					return HANDLER_FINISHED;
+				}
+			} else if (!S_ISDIR(st.st_mode)) {
+				if (overwrite == 0) {
+					/* copying into a non-dir ? */
+					con->http_status = 409;
+					return HANDLER_FINISHED;
+				} else {
+					unlink(p->physical.path->ptr);
+					if (-1 == mkdir(p->physical.path->ptr, WEBDAV_DIR_MODE)) {
+						con->http_status = 403;
+						return HANDLER_FINISHED;
+					}
+				}
+			}
+
+			/* copy the content of src to dest */
+			if (0 != (r = webdav_copy_dir(srv, con, p, &(con->physical), &(p->physical), overwrite))) {
+				con->http_status = r;
+				return HANDLER_FINISHED;
+			}
+			if (con->request.http_method == HTTP_METHOD_MOVE) {
+				b = buffer_init();
+				webdav_delete_dir(srv, con, p, &(con->physical), b); /* content */
+				buffer_free(b);
+
+				rmdir(con->physical.path->ptr);
+			}
+			con->http_status = 201;
+			con->file_finished = 1;
+		} else {
+			/* it is just a file, good */
+			int r;
+
+			/* does the client have a lock for this connection ? */
+			if (!webdav_has_lock(srv, con, p, p->uri.path)) {
+				con->http_status = 423;
+				return HANDLER_FINISHED;
+			}
+
+			/* destination exists */
+			if (0 == (r = stat(p->physical.path->ptr, &st))) {
+				if (S_ISDIR(st.st_mode)) {
+					/* file to dir/
+					 * append basename to physical path */
+
+					if (NULL != (sep = strrchr(con->physical.path->ptr, '/'))) {
+						buffer_append_string(p->physical.path, sep);
+						r = stat(p->physical.path->ptr, &st);
+					}
+				}
+			}
+
+			if (-1 == r) {
+				con->http_status = 201; /* we will create a new one */
+				con->file_finished = 1;
+
+				switch(errno) {
+				case ENOTDIR:
+					con->http_status = 409;
+					return HANDLER_FINISHED;
+				}
+			} else if (overwrite == 0) {
+				/* destination exists, but overwrite is not set */
+				con->http_status = 412;
+				return HANDLER_FINISHED;
+			} else {
+				con->http_status = 204; /* resource already existed */
+			}
+
+			if (con->request.http_method == HTTP_METHOD_MOVE) {
+				/* try a rename */
+
+				if (0 == rename(con->physical.path->ptr, p->physical.path->ptr)) {
+#ifdef USE_PROPPATCH
+					sqlite3_stmt *stmt = p->conf.stmt_move_uri;
+
+					if (stmt) {
+
+						sqlite3_reset(stmt);
+
+						/* bind the values to the insert */
+						sqlite3_bind_text(stmt, 1,
+								  p->uri.path->ptr,
+								  p->uri.path->used - 1,
+								  SQLITE_TRANSIENT);
+
+						sqlite3_bind_text(stmt, 2,
+								  con->uri.path->ptr,
+								  con->uri.path->used - 1,
+								  SQLITE_TRANSIENT);
+
+						if (SQLITE_DONE != sqlite3_step(stmt)) {
+							log_error_write(srv, __FILE__, __LINE__, "ss", "sql-move failed:", sqlite3_errmsg(p->conf.sql));
+						}
+					}
+#endif
+					return HANDLER_FINISHED;
+				}
+
+				/* rename failed, fall back to COPY + DELETE */
+			}
+
+			if (0 != (r = webdav_copy_file(srv, con, p, &(con->physical), &(p->physical), overwrite))) {
+				con->http_status = r;
+
+				return HANDLER_FINISHED;
+			}
+
+			if (con->request.http_method == HTTP_METHOD_MOVE) {
+				b = buffer_init();
+				webdav_delete_file(srv, con, p, &(con->physical), b);
+				buffer_free(b);
+			}
+		}
+
+		return HANDLER_FINISHED;
+	}
+	case HTTP_METHOD_PROPPATCH:
+		if (p->conf.is_readonly) {
+			con->http_status = 403;
+			return HANDLER_FINISHED;
+		}
+
+		if (!webdav_has_lock(srv, con, p, con->uri.path)) {
+			con->http_status = 423;
+			return HANDLER_FINISHED;
+		}
+
+		/* check if destination exists */
+		if (-1 == stat(con->physical.path->ptr, &st)) {
+			switch(errno) {
+			case ENOENT:
+				con->http_status = 404;
+				break;
+			}
+		}
+
+#ifdef USE_PROPPATCH
+		if (con->request.content_length) {
+			xmlDocPtr xml;
+
+			if (1 == webdav_parse_chunkqueue(srv, con, p, con->request_content_queue, &xml)) {
+				xmlNode *rootnode = xmlDocGetRootElement(xml);
+
+				if (0 == xmlStrcmp(rootnode->name, BAD_CAST "propertyupdate")) {
+					xmlNode *cmd;
+					char *err = NULL;
+					int empty_ns = 0; /* send 400 on a empty namespace attribute */
+
+					/* start response */
+
+					if (SQLITE_OK != sqlite3_exec(p->conf.sql, "BEGIN TRANSACTION", NULL, NULL, &err)) {
+						log_error_write(srv, __FILE__, __LINE__, "ss", "can't open transaction:", err);
+						sqlite3_free(err);
+
+						goto propmatch_cleanup;
+					}
+
+					/* a UPDATE request, we know 'set' and 'remove' */
+					for (cmd = rootnode->children; cmd; cmd = cmd->next) {
+						xmlNode *props;
+						/* either set or remove */
+
+						if ((0 == xmlStrcmp(cmd->name, BAD_CAST "set")) ||
+						    (0 == xmlStrcmp(cmd->name, BAD_CAST "remove"))) {
+
+							sqlite3_stmt *stmt;
+
+							stmt = (0 == xmlStrcmp(cmd->name, BAD_CAST "remove")) ?
+								p->conf.stmt_delete_prop : p->conf.stmt_update_prop;
+
+							for (props = cmd->children; props; props = props->next) {
+								if (0 == xmlStrcmp(props->name, BAD_CAST "prop")) {
+									xmlNode *prop;
+									int r;
+
+									prop = props->children;
+
+									if (prop->ns &&
+									    (0 == xmlStrcmp(prop->ns->href, BAD_CAST "")) &&
+									    (0 != xmlStrcmp(prop->ns->prefix, BAD_CAST ""))) {
+										log_error_write(srv, __FILE__, __LINE__, "ss",
+												"no name space for:",
+												prop->name);
+
+										empty_ns = 1;
+										break;
+									}
+
+									sqlite3_reset(stmt);
+
+									/* bind the values to the insert */
+
+									sqlite3_bind_text(stmt, 1,
+											  con->uri.path->ptr,
+											  con->uri.path->used - 1,
+											  SQLITE_TRANSIENT);
+									sqlite3_bind_text(stmt, 2,
+											  (char *)prop->name,
+											  strlen((char *)prop->name),
+											  SQLITE_TRANSIENT);
+									if (prop->ns) {
+										sqlite3_bind_text(stmt, 3,
+												  (char *)prop->ns->href,
+												  strlen((char *)prop->ns->href),
+												  SQLITE_TRANSIENT);
+									} else {
+										sqlite3_bind_text(stmt, 3,
+												  "",
+												  0,
+												  SQLITE_TRANSIENT);
+									}
+									if (stmt == p->conf.stmt_update_prop) {
+										sqlite3_bind_text(stmt, 4,
+											  (char *)xmlNodeGetContent(prop),
+											  strlen((char *)xmlNodeGetContent(prop)),
+											  SQLITE_TRANSIENT);
+									}
+
+									if (SQLITE_DONE != (r = sqlite3_step(stmt))) {
+										log_error_write(srv, __FILE__, __LINE__, "ss",
+												"sql-set failed:", sqlite3_errmsg(p->conf.sql));
+									}
+								}
+							}
+							if (empty_ns) break;
+						}
+					}
+
+					if (empty_ns) {
+						if (SQLITE_OK != sqlite3_exec(p->conf.sql, "ROLLBACK", NULL, NULL, &err)) {
+							log_error_write(srv, __FILE__, __LINE__, "ss", "can't rollback transaction:", err);
+							sqlite3_free(err);
+
+							goto propmatch_cleanup;
+						}
+
+						con->http_status = 400;
+					} else {
+						if (SQLITE_OK != sqlite3_exec(p->conf.sql, "COMMIT", NULL, NULL, &err)) {
+							log_error_write(srv, __FILE__, __LINE__, "ss", "can't commit transaction:", err);
+							sqlite3_free(err);
+
+							goto propmatch_cleanup;
+						}
+						con->http_status = 200;
+					}
+					con->file_finished = 1;
+
+					return HANDLER_FINISHED;
+				}
+
+propmatch_cleanup:
+
+				xmlFreeDoc(xml);
+			} else {
+				con->http_status = 400;
+				return HANDLER_FINISHED;
+			}
+		}
+#endif
+		con->http_status = 501;
+		return HANDLER_FINISHED;
+	case HTTP_METHOD_LOCK:
+		/**
+		 * a mac wants to write
+		 *
+		 * LOCK /dav/expire.txt HTTP/1.1\r\n
+		 * User-Agent: WebDAVFS/1.3 (01308000) Darwin/8.1.0 (Power Macintosh)\r\n
+		 * Accept: * / *\r\n
+		 * Depth: 0\r\n
+		 * Timeout: Second-600\r\n
+		 * Content-Type: text/xml; charset=\"utf-8\"\r\n
+		 * Content-Length: 229\r\n
+		 * Connection: keep-alive\r\n
+		 * Host: 192.168.178.23:1025\r\n
+		 * \r\n
+		 * <?xml version=\"1.0\" encoding=\"utf-8\"?>\n
+		 * <D:lockinfo xmlns:D=\"DAV:\">\n
+		 *  <D:lockscope><D:exclusive/></D:lockscope>\n
+		 *  <D:locktype><D:write/></D:locktype>\n
+		 *  <D:owner>\n
+		 *   <D:href>http://www.apple.com/webdav_fs/</D:href>\n
+		 *  </D:owner>\n
+		 * </D:lockinfo>\n
+		 */
+
+		if (depth != 0 && depth != -1) {
+			con->http_status = 400;
+
+			return HANDLER_FINISHED;
+		}
+
+#ifdef USE_LOCKS
+		if (con->request.content_length) {
+			xmlDocPtr xml;
+			buffer *hdr_if = NULL;
+
+			if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "If"))) {
+				hdr_if = ds->value;
+			}
+
+			/* we don't support Depth: Infinity on locks */
+			if (hdr_if == NULL && depth == -1) {
+				con->http_status = 409; /* Conflict */
+
+				return HANDLER_FINISHED;
+			}
+
+			if (1 == webdav_parse_chunkqueue(srv, con, p, con->request_content_queue, &xml)) {
+				xmlNode *rootnode = xmlDocGetRootElement(xml);
+
+				assert(rootnode);
+
+				if (0 == xmlStrcmp(rootnode->name, BAD_CAST "lockinfo")) {
+					xmlNode *lockinfo;
+					const xmlChar *lockscope = NULL, *locktype = NULL; /* TODO: compiler says unused: *owner = NULL; */
+
+					for (lockinfo = rootnode->children; lockinfo; lockinfo = lockinfo->next) {
+						if (0 == xmlStrcmp(lockinfo->name, BAD_CAST "lockscope")) {
+							xmlNode *value;
+							for (value = lockinfo->children; value; value = value->next) {
+								if ((0 == xmlStrcmp(value->name, BAD_CAST "exclusive")) ||
+								    (0 == xmlStrcmp(value->name, BAD_CAST "shared"))) {
+									lockscope = value->name;
+								} else {
+									con->http_status = 400;
+
+									xmlFreeDoc(xml);
+									return HANDLER_FINISHED;
+								}
+							}
+						} else if (0 == xmlStrcmp(lockinfo->name, BAD_CAST "locktype")) {
+							xmlNode *value;
+							for (value = lockinfo->children; value; value = value->next) {
+								if ((0 == xmlStrcmp(value->name, BAD_CAST "write"))) {
+									locktype = value->name;
+								} else {
+									con->http_status = 400;
+
+									xmlFreeDoc(xml);
+									return HANDLER_FINISHED;
+								}
+							}
+
+						} else if (0 == xmlStrcmp(lockinfo->name, BAD_CAST "owner")) {
+						}
+					}
+
+					if (lockscope && locktype) {
+						sqlite3_stmt *stmt = p->conf.stmt_read_lock_by_uri;
+
+						/* is this resourse already locked ? */
+
+						/* SELECT locktoken, resource, lockscope, locktype, owner, depth, timeout
+						 *   FROM locks
+						 *  WHERE resource = ? */
+
+						if (stmt) {
+
+							sqlite3_reset(stmt);
+
+							sqlite3_bind_text(stmt, 1,
+									  p->uri.path->ptr,
+									  p->uri.path->used - 1,
+									  SQLITE_TRANSIENT);
+
+							/* it is the PK */
+							while (SQLITE_ROW == sqlite3_step(stmt)) {
+								/* we found a lock
+								 * 1. is it compatible ?
+								 * 2. is it ours */
+								char *sql_lockscope = (char *)sqlite3_column_text(stmt, 2);
+
+								if (strcmp(sql_lockscope, "exclusive")) {
+									con->http_status = 423;
+								} else if (0 == xmlStrcmp(lockscope, BAD_CAST "exclusive")) {
+									/* resourse is locked with a shared lock
+									 * client wants exclusive */
+									con->http_status = 423;
+								}
+							}
+							if (con->http_status == 423) {
+								xmlFreeDoc(xml);
+								return HANDLER_FINISHED;
+							}
+						}
+
+						stmt = p->conf.stmt_create_lock;
+						if (stmt) {
+							/* create a lock-token */
+							uuid_t id;
+							char uuid[37] /* 36 + \0 */;
+
+							uuid_generate(id);
+							uuid_unparse(id, uuid);
+
+							buffer_copy_string(p->tmp_buf, "opaquelocktoken:");
+							buffer_append_string(p->tmp_buf, uuid);
+
+							/* "CREATE TABLE locks ("
+							 * "  locktoken TEXT NOT NULL,"
+							 * "  resource TEXT NOT NULL,"
+							 * "  lockscope TEXT NOT NULL,"
+							 * "  locktype TEXT NOT NULL,"
+							 * "  owner TEXT NOT NULL,"
+							 * "  depth INT NOT NULL,"
+							 */
+
+							sqlite3_reset(stmt);
+
+							sqlite3_bind_text(stmt, 1,
+									  CONST_BUF_LEN(p->tmp_buf),
+									  SQLITE_TRANSIENT);
+
+							sqlite3_bind_text(stmt, 2,
+									  CONST_BUF_LEN(con->uri.path),
+									  SQLITE_TRANSIENT);
+
+							sqlite3_bind_text(stmt, 3,
+									  (const char *)lockscope,
+									  xmlStrlen(lockscope),
+									  SQLITE_TRANSIENT);
+
+							sqlite3_bind_text(stmt, 4,
+									  (const char *)locktype,
+									  xmlStrlen(locktype),
+									  SQLITE_TRANSIENT);
+
+							/* owner */
+							sqlite3_bind_text(stmt, 5,
+									  "",
+									  0,
+									  SQLITE_TRANSIENT);
+
+							/* depth */
+							sqlite3_bind_int(stmt, 6,
+									 depth);
+
+
+							if (SQLITE_DONE != sqlite3_step(stmt)) {
+								log_error_write(srv, __FILE__, __LINE__, "ss",
+										"create lock:", sqlite3_errmsg(p->conf.sql));
+							}
+
+							/* looks like we survived */
+							webdav_lockdiscovery(srv, con, p->tmp_buf, (const char *)lockscope, (const char *)locktype, depth);
+
+							con->http_status = 201;
+							con->file_finished = 1;
+						}
+					}
+				}
+
+				xmlFreeDoc(xml);
+				return HANDLER_FINISHED;
+			} else {
+				con->http_status = 400;
+				return HANDLER_FINISHED;
+			}
+		} else {
+
+			if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "If"))) {
+				buffer *locktoken = ds->value;
+				sqlite3_stmt *stmt = p->conf.stmt_refresh_lock;
+
+				/* remove the < > around the token */
+				if (locktoken->used < 6) {
+					con->http_status = 400;
+
+					return HANDLER_FINISHED;
+				}
+
+				buffer_copy_string_len(p->tmp_buf, locktoken->ptr + 2, locktoken->used - 5);
+
+				sqlite3_reset(stmt);
+
+				sqlite3_bind_text(stmt, 1,
+					  CONST_BUF_LEN(p->tmp_buf),
+					  SQLITE_TRANSIENT);
+
+				if (SQLITE_DONE != sqlite3_step(stmt)) {
+					log_error_write(srv, __FILE__, __LINE__, "ss",
+						"refresh lock:", sqlite3_errmsg(p->conf.sql));
+				}
+
+				webdav_lockdiscovery(srv, con, p->tmp_buf, "exclusive", "write", 0);
+
+				con->http_status = 200;
+				con->file_finished = 1;
+				return HANDLER_FINISHED;
+			} else {
+				/* we need a lock-token to refresh */
+				con->http_status = 400;
+
+				return HANDLER_FINISHED;
+			}
+		}
+		break;
+#else
+		con->http_status = 501;
+		return HANDLER_FINISHED;
+#endif
+	case HTTP_METHOD_UNLOCK:
+#ifdef USE_LOCKS
+		if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "Lock-Token"))) {
+			buffer *locktoken = ds->value;
+			sqlite3_stmt *stmt = p->conf.stmt_remove_lock;
+
+			/* remove the < > around the token */
+			if (locktoken->used < 4) {
+				con->http_status = 400;
+
+				return HANDLER_FINISHED;
+			}
+
+			/**
+			 * FIXME:
+			 *
+			 * if the resourse is locked:
+			 * - by us: unlock
+			 * - by someone else: 401
+			 * if the resource is not locked:
+			 * - 412
+			 *  */
+
+			buffer_copy_string_len(p->tmp_buf, locktoken->ptr + 1, locktoken->used - 3);
+
+			sqlite3_reset(stmt);
+
+			sqlite3_bind_text(stmt, 1,
+				  CONST_BUF_LEN(p->tmp_buf),
+				  SQLITE_TRANSIENT);
+
+			sqlite3_bind_text(stmt, 2,
+				  CONST_BUF_LEN(con->uri.path),
+				  SQLITE_TRANSIENT);
+
+			if (SQLITE_DONE != sqlite3_step(stmt)) {
+				log_error_write(srv, __FILE__, __LINE__, "ss",
+					"remove lock:", sqlite3_errmsg(p->conf.sql));
+			}
+
+			if (0 == sqlite3_changes(p->conf.sql)) {
+				con->http_status = 401;
+			} else {
+				con->http_status = 204;
+			}
+			return HANDLER_FINISHED;
+		} else {
+			/* we need a lock-token to unlock */
+			con->http_status = 400;
+
+			return HANDLER_FINISHED;
+		}
+		break;
+#else
+		con->http_status = 501;
+		return HANDLER_FINISHED;
+#endif
+	default:
+		break;
+	}
+
+	/* not found */
+	return HANDLER_GO_ON;
+}
+
+
+/* this function is called at dlopen() time and inits the callbacks */
+
+int mod_webdav_plugin_init(plugin *p) {
+	p->version     = LIGHTTPD_VERSION_ID;
+	p->name        = buffer_init_string("webdav");
+
+	p->init        = mod_webdav_init;
+	p->handle_uri_clean  = mod_webdav_uri_handler;
+	p->handle_physical   = mod_webdav_subrequest_handler;
+	p->set_defaults  = mod_webdav_set_defaults;
+	p->cleanup     = mod_webdav_free;
+
+	p->data        = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/network.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/network.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/network.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,672 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "network.h"
+#include "fdevent.h"
+#include "log.h"
+#include "connections.h"
+#include "plugin.h"
+#include "joblist.h"
+
+#include "network_backends.h"
+#include "sys-mmap.h"
+#include "sys-socket.h"
+
+#ifdef USE_OPENSSL
+# include <openssl/ssl.h>
+# include <openssl/err.h>
+# include <openssl/rand.h>
+#endif
+
+handler_t network_server_handle_fdevent(void *s, void *context, int revents) {
+	server     *srv = (server *)s;
+	server_socket *srv_socket = (server_socket *)context;
+	connection *con;
+	int loops = 0;
+
+	UNUSED(context);
+
+	if (revents != FDEVENT_IN) {
+		log_error_write(srv, __FILE__, __LINE__, "sdd",
+				"strange event for server socket",
+				srv_socket->fd,
+				revents);
+		return HANDLER_ERROR;
+	}
+
+	/* accept()s at most 100 connections directly
+	 *
+	 * we jump out after 100 to give the waiting connections a chance */
+	for (loops = 0; loops < 100 && NULL != (con = connection_accept(srv, srv_socket)); loops++) {
+		handler_t r;
+
+		connection_state_machine(srv, con);
+
+		switch(r = plugins_call_handle_joblist(srv, con)) {
+		case HANDLER_FINISHED:
+		case HANDLER_GO_ON:
+			break;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "d", r);
+			break;
+		}
+	}
+	return HANDLER_GO_ON;
+}
+
+int network_server_init(server *srv, buffer *host_token, specific_config *s) {
+	int val;
+	socklen_t addr_len;
+	server_socket *srv_socket;
+	char *sp;
+	unsigned int port = 0;
+	const char *host;
+	buffer *b;
+	int is_unix_domain_socket = 0;
+	int fd;
+
+#ifdef SO_ACCEPTFILTER
+	struct accept_filter_arg afa;
+#endif
+
+#ifdef __WIN32
+	WORD wVersionRequested;
+	WSADATA wsaData;
+	int err;
+
+	wVersionRequested = MAKEWORD( 2, 2 );
+
+	err = WSAStartup( wVersionRequested, &wsaData );
+	if ( err != 0 ) {
+		    /* Tell the user that we could not find a usable */
+		    /* WinSock DLL.                                  */
+		    return -1;
+	}
+#endif
+
+	srv_socket = calloc(1, sizeof(*srv_socket));
+	srv_socket->fd = -1;
+
+	srv_socket->srv_token = buffer_init();
+	buffer_copy_string_buffer(srv_socket->srv_token, host_token);
+
+	b = buffer_init();
+	buffer_copy_string_buffer(b, host_token);
+
+	/* ipv4:port
+	 * [ipv6]:port
+	 */
+	if (NULL == (sp = strrchr(b->ptr, ':'))) {
+		log_error_write(srv, __FILE__, __LINE__, "sb", "value of $SERVER[\"socket\"] has to be \"ip:port\".", b);
+
+		return -1;
+	}
+
+	host = b->ptr;
+
+	/* check for [ and ] */
+	if (b->ptr[0] == '[' && *(sp-1) == ']') {
+		*(sp-1) = '\0';
+		host++;
+
+		s->use_ipv6 = 1;
+	}
+
+	*(sp++) = '\0';
+
+	port = strtol(sp, NULL, 10);
+
+	if (host[0] == '/') {
+		/* host is a unix-domain-socket */
+		is_unix_domain_socket = 1;
+	} else if (port == 0 || port > 65535) {
+		log_error_write(srv, __FILE__, __LINE__, "sd", "port out of range:", port);
+
+		return -1;
+	}
+
+	if (*host == '\0') host = NULL;
+
+	if (is_unix_domain_socket) {
+#ifdef HAVE_SYS_UN_H
+
+		srv_socket->addr.plain.sa_family = AF_UNIX;
+
+		if (-1 == (srv_socket->fd = socket(srv_socket->addr.plain.sa_family, SOCK_STREAM, 0))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed:", strerror(errno));
+			return -1;
+		}
+#else
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"ERROR: Unix Domain sockets are not supported.");
+		return -1;
+#endif
+	}
+
+#ifdef HAVE_IPV6
+	if (s->use_ipv6) {
+		srv_socket->addr.plain.sa_family = AF_INET6;
+
+		if (-1 == (srv_socket->fd = socket(srv_socket->addr.plain.sa_family, SOCK_STREAM, IPPROTO_TCP))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed:", strerror(errno));
+			return -1;
+		}
+		srv_socket->use_ipv6 = 1;
+	}
+#endif
+
+	if (srv_socket->fd == -1) {
+		srv_socket->addr.plain.sa_family = AF_INET;
+		if (-1 == (srv_socket->fd = socket(srv_socket->addr.plain.sa_family, SOCK_STREAM, IPPROTO_TCP))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed:", strerror(errno));
+			return -1;
+		}
+	}
+
+	/* */
+	srv->cur_fds = srv_socket->fd;
+
+	val = 1;
+	if (setsockopt(srv_socket->fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) {
+		log_error_write(srv, __FILE__, __LINE__, "ss", "socketsockopt failed:", strerror(errno));
+		return -1;
+	}
+
+	switch(srv_socket->addr.plain.sa_family) {
+#ifdef HAVE_IPV6
+	case AF_INET6:
+		memset(&srv_socket->addr, 0, sizeof(struct sockaddr_in6));
+		srv_socket->addr.ipv6.sin6_family = AF_INET6;
+		if (host == NULL) {
+			srv_socket->addr.ipv6.sin6_addr = in6addr_any;
+		} else {
+			struct addrinfo hints, *res;
+			int r;
+
+			memset(&hints, 0, sizeof(hints));
+
+			hints.ai_family   = AF_INET6;
+			hints.ai_socktype = SOCK_STREAM;
+			hints.ai_protocol = IPPROTO_TCP;
+
+			if (0 != (r = getaddrinfo(host, NULL, &hints, &res))) {
+				log_error_write(srv, __FILE__, __LINE__,
+						"sssss", "getaddrinfo failed: ",
+						gai_strerror(r), "'", host, "'");
+
+				return -1;
+			}
+
+			memcpy(&(srv_socket->addr), res->ai_addr, res->ai_addrlen);
+
+			freeaddrinfo(res);
+		}
+		srv_socket->addr.ipv6.sin6_port = htons(port);
+		addr_len = sizeof(struct sockaddr_in6);
+		break;
+#endif
+	case AF_INET:
+		memset(&srv_socket->addr, 0, sizeof(struct sockaddr_in));
+		srv_socket->addr.ipv4.sin_family = AF_INET;
+		if (host == NULL) {
+			srv_socket->addr.ipv4.sin_addr.s_addr = htonl(INADDR_ANY);
+		} else {
+			struct hostent *he;
+			if (NULL == (he = gethostbyname(host))) {
+				log_error_write(srv, __FILE__, __LINE__,
+						"sds", "gethostbyname failed: ",
+						h_errno, host);
+				return -1;
+			}
+
+			if (he->h_addrtype != AF_INET) {
+				log_error_write(srv, __FILE__, __LINE__, "sd", "addr-type != AF_INET: ", he->h_addrtype);
+				return -1;
+			}
+
+			if (he->h_length != sizeof(struct in_addr)) {
+				log_error_write(srv, __FILE__, __LINE__, "sd", "addr-length != sizeof(in_addr): ", he->h_length);
+				return -1;
+			}
+
+			memcpy(&(srv_socket->addr.ipv4.sin_addr.s_addr), he->h_addr_list[0], he->h_length);
+		}
+		srv_socket->addr.ipv4.sin_port = htons(port);
+
+		addr_len = sizeof(struct sockaddr_in);
+
+		break;
+	case AF_UNIX:
+		srv_socket->addr.un.sun_family = AF_UNIX;
+		strcpy(srv_socket->addr.un.sun_path, host);
+
+#ifdef SUN_LEN
+		addr_len = SUN_LEN(&srv_socket->addr.un);
+#else
+		/* stevens says: */
+		addr_len = strlen(host) + 1 + sizeof(srv_socket->addr.un.sun_family);
+#endif
+
+		/* check if the socket exists and try to connect to it. */
+		if (-1 != (fd = connect(srv_socket->fd, (struct sockaddr *) &(srv_socket->addr), addr_len))) {
+			close(fd);
+
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+				"server socket is still in use:",
+				host);
+
+
+			return -1;
+		}
+
+		/* connect failed */
+		switch(errno) {
+		case ECONNREFUSED:
+			unlink(host);
+			break;
+		case ENOENT:
+			break;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "sds",
+				"testing socket failed:",
+				host, strerror(errno));
+
+			return -1;
+		}
+
+		break;
+	default:
+		addr_len = 0;
+
+		return -1;
+	}
+
+	if (0 != bind(srv_socket->fd, (struct sockaddr *) &(srv_socket->addr), addr_len)) {
+		switch(srv_socket->addr.plain.sa_family) {
+		case AF_UNIX:
+			log_error_write(srv, __FILE__, __LINE__, "sds",
+					"can't bind to socket:",
+					host, strerror(errno));
+			break;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "ssds",
+					"can't bind to port:",
+					host, port, strerror(errno));
+			break;
+		}
+		return -1;
+	}
+
+	if (-1 == listen(srv_socket->fd, 128 * 8)) {
+		log_error_write(srv, __FILE__, __LINE__, "ss", "listen failed: ", strerror(errno));
+		return -1;
+	}
+
+	if (s->is_ssl) {
+#ifdef USE_OPENSSL
+		if (srv->ssl_is_init == 0) {
+			SSL_load_error_strings();
+			SSL_library_init();
+			srv->ssl_is_init = 1;
+
+			if (0 == RAND_status()) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
+						"not enough entropy in the pool");
+				return -1;
+			}
+		}
+
+		if (NULL == (s->ssl_ctx = SSL_CTX_new(SSLv23_server_method()))) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
+					ERR_error_string(ERR_get_error(), NULL));
+			return -1;
+		}
+
+		if (!s->ssl_use_sslv2) {
+			/* disable SSLv2 */
+			if (SSL_OP_NO_SSLv2 != SSL_CTX_set_options(s->ssl_ctx, SSL_OP_NO_SSLv2)) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
+						ERR_error_string(ERR_get_error(), NULL));
+				return -1;
+			}
+		}
+
+		if (!buffer_is_empty(s->ssl_cipher_list)) {
+			/* Disable support for low encryption ciphers */
+			if (SSL_CTX_set_cipher_list(s->ssl_ctx, s->ssl_cipher_list->ptr) != 1) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
+						ERR_error_string(ERR_get_error(), NULL));
+				return -1;
+			}
+		}
+
+		if (buffer_is_empty(s->ssl_pemfile)) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "ssl.pemfile has to be set");
+			return -1;
+		}
+
+		if (!buffer_is_empty(s->ssl_ca_file)) {
+			if (1 != SSL_CTX_load_verify_locations(s->ssl_ctx, s->ssl_ca_file->ptr, NULL)) {
+				log_error_write(srv, __FILE__, __LINE__, "ssb", "SSL:",
+						ERR_error_string(ERR_get_error(), NULL), s->ssl_ca_file);
+				return -1;
+			}
+		}
+
+		if (SSL_CTX_use_certificate_file(s->ssl_ctx, s->ssl_pemfile->ptr, SSL_FILETYPE_PEM) < 0) {
+			log_error_write(srv, __FILE__, __LINE__, "ssb", "SSL:",
+					ERR_error_string(ERR_get_error(), NULL), s->ssl_pemfile);
+			return -1;
+		}
+
+		if (SSL_CTX_use_PrivateKey_file (s->ssl_ctx, s->ssl_pemfile->ptr, SSL_FILETYPE_PEM) < 0) {
+			log_error_write(srv, __FILE__, __LINE__, "ssb", "SSL:",
+					ERR_error_string(ERR_get_error(), NULL), s->ssl_pemfile);
+			return -1;
+		}
+
+		if (SSL_CTX_check_private_key(s->ssl_ctx) != 1) {
+			log_error_write(srv, __FILE__, __LINE__, "sssb", "SSL:",
+					"Private key does not match the certificate public key, reason:",
+					ERR_error_string(ERR_get_error(), NULL),
+					s->ssl_pemfile);
+			return -1;
+		}
+		SSL_CTX_set_default_read_ahead(s->ssl_ctx, 1);
+		SSL_CTX_set_mode(s->ssl_ctx, SSL_CTX_get_mode(s->ssl_ctx) | SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
+
+		srv_socket->ssl_ctx = s->ssl_ctx;
+#else
+
+		buffer_free(srv_socket->srv_token);
+		free(srv_socket);
+
+		buffer_free(b);
+
+		log_error_write(srv, __FILE__, __LINE__, "ss", "SSL:",
+				"ssl requested but openssl support is not compiled in");
+
+		return -1;
+#endif
+	} else {
+#ifdef SO_ACCEPTFILTER
+		/*
+		 * FreeBSD accf_http filter
+		 *
+		 */
+		memset(&afa, 0, sizeof(afa));
+		strcpy(afa.af_name, "httpready");
+		if (setsockopt(srv_socket->fd, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa)) < 0) {
+			if (errno != ENOENT) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "can't set accept-filter 'httpready': ", strerror(errno));
+			}
+		}
+#endif
+	}
+
+	srv_socket->is_ssl = s->is_ssl;
+	srv_socket->fde_ndx = -1;
+
+	if (srv->srv_sockets.size == 0) {
+		srv->srv_sockets.size = 4;
+		srv->srv_sockets.used = 0;
+		srv->srv_sockets.ptr = malloc(srv->srv_sockets.size * sizeof(server_socket));
+	} else if (srv->srv_sockets.used == srv->srv_sockets.size) {
+		srv->srv_sockets.size += 4;
+		srv->srv_sockets.ptr = realloc(srv->srv_sockets.ptr, srv->srv_sockets.size * sizeof(server_socket));
+	}
+
+	srv->srv_sockets.ptr[srv->srv_sockets.used++] = srv_socket;
+
+	buffer_free(b);
+
+	return 0;
+}
+
+int network_close(server *srv) {
+	size_t i;
+	for (i = 0; i < srv->srv_sockets.used; i++) {
+		server_socket *srv_socket = srv->srv_sockets.ptr[i];
+
+		if (srv_socket->fd != -1) {
+			/* check if server fd are already registered */
+			if (srv_socket->fde_ndx != -1) {
+				fdevent_event_del(srv->ev, &(srv_socket->fde_ndx), srv_socket->fd);
+				fdevent_unregister(srv->ev, srv_socket->fd);
+			}
+
+			close(srv_socket->fd);
+		}
+
+		buffer_free(srv_socket->srv_token);
+
+		free(srv_socket);
+	}
+
+	free(srv->srv_sockets.ptr);
+
+	return 0;
+}
+
+typedef enum {
+	NETWORK_BACKEND_UNSET,
+	NETWORK_BACKEND_WRITE,
+	NETWORK_BACKEND_WRITEV,
+	NETWORK_BACKEND_LINUX_SENDFILE,
+	NETWORK_BACKEND_FREEBSD_SENDFILE,
+	NETWORK_BACKEND_SOLARIS_SENDFILEV
+} network_backend_t;
+
+int network_init(server *srv) {
+	buffer *b;
+	size_t i;
+	network_backend_t backend;
+
+	struct nb_map {
+		network_backend_t nb;
+		const char *name;
+	} network_backends[] = {
+		/* lowest id wins */
+#if defined USE_LINUX_SENDFILE
+		{ NETWORK_BACKEND_LINUX_SENDFILE,       "linux-sendfile" },
+#endif
+#if defined USE_FREEBSD_SENDFILE
+		{ NETWORK_BACKEND_FREEBSD_SENDFILE,     "freebsd-sendfile" },
+#endif
+#if defined USE_SOLARIS_SENDFILEV
+		{ NETWORK_BACKEND_SOLARIS_SENDFILEV,	"solaris-sendfilev" },
+#endif
+#if defined USE_WRITEV
+		{ NETWORK_BACKEND_WRITEV,		"writev" },
+#endif
+		{ NETWORK_BACKEND_WRITE,		"write" },
+		{ NETWORK_BACKEND_UNSET,        	NULL }
+	};
+
+	b = buffer_init();
+
+	buffer_copy_string_buffer(b, srv->srvconf.bindhost);
+	buffer_append_string(b, ":");
+	buffer_append_long(b, srv->srvconf.port);
+
+	if (0 != network_server_init(srv, b, srv->config_storage[0])) {
+		return -1;
+	}
+	buffer_free(b);
+
+#ifdef USE_OPENSSL
+	srv->network_ssl_backend_write = network_write_chunkqueue_openssl;
+#endif
+
+	/* get a usefull default */
+	backend = network_backends[0].nb;
+
+	/* match name against known types */
+	if (!buffer_is_empty(srv->srvconf.network_backend)) {
+		for (i = 0; network_backends[i].name; i++) {
+			/**/
+			if (buffer_is_equal_string(srv->srvconf.network_backend, network_backends[i].name, strlen(network_backends[i].name))) {
+				backend = network_backends[i].nb;
+				break;
+			}
+		}
+		if (NULL == network_backends[i].name) {
+			/* we don't know it */
+
+			log_error_write(srv, __FILE__, __LINE__, "sb",
+					"server.network-backend has a unknown value:",
+					srv->srvconf.network_backend);
+
+			return -1;
+		}
+	}
+
+	switch(backend) {
+	case NETWORK_BACKEND_WRITE:
+		srv->network_backend_write = network_write_chunkqueue_write;
+		break;
+#ifdef USE_WRITEV
+	case NETWORK_BACKEND_WRITEV:
+		srv->network_backend_write = network_write_chunkqueue_writev;
+		break;
+#endif
+#ifdef USE_LINUX_SENDFILE
+	case NETWORK_BACKEND_LINUX_SENDFILE:
+		srv->network_backend_write = network_write_chunkqueue_linuxsendfile;
+		break;
+#endif
+#ifdef USE_FREEBSD_SENDFILE
+	case NETWORK_BACKEND_FREEBSD_SENDFILE:
+		srv->network_backend_write = network_write_chunkqueue_freebsdsendfile;
+		break;
+#endif
+#ifdef USE_SOLARIS_SENDFILEV
+	case NETWORK_BACKEND_SOLARIS_SENDFILEV:
+		srv->network_backend_write = network_write_chunkqueue_solarissendfilev;
+		break;
+#endif
+	default:
+		return -1;
+	}
+
+	/* check for $SERVER["socket"] */
+	for (i = 1; i < srv->config_context->used; i++) {
+		data_config *dc = (data_config *)srv->config_context->data[i];
+		specific_config *s = srv->config_storage[i];
+		size_t j;
+
+		/* not our stage */
+		if (COMP_SERVER_SOCKET != dc->comp) continue;
+
+		if (dc->cond != CONFIG_COND_EQ) {
+			log_error_write(srv, __FILE__, __LINE__, "s", "only == is allowed for $SERVER[\"socket\"].");
+
+			return -1;
+		}
+
+		/* check if we already know this socket,
+		 * if yes, don't init it */
+		for (j = 0; j < srv->srv_sockets.used; j++) {
+			if (buffer_is_equal(srv->srv_sockets.ptr[j]->srv_token, dc->string)) {
+				break;
+			}
+		}
+
+		if (j == srv->srv_sockets.used) {
+			if (0 != network_server_init(srv, dc->string, s)) return -1;
+		}
+	}
+
+	return 0;
+}
+
+int network_register_fdevents(server *srv) {
+	size_t i;
+
+	if (-1 == fdevent_reset(srv->ev)) {
+		return -1;
+	}
+
+	/* register fdevents after reset */
+	for (i = 0; i < srv->srv_sockets.used; i++) {
+		server_socket *srv_socket = srv->srv_sockets.ptr[i];
+
+		fdevent_register(srv->ev, srv_socket->fd, network_server_handle_fdevent, srv_socket);
+		fdevent_event_add(srv->ev, &(srv_socket->fde_ndx), srv_socket->fd, FDEVENT_IN);
+	}
+	return 0;
+}
+
+int network_write_chunkqueue(server *srv, connection *con, chunkqueue *cq) {
+	int ret = -1;
+	off_t written = 0;
+#ifdef TCP_CORK
+	int corked = 0;
+#endif
+	server_socket *srv_socket = con->srv_socket;
+
+	if (con->conf.global_kbytes_per_second &&
+	    *(con->conf.global_bytes_per_second_cnt_ptr) > con->conf.global_kbytes_per_second * 1024) {
+		/* we reached the global traffic limit */
+
+		con->traffic_limit_reached = 1;
+		joblist_append(srv, con);
+
+		return 1;
+	}
+
+	written = cq->bytes_out;
+
+#ifdef TCP_CORK
+	/* Linux: put a cork into the socket as we want to combine the write() calls
+	 * but only if we really have multiple chunks
+	 */
+	if (cq->first && cq->first->next) {
+		corked = 1;
+		setsockopt(con->fd, IPPROTO_TCP, TCP_CORK, &corked, sizeof(corked));
+	}
+#endif
+
+	if (srv_socket->is_ssl) {
+#ifdef USE_OPENSSL
+		ret = srv->network_ssl_backend_write(srv, con, con->ssl, cq);
+#endif
+	} else {
+		ret = srv->network_backend_write(srv, con, con->fd, cq);
+	}
+
+	if (ret >= 0) {
+		chunkqueue_remove_finished_chunks(cq);
+		ret = chunkqueue_is_empty(cq) ? 0 : 1;
+	}
+
+#ifdef TCP_CORK
+	if (corked) {
+		corked = 0;
+		setsockopt(con->fd, IPPROTO_TCP, TCP_CORK, &corked, sizeof(corked));
+	}
+#endif
+
+	written = cq->bytes_out - written;
+	con->bytes_written += written;
+	con->bytes_written_cur_second += written;
+
+	*(con->conf.global_bytes_per_second_cnt_ptr) += written;
+
+	if (con->conf.kbytes_per_second &&
+	    (con->bytes_written_cur_second > con->conf.kbytes_per_second * 1024)) {
+		/* we reached the traffic limit */
+
+		con->traffic_limit_reached = 1;
+		joblist_append(srv, con);
+	}
+	return ret;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/network.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/network.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/network.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,13 @@
+#ifndef _NETWORK_H_
+#define _NETWORK_H_
+
+#include "server.h"
+
+int network_write_chunkqueue(server *srv, connection *con, chunkqueue *c);
+
+int network_init(server *srv);
+int network_close(server *srv);
+
+int network_register_fdevents(server *srv);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/network_backends.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/network_backends.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/network_backends.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,58 @@
+#ifndef _NETWORK_BACKENDS_H_
+#define _NETWORK_BACKENDS_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <sys/types.h>
+
+/* on linux 2.4.x you get either sendfile or LFS */
+#if defined HAVE_SYS_SENDFILE_H && defined HAVE_SENDFILE && (!defined _LARGEFILE_SOURCE || defined HAVE_SENDFILE64) && defined HAVE_WRITEV && defined(__linux__) && !defined HAVE_SENDFILE_BROKEN
+# define USE_LINUX_SENDFILE
+# include <sys/sendfile.h>
+# include <sys/uio.h>
+#endif
+
+#if defined HAVE_SYS_UIO_H && defined HAVE_SENDFILE && defined HAVE_WRITEV && (defined(__FreeBSD__) || defined(__DragonFly__))
+# define USE_FREEBSD_SENDFILE
+# include <sys/uio.h>
+#endif
+
+#if defined HAVE_SYS_SENDFILE_H && defined HAVE_SENDFILEV && defined HAVE_WRITEV && defined(__sun)
+# define USE_SOLARIS_SENDFILEV
+# include <sys/sendfile.h>
+# include <sys/uio.h>
+#endif
+
+#if defined HAVE_SYS_UIO_H && defined HAVE_WRITEV
+# define USE_WRITEV
+# include <sys/uio.h>
+#endif
+
+#if defined HAVE_SYS_MMAN_H && defined HAVE_MMAP
+# define USE_MMAP
+# include <sys/mman.h>
+/* NetBSD 1.3.x needs it */
+# ifndef MAP_FAILED
+#  define MAP_FAILED -1
+# endif
+#endif
+
+#if defined HAVE_SYS_UIO_H && defined HAVE_WRITEV && defined HAVE_SEND_FILE && defined(__aix)
+# define USE_AIX_SENDFILE
+#endif
+
+#include "base.h"
+
+
+int network_write_chunkqueue_write(server *srv, connection *con, int fd, chunkqueue *cq);
+int network_write_chunkqueue_writev(server *srv, connection *con, int fd, chunkqueue *cq);
+int network_write_chunkqueue_linuxsendfile(server *srv, connection *con, int fd, chunkqueue *cq);
+int network_write_chunkqueue_freebsdsendfile(server *srv, connection *con, int fd, chunkqueue *cq);
+int network_write_chunkqueue_solarissendfilev(server *srv, connection *con, int fd, chunkqueue *cq);
+#ifdef USE_OPENSSL
+int network_write_chunkqueue_openssl(server *srv, connection *con, SSL *ssl, chunkqueue *cq);
+#endif
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/network_freebsd_sendfile.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/network_freebsd_sendfile.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/network_freebsd_sendfile.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,227 @@
+#include "network_backends.h"
+
+#ifdef USE_FREEBSD_SENDFILE
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "network.h"
+#include "fdevent.h"
+#include "log.h"
+#include "stat_cache.h"
+
+
+#ifndef UIO_MAXIOV
+# if defined(__FreeBSD__) || defined(__DragonFly__)
+/* FreeBSD 4.7, 4.9 defined it in sys/uio.h only if _KERNEL is specified */
+#  define UIO_MAXIOV 1024
+# endif
+#endif
+
+int network_write_chunkqueue_freebsdsendfile(server *srv, connection *con, int fd, chunkqueue *cq) {
+	chunk *c;
+	size_t chunks_written = 0;
+
+	for(c = cq->first; c; c = c->next, chunks_written++) {
+		int chunk_finished = 0;
+
+		switch(c->type) {
+		case MEM_CHUNK: {
+			char * offset;
+			size_t toSend;
+			ssize_t r;
+
+			size_t num_chunks, i;
+			struct iovec chunks[UIO_MAXIOV];
+			chunk *tc;
+			size_t num_bytes = 0;
+
+			/* we can't send more then SSIZE_MAX bytes in one chunk */
+
+			/* build writev list
+			 *
+			 * 1. limit: num_chunks < UIO_MAXIOV
+			 * 2. limit: num_bytes < SSIZE_MAX
+			 */
+			for(num_chunks = 0, tc = c; tc && tc->type == MEM_CHUNK && num_chunks < UIO_MAXIOV; num_chunks++, tc = tc->next);
+
+			for(tc = c, i = 0; i < num_chunks; tc = tc->next, i++) {
+				if (tc->mem->used == 0) {
+					chunks[i].iov_base = tc->mem->ptr;
+					chunks[i].iov_len  = 0;
+				} else {
+					offset = tc->mem->ptr + tc->offset;
+					toSend = tc->mem->used - 1 - tc->offset;
+
+					chunks[i].iov_base = offset;
+
+					/* protect the return value of writev() */
+					if (toSend > SSIZE_MAX ||
+					    num_bytes + toSend > SSIZE_MAX) {
+						chunks[i].iov_len = SSIZE_MAX - num_bytes;
+
+						num_chunks = i + 1;
+						break;
+					} else {
+						chunks[i].iov_len = toSend;
+					}
+
+					num_bytes += toSend;
+				}
+			}
+
+			if ((r = writev(fd, chunks, num_chunks)) < 0) {
+				switch (errno) {
+				case EAGAIN:
+				case EINTR:
+					r = 0;
+					break;
+				case ENOTCONN:
+				case EPIPE:
+				case ECONNRESET:
+					return -2;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "ssd",
+							"writev failed:", strerror(errno), fd);
+
+					return -1;
+				}
+
+				r = 0;
+			}
+
+			/* check which chunks have been written */
+			cq->bytes_out += r;
+
+			for(i = 0, tc = c; i < num_chunks; i++, tc = tc->next) {
+				if (r >= (ssize_t)chunks[i].iov_len) {
+					/* written */
+					r -= chunks[i].iov_len;
+					tc->offset += chunks[i].iov_len;
+
+					if (chunk_finished) {
+						/* skip the chunks from further touches */
+						chunks_written++;
+						c = c->next;
+					} else {
+						/* chunks_written + c = c->next is done in the for()*/
+						chunk_finished++;
+					}
+				} else {
+					/* partially written */
+
+					tc->offset += r;
+					chunk_finished = 0;
+
+					break;
+				}
+			}
+
+			break;
+		}
+		case FILE_CHUNK: {
+			off_t offset, r;
+			size_t toSend;
+			stat_cache_entry *sce = NULL;
+
+			if (HANDLER_ERROR == stat_cache_get_entry(srv, con, c->file.name, &sce)) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						strerror(errno), c->file.name);
+				return -1;
+			}
+
+			offset = c->file.start + c->offset;
+			/* limit the toSend to 2^31-1 bytes in a chunk */
+			toSend = c->file.length - c->offset > ((1 << 30) - 1) ?
+				((1 << 30) - 1) : c->file.length - c->offset;
+
+			if (-1 == c->file.fd) {
+				if (-1 == (c->file.fd = open(c->file.name->ptr, O_RDONLY))) {
+					log_error_write(srv, __FILE__, __LINE__, "ss", "open failed: ", strerror(errno));
+
+					return -1;
+				}
+
+#ifdef FD_CLOEXEC
+				fcntl(c->file.fd, F_SETFD, FD_CLOEXEC);
+#endif
+			}
+
+			r = 0;
+
+			/* FreeBSD sendfile() */
+			if (-1 == sendfile(c->file.fd, fd, offset, toSend, NULL, &r, 0)) {
+				switch(errno) {
+				case EAGAIN:
+					break;
+				case ENOTCONN:
+					return -2;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "ssd", "sendfile: ", strerror(errno), errno);
+					return -1;
+				}
+			}
+
+			if (r == 0) {
+				int oerrno = errno;
+				/* We got an event to write but we wrote nothing
+				 *
+				 * - the file shrinked -> error
+				 * - the remote side closed inbetween -> remote-close */
+
+				if (HANDLER_ERROR == stat_cache_get_entry(srv, con, c->file.name, &sce)) {
+					/* file is gone ? */
+					return -1;
+				}
+
+				if (offset >= sce->st.st_size) {
+					/* file shrinked, close the connection */
+					errno = oerrno;
+
+					return -1;
+				}
+
+				errno = oerrno;
+				return -2;
+			}
+
+			c->offset += r;
+			cq->bytes_out += r;
+
+			if (c->offset == c->file.length) {
+				chunk_finished = 1;
+			}
+
+			break;
+		}
+		default:
+
+			log_error_write(srv, __FILE__, __LINE__, "ds", c, "type not known");
+
+			return -1;
+		}
+
+		if (!chunk_finished) {
+			/* not finished yet */
+
+			break;
+		}
+	}
+
+	return chunks_written;
+}
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/network_linux_sendfile.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/network_linux_sendfile.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/network_linux_sendfile.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,253 @@
+#include "network_backends.h"
+
+#ifdef USE_LINUX_SENDFILE
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <string.h>
+#include <stdlib.h>
+#include <fcntl.h>
+
+#include "network.h"
+#include "fdevent.h"
+#include "log.h"
+#include "stat_cache.h"
+
+/* on linux 2.4.29 + debian/ubuntu we have crashes if this is enabled */
+#undef HAVE_POSIX_FADVISE
+
+int network_write_chunkqueue_linuxsendfile(server *srv, connection *con, int fd, chunkqueue *cq) {
+	chunk *c;
+	size_t chunks_written = 0;
+
+	for(c = cq->first; c; c = c->next, chunks_written++) {
+		int chunk_finished = 0;
+
+		switch(c->type) {
+		case MEM_CHUNK: {
+			char * offset;
+			size_t toSend;
+			ssize_t r;
+
+			size_t num_chunks, i;
+			struct iovec chunks[UIO_MAXIOV];
+			chunk *tc;
+			size_t num_bytes = 0;
+
+			/* we can't send more then SSIZE_MAX bytes in one chunk */
+
+			/* build writev list
+			 *
+			 * 1. limit: num_chunks < UIO_MAXIOV
+			 * 2. limit: num_bytes < SSIZE_MAX
+			 */
+			for (num_chunks = 0, tc = c;
+			     tc && tc->type == MEM_CHUNK && num_chunks < UIO_MAXIOV;
+			     tc = tc->next, num_chunks++);
+
+			for (tc = c, i = 0; i < num_chunks; tc = tc->next, i++) {
+				if (tc->mem->used == 0) {
+					chunks[i].iov_base = tc->mem->ptr;
+					chunks[i].iov_len  = 0;
+				} else {
+					offset = tc->mem->ptr + tc->offset;
+					toSend = tc->mem->used - 1 - tc->offset;
+
+					chunks[i].iov_base = offset;
+
+					/* protect the return value of writev() */
+					if (toSend > SSIZE_MAX ||
+					    num_bytes + toSend > SSIZE_MAX) {
+						chunks[i].iov_len = SSIZE_MAX - num_bytes;
+
+						num_chunks = i + 1;
+						break;
+					} else {
+						chunks[i].iov_len = toSend;
+					}
+
+					num_bytes += toSend;
+				}
+			}
+
+			if ((r = writev(fd, chunks, num_chunks)) < 0) {
+				switch (errno) {
+				case EAGAIN:
+				case EINTR:
+					r = 0;
+					break;
+				case EPIPE:
+				case ECONNRESET:
+					return -2;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "ssd",
+							"writev failed:", strerror(errno), fd);
+
+					return -1;
+				}
+			}
+
+			/* check which chunks have been written */
+			cq->bytes_out += r;
+
+			for(i = 0, tc = c; i < num_chunks; i++, tc = tc->next) {
+				if (r >= (ssize_t)chunks[i].iov_len) {
+					/* written */
+					r -= chunks[i].iov_len;
+					tc->offset += chunks[i].iov_len;
+
+					if (chunk_finished) {
+						/* skip the chunks from further touches */
+						chunks_written++;
+						c = c->next;
+					} else {
+						/* chunks_written + c = c->next is done in the for()*/
+						chunk_finished++;
+					}
+				} else {
+					/* partially written */
+
+					tc->offset += r;
+					chunk_finished = 0;
+
+					break;
+				}
+			}
+
+			break;
+		}
+		case FILE_CHUNK: {
+			ssize_t r;
+			off_t offset;
+			size_t toSend;
+			stat_cache_entry *sce = NULL;
+
+			offset = c->file.start + c->offset;
+			/* limit the toSend to 2^31-1 bytes in a chunk */
+			toSend = c->file.length - c->offset > ((1 << 30) - 1) ?
+				((1 << 30) - 1) : c->file.length - c->offset;
+
+			/* open file if not already opened */
+			if (-1 == c->file.fd) {
+				if (-1 == (c->file.fd = open(c->file.name->ptr, O_RDONLY))) {
+					log_error_write(srv, __FILE__, __LINE__, "ss", "open failed: ", strerror(errno));
+
+					return -1;
+				}
+#ifdef FD_CLOEXEC
+				fcntl(c->file.fd, F_SETFD, FD_CLOEXEC);
+#endif
+#ifdef HAVE_POSIX_FADVISE
+				/* tell the kernel that we want to stream the file */
+				if (-1 == posix_fadvise(c->file.fd, 0, 0, POSIX_FADV_SEQUENTIAL)) {
+					if (ENOSYS != errno) {
+						log_error_write(srv, __FILE__, __LINE__, "ssd",
+							"posix_fadvise failed:", strerror(errno), c->file.fd);
+					}
+				}
+#endif
+			}
+
+			if (-1 == (r = sendfile(fd, c->file.fd, &offset, toSend))) {
+				switch (errno) {
+				case EAGAIN:
+				case EINTR:
+					/* ok, we can't send more, let's try later again */
+					r = 0;
+					break;
+				case EPIPE:
+				case ECONNRESET:
+					return -2;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "ssd",
+							"sendfile failed:", strerror(errno), fd);
+					return -1;
+				}
+			} else if (r == 0) {
+				int oerrno = errno;
+				/* We got an event to write but we wrote nothing
+				 *
+				 * - the file shrinked -> error
+				 * - the remote side closed inbetween -> remote-close */
+
+				if (HANDLER_ERROR == stat_cache_get_entry(srv, con, c->file.name, &sce)) {
+					/* file is gone ? */
+					return -1;
+				}
+
+				if (offset > sce->st.st_size) {
+					/* file shrinked, close the connection */
+					errno = oerrno;
+
+					return -1;
+				}
+
+				errno = oerrno;
+				return -2;
+			}
+
+#ifdef HAVE_POSIX_FADVISE
+#if 0
+#define K * 1024
+#define M * 1024 K
+#define READ_AHEAD 4 M
+			/* check if we need a new chunk */
+			if ((c->offset & ~(READ_AHEAD - 1)) != ((c->offset + r) & ~(READ_AHEAD - 1))) {
+				/* tell the kernel that we want to stream the file */
+				if (-1 == posix_fadvise(c->file.fd, (c->offset + r) & ~(READ_AHEAD - 1), READ_AHEAD, POSIX_FADV_NOREUSE)) {
+					log_error_write(srv, __FILE__, __LINE__, "ssd",
+						"posix_fadvise failed:", strerror(errno), c->file.fd);
+				}
+			}
+#endif
+#endif
+
+			c->offset += r;
+			cq->bytes_out += r;
+
+			if (c->offset == c->file.length) {
+				chunk_finished = 1;
+
+				/* chunk_free() / chunk_reset() will cleanup for us but it is a ok to be faster :) */
+
+				if (c->file.fd != -1) {
+					close(c->file.fd);
+					c->file.fd = -1;
+				}
+			}
+
+			break;
+		}
+		default:
+
+			log_error_write(srv, __FILE__, __LINE__, "ds", c, "type not known");
+
+			return -1;
+		}
+
+		if (!chunk_finished) {
+			/* not finished yet */
+
+			break;
+		}
+	}
+
+	return chunks_written;
+}
+
+#endif
+#if 0
+network_linuxsendfile_init(void) {
+	p->write = network_linuxsendfile_write_chunkset;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/network_openssl.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/network_openssl.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/network_openssl.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,275 @@
+#include "network_backends.h"
+
+#ifdef USE_OPENSSL
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <string.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "network.h"
+#include "fdevent.h"
+#include "log.h"
+#include "stat_cache.h"
+
+# include <openssl/ssl.h>
+# include <openssl/err.h>
+
+int network_write_chunkqueue_openssl(server *srv, connection *con, SSL *ssl, chunkqueue *cq) {
+	int ssl_r;
+	chunk *c;
+	size_t chunks_written = 0;
+
+	/* this is a 64k sendbuffer
+	 *
+	 * it has to stay at the same location all the time to satisfy the needs
+	 * of SSL_write to pass the SAME parameter in case of a _WANT_WRITE
+	 *
+	 * the buffer is allocated once, is NOT realloced and is NOT freed at shutdown
+	 * -> we expect a 64k block to 'leak' in valgrind
+	 *
+	 *
+	 * In reality we would like to use mmap() but we don't have a guarantee that
+	 * we get the same mmap() address for each call. On openbsd the mmap() address
+	 * even randomized.
+	 *   That means either we keep the mmap() open or we do a read() into a
+	 * constant buffer
+	 * */
+#define LOCAL_SEND_BUFSIZE (64 * 1024)
+	static char *local_send_buffer = NULL;
+
+	/* the remote side closed the connection before without shutdown request
+	 * - IE
+	 * - wget
+	 * if keep-alive is disabled */
+
+	if (con->keep_alive == 0) {
+		SSL_set_shutdown(ssl, SSL_RECEIVED_SHUTDOWN);
+	}
+
+	for(c = cq->first; c; c = c->next) {
+		int chunk_finished = 0;
+
+		switch(c->type) {
+		case MEM_CHUNK: {
+			char * offset;
+			size_t toSend;
+			ssize_t r;
+
+			if (c->mem->used == 0 || c->mem->used == 1) {
+				chunk_finished = 1;
+				break;
+			}
+
+			offset = c->mem->ptr + c->offset;
+			toSend = c->mem->used - 1 - c->offset;
+
+			/**
+			 * SSL_write man-page
+			 *
+			 * WARNING
+			 *        When an SSL_write() operation has to be repeated because of
+			 *        SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE, it must be
+			 *        repeated with the same arguments.
+			 *
+			 */
+
+			if ((r = SSL_write(ssl, offset, toSend)) <= 0) {
+				unsigned long err;
+
+				switch ((ssl_r = SSL_get_error(ssl, r))) {
+				case SSL_ERROR_WANT_WRITE:
+					break;
+				case SSL_ERROR_SYSCALL:
+					/* perhaps we have error waiting in our error-queue */
+					if (0 != (err = ERR_get_error())) {
+						do {
+							log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:",
+									ssl_r, r,
+									ERR_error_string(err, NULL));
+						} while((err = ERR_get_error()));
+					} else if (r == -1) {
+						/* no, but we have errno */
+						switch(errno) {
+						case EPIPE:
+						case ECONNRESET:
+							return -2;
+						default:
+							log_error_write(srv, __FILE__, __LINE__, "sddds", "SSL:",
+									ssl_r, r, errno,
+									strerror(errno));
+							break;
+						}
+					} else {
+						/* neither error-queue nor errno ? */
+						log_error_write(srv, __FILE__, __LINE__, "sddds", "SSL (error):",
+								ssl_r, r, errno,
+								strerror(errno));
+					}
+
+					return  -1;
+				case SSL_ERROR_ZERO_RETURN:
+					/* clean shutdown on the remote side */
+
+					if (r == 0) return -2;
+
+					/* fall through */
+				default:
+					while((err = ERR_get_error())) {
+						log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:",
+								ssl_r, r,
+								ERR_error_string(err, NULL));
+					}
+
+					return  -1;
+				}
+			} else {
+				c->offset += r;
+				cq->bytes_out += r;
+			}
+
+			if (c->offset == (off_t)c->mem->used - 1) {
+				chunk_finished = 1;
+			}
+
+			break;
+		}
+		case FILE_CHUNK: {
+			char *s;
+			ssize_t r;
+			stat_cache_entry *sce = NULL;
+			int ifd;
+			int write_wait = 0;
+
+			if (HANDLER_ERROR == stat_cache_get_entry(srv, con, c->file.name, &sce)) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						strerror(errno), c->file.name);
+				return -1;
+			}
+
+			if (NULL == local_send_buffer) {
+				local_send_buffer = malloc(LOCAL_SEND_BUFSIZE);
+				assert(local_send_buffer);
+			}
+
+			do {
+				off_t offset = c->file.start + c->offset;
+				off_t toSend = c->file.length - c->offset;
+
+				if (toSend > LOCAL_SEND_BUFSIZE) toSend = LOCAL_SEND_BUFSIZE;
+
+				if (-1 == (ifd = open(c->file.name->ptr, O_RDONLY))) {
+					log_error_write(srv, __FILE__, __LINE__, "ss", "open failed:", strerror(errno));
+
+					return -1;
+				}
+
+
+				lseek(ifd, offset, SEEK_SET);
+				if (-1 == (toSend = read(ifd, local_send_buffer, toSend))) {
+					close(ifd);
+					log_error_write(srv, __FILE__, __LINE__, "ss", "read failed:", strerror(errno));
+					return -1;
+				}
+
+				s = local_send_buffer;
+
+				close(ifd);
+
+				if ((r = SSL_write(ssl, s, toSend)) <= 0) {
+					unsigned long err;
+
+					switch ((ssl_r = SSL_get_error(ssl, r))) {
+					case SSL_ERROR_WANT_WRITE:
+						write_wait = 1;
+						break;
+					case SSL_ERROR_SYSCALL:
+						/* perhaps we have error waiting in our error-queue */
+						if (0 != (err = ERR_get_error())) {
+							do {
+								log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:",
+										ssl_r, r,
+										ERR_error_string(err, NULL));
+							} while((err = ERR_get_error()));
+						} else if (r == -1) {
+							/* no, but we have errno */
+							switch(errno) {
+							case EPIPE:
+							case ECONNRESET:
+								return -2;
+							default:
+								log_error_write(srv, __FILE__, __LINE__, "sddds", "SSL:",
+										ssl_r, r, errno,
+										strerror(errno));
+								break;
+							}
+						} else {
+							/* neither error-queue nor errno ? */
+							log_error_write(srv, __FILE__, __LINE__, "sddds", "SSL (error):",
+									ssl_r, r, errno,
+									strerror(errno));
+						}
+
+						return  -1;
+					case SSL_ERROR_ZERO_RETURN:
+						/* clean shutdown on the remote side */
+
+						if (r == 0)  return -2;
+
+						/* fall thourgh */
+					default:
+						while((err = ERR_get_error())) {
+							log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:",
+									ssl_r, r,
+									ERR_error_string(err, NULL));
+						}
+
+						return -1;
+					}
+				} else {
+					c->offset += r;
+					cq->bytes_out += r;
+				}
+
+				if (c->offset == c->file.length) {
+					chunk_finished = 1;
+				}
+			} while(!chunk_finished && !write_wait);
+
+			break;
+		}
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "s", "type not known");
+
+			return -1;
+		}
+
+		if (!chunk_finished) {
+			/* not finished yet */
+
+			break;
+		}
+
+		chunks_written++;
+	}
+
+	return chunks_written;
+}
+#endif
+
+#if 0
+network_openssl_init(void) {
+	p->write_ssl = network_openssl_write_chunkset;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/network_solaris_sendfilev.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/network_solaris_sendfilev.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/network_solaris_sendfilev.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,213 @@
+#include "network_backends.h"
+
+#ifdef USE_SOLARIS_SENDFILEV
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+
+#include "network.h"
+#include "fdevent.h"
+#include "log.h"
+#include "stat_cache.h"
+
+#ifndef UIO_MAXIOV
+#define UIO_MAXIOV IOV_MAX
+#endif
+
+/**
+ * a very simple sendfilev() interface for solaris which can be optimised a lot more
+ * as solaris sendfilev() supports 'sending everythin in one syscall()'
+ *
+ * If you want such an interface and need the performance, just give me an account on
+ * a solaris box.
+ *   - jan at kneschke.de
+ */
+
+
+int network_write_chunkqueue_solarissendfilev(server *srv, connection *con, int fd, chunkqueue *cq) {
+	chunk *c;
+	size_t chunks_written = 0;
+
+	for(c = cq->first; c; c = c->next, chunks_written++) {
+		int chunk_finished = 0;
+
+		switch(c->type) {
+		case MEM_CHUNK: {
+			char * offset;
+			size_t toSend;
+			ssize_t r;
+
+			size_t num_chunks, i;
+			struct iovec chunks[UIO_MAXIOV];
+			chunk *tc;
+
+			size_t num_bytes = 0;
+
+			/* we can't send more then SSIZE_MAX bytes in one chunk */
+
+			/* build writev list
+			 *
+			 * 1. limit: num_chunks < UIO_MAXIOV
+			 * 2. limit: num_bytes < SSIZE_MAX
+			 */
+			for(num_chunks = 0, tc = c; tc && tc->type == MEM_CHUNK && num_chunks < UIO_MAXIOV; num_chunks++, tc = tc->next);
+
+			for(tc = c, i = 0; i < num_chunks; tc = tc->next, i++) {
+				if (tc->mem->used == 0) {
+					chunks[i].iov_base = tc->mem->ptr;
+					chunks[i].iov_len  = 0;
+				} else {
+					offset = tc->mem->ptr + tc->offset;
+					toSend = tc->mem->used - 1 - tc->offset;
+
+					chunks[i].iov_base = offset;
+
+					/* protect the return value of writev() */
+					if (toSend > SSIZE_MAX ||
+					    num_bytes + toSend > SSIZE_MAX) {
+						chunks[i].iov_len = SSIZE_MAX - num_bytes;
+
+						num_chunks = i + 1;
+						break;
+					} else {
+						chunks[i].iov_len = toSend;
+					}
+
+					num_bytes += toSend;
+				}
+			}
+
+			if ((r = writev(fd, chunks, num_chunks)) < 0) {
+				switch (errno) {
+				case EAGAIN:
+				case EINTR:
+					r = 0;
+					break;
+				case EPIPE:
+				case ECONNRESET:
+					return -2;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "ssd",
+							"writev failed:", strerror(errno), fd);
+
+					return -1;
+				}
+			}
+
+			/* check which chunks have been written */
+			cq->bytes_out += r;
+
+			for(i = 0, tc = c; i < num_chunks; i++, tc = tc->next) {
+				if (r >= (ssize_t)chunks[i].iov_len) {
+					/* written */
+					r -= chunks[i].iov_len;
+					tc->offset += chunks[i].iov_len;
+
+					if (chunk_finished) {
+						/* skip the chunks from further touches */
+						chunks_written++;
+						c = c->next;
+					} else {
+						/* chunks_written + c = c->next is done in the for()*/
+						chunk_finished++;
+					}
+				} else {
+					/* partially written */
+
+					tc->offset += r;
+					chunk_finished = 0;
+
+					break;
+				}
+			}
+
+			break;
+		}
+		case FILE_CHUNK: {
+			ssize_t r;
+			off_t offset;
+			size_t toSend, written;
+			sendfilevec_t fvec;
+			stat_cache_entry *sce = NULL;
+			int ifd;
+
+			if (HANDLER_ERROR == stat_cache_get_entry(srv, con, c->file.name, &sce)) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						strerror(errno), c->file.name);
+				return -1;
+			}
+
+			offset = c->file.start + c->offset;
+			toSend = c->file.length - c->offset;
+
+			if (offset > sce->st.st_size) {
+				log_error_write(srv, __FILE__, __LINE__, "sb", "file was shrinked:", c->file.name);
+
+				return -1;
+			}
+
+			if (-1 == (ifd = open(c->file.name->ptr, O_RDONLY))) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "open failed: ", strerror(errno));
+
+				return -1;
+			}
+
+			fvec.sfv_fd = ifd;
+			fvec.sfv_flag = 0;
+			fvec.sfv_off = offset;
+			fvec.sfv_len = toSend;
+
+			/* Solaris sendfilev() */
+			if (-1 == (r = sendfilev(fd, &fvec, 1, &written))) {
+				if (errno != EAGAIN) {
+					log_error_write(srv, __FILE__, __LINE__, "ssd", "sendfile: ", strerror(errno), errno);
+
+					close(ifd);
+					return -1;
+				}
+
+				r = 0;
+			}
+
+			close(ifd);
+			c->offset += written;
+			cq->bytes_out += written;
+
+			if (c->offset == c->file.length) {
+				chunk_finished = 1;
+			}
+
+			break;
+		}
+		default:
+
+			log_error_write(srv, __FILE__, __LINE__, "ds", c, "type not known");
+
+			return -1;
+		}
+
+		if (!chunk_finished) {
+			/* not finished yet */
+
+			break;
+		}
+	}
+
+	return chunks_written;
+}
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/network_write.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/network_write.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/network_write.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,168 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "network.h"
+#include "fdevent.h"
+#include "log.h"
+#include "stat_cache.h"
+
+#include "sys-socket.h"
+
+#include "network_backends.h"
+
+#ifdef HAVE_SYS_FILIO_H
+# include <sys/filio.h>
+#endif
+
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+
+int network_write_chunkqueue_write(server *srv, connection *con, int fd, chunkqueue *cq) {
+	chunk *c;
+	size_t chunks_written = 0;
+
+	for(c = cq->first; c; c = c->next) {
+		int chunk_finished = 0;
+
+		switch(c->type) {
+		case MEM_CHUNK: {
+			char * offset;
+			size_t toSend;
+			ssize_t r;
+
+			if (c->mem->used == 0) {
+				chunk_finished = 1;
+				break;
+			}
+
+			offset = c->mem->ptr + c->offset;
+			toSend = c->mem->used - 1 - c->offset;
+#ifdef __WIN32
+			if ((r = send(fd, offset, toSend, 0)) < 0) {
+				log_error_write(srv, __FILE__, __LINE__, "ssd", "write failed: ", strerror(errno), fd);
+
+				return -1;
+			}
+#else
+			if ((r = write(fd, offset, toSend)) < 0) {
+				log_error_write(srv, __FILE__, __LINE__, "ssd", "write failed: ", strerror(errno), fd);
+
+				return -1;
+			}
+#endif
+
+			c->offset += r;
+			cq->bytes_out += r;
+
+			if (c->offset == (off_t)c->mem->used - 1) {
+				chunk_finished = 1;
+			}
+
+			break;
+		}
+		case FILE_CHUNK: {
+#ifdef USE_MMAP
+			char *p = NULL;
+#endif
+			ssize_t r;
+			off_t offset;
+			size_t toSend;
+			stat_cache_entry *sce = NULL;
+			int ifd;
+
+			if (HANDLER_ERROR == stat_cache_get_entry(srv, con, c->file.name, &sce)) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						strerror(errno), c->file.name);
+				return -1;
+			}
+
+			offset = c->file.start + c->offset;
+			toSend = c->file.length - c->offset;
+
+			if (offset > sce->st.st_size) {
+				log_error_write(srv, __FILE__, __LINE__, "sb", "file was shrinked:", c->file.name);
+
+				return -1;
+			}
+
+			if (-1 == (ifd = open(c->file.name->ptr, O_RDONLY))) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "open failed: ", strerror(errno));
+
+				return -1;
+			}
+
+#if defined USE_MMAP
+			if (MAP_FAILED == (p = mmap(0, sce->st.st_size, PROT_READ, MAP_SHARED, ifd, 0))) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "mmap failed: ", strerror(errno));
+
+				close(ifd);
+
+				return -1;
+			}
+			close(ifd);
+
+			if ((r = write(fd, p + offset, toSend)) <= 0) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "write failed: ", strerror(errno));
+				munmap(p, sce->st.st_size);
+				return -1;
+			}
+
+			munmap(p, sce->st.st_size);
+#else
+			buffer_prepare_copy(srv->tmp_buf, toSend);
+
+			lseek(ifd, offset, SEEK_SET);
+			if (-1 == (toSend = read(ifd, srv->tmp_buf->ptr, toSend))) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "read: ", strerror(errno));
+				close(ifd);
+
+				return -1;
+			}
+			close(ifd);
+
+			if (-1 == (r = send(fd, srv->tmp_buf->ptr, toSend, 0))) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "write: ", strerror(errno));
+
+				return -1;
+			}
+#endif
+			c->offset += r;
+			cq->bytes_out += r;
+
+			if (c->offset == c->file.length) {
+				chunk_finished = 1;
+			}
+
+			break;
+		}
+		default:
+
+			log_error_write(srv, __FILE__, __LINE__, "ds", c, "type not known");
+
+			return -1;
+		}
+
+		if (!chunk_finished) {
+			/* not finished yet */
+
+			break;
+		}
+
+		chunks_written++;
+	}
+
+	return chunks_written;
+}
+
+#if 0
+network_write_init(void) {
+	p->write = network_write_write_chunkset;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/network_writev.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/network_writev.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/network_writev.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,344 @@
+#include "network_backends.h"
+
+#ifdef USE_WRITEV
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/uio.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "network.h"
+#include "fdevent.h"
+#include "log.h"
+#include "stat_cache.h"
+
+#if 0
+#define LOCAL_BUFFERING 1
+#endif
+
+int network_write_chunkqueue_writev(server *srv, connection *con, int fd, chunkqueue *cq) {
+	chunk *c;
+	size_t chunks_written = 0;
+
+	for(c = cq->first; c; c = c->next) {
+		int chunk_finished = 0;
+
+		switch(c->type) {
+		case MEM_CHUNK: {
+			char * offset;
+			size_t toSend;
+			ssize_t r;
+
+			size_t num_chunks, i;
+			struct iovec *chunks;
+			chunk *tc;
+			size_t num_bytes = 0;
+#if defined(_SC_IOV_MAX) /* IRIX, MacOS X, FreeBSD, Solaris, ... */
+			const size_t max_chunks = sysconf(_SC_IOV_MAX);
+#elif defined(IOV_MAX) /* Linux x86 (glibc-2.3.6-3) */
+			const size_t max_chunks = IOV_MAX;
+#elif defined(MAX_IOVEC) /* Linux ia64 (glibc-2.3.3-98.28) */
+			const size_t max_chunks = MAX_IOVEC;
+#elif defined(UIO_MAXIOV) /* Linux x86 (glibc-2.2.5-233) */
+			const size_t max_chunks = UIO_MAXIOV;
+#elif (defined(__FreeBSD__) && __FreeBSD_version < 500000) || defined(__DragonFly__) || defined(__APPLE__) 
+			/* - FreeBSD 4.x
+			 * - MacOS X 10.3.x
+			 *   (covered in -DKERNEL)
+			 *  */
+			const size_t max_chunks = 1024; /* UIO_MAXIOV value from sys/uio.h */
+#else
+#error "sysconf() doesnt return _SC_IOV_MAX ..., check the output of 'man writev' for the EINVAL error and send the output to jan at kneschke.de"
+#endif
+
+			/* we can't send more then SSIZE_MAX bytes in one chunk */
+
+			/* build writev list
+			 *
+			 * 1. limit: num_chunks < max_chunks
+			 * 2. limit: num_bytes < SSIZE_MAX
+			 */
+			for (num_chunks = 0, tc = c; tc && tc->type == MEM_CHUNK && num_chunks < max_chunks; num_chunks++, tc = tc->next);
+
+			chunks = calloc(num_chunks, sizeof(*chunks));
+
+			for(tc = c, i = 0; i < num_chunks; tc = tc->next, i++) {
+				if (tc->mem->used == 0) {
+					chunks[i].iov_base = tc->mem->ptr;
+					chunks[i].iov_len  = 0;
+				} else {
+					offset = tc->mem->ptr + tc->offset;
+					toSend = tc->mem->used - 1 - tc->offset;
+
+					chunks[i].iov_base = offset;
+
+					/* protect the return value of writev() */
+					if (toSend > SSIZE_MAX ||
+					    num_bytes + toSend > SSIZE_MAX) {
+						chunks[i].iov_len = SSIZE_MAX - num_bytes;
+
+						num_chunks = i + 1;
+						break;
+					} else {
+						chunks[i].iov_len = toSend;
+					}
+
+					num_bytes += toSend;
+				}
+			}
+
+			if ((r = writev(fd, chunks, num_chunks)) < 0) {
+				switch (errno) {
+				case EAGAIN:
+				case EINTR:
+					r = 0;
+					break;
+				case EPIPE:
+				case ECONNRESET:
+					free(chunks);
+					return -2;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "ssd",
+							"writev failed:", strerror(errno), fd);
+
+					free(chunks);
+					return -1;
+				}
+			}
+
+			cq->bytes_out += r;
+
+			/* check which chunks have been written */
+
+			for(i = 0, tc = c; i < num_chunks; i++, tc = tc->next) {
+				if (r >= (ssize_t)chunks[i].iov_len) {
+					/* written */
+					r -= chunks[i].iov_len;
+					tc->offset += chunks[i].iov_len;
+
+					if (chunk_finished) {
+						/* skip the chunks from further touches */
+						chunks_written++;
+						c = c->next;
+					} else {
+						/* chunks_written + c = c->next is done in the for()*/
+						chunk_finished++;
+					}
+				} else {
+					/* partially written */
+
+					tc->offset += r;
+					chunk_finished = 0;
+
+					break;
+				}
+			}
+			free(chunks);
+
+			break;
+		}
+		case FILE_CHUNK: {
+			ssize_t r;
+			off_t abs_offset;
+			off_t toSend;
+			stat_cache_entry *sce = NULL;
+
+#define KByte * 1024
+#define MByte * 1024 KByte
+#define GByte * 1024 MByte
+			const off_t we_want_to_mmap = 512 KByte;
+			char *start = NULL;
+
+			if (HANDLER_ERROR == stat_cache_get_entry(srv, con, c->file.name, &sce)) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						strerror(errno), c->file.name);
+				return -1;
+			}
+
+			abs_offset = c->file.start + c->offset;
+
+			if (abs_offset > sce->st.st_size) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"file was shrinked:", c->file.name);
+
+				return -1;
+			}
+
+			/* mmap the buffer
+			 * - first mmap
+			 * - new mmap as the we are at the end of the last one */
+			if (c->file.mmap.start == MAP_FAILED ||
+			    abs_offset == (off_t)(c->file.mmap.offset + c->file.mmap.length)) {
+
+				/* Optimizations for the future:
+				 *
+				 * adaptive mem-mapping
+				 *   the problem:
+				 *     we mmap() the whole file. If someone has alot large files and 32bit
+				 *     machine the virtual address area will be unrun and we will have a failing
+				 *     mmap() call.
+				 *   solution:
+				 *     only mmap 16M in one chunk and move the window as soon as we have finished
+				 *     the first 8M
+				 *
+				 * read-ahead buffering
+				 *   the problem:
+				 *     sending out several large files in parallel trashes the read-ahead of the
+				 *     kernel leading to long wait-for-seek times.
+				 *   solutions: (increasing complexity)
+				 *     1. use madvise
+				 *     2. use a internal read-ahead buffer in the chunk-structure
+				 *     3. use non-blocking IO for file-transfers
+				 *   */
+
+				/* all mmap()ed areas are 512kb expect the last which might be smaller */
+				off_t we_want_to_send;
+				size_t to_mmap;
+
+				/* this is a remap, move the mmap-offset */
+				if (c->file.mmap.start != MAP_FAILED) {
+					munmap(c->file.mmap.start, c->file.mmap.length);
+					c->file.mmap.offset += we_want_to_mmap;
+				} else {
+					/* in case the range-offset is after the first mmap()ed area we skip the area */
+					c->file.mmap.offset = 0;
+
+					while (c->file.mmap.offset + we_want_to_mmap < c->file.start) {
+						c->file.mmap.offset += we_want_to_mmap;
+					}
+				}
+
+				/* length is rel, c->offset too, assume there is no limit at the mmap-boundaries */
+				we_want_to_send = c->file.length - c->offset;
+				to_mmap = (c->file.start + c->file.length) - c->file.mmap.offset;
+
+				/* we have more to send than we can mmap() at once */
+				if (abs_offset + we_want_to_send > c->file.mmap.offset + we_want_to_mmap) {
+					we_want_to_send = (c->file.mmap.offset + we_want_to_mmap) - abs_offset;
+					to_mmap = we_want_to_mmap;
+				}
+
+				if (-1 == c->file.fd) {  /* open the file if not already open */
+					if (-1 == (c->file.fd = open(c->file.name->ptr, O_RDONLY))) {
+						log_error_write(srv, __FILE__, __LINE__, "sbs", "open failed for:", c->file.name, strerror(errno));
+
+						return -1;
+					}
+#ifdef FD_CLOEXEC
+					fcntl(c->file.fd, F_SETFD, FD_CLOEXEC);
+#endif
+				}
+
+				if (MAP_FAILED == (c->file.mmap.start = mmap(0, to_mmap, PROT_READ, MAP_SHARED, c->file.fd, c->file.mmap.offset))) {
+					/* close it here, otherwise we'd have to set FD_CLOEXEC */
+
+					log_error_write(srv, __FILE__, __LINE__, "ssbd", "mmap failed:",
+							strerror(errno), c->file.name, c->file.fd);
+
+					return -1;
+				}
+
+				c->file.mmap.length = to_mmap;
+#ifdef LOCAL_BUFFERING
+				buffer_copy_string_len(c->mem, c->file.mmap.start, c->file.mmap.length);
+#else
+#ifdef HAVE_MADVISE
+				/* don't advise files < 64Kb */
+				if (c->file.mmap.length > (64 KByte)) {
+					/* darwin 7 is returning EINVAL all the time and I don't know how to
+					 * detect this at runtime.i
+					 *
+					 * ignore the return value for now */
+					madvise(c->file.mmap.start, c->file.mmap.length, MADV_WILLNEED);
+				}
+#endif
+#endif
+
+				/* chunk_reset() or chunk_free() will cleanup for us */
+			}
+
+			/* to_send = abs_mmap_end - abs_offset */
+			toSend = (c->file.mmap.offset + c->file.mmap.length) - (abs_offset);
+
+			if (toSend < 0) {
+				log_error_write(srv, __FILE__, __LINE__, "soooo",
+						"toSend is negative:",
+						toSend,
+						c->file.mmap.length,
+						abs_offset,
+						c->file.mmap.offset);
+				assert(toSend < 0);
+			}
+
+#ifdef LOCAL_BUFFERING
+			start = c->mem->ptr;
+#else
+			start = c->file.mmap.start;
+#endif
+
+			if ((r = write(fd, start + (abs_offset - c->file.mmap.offset), toSend)) < 0) {
+				switch (errno) {
+				case EAGAIN:
+				case EINTR:
+					r = 0;
+					break;
+				case EPIPE:
+				case ECONNRESET:
+					return -2;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "ssd",
+							"write failed:", strerror(errno), fd);
+
+					return -1;
+				}
+			}
+
+			c->offset += r;
+			cq->bytes_out += r;
+
+			if (c->offset == c->file.length) {
+				chunk_finished = 1;
+
+				/* we don't need the mmaping anymore */
+				if (c->file.mmap.start != MAP_FAILED) {
+					munmap(c->file.mmap.start, c->file.mmap.length);
+					c->file.mmap.start = MAP_FAILED;
+				}
+			}
+
+			break;
+		}
+		default:
+
+			log_error_write(srv, __FILE__, __LINE__, "ds", c, "type not known");
+
+			return -1;
+		}
+
+		if (!chunk_finished) {
+			/* not finished yet */
+
+			break;
+		}
+
+		chunks_written++;
+	}
+
+	return chunks_written;
+}
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/plugin.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/plugin.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/plugin.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,451 @@
+#include <string.h>
+#include <stdlib.h>
+
+#include <stdio.h>
+
+#include "plugin.h"
+#include "log.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_VALGRIND_VALGRIND_H
+#include <valgrind/valgrind.h>
+#endif
+
+#ifndef __WIN32
+#include <dlfcn.h>
+#endif
+/*
+ *
+ * if you change this enum to add a new callback, be sure
+ * - that PLUGIN_FUNC_SIZEOF is the last entry
+ * - that you add PLUGIN_TO_SLOT twice:
+ *   1. as callback-dispatcher
+ *   2. in plugins_call_init()
+ *
+ */
+
+typedef struct {
+	PLUGIN_DATA;
+} plugin_data;
+
+typedef enum {
+	PLUGIN_FUNC_UNSET,
+		PLUGIN_FUNC_HANDLE_URI_CLEAN,
+		PLUGIN_FUNC_HANDLE_URI_RAW,
+		PLUGIN_FUNC_HANDLE_REQUEST_DONE,
+		PLUGIN_FUNC_HANDLE_CONNECTION_CLOSE,
+		PLUGIN_FUNC_HANDLE_TRIGGER,
+		PLUGIN_FUNC_HANDLE_SIGHUP,
+		PLUGIN_FUNC_HANDLE_SUBREQUEST,
+		PLUGIN_FUNC_HANDLE_SUBREQUEST_START,
+		PLUGIN_FUNC_HANDLE_JOBLIST,
+		PLUGIN_FUNC_HANDLE_DOCROOT,
+		PLUGIN_FUNC_HANDLE_PHYSICAL,
+		PLUGIN_FUNC_CONNECTION_RESET,
+		PLUGIN_FUNC_INIT,
+		PLUGIN_FUNC_CLEANUP,
+		PLUGIN_FUNC_SET_DEFAULTS,
+
+		PLUGIN_FUNC_SIZEOF
+} plugin_t;
+
+static plugin *plugin_init(void) {
+	plugin *p;
+
+	p = calloc(1, sizeof(*p));
+
+	return p;
+}
+
+static void plugin_free(plugin *p) {
+	int use_dlclose = 1;
+	if (p->name) buffer_free(p->name);
+#ifdef HAVE_VALGRIND_VALGRIND_H
+	/*if (RUNNING_ON_VALGRIND) use_dlclose = 0;*/
+#endif
+
+#ifndef LIGHTTPD_STATIC
+	if (use_dlclose && p->lib) {
+#ifdef __WIN32
+		FreeLibrary(p->lib);
+#else
+		dlclose(p->lib);
+#endif
+	}
+#endif
+
+	free(p);
+}
+
+static int plugins_register(server *srv, plugin *p) {
+	plugin **ps;
+	if (0 == srv->plugins.size) {
+		srv->plugins.size = 4;
+		srv->plugins.ptr  = malloc(srv->plugins.size * sizeof(*ps));
+		srv->plugins.used = 0;
+	} else if (srv->plugins.used == srv->plugins.size) {
+		srv->plugins.size += 4;
+		srv->plugins.ptr   = realloc(srv->plugins.ptr, srv->plugins.size * sizeof(*ps));
+	}
+
+	ps = srv->plugins.ptr;
+	ps[srv->plugins.used++] = p;
+
+	return 0;
+}
+
+/**
+ *
+ *
+ *
+ */
+
+#ifdef LIGHTTPD_STATIC
+int plugins_load(server *srv) {
+	plugin *p;
+#define PLUGIN_INIT(x)\
+	p = plugin_init(); \
+	if (x ## _plugin_init(p)) { \
+		log_error_write(srv, __FILE__, __LINE__, "ss", #x, "plugin init failed" ); \
+		plugin_free(p); \
+		return -1;\
+	}\
+	plugins_register(srv, p);
+
+#include "plugin-static.h"
+
+	return 0;
+}
+#else
+int plugins_load(server *srv) {
+	plugin *p;
+	int (*init)(plugin *pl);
+	const char *error;
+	size_t i;
+
+	for (i = 0; i < srv->srvconf.modules->used; i++) {
+		data_string *d = (data_string *)srv->srvconf.modules->data[i];
+		char *modules = d->value->ptr;
+
+		buffer_copy_string_buffer(srv->tmp_buf, srv->srvconf.modules_dir);
+
+		buffer_append_string(srv->tmp_buf, "/");
+		buffer_append_string(srv->tmp_buf, modules);
+#if defined(__WIN32) || defined(__CYGWIN__)
+		buffer_append_string(srv->tmp_buf, ".dll");
+#else
+		buffer_append_string(srv->tmp_buf, ".so");
+#endif
+
+		p = plugin_init();
+#ifdef __WIN32
+		if (NULL == (p->lib = LoadLibrary(srv->tmp_buf->ptr))) {
+			LPVOID lpMsgBuf;
+			FormatMessage(
+		        	FORMAT_MESSAGE_ALLOCATE_BUFFER |
+		       		FORMAT_MESSAGE_FROM_SYSTEM,
+		        	NULL,
+		        	GetLastError(),
+		        	MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+		        	(LPTSTR) &lpMsgBuf,
+		        	0, NULL );
+
+			log_error_write(srv, __FILE__, __LINE__, "ssb", "LoadLibrary() failed",
+					lpMsgBuf, srv->tmp_buf);
+
+			plugin_free(p);
+
+			return -1;
+
+		}
+#else
+		if (NULL == (p->lib = dlopen(srv->tmp_buf->ptr, RTLD_NOW|RTLD_GLOBAL))) {
+			log_error_write(srv, __FILE__, __LINE__, "sbs", "dlopen() failed for:",
+					srv->tmp_buf, dlerror());
+
+			plugin_free(p);
+
+			return -1;
+		}
+
+#endif
+		buffer_reset(srv->tmp_buf);
+		buffer_copy_string(srv->tmp_buf, modules);
+		buffer_append_string(srv->tmp_buf, "_plugin_init");
+
+#ifdef __WIN32
+		init = GetProcAddress(p->lib, srv->tmp_buf->ptr);
+
+		if (init == NULL)  {
+			LPVOID lpMsgBuf;
+			FormatMessage(
+		        	FORMAT_MESSAGE_ALLOCATE_BUFFER |
+		       		FORMAT_MESSAGE_FROM_SYSTEM,
+		        	NULL,
+		        	GetLastError(),
+		        	MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+		        	(LPTSTR) &lpMsgBuf,
+		        	0, NULL );
+
+			log_error_write(srv, __FILE__, __LINE__, "sbs", "getprocaddress failed:", srv->tmp_buf, lpMsgBuf);
+
+			plugin_free(p);
+			return -1;
+		}
+
+#else
+#if 1
+		init = (int (*)(plugin *))dlsym(p->lib, srv->tmp_buf->ptr);
+#else
+		*(void **)(&init) = dlsym(p->lib, srv->tmp_buf->ptr);
+#endif
+		if ((error = dlerror()) != NULL)  {
+			log_error_write(srv, __FILE__, __LINE__, "s", error);
+
+			plugin_free(p);
+			return -1;
+		}
+
+#endif
+		if ((*init)(p)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", modules, "plugin init failed" );
+
+			plugin_free(p);
+			return -1;
+		}
+#if 0
+		log_error_write(srv, __FILE__, __LINE__, "ss", modules, "plugin loaded" );
+#endif
+		plugins_register(srv, p);
+	}
+
+	return 0;
+}
+#endif
+
+#define PLUGIN_TO_SLOT(x, y) \
+	handler_t plugins_call_##y(server *srv, connection *con) {\
+		plugin **slot;\
+		size_t j;\
+                if (!srv->plugin_slots) return HANDLER_GO_ON;\
+                slot = ((plugin ***)(srv->plugin_slots))[x];\
+		if (!slot) return HANDLER_GO_ON;\
+		for (j = 0; j < srv->plugins.used && slot[j]; j++) { \
+			plugin *p = slot[j];\
+			handler_t r;\
+			switch(r = p->y(srv, con, p->data)) {\
+			case HANDLER_GO_ON:\
+				break;\
+			case HANDLER_FINISHED:\
+			case HANDLER_COMEBACK:\
+			case HANDLER_WAIT_FOR_EVENT:\
+			case HANDLER_WAIT_FOR_FD:\
+			case HANDLER_ERROR:\
+				return r;\
+			default:\
+				log_error_write(srv, __FILE__, __LINE__, "sbs", #x, p->name, "unknown state");\
+				return HANDLER_ERROR;\
+			}\
+		}\
+		return HANDLER_GO_ON;\
+	}
+
+/**
+ * plugins that use
+ *
+ * - server *srv
+ * - connection *con
+ * - void *p_d (plugin_data *)
+ */
+
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_URI_CLEAN, handle_uri_clean)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_URI_RAW, handle_uri_raw)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_REQUEST_DONE, handle_request_done)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_CONNECTION_CLOSE, handle_connection_close)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_SUBREQUEST, handle_subrequest)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_SUBREQUEST_START, handle_subrequest_start)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_JOBLIST, handle_joblist)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_DOCROOT, handle_docroot)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_PHYSICAL, handle_physical)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_CONNECTION_RESET, connection_reset)
+
+#undef PLUGIN_TO_SLOT
+
+#define PLUGIN_TO_SLOT(x, y) \
+	handler_t plugins_call_##y(server *srv) {\
+		plugin **slot;\
+		size_t j;\
+                if (!srv->plugin_slots) return HANDLER_GO_ON;\
+                slot = ((plugin ***)(srv->plugin_slots))[x];\
+		if (!slot) return HANDLER_GO_ON;\
+		for (j = 0; j < srv->plugins.used && slot[j]; j++) { \
+			plugin *p = slot[j];\
+			handler_t r;\
+			switch(r = p->y(srv, p->data)) {\
+			case HANDLER_GO_ON:\
+				break;\
+			case HANDLER_FINISHED:\
+			case HANDLER_COMEBACK:\
+			case HANDLER_WAIT_FOR_EVENT:\
+			case HANDLER_WAIT_FOR_FD:\
+			case HANDLER_ERROR:\
+				return r;\
+			default:\
+				log_error_write(srv, __FILE__, __LINE__, "sbsd", #x, p->name, "unknown state:", r);\
+				return HANDLER_ERROR;\
+			}\
+		}\
+		return HANDLER_GO_ON;\
+	}
+
+/**
+ * plugins that use
+ *
+ * - server *srv
+ * - void *p_d (plugin_data *)
+ */
+
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_TRIGGER, handle_trigger)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_SIGHUP, handle_sighup)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_CLEANUP, cleanup)
+PLUGIN_TO_SLOT(PLUGIN_FUNC_SET_DEFAULTS, set_defaults)
+
+#undef PLUGIN_TO_SLOT
+
+#if 0
+/**
+ *
+ * special handler
+ *
+ */
+handler_t plugins_call_handle_fdevent(server *srv, const fd_conn *fdc) {
+	size_t i;
+	plugin **ps;
+
+	ps = srv->plugins.ptr;
+
+	for (i = 0; i < srv->plugins.used; i++) {
+		plugin *p = ps[i];
+		if (p->handle_fdevent) {
+			handler_t r;
+			switch(r = p->handle_fdevent(srv, fdc, p->data)) {
+			case HANDLER_GO_ON:
+				break;
+			case HANDLER_FINISHED:
+			case HANDLER_COMEBACK:
+			case HANDLER_WAIT_FOR_EVENT:
+			case HANDLER_ERROR:
+				return r;
+			default:
+				log_error_write(srv, __FILE__, __LINE__, "d", r);
+				break;
+			}
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+#endif
+/**
+ *
+ * - call init function of all plugins to init the plugin-internals
+ * - added each plugin that supports has callback to the corresponding slot
+ *
+ * - is only called once.
+ */
+
+handler_t plugins_call_init(server *srv) {
+	size_t i;
+	plugin **ps;
+
+	ps = srv->plugins.ptr;
+
+	/* fill slots */
+
+	srv->plugin_slots = calloc(PLUGIN_FUNC_SIZEOF, sizeof(ps));
+
+	for (i = 0; i < srv->plugins.used; i++) {
+		size_t j;
+		/* check which calls are supported */
+
+		plugin *p = ps[i];
+
+#define PLUGIN_TO_SLOT(x, y) \
+	if (p->y) { \
+		plugin **slot = ((plugin ***)(srv->plugin_slots))[x]; \
+		if (!slot) { \
+			slot = calloc(srv->plugins.used, sizeof(*slot));\
+			((plugin ***)(srv->plugin_slots))[x] = slot; \
+		} \
+		for (j = 0; j < srv->plugins.used; j++) { \
+			if (slot[j]) continue;\
+			slot[j] = p;\
+			break;\
+		}\
+	}
+
+
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_URI_CLEAN, handle_uri_clean);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_URI_RAW, handle_uri_raw);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_REQUEST_DONE, handle_request_done);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_CONNECTION_CLOSE, handle_connection_close);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_TRIGGER, handle_trigger);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_SIGHUP, handle_sighup);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_SUBREQUEST, handle_subrequest);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_SUBREQUEST_START, handle_subrequest_start);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_JOBLIST, handle_joblist);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_DOCROOT, handle_docroot);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_HANDLE_PHYSICAL, handle_physical);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_CONNECTION_RESET, connection_reset);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_CLEANUP, cleanup);
+		PLUGIN_TO_SLOT(PLUGIN_FUNC_SET_DEFAULTS, set_defaults);
+#undef PLUGIN_TO_SLOT
+
+		if (p->init) {
+			if (NULL == (p->data = p->init())) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"plugin-init failed for module", p->name);
+				return HANDLER_ERROR;
+			}
+
+			/* used for con->mode, DIRECT == 0, plugins above that */
+			((plugin_data *)(p->data))->id = i + 1;
+
+			if (p->version != LIGHTTPD_VERSION_ID) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"plugin-version doesn't match lighttpd-version for", p->name);
+				return HANDLER_ERROR;
+			}
+		} else {
+			p->data = NULL;
+		}
+	}
+
+	return HANDLER_GO_ON;
+}
+
+void plugins_free(server *srv) {
+	size_t i;
+	plugins_call_cleanup(srv);
+
+	for (i = 0; i < srv->plugins.used; i++) {
+		plugin *p = ((plugin **)srv->plugins.ptr)[i];
+
+		plugin_free(p);
+	}
+
+	for (i = 0; srv->plugin_slots && i < PLUGIN_FUNC_SIZEOF; i++) {
+		plugin **slot = ((plugin ***)(srv->plugin_slots))[i];
+
+		if (slot) free(slot);
+	}
+
+	free(srv->plugin_slots);
+	srv->plugin_slots = NULL;
+
+	free(srv->plugins.ptr);
+	srv->plugins.ptr = NULL;
+	srv->plugins.used = 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/plugin.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/plugin.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/plugin.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,92 @@
+#ifndef _PLUGIN_H_
+#define _PLUGIN_H_
+
+#include "base.h"
+#include "buffer.h"
+
+#define SERVER_FUNC(x) \
+		static handler_t x(server *srv, void *p_d)
+
+#define CONNECTION_FUNC(x) \
+		static handler_t x(server *srv, connection *con, void *p_d)
+
+#define INIT_FUNC(x) \
+		static void *x()
+
+#define FREE_FUNC          SERVER_FUNC
+#define TRIGGER_FUNC       SERVER_FUNC
+#define SETDEFAULTS_FUNC   SERVER_FUNC
+#define SIGHUP_FUNC        SERVER_FUNC
+
+#define SUBREQUEST_FUNC    CONNECTION_FUNC
+#define JOBLIST_FUNC       CONNECTION_FUNC
+#define PHYSICALPATH_FUNC  CONNECTION_FUNC
+#define REQUESTDONE_FUNC   CONNECTION_FUNC
+#define URIHANDLER_FUNC    CONNECTION_FUNC
+
+#define PLUGIN_DATA        size_t id
+
+typedef struct {
+	size_t version;
+
+	buffer *name; /* name of the plugin */
+
+	void *(* init)                       ();
+	handler_t (* set_defaults)           (server *srv, void *p_d);
+	handler_t (* cleanup)                (server *srv, void *p_d);
+	                                                                                   /* is called ... */
+	handler_t (* handle_trigger)         (server *srv, void *p_d);                     /* once a second */
+	handler_t (* handle_sighup)          (server *srv, void *p_d);                     /* at a signup */
+
+	handler_t (* handle_uri_raw)         (server *srv, connection *con, void *p_d);    /* after uri_raw is set */
+	handler_t (* handle_uri_clean)       (server *srv, connection *con, void *p_d);    /* after uri is set */
+	handler_t (* handle_docroot)         (server *srv, connection *con, void *p_d);    /* getting the document-root */
+	handler_t (* handle_physical)        (server *srv, connection *con, void *p_d);    /* mapping url to physical path */
+	handler_t (* handle_request_done)    (server *srv, connection *con, void *p_d);    /* at the end of a request */
+	handler_t (* handle_connection_close)(server *srv, connection *con, void *p_d);    /* at the end of a connection */
+	handler_t (* handle_joblist)         (server *srv, connection *con, void *p_d);    /* after all events are handled */
+
+
+
+	handler_t (* handle_subrequest_start)(server *srv, connection *con, void *p_d);
+
+	                                                                                   /* when a handler for the request
+											    * has to be found
+											    */
+	handler_t (* handle_subrequest)      (server *srv, connection *con, void *p_d);    /* */
+	handler_t (* connection_reset)       (server *srv, connection *con, void *p_d);    /* */
+	void *data;
+
+	/* dlopen handle */
+	void *lib;
+} plugin;
+
+int plugins_load(server *srv);
+void plugins_free(server *srv);
+
+handler_t plugins_call_handle_uri_raw(server *srv, connection *con);
+handler_t plugins_call_handle_uri_clean(server *srv, connection *con);
+handler_t plugins_call_handle_subrequest_start(server *srv, connection *con);
+handler_t plugins_call_handle_subrequest(server *srv, connection *con);
+handler_t plugins_call_handle_request_done(server *srv, connection *con);
+handler_t plugins_call_handle_docroot(server *srv, connection *con);
+handler_t plugins_call_handle_physical(server *srv, connection *con);
+handler_t plugins_call_handle_connection_close(server *srv, connection *con);
+handler_t plugins_call_handle_joblist(server *srv, connection *con);
+handler_t plugins_call_connection_reset(server *srv, connection *con);
+
+handler_t plugins_call_handle_trigger(server *srv);
+handler_t plugins_call_handle_sighup(server *srv);
+
+handler_t plugins_call_init(server *srv);
+handler_t plugins_call_set_defaults(server *srv);
+handler_t plugins_call_cleanup(server *srv);
+
+int config_insert_values_global(server *srv, array *ca, const config_values_t *cv);
+int config_insert_values_internal(server *srv, array *ca, const config_values_t *cv);
+int config_setup_connection(server *srv, connection *con);
+int config_patch_connection(server *srv, connection *con, comp_key_t comp);
+int config_check_cond(server *srv, connection *con, data_config *dc);
+int config_append_cond_match_buffer(connection *con, data_config *dc, buffer *buf, int n);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/proc_open.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/proc_open.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/proc_open.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,394 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <errno.h>
+#include "proc_open.h"
+
+#ifdef WIN32
+#include <io.h>
+#include <fcntl.h>
+#else
+#include <sys/wait.h>
+#include <unistd.h>
+#endif
+
+
+#ifdef WIN32
+/* {{{ win32 stuff */
+# define SHELLENV "ComSpec"
+# define SECURITY_DC , SECURITY_ATTRIBUTES *security
+# define SECURITY_CC , security
+# define pipe(pair) (CreatePipe(&pair[0], &pair[1], security, 2048L) ? 0 : -1)
+static inline HANDLE dup_handle(HANDLE src, BOOL inherit, BOOL closeorig)
+{
+	HANDLE copy, self = GetCurrentProcess();
+
+	if (!DuplicateHandle(self, src, self, &copy, 0, inherit, DUPLICATE_SAME_ACCESS |
+				(closeorig ? DUPLICATE_CLOSE_SOURCE : 0)))
+		return NULL;
+	return copy;
+}
+# define close_descriptor(fd) CloseHandle(fd)
+static void pipe_close_parent(pipe_t *p) {
+	/* don't let the child inherit the parent side of the pipe */
+	p->parent = dup_handle(p->parent, FALSE, TRUE);
+}
+static void pipe_close_child(pipe_t *p) {
+	close_descriptor(p->child);
+	p->fd = _open_osfhandle((long)p->parent,
+			(p->fd == 0 ? O_RDONLY : O_WRONLY)|O_BINARY);
+}
+/* }}} */
+#else /* WIN32 */
+/* {{{ unix way */
+# define SHELLENV "SHELL"
+# define SECURITY_DC
+# define SECURITY_CC
+# define close_descriptor(fd) close(fd)
+static void pipe_close_parent(pipe_t *p) {
+	/* don't close stdin */
+	close_descriptor(p->parent);
+	if (dup2(p->child, p->fd) != p->fd) {
+		perror("pipe_child dup2");
+	} else {
+		close_descriptor(p->child);
+		p->child = p->fd;
+	}
+}
+static void pipe_close_child(pipe_t *p) {
+	close_descriptor(p->child);
+	p->fd = p->parent;
+}
+/* }}} */
+#endif /* WIN32 */
+
+/* {{{ pipe_close */
+static void pipe_close(pipe_t *p) {
+	close_descriptor(p->parent);
+	close_descriptor(p->child);
+#ifdef WIN32
+	close(p->fd);
+#endif
+}
+/* }}} */
+/* {{{ pipe_open */
+static int pipe_open(pipe_t *p, int fd SECURITY_DC) {
+	descriptor_t newpipe[2];
+
+	if (0 != pipe(newpipe)) {
+		fprintf(stderr, "can't open pipe");
+		return -1;
+	}
+	if (0 == fd) {
+		p->parent = newpipe[1]; /* write */
+		p->child  = newpipe[0]; /* read */
+	} else {
+		p->parent = newpipe[0]; /* read */
+		p->child  = newpipe[1]; /* write */
+	}
+	p->fd = fd;
+
+	return 0;
+}
+/* }}} */
+
+/* {{{ proc_open_pipes */
+static int proc_open_pipes(proc_handler_t *proc SECURITY_DC) {
+	if (pipe_open(&(proc->in), 0 SECURITY_CC) != 0) {
+		return -1;
+	}
+	if (pipe_open(&(proc->out), 1 SECURITY_CC) != 0) {
+		return -1;
+	}
+	if (pipe_open(&(proc->err), 2 SECURITY_CC) != 0) {
+		return -1;
+	}
+	return 0;
+}
+/* }}} */
+/* {{{ proc_close_pipes */
+static void proc_close_pipes(proc_handler_t *proc) {
+	pipe_close(&proc->in);
+	pipe_close(&proc->out);
+	pipe_close(&proc->err);
+}
+/* }}} */
+/* {{{ proc_close_parents */
+static void proc_close_parents(proc_handler_t *proc) {
+	pipe_close_parent(&proc->in);
+	pipe_close_parent(&proc->out);
+	pipe_close_parent(&proc->err);
+}
+/* }}} */
+/* {{{ proc_close_childs */
+static void proc_close_childs(proc_handler_t *proc) {
+	pipe_close_child(&proc->in);
+	pipe_close_child(&proc->out);
+	pipe_close_child(&proc->err);
+}
+/* }}} */
+
+#ifdef WIN32
+/* {{{ proc_close */
+int proc_close(proc_handler_t *proc) {
+	proc_pid_t child = proc->child;
+	DWORD wstatus;
+
+	proc_close_pipes(proc);
+	WaitForSingleObject(child, INFINITE);
+	GetExitCodeProcess(child, &wstatus);
+	CloseHandle(child);
+
+	return wstatus;
+}
+/* }}} */
+/* {{{ proc_open */
+int proc_open(proc_handler_t *proc, const char *command) {
+	PROCESS_INFORMATION pi;
+	STARTUPINFO si;
+	BOOL procok;
+	SECURITY_ATTRIBUTES security;
+	const char *shell = NULL;
+	const char *windir = NULL;
+	buffer *cmdline;
+
+	if (NULL == (shell = getenv(SHELLENV)) &&
+			NULL == (windir = getenv("SystemRoot")) &&
+			NULL == (windir = getenv("windir"))) {
+		fprintf(stderr, "One of %s,%%SystemRoot,%%windir is required", SHELLENV);
+		return -1;
+	}
+
+	/* we use this to allow the child to inherit handles */
+	memset(&security, 0, sizeof(security));
+	security.nLength = sizeof(security);
+	security.bInheritHandle = TRUE;
+	security.lpSecurityDescriptor = NULL;
+
+	if (proc_open_pipes(proc, &security) != 0) {
+		return -1;
+	}
+	proc_close_parents(proc);
+
+	memset(&si, 0, sizeof(si));
+	si.cb = sizeof(si);
+	si.dwFlags = STARTF_USESTDHANDLES;
+	si.hStdInput = proc->in.child;
+	si.hStdOutput = proc->out.child;
+	si.hStdError = proc->err.child;
+
+	memset(&pi, 0, sizeof(pi));
+
+	cmdline = buffer_init();
+	if (shell) {
+		buffer_append_string(cmdline, shell);
+	} else {
+		buffer_append_string(cmdline, windir);
+		buffer_append_string(cmdline, "\\system32\\cmd.exe");
+	}
+	buffer_append_string_len(cmdline, CONST_STR_LEN(" /c "));
+	buffer_append_string(cmdline, command);
+	procok = CreateProcess(NULL, cmdline->ptr, &security, &security, TRUE,
+			NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
+
+	if (FALSE == procok) {
+		fprintf(stderr, "failed to CreateProcess: %s", cmdline->ptr);
+		buffer_free(cmdline);
+		return -1;
+	}
+	buffer_free(cmdline);
+
+	proc->child = pi.hProcess;
+	CloseHandle(pi.hThread);
+
+	proc_close_childs(proc);
+
+	return 0;
+}
+/* }}} */
+#else /* WIN32 */
+/* {{{ proc_close */
+int proc_close(proc_handler_t *proc) {
+	pid_t child = proc->child;
+	int wstatus;
+	pid_t wait_pid;
+
+	proc_close_pipes(proc);
+
+	do {
+		wait_pid = waitpid(child, &wstatus, 0);
+	} while (wait_pid == -1 && errno == EINTR);
+
+	if (wait_pid == -1) {
+		return -1;
+	} else {
+		if (WIFEXITED(wstatus))
+			wstatus = WEXITSTATUS(wstatus);
+	}
+
+	return wstatus;
+}
+/* }}} */
+/* {{{ proc_open */
+int proc_open(proc_handler_t *proc, const char *command) {
+	pid_t child;
+	const char *shell;
+
+	if (NULL == (shell = getenv(SHELLENV))) {
+		shell = "/bin/sh";
+	}
+
+	if (proc_open_pipes(proc) != 0) {
+		return -1;
+	}
+
+	/* the unix way */
+
+	child = fork();
+
+	if (child == 0) {
+		/* this is the child process */
+
+		/* close those descriptors that we just opened for the parent stuff,
+		 * dup new descriptors into required descriptors and close the original
+		 * cruft
+		 */
+		proc_close_parents(proc);
+
+		execl(shell, shell, "-c", command, (char *)NULL);
+		_exit(127);
+
+	} else if (child < 0) {
+		fprintf(stderr, "failed to forking");
+		proc_close(proc);
+		return -1;
+
+	} else {
+		proc->child = child;
+		proc_close_childs(proc);
+		return 0;
+	}
+}
+/* }}} */
+#endif /* WIN32 */
+
+/* {{{ proc_read_fd_to_buffer */
+static void proc_read_fd_to_buffer(int fd, buffer *b) {
+	ssize_t s;
+
+	for (;;) {
+		buffer_prepare_append(b, 512);
+		if ((s = read(fd, (void *)(b->ptr + b->used), 512 - 1)) <= 0) {
+			break;
+		}
+		b->used += s;
+	}
+	b->ptr[b->used] = '\0';
+}
+/* }}} */
+/* {{{ proc_open_buffer */
+int proc_open_buffer(proc_handler_t *proc, const char *command, buffer *in, buffer *out, buffer *err) {
+
+	UNUSED(err);
+
+	if (proc_open(proc, command) != 0) {
+		return -1;
+	}
+
+	if (in) {
+		if (write(proc->in.fd, (void *)in->ptr, in->used) < 0) {
+			perror("error writing pipe");
+			return -1;
+		}
+	}
+	pipe_close(&proc->in);
+
+	if (out) {
+		proc_read_fd_to_buffer(proc->out.fd, out);
+	}
+	pipe_close(&proc->out);
+
+	if (err) {
+		proc_read_fd_to_buffer(proc->err.fd, err);
+	}
+	pipe_close(&proc->err);
+
+	return 0;
+}
+/* }}} */
+
+/* {{{ test */
+#ifdef DEBUG_PROC_OPEN
+int main() {
+	proc_handler_t proc;
+	buffer *in = buffer_init(), *out = buffer_init(), *err = buffer_init();
+	int wstatus;
+
+#define FREE() do { \
+	buffer_free(in); \
+	buffer_free(out); \
+	buffer_free(err); \
+} while (0)
+
+#define RESET() do { \
+	buffer_reset(in); \
+	buffer_reset(out); \
+	buffer_reset(err); \
+	wstatus = proc_close(&proc); \
+	if (0&&wstatus != 0) { \
+		fprintf(stdout, "exitstatus %d\n", wstatus); \
+		return __LINE__ - 200; \
+	} \
+} while (0)
+
+#define ERROR_OUT() do { \
+	fprintf(stdout, "failed opening proc\n"); \
+	wstatus = proc_close(&proc); \
+	fprintf(stdout, "exitstatus %d\n", wstatus); \
+	FREE(); \
+	return __LINE__ - 300; \
+} while (0)
+
+#ifdef WIN32
+#define CMD_CAT "pause"
+#else
+#define CMD_CAT "cat"
+#endif
+
+	do {
+		fprintf(stdout, "test: echo 123 without read\n");
+		if (proc_open(&proc, "echo 321") != 0) {
+			ERROR_OUT();
+		}
+		close_descriptor(proc.in.parent);
+		close_descriptor(proc.out.parent);
+		close_descriptor(proc.err.parent);
+		RESET();
+
+		fprintf(stdout, "test: echo 321 with read\n"); fflush(stdout);
+		if (proc_open_buffer(&proc, "echo 321", NULL, out, err) != 0) {
+			ERROR_OUT();
+		}
+		fprintf(stdout, "result: ->%s<-\n\n", out->ptr); fflush(stdout);
+		RESET();
+
+		fprintf(stdout, "test: echo 123 | " CMD_CAT "\n"); fflush(stdout);
+		buffer_copy_string_len(in, CONST_STR_LEN("123\n"));
+		if (proc_open_buffer(&proc, CMD_CAT, in, out, err) != 0) {
+			ERROR_OUT();
+		}
+		fprintf(stdout, "result: ->%s<-\n\n", out->ptr); fflush(stdout);
+		RESET();
+	} while (0);
+
+#undef RESET
+#undef ERROR_OUT
+
+	fprintf(stdout, "ok\n");
+
+	FREE();
+	return 0;
+}
+#endif /* DEBUG_PROC_OPEN */
+/* }}} */
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/proc_open.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/proc_open.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/proc_open.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,25 @@
+
+#include "buffer.h"
+
+#ifdef WIN32
+#include <windows.h>
+typedef HANDLE descriptor_t;
+typedef HANDLE proc_pid_t;
+#else
+typedef int descriptor_t;
+typedef pid_t proc_pid_t;
+#endif
+
+typedef struct {
+	descriptor_t parent, child;
+	int fd;
+} pipe_t;
+
+typedef struct {
+	pipe_t in, out, err;
+	proc_pid_t child;
+} proc_handler_t;
+
+int proc_close(proc_handler_t *ht);
+int proc_open(proc_handler_t *ht, const char *command);
+int proc_open_buffer(proc_handler_t *ht, const char *command, buffer *in, buffer *out, buffer *err);

Added: lighttpd/tags/1.4.19-5+lenny2/src/request.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/request.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/request.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1171 @@
+#include <sys/stat.h>
+
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+
+#include "request.h"
+#include "keyvalue.h"
+#include "log.h"
+
+static int request_check_hostname(server *srv, connection *con, buffer *host) {
+	enum { DOMAINLABEL, TOPLABEL } stage = TOPLABEL;
+	size_t i;
+	int label_len = 0;
+	size_t host_len;
+	char *colon;
+	int is_ip = -1; /* -1 don't know yet, 0 no, 1 yes */
+	int level = 0;
+
+	UNUSED(srv);
+	UNUSED(con);
+
+	/*
+	 *       hostport      = host [ ":" port ]
+	 *       host          = hostname | IPv4address | IPv6address
+	 *       hostname      = *( domainlabel "." ) toplabel [ "." ]
+	 *       domainlabel   = alphanum | alphanum *( alphanum | "-" ) alphanum
+	 *       toplabel      = alpha | alpha *( alphanum | "-" ) alphanum
+	 *       IPv4address   = 1*digit "." 1*digit "." 1*digit "." 1*digit
+	 *       IPv6address   = "[" ... "]"
+	 *       port          = *digit
+	 */
+
+	/* no Host: */
+	if (!host || host->used == 0) return 0;
+
+	host_len = host->used - 1;
+
+	/* IPv6 adress */
+	if (host->ptr[0] == '[') {
+		char *c = host->ptr + 1;
+		int colon_cnt = 0;
+
+		/* check portnumber */
+		for (; *c && *c != ']'; c++) {
+			if (*c == ':') {
+				if (++colon_cnt > 7) {
+					return -1;
+				}
+			} else if (!light_isxdigit(*c)) {
+				return -1;
+			}
+		}
+
+		/* missing ] */
+		if (!*c) {
+			return -1;
+		}
+
+		/* check port */
+		if (*(c+1) == ':') {
+			for (c += 2; *c; c++) {
+				if (!light_isdigit(*c)) {
+					return -1;
+				}
+			}
+		}
+		return 0;
+	}
+
+	if (NULL != (colon = memchr(host->ptr, ':', host_len))) {
+		char *c = colon + 1;
+
+		/* check portnumber */
+		for (; *c; c++) {
+			if (!light_isdigit(*c)) return -1;
+		}
+
+		/* remove the port from the host-len */
+		host_len = colon - host->ptr;
+	}
+
+	/* Host is empty */
+	if (host_len == 0) return -1;
+
+	/* if the hostname ends in a "." strip it */
+	if (host->ptr[host_len-1] == '.') host_len -= 1;
+
+	/* scan from the right and skip the \0 */
+	for (i = host_len - 1; i + 1 > 0; i--) {
+		const char c = host->ptr[i];
+
+		switch (stage) {
+		case TOPLABEL:
+			if (c == '.') {
+				/* only switch stage, if this is not the last character */
+				if (i != host_len - 1) {
+					if (label_len == 0) {
+						return -1;
+					}
+
+					/* check the first character at right of the dot */
+					if (is_ip == 0) {
+						if (!light_isalpha(host->ptr[i+1])) {
+							return -1;
+						}
+					} else if (!light_isdigit(host->ptr[i+1])) {
+						is_ip = 0;
+					} else if ('-' == host->ptr[i+1]) {
+						return -1;
+					} else {
+						/* just digits */
+						is_ip = 1;
+					}
+
+					stage = DOMAINLABEL;
+
+					label_len = 0;
+					level++;
+				} else if (i == 0) {
+					/* just a dot and nothing else is evil */
+					return -1;
+				}
+			} else if (i == 0) {
+				/* the first character of the hostname */
+				if (!light_isalpha(c)) {
+					return -1;
+				}
+				label_len++;
+			} else {
+				if (c != '-' && !light_isalnum(c)) {
+					return -1;
+				}
+				if (is_ip == -1) {
+					if (!light_isdigit(c)) is_ip = 0;
+				}
+				label_len++;
+			}
+
+			break;
+		case DOMAINLABEL:
+			if (is_ip == 1) {
+				if (c == '.') {
+					if (label_len == 0) {
+						return -1;
+					}
+
+					label_len = 0;
+					level++;
+				} else if (!light_isdigit(c)) {
+					return -1;
+				} else {
+					label_len++;
+				}
+			} else {
+				if (c == '.') {
+					if (label_len == 0) {
+						return -1;
+					}
+
+					/* c is either - or alphanum here */
+					if ('-' == host->ptr[i+1]) {
+						return -1;
+					}
+
+					label_len = 0;
+					level++;
+				} else if (i == 0) {
+					if (!light_isalnum(c)) {
+						return -1;
+					}
+					label_len++;
+				} else {
+					if (c != '-' && !light_isalnum(c)) {
+						return -1;
+					}
+					label_len++;
+				}
+			}
+
+			break;
+		}
+	}
+
+	/* a IP has to consist of 4 parts */
+	if (is_ip == 1 && level != 3) {
+		return -1;
+	}
+
+	if (label_len == 0) {
+		return -1;
+	}
+
+	return 0;
+}
+
+#if 0
+#define DUMP_HEADER
+#endif
+
+int http_request_split_value(array *vals, buffer *b) {
+	char *s;
+	size_t i;
+	int state = 0;
+	/*
+	 * parse
+	 *
+	 * val1, val2, val3, val4
+	 *
+	 * into a array (more or less a explode() incl. striping of whitespaces
+	 */
+
+	if (b->used == 0) return 0;
+
+	s = b->ptr;
+
+	for (i =0; i < b->used - 1; ) {
+		char *start = NULL, *end = NULL;
+		data_string *ds;
+
+		switch (state) {
+		case 0: /* ws */
+
+			/* skip ws */
+			for (; (*s == ' ' || *s == '\t') && i < b->used - 1; i++, s++);
+
+
+			state = 1;
+			break;
+		case 1: /* value */
+			start = s;
+
+			for (; *s != ',' && i < b->used - 1; i++, s++);
+			end = s - 1;
+
+			for (; (*end == ' ' || *end == '\t') && end > start; end--);
+
+			if (NULL == (ds = (data_string *)array_get_unused_element(vals, TYPE_STRING))) {
+				ds = data_string_init();
+			}
+
+			buffer_copy_string_len(ds->value, start, end-start+1);
+			array_insert_unique(vals, (data_unset *)ds);
+
+			if (*s == ',') {
+				state = 0;
+				i++;
+				s++;
+			} else {
+				/* end of string */
+
+				state = 2;
+			}
+			break;
+		default:
+			i++;
+			break;
+		}
+	}
+	return 0;
+}
+
+int request_uri_is_valid_char(unsigned char c) {
+	if (c <= 32) return 0;
+	if (c == 127) return 0;
+	if (c == 255) return 0;
+
+	return 1;
+}
+
+int http_request_parse(server *srv, connection *con) {
+	char *uri = NULL, *proto = NULL, *method = NULL, con_length_set;
+	int is_key = 1, key_len = 0, is_ws_after_key = 0, in_folding;
+	char *value = NULL, *key = NULL;
+
+	enum { HTTP_CONNECTION_UNSET, HTTP_CONNECTION_KEEPALIVE, HTTP_CONNECTION_CLOSE } keep_alive_set = HTTP_CONNECTION_UNSET;
+
+	int line = 0;
+
+	int request_line_stage = 0;
+	size_t i, first;
+
+	int done = 0;
+
+	/*
+	 * Request: "^(GET|POST|HEAD) ([^ ]+(\\?[^ ]+|)) (HTTP/1\\.[01])$"
+	 * Option : "^([-a-zA-Z]+): (.+)$"
+	 * End    : "^$"
+	 */
+
+	if (con->conf.log_request_header) {
+		log_error_write(srv, __FILE__, __LINE__, "sdsdSb",
+				"fd:", con->fd,
+				"request-len:", con->request.request->used,
+				"\n", con->request.request);
+	}
+
+	if (con->request_count > 1 &&
+	    con->request.request->ptr[0] == '\r' &&
+	    con->request.request->ptr[1] == '\n') {
+		/* we are in keep-alive and might get \r\n after a previous POST request.*/
+
+		buffer_copy_string_len(con->parse_request, con->request.request->ptr + 2, con->request.request->used - 1 - 2);
+	} else {
+		/* fill the local request buffer */
+		buffer_copy_string_buffer(con->parse_request, con->request.request);
+	}
+
+	keep_alive_set = 0;
+	con_length_set = 0;
+
+	/* parse the first line of the request
+	 *
+	 * should be:
+	 *
+	 * <method> <uri> <protocol>\r\n
+	 * */
+	for (i = 0, first = 0; i < con->parse_request->used && line == 0; i++) {
+		char *cur = con->parse_request->ptr + i;
+
+		switch(*cur) {
+		case '\r':
+			if (con->parse_request->ptr[i+1] == '\n') {
+				http_method_t r;
+				char *nuri = NULL;
+				size_t j;
+
+				/* \r\n -> \0\0 */
+				con->parse_request->ptr[i] = '\0';
+				con->parse_request->ptr[i+1] = '\0';
+
+				buffer_copy_string_len(con->request.request_line, con->parse_request->ptr, i);
+
+				if (request_line_stage != 2) {
+					con->http_status = 400;
+					con->response.keep_alive = 0;
+					con->keep_alive = 0;
+
+					if (srv->srvconf.log_request_header_on_error) {
+						log_error_write(srv, __FILE__, __LINE__, "s", "incomplete request line -> 400");
+						log_error_write(srv, __FILE__, __LINE__, "Sb",
+								"request-header:\n",
+								con->request.request);
+					}
+					return 0;
+				}
+
+				proto = con->parse_request->ptr + first;
+
+				*(uri - 1) = '\0';
+				*(proto - 1) = '\0';
+
+				/* we got the first one :) */
+				if (-1 == (r = get_http_method_key(method))) {
+					con->http_status = 501;
+					con->response.keep_alive = 0;
+					con->keep_alive = 0;
+
+					if (srv->srvconf.log_request_header_on_error) {
+						log_error_write(srv, __FILE__, __LINE__, "s", "unknown http-method -> 501");
+						log_error_write(srv, __FILE__, __LINE__, "Sb",
+								"request-header:\n",
+								con->request.request);
+					}
+
+					return 0;
+				}
+
+				con->request.http_method = r;
+
+				/*
+				 * RFC2616 says:
+				 *
+				 * HTTP-Version   = "HTTP" "/" 1*DIGIT "." 1*DIGIT
+				 *
+				 * */
+				if (0 == strncmp(proto, "HTTP/", sizeof("HTTP/") - 1)) {
+					char * major = proto + sizeof("HTTP/") - 1;
+					char * minor = strchr(major, '.');
+					char *err = NULL;
+					int major_num = 0, minor_num = 0;
+
+					int invalid_version = 0;
+
+					if (NULL == minor || /* no dot */
+					    minor == major || /* no major */
+					    *(minor + 1) == '\0' /* no minor */) {
+						invalid_version = 1;
+					} else {
+						*minor = '\0';
+						major_num = strtol(major, &err, 10);
+
+						if (*err != '\0') invalid_version = 1;
+
+						*minor++ = '.';
+						minor_num = strtol(minor, &err, 10);
+
+						if (*err != '\0') invalid_version = 1;
+					}
+
+					if (invalid_version) {
+						con->http_status = 400;
+						con->keep_alive = 0;
+
+						if (srv->srvconf.log_request_header_on_error) {
+							log_error_write(srv, __FILE__, __LINE__, "s", "unknown protocol -> 400");
+							log_error_write(srv, __FILE__, __LINE__, "Sb",
+									"request-header:\n",
+									con->request.request);
+						}
+						return 0;
+					}
+
+					if (major_num == 1 && minor_num == 1) {
+						con->request.http_version = con->conf.allow_http11 ? HTTP_VERSION_1_1 : HTTP_VERSION_1_0;
+					} else if (major_num == 1 && minor_num == 0) {
+						con->request.http_version = HTTP_VERSION_1_0;
+					} else {
+						con->http_status = 505;
+
+						if (srv->srvconf.log_request_header_on_error) {
+							log_error_write(srv, __FILE__, __LINE__, "s", "unknown HTTP version -> 505");
+							log_error_write(srv, __FILE__, __LINE__, "Sb",
+									"request-header:\n",
+									con->request.request);
+						}
+						return 0;
+					}
+				} else {
+					con->http_status = 400;
+					con->keep_alive = 0;
+
+					if (srv->srvconf.log_request_header_on_error) {
+						log_error_write(srv, __FILE__, __LINE__, "s", "unknown protocol -> 400");
+						log_error_write(srv, __FILE__, __LINE__, "Sb",
+								"request-header:\n",
+								con->request.request);
+					}
+					return 0;
+				}
+
+				if (0 == strncmp(uri, "http://", 7) &&
+				    NULL != (nuri = strchr(uri + 7, '/'))) {
+					/* ignore the host-part */
+
+					buffer_copy_string_len(con->request.uri, nuri, proto - nuri - 1);
+				} else {
+					/* everything looks good so far */
+					buffer_copy_string_len(con->request.uri, uri, proto - uri - 1);
+				}
+
+				/* check uri for invalid characters */
+				for (j = 0; j < con->request.uri->used - 1; j++) {
+					if (!request_uri_is_valid_char(con->request.uri->ptr[j])) {
+						unsigned char buf[2];
+						con->http_status = 400;
+						con->keep_alive = 0;
+
+						if (srv->srvconf.log_request_header_on_error) {
+							buf[0] = con->request.uri->ptr[j];
+							buf[1] = '\0';
+
+							if (con->request.uri->ptr[j] > 32 &&
+							    con->request.uri->ptr[j] != 127) {
+								/* the character is printable -> print it */
+								log_error_write(srv, __FILE__, __LINE__, "ss",
+										"invalid character in URI -> 400",
+										buf);
+							} else {
+								/* a control-character, print ascii-code */
+								log_error_write(srv, __FILE__, __LINE__, "sd",
+										"invalid character in URI -> 400",
+										con->request.uri->ptr[j]);
+							}
+
+							log_error_write(srv, __FILE__, __LINE__, "Sb",
+									"request-header:\n",
+									con->request.request);
+						}
+
+						return 0;
+					}
+				}
+
+				buffer_copy_string_buffer(con->request.orig_uri, con->request.uri);
+
+				con->http_status = 0;
+
+				i++;
+				line++;
+				first = i+1;
+			}
+			break;
+		case ' ':
+			switch(request_line_stage) {
+			case 0:
+				/* GET|POST|... */
+				method = con->parse_request->ptr + first;
+				first = i + 1;
+				break;
+			case 1:
+				/* /foobar/... */
+				uri = con->parse_request->ptr + first;
+				first = i + 1;
+				break;
+			default:
+				/* ERROR, one space to much */
+				con->http_status = 400;
+				con->response.keep_alive = 0;
+				con->keep_alive = 0;
+
+				if (srv->srvconf.log_request_header_on_error) {
+					log_error_write(srv, __FILE__, __LINE__, "s", "overlong request line -> 400");
+					log_error_write(srv, __FILE__, __LINE__, "Sb",
+							"request-header:\n",
+							con->request.request);
+				}
+				return 0;
+			}
+
+			request_line_stage++;
+			break;
+		}
+	}
+
+	in_folding = 0;
+
+	if (con->request.uri->used == 1) {
+		con->http_status = 400;
+		con->response.keep_alive = 0;
+		con->keep_alive = 0;
+
+		log_error_write(srv, __FILE__, __LINE__, "s", "no uri specified -> 400");
+		if (srv->srvconf.log_request_header_on_error) {
+			log_error_write(srv, __FILE__, __LINE__, "Sb",
+							"request-header:\n",
+							con->request.request);
+		}
+		return 0;
+	}
+
+
+	for (; i < con->parse_request->used && !done; i++) {
+		char *cur = con->parse_request->ptr + i;
+
+		if (is_key) {
+			size_t j;
+			int got_colon = 0;
+
+			/**
+			 * 1*<any CHAR except CTLs or separators>
+			 * CTLs == 0-31 + 127
+			 *
+			 */
+			switch(*cur) {
+			case ':':
+				is_key = 0;
+
+				value = cur + 1;
+
+				if (is_ws_after_key == 0) {
+					key_len = i - first;
+				}
+				is_ws_after_key = 0;
+
+				break;
+			case '(':
+			case ')':
+			case '<':
+			case '>':
+			case '@':
+			case ',':
+			case ';':
+			case '\\':
+			case '\"':
+			case '/':
+			case '[':
+			case ']':
+			case '?':
+			case '=':
+			case '{':
+			case '}':
+				con->http_status = 400;
+				con->keep_alive = 0;
+				con->response.keep_alive = 0;
+
+				log_error_write(srv, __FILE__, __LINE__, "sbsds",
+						"invalid character in key", con->request.request, cur, *cur, "-> 400");
+				return 0;
+			case ' ':
+			case '\t':
+				if (i == first) {
+					is_key = 0;
+					in_folding = 1;
+					value = cur;
+
+					break;
+				}
+
+
+				key_len = i - first;
+
+				/* skip every thing up to the : */
+				for (j = 1; !got_colon; j++) {
+					switch(con->parse_request->ptr[j + i]) {
+					case ' ':
+					case '\t':
+						/* skip WS */
+						continue;
+					case ':':
+						/* ok, done */
+
+						i += j - 1;
+						got_colon = 1;
+
+						break;
+					default:
+						/* error */
+
+						if (srv->srvconf.log_request_header_on_error) {
+							log_error_write(srv, __FILE__, __LINE__, "s", "WS character in key -> 400");
+							log_error_write(srv, __FILE__, __LINE__, "Sb",
+								"request-header:\n",
+								con->request.request);
+						}
+
+						con->http_status = 400;
+						con->response.keep_alive = 0;
+						con->keep_alive = 0;
+
+						return 0;
+					}
+				}
+
+				break;
+			case '\r':
+				if (con->parse_request->ptr[i+1] == '\n' && i == first) {
+					/* End of Header */
+					con->parse_request->ptr[i] = '\0';
+					con->parse_request->ptr[i+1] = '\0';
+
+					i++;
+
+					done = 1;
+
+					break;
+				} else {
+					if (srv->srvconf.log_request_header_on_error) {
+						log_error_write(srv, __FILE__, __LINE__, "s", "CR without LF -> 400");
+						log_error_write(srv, __FILE__, __LINE__, "Sb",
+							"request-header:\n",
+							con->request.request);
+					}
+
+					con->http_status = 400;
+					con->keep_alive = 0;
+					con->response.keep_alive = 0;
+					return 0;
+				}
+				/* fall thru */
+			case 0: /* illegal characters (faster than a if () :) */
+			case 1:
+			case 2:
+			case 3:
+			case 4:
+			case 5:
+			case 6:
+			case 7:
+			case 8:
+			case 10:
+			case 11:
+			case 12:
+			case 14:
+			case 15:
+			case 16:
+			case 17:
+			case 18:
+			case 19:
+			case 20:
+			case 21:
+			case 22:
+			case 23:
+			case 24:
+			case 25:
+			case 26:
+			case 27:
+			case 28:
+			case 29:
+			case 30:
+			case 31:
+			case 127:
+				con->http_status = 400;
+				con->keep_alive = 0;
+				con->response.keep_alive = 0;
+
+				if (srv->srvconf.log_request_header_on_error) {
+					log_error_write(srv, __FILE__, __LINE__, "sbsds",
+						"CTL character in key", con->request.request, cur, *cur, "-> 400");
+
+					log_error_write(srv, __FILE__, __LINE__, "Sb",
+						"request-header:\n",
+						con->request.request);
+				}
+
+				return 0;
+			default:
+				/* ok */
+				break;
+			}
+		} else {
+			switch(*cur) {
+			case '\r':
+				if (con->parse_request->ptr[i+1] == '\n') {
+					data_string *ds = NULL;
+
+					/* End of Headerline */
+					con->parse_request->ptr[i] = '\0';
+					con->parse_request->ptr[i+1] = '\0';
+
+					if (in_folding) {
+						buffer *key_b;
+						/**
+						 * we use a evil hack to handle the line-folding
+						 * 
+						 * As array_insert_unique() deletes 'ds' in the case of a duplicate
+						 * ds points somewhere and we get a evil crash. As a solution we keep the old
+						 * "key" and get the current value from the hash and append us
+						 *
+						 * */
+
+						if (!key || !key_len) {
+							/* 400 */
+
+							if (srv->srvconf.log_request_header_on_error) {
+								log_error_write(srv, __FILE__, __LINE__, "s", "WS at the start of first line -> 400");
+
+								log_error_write(srv, __FILE__, __LINE__, "Sb",
+									"request-header:\n",
+									con->request.request);
+							}
+
+
+							con->http_status = 400;
+							con->keep_alive = 0;
+							con->response.keep_alive = 0;
+							return 0;
+						}
+
+						key_b = buffer_init();
+						buffer_copy_string_len(key_b, key, key_len);
+
+						if (NULL != (ds = (data_string *)array_get_element(con->request.headers, key_b->ptr))) {
+							buffer_append_string(ds->value, value);
+						}
+
+						buffer_free(key_b);
+					} else {
+						int s_len;
+						key = con->parse_request->ptr + first;
+
+						s_len = cur - value;
+
+						/* strip trailing white-spaces */
+						for (; s_len > 0 && 
+								(value[s_len - 1] == ' ' || 
+								 value[s_len - 1] == '\t'); s_len--);
+
+						value[s_len] = '\0';
+
+						if (s_len > 0) {
+							int cmp = 0;
+							if (NULL == (ds = (data_string *)array_get_unused_element(con->request.headers, TYPE_STRING))) {
+								ds = data_string_init();
+							}
+							buffer_copy_string_len(ds->key, key, key_len);
+							buffer_copy_string_len(ds->value, value, s_len);
+
+							/* retreive values
+							 *
+							 *
+							 * the list of options is sorted to simplify the search
+							 */
+
+							if (0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("Connection")))) {
+								array *vals;
+								size_t vi;
+
+								/* split on , */
+
+								vals = srv->split_vals;
+
+								array_reset(vals);
+
+								http_request_split_value(vals, ds->value);
+
+								for (vi = 0; vi < vals->used; vi++) {
+									data_string *dsv = (data_string *)vals->data[vi];
+
+									if (0 == buffer_caseless_compare(CONST_BUF_LEN(dsv->value), CONST_STR_LEN("keep-alive"))) {
+										keep_alive_set = HTTP_CONNECTION_KEEPALIVE;
+
+										break;
+									} else if (0 == buffer_caseless_compare(CONST_BUF_LEN(dsv->value), CONST_STR_LEN("close"))) {
+										keep_alive_set = HTTP_CONNECTION_CLOSE;
+
+										break;
+									}
+								}
+
+							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("Content-Length")))) {
+								char *err;
+								unsigned long int r;
+								size_t j;
+
+								if (con_length_set) {
+									con->http_status = 400;
+									con->keep_alive = 0;
+
+									if (srv->srvconf.log_request_header_on_error) {
+										log_error_write(srv, __FILE__, __LINE__, "s",
+												"duplicate Content-Length-header -> 400");
+										log_error_write(srv, __FILE__, __LINE__, "Sb",
+												"request-header:\n",
+												con->request.request);
+									}
+									return 0;
+								}
+
+								if (ds->value->used == 0) SEGFAULT();
+
+								for (j = 0; j < ds->value->used - 1; j++) {
+									char c = ds->value->ptr[j];
+									if (!isdigit((unsigned char)c)) {
+										log_error_write(srv, __FILE__, __LINE__, "sbs",
+												"content-length broken:", ds->value, "-> 400");
+
+										con->http_status = 400;
+										con->keep_alive = 0;
+
+										array_insert_unique(con->request.headers, (data_unset *)ds);
+										return 0;
+									}
+								}
+
+								r = strtoul(ds->value->ptr, &err, 10);
+
+								if (*err == '\0') {
+									con_length_set = 1;
+									con->request.content_length = r;
+								} else {
+									log_error_write(srv, __FILE__, __LINE__, "sbs",
+											"content-length broken:", ds->value, "-> 400");
+
+									con->http_status = 400;
+									con->keep_alive = 0;
+
+									array_insert_unique(con->request.headers, (data_unset *)ds);
+									return 0;
+								}
+							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("Content-Type")))) {
+								/* if dup, only the first one will survive */
+								if (!con->request.http_content_type) {
+									con->request.http_content_type = ds->value->ptr;
+								} else {
+									con->http_status = 400;
+									con->keep_alive = 0;
+
+									if (srv->srvconf.log_request_header_on_error) {
+										log_error_write(srv, __FILE__, __LINE__, "s",
+												"duplicate Content-Type-header -> 400");
+										log_error_write(srv, __FILE__, __LINE__, "Sb",
+												"request-header:\n",
+												con->request.request);
+									}
+									return 0;
+								}
+							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("Expect")))) {
+								/* HTTP 2616 8.2.3
+								 * Expect: 100-continue
+								 *
+								 *   -> (10.1.1)  100 (read content, process request, send final status-code)
+								 *   -> (10.4.18) 417 (close)
+								 *
+								 * (not handled at all yet, we always send 417 here)
+								 *
+								 * What has to be added ?
+								 * 1. handling of chunked request body
+								 * 2. out-of-order sending from the HTTP/1.1 100 Continue
+								 *    header
+								 *
+								 */
+
+								con->http_status = 417;
+								con->keep_alive = 0;
+
+								array_insert_unique(con->request.headers, (data_unset *)ds);
+								return 0;
+							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("Host")))) {
+								if (!con->request.http_host) {
+									con->request.http_host = ds->value;
+								} else {
+									con->http_status = 400;
+									con->keep_alive = 0;
+
+									if (srv->srvconf.log_request_header_on_error) {
+										log_error_write(srv, __FILE__, __LINE__, "s",
+												"duplicate Host-header -> 400");
+										log_error_write(srv, __FILE__, __LINE__, "Sb",
+												"request-header:\n",
+												con->request.request);
+									}
+									return 0;
+								}
+							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("If-Modified-Since")))) {
+								/* Proxies sometimes send dup headers
+								 * if they are the same we ignore the second
+								 * if not, we raise an error */
+								if (!con->request.http_if_modified_since) {
+									con->request.http_if_modified_since = ds->value->ptr;
+								} else if (0 == strcasecmp(con->request.http_if_modified_since,
+											ds->value->ptr)) {
+									/* ignore it if they are the same */
+
+									ds->free((data_unset *)ds);
+									ds = NULL;
+								} else {
+									con->http_status = 400;
+									con->keep_alive = 0;
+
+									if (srv->srvconf.log_request_header_on_error) {
+										log_error_write(srv, __FILE__, __LINE__, "s",
+												"duplicate If-Modified-Since header -> 400");
+										log_error_write(srv, __FILE__, __LINE__, "Sb",
+												"request-header:\n",
+												con->request.request);
+									}
+									return 0;
+								}
+							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("If-None-Match")))) {
+								/* if dup, only the first one will survive */
+								if (!con->request.http_if_none_match) {
+									con->request.http_if_none_match = ds->value->ptr;
+								} else {
+									con->http_status = 400;
+									con->keep_alive = 0;
+
+									if (srv->srvconf.log_request_header_on_error) {
+										log_error_write(srv, __FILE__, __LINE__, "s",
+												"duplicate If-None-Match-header -> 400");
+										log_error_write(srv, __FILE__, __LINE__, "Sb",
+												"request-header:\n",
+												con->request.request);
+									}
+									return 0;
+								}
+							} else if (cmp > 0 && 0 == (cmp = buffer_caseless_compare(CONST_BUF_LEN(ds->key), CONST_STR_LEN("Range")))) {
+								if (!con->request.http_range) {
+									/* bytes=.*-.* */
+
+									if (0 == strncasecmp(ds->value->ptr, "bytes=", 6) &&
+									    NULL != strchr(ds->value->ptr+6, '-')) {
+
+										/* if dup, only the first one will survive */
+										con->request.http_range = ds->value->ptr + 6;
+									}
+								} else {
+									con->http_status = 400;
+									con->keep_alive = 0;
+
+									if (srv->srvconf.log_request_header_on_error) {
+										log_error_write(srv, __FILE__, __LINE__, "s",
+												"duplicate Range-header -> 400");
+										log_error_write(srv, __FILE__, __LINE__, "Sb",
+												"request-header:\n",
+												con->request.request);
+									}
+									return 0;
+								}
+							}
+
+							if (ds) array_insert_unique(con->request.headers, (data_unset *)ds);
+						} else {
+							/* empty header-fields are not allowed by HTTP-RFC, we just ignore them */
+						}
+					}
+
+					i++;
+					first = i+1;
+					is_key = 1;
+					value = 0;
+#if 0
+					/**
+					 * for Bug 1230 keep the key_len a live
+					 */
+					key_len = 0; 
+#endif
+					in_folding = 0;
+				} else {
+					if (srv->srvconf.log_request_header_on_error) {
+						log_error_write(srv, __FILE__, __LINE__, "sbs",
+								"CR without LF", con->request.request, "-> 400");
+					}
+
+					con->http_status = 400;
+					con->keep_alive = 0;
+					con->response.keep_alive = 0;
+					return 0;
+				}
+				break;
+			case ' ':
+			case '\t':
+				/* strip leading WS */
+				if (value == cur) value = cur+1;
+			default:
+				if (*cur >= 0 && *cur < 32) {
+					if (srv->srvconf.log_request_header_on_error) {
+						log_error_write(srv, __FILE__, __LINE__, "sds",
+								"invalid char in header", (int)*cur, "-> 400");
+					}
+
+					con->http_status = 400;
+					con->keep_alive = 0;
+
+					return 0;
+				}
+				break;
+			}
+		}
+	}
+
+	con->header_len = i;
+
+	/* do some post-processing */
+
+	if (con->request.http_version == HTTP_VERSION_1_1) {
+		if (keep_alive_set != HTTP_CONNECTION_CLOSE) {
+			/* no Connection-Header sent */
+
+			/* HTTP/1.1 -> keep-alive default TRUE */
+			con->keep_alive = 1;
+		} else {
+			con->keep_alive = 0;
+		}
+
+		/* RFC 2616, 14.23 */
+		if (con->request.http_host == NULL ||
+		    buffer_is_empty(con->request.http_host)) {
+			con->http_status = 400;
+			con->response.keep_alive = 0;
+			con->keep_alive = 0;
+
+			if (srv->srvconf.log_request_header_on_error) {
+				log_error_write(srv, __FILE__, __LINE__, "s", "HTTP/1.1 but Host missing -> 400");
+				log_error_write(srv, __FILE__, __LINE__, "Sb",
+						"request-header:\n",
+						con->request.request);
+			}
+			return 0;
+		}
+	} else {
+		if (keep_alive_set == HTTP_CONNECTION_KEEPALIVE) {
+			/* no Connection-Header sent */
+
+			/* HTTP/1.0 -> keep-alive default FALSE  */
+			con->keep_alive = 1;
+		} else {
+			con->keep_alive = 0;
+		}
+	}
+
+	/* check hostname field if it is set */
+	if (NULL != con->request.http_host &&
+	    0 != request_check_hostname(srv, con, con->request.http_host)) {
+
+		if (srv->srvconf.log_request_header_on_error) {
+			log_error_write(srv, __FILE__, __LINE__, "s",
+					"Invalid Hostname -> 400");
+			log_error_write(srv, __FILE__, __LINE__, "Sb",
+					"request-header:\n",
+					con->request.request);
+		}
+
+		con->http_status = 400;
+		con->response.keep_alive = 0;
+		con->keep_alive = 0;
+
+		return 0;
+	}
+
+	switch(con->request.http_method) {
+	case HTTP_METHOD_GET:
+	case HTTP_METHOD_HEAD:
+		/* content-length is forbidden for those */
+		if (con_length_set && con->request.content_length != 0) {
+			/* content-length is missing */
+			log_error_write(srv, __FILE__, __LINE__, "s",
+					"GET/HEAD with content-length -> 400");
+
+			con->keep_alive = 0;
+			con->http_status = 400;
+			return 0;
+		}
+		break;
+	case HTTP_METHOD_POST:
+		/* content-length is required for them */
+		if (!con_length_set) {
+			/* content-length is missing */
+			log_error_write(srv, __FILE__, __LINE__, "s",
+					"POST-request, but content-length missing -> 411");
+
+			con->keep_alive = 0;
+			con->http_status = 411;
+			return 0;
+
+		}
+		break;
+	default:
+		/* the may have a content-length */
+		break;
+	}
+
+
+	/* check if we have read post data */
+	if (con_length_set) {
+		/* don't handle more the SSIZE_MAX bytes in content-length */
+		if (con->request.content_length > SSIZE_MAX) {
+			con->http_status = 413;
+			con->keep_alive = 0;
+
+			log_error_write(srv, __FILE__, __LINE__, "sds",
+					"request-size too long:", con->request.content_length, "-> 413");
+			return 0;
+		}
+
+		/* divide by 1024 as srvconf.max_request_size is in kBytes */
+		if (srv->srvconf.max_request_size != 0 &&
+		    (con->request.content_length >> 10) > srv->srvconf.max_request_size) {
+			/* the request body itself is larger then
+			 * our our max_request_size
+			 */
+
+			con->http_status = 413;
+			con->keep_alive = 0;
+
+			log_error_write(srv, __FILE__, __LINE__, "sds",
+					"request-size too long:", con->request.content_length, "-> 413");
+			return 0;
+		}
+
+
+		/* we have content */
+		if (con->request.content_length != 0) {
+			return 1;
+		}
+	}
+
+	return 0;
+}
+
+int http_request_header_finished(server *srv, connection *con) {
+	UNUSED(srv);
+
+	if (con->request.request->used < 5) return 0;
+
+	if (0 == memcmp(con->request.request->ptr + con->request.request->used - 5, "\r\n\r\n", 4)) return 1;
+	if (NULL != strstr(con->request.request->ptr, "\r\n\r\n")) return 1;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/request.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/request.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/request.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,9 @@
+#ifndef _REQUEST_H_
+#define _REQUEST_H_
+
+#include "server.h"
+
+int http_request_parse(server *srv, connection *con);
+int http_request_header_finished(server *srv, connection *con);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/response.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/response.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/response.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,682 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <limits.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <assert.h>
+
+#include <stdio.h>
+
+#include "response.h"
+#include "keyvalue.h"
+#include "log.h"
+#include "stat_cache.h"
+#include "chunk.h"
+
+#include "configfile.h"
+#include "connections.h"
+
+#include "plugin.h"
+
+#include "sys-socket.h"
+
+int http_response_write_header(server *srv, connection *con) {
+	buffer *b;
+	size_t i;
+	int have_date = 0;
+	int have_server = 0;
+
+	b = chunkqueue_get_prepend_buffer(con->write_queue);
+
+	if (con->request.http_version == HTTP_VERSION_1_1) {
+		BUFFER_COPY_STRING_CONST(b, "HTTP/1.1 ");
+	} else {
+		BUFFER_COPY_STRING_CONST(b, "HTTP/1.0 ");
+	}
+	buffer_append_long(b, con->http_status);
+	BUFFER_APPEND_STRING_CONST(b, " ");
+	buffer_append_string(b, get_http_status_name(con->http_status));
+
+	if (con->request.http_version != HTTP_VERSION_1_1 || con->keep_alive == 0) {
+		BUFFER_APPEND_STRING_CONST(b, "\r\nConnection: ");
+		buffer_append_string(b, con->keep_alive ? "keep-alive" : "close");
+	}
+
+	if (con->response.transfer_encoding & HTTP_TRANSFER_ENCODING_CHUNKED) {
+		BUFFER_APPEND_STRING_CONST(b, "\r\nTransfer-Encoding: chunked");
+	}
+
+
+	/* add all headers */
+	for (i = 0; i < con->response.headers->used; i++) {
+		data_string *ds;
+
+		ds = (data_string *)con->response.headers->data[i];
+
+		if (ds->value->used && ds->key->used &&
+		    0 != strncmp(ds->key->ptr, "X-LIGHTTPD-", sizeof("X-LIGHTTPD-") - 1) &&
+			0 != strncmp(ds->key->ptr, "X-Sendfile", sizeof("X-Sendfile") - 1)) {
+			if (buffer_is_equal_string(ds->key, CONST_STR_LEN("Date"))) have_date = 1;
+			if (buffer_is_equal_string(ds->key, CONST_STR_LEN("Server"))) have_server = 1;
+
+			BUFFER_APPEND_STRING_CONST(b, "\r\n");
+			buffer_append_string_buffer(b, ds->key);
+			BUFFER_APPEND_STRING_CONST(b, ": ");
+#if 0
+			/** 
+			 * the value might contain newlines, encode them with at least one white-space
+			 */
+			buffer_append_string_encoded(b, CONST_BUF_LEN(ds->value), ENCODING_HTTP_HEADER);
+#else
+			buffer_append_string_buffer(b, ds->value);
+#endif
+		}
+	}
+
+	if (!have_date) {
+		/* HTTP/1.1 requires a Date: header */
+		BUFFER_APPEND_STRING_CONST(b, "\r\nDate: ");
+
+		/* cache the generated timestamp */
+		if (srv->cur_ts != srv->last_generated_date_ts) {
+			buffer_prepare_copy(srv->ts_date_str, 255);
+
+			strftime(srv->ts_date_str->ptr, srv->ts_date_str->size - 1,
+				 "%a, %d %b %Y %H:%M:%S GMT", gmtime(&(srv->cur_ts)));
+
+			srv->ts_date_str->used = strlen(srv->ts_date_str->ptr) + 1;
+
+			srv->last_generated_date_ts = srv->cur_ts;
+		}
+
+		buffer_append_string_buffer(b, srv->ts_date_str);
+	}
+
+	if (!have_server) {
+		if (buffer_is_empty(con->conf.server_tag)) {
+			BUFFER_APPEND_STRING_CONST(b, "\r\nServer: " PACKAGE_NAME "/" PACKAGE_VERSION);
+		} else {
+			BUFFER_APPEND_STRING_CONST(b, "\r\nServer: ");
+			buffer_append_string_encoded(b, CONST_BUF_LEN(con->conf.server_tag), ENCODING_HTTP_HEADER);
+		}
+	}
+
+	BUFFER_APPEND_STRING_CONST(b, "\r\n\r\n");
+
+
+	con->bytes_header = b->used - 1;
+
+	if (con->conf.log_response_header) {
+		log_error_write(srv, __FILE__, __LINE__, "sSb", "Response-Header:", "\n", b);
+	}
+
+	return 0;
+}
+
+
+
+handler_t http_response_prepare(server *srv, connection *con) {
+	handler_t r;
+
+	/* looks like someone has already done a decision */
+	if (con->mode == DIRECT &&
+	    (con->http_status != 0 && con->http_status != 200)) {
+		/* remove a packets in the queue */
+		if (con->file_finished == 0) {
+			chunkqueue_reset(con->write_queue);
+		}
+
+		return HANDLER_FINISHED;
+	}
+
+	/* no decision yet, build conf->filename */
+	if (con->mode == DIRECT && con->physical.path->used == 0) {
+		char *qstr;
+
+		/* we only come here when we have the parse the full request again
+		 *
+		 * a HANDLER_COMEBACK from mod_rewrite and mod_fastcgi might be a
+		 * problem here as mod_setenv might get called multiple times
+		 *
+		 * fastcgi-auth might lead to a COMEBACK too
+		 * fastcgi again dead server too
+		 *
+		 * mod_compress might add headers twice too
+		 *
+		 *  */
+
+		config_cond_cache_reset(srv, con);
+		config_setup_connection(srv, con); // Perhaps this could be removed at other places.
+
+		if (con->conf.log_condition_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",  "run condition");
+		}
+		config_patch_connection(srv, con, COMP_SERVER_SOCKET); /* SERVERsocket */
+
+		/**
+		 * prepare strings
+		 *
+		 * - uri.path_raw
+		 * - uri.path (secure)
+		 * - uri.query
+		 *
+		 */
+
+		/**
+		 * Name according to RFC 2396
+		 *
+		 * - scheme
+		 * - authority
+		 * - path
+		 * - query
+		 *
+		 * (scheme)://(authority)(path)?(query)#fragment
+		 *
+		 *
+		 */
+
+		buffer_copy_string(con->uri.scheme, con->conf.is_ssl ? "https" : "http");
+		buffer_copy_string_buffer(con->uri.authority, con->request.http_host);
+		buffer_to_lower(con->uri.authority);
+
+		config_patch_connection(srv, con, COMP_HTTP_SCHEME);    /* Scheme:      */
+		config_patch_connection(srv, con, COMP_HTTP_HOST);      /* Host:        */
+		config_patch_connection(srv, con, COMP_HTTP_REMOTE_IP); /* Client-IP */
+		config_patch_connection(srv, con, COMP_HTTP_REFERER);   /* Referer:     */
+		config_patch_connection(srv, con, COMP_HTTP_USER_AGENT);/* User-Agent:  */
+		config_patch_connection(srv, con, COMP_HTTP_COOKIE);    /* Cookie:  */
+		config_patch_connection(srv, con, COMP_HTTP_REQUEST_METHOD); /* REQUEST_METHOD */
+
+		/** their might be a fragment which has to be cut away */
+		if (NULL != (qstr = strchr(con->request.uri->ptr, '#'))) {
+			con->request.uri->used = qstr - con->request.uri->ptr;
+			con->request.uri->ptr[con->request.uri->used++] = '\0';
+		}
+
+		/** extract query string from request.uri */
+		if (NULL != (qstr = strchr(con->request.uri->ptr, '?'))) {
+			buffer_copy_string    (con->uri.query, qstr + 1);
+			buffer_copy_string_len(con->uri.path_raw, con->request.uri->ptr, qstr - con->request.uri->ptr);
+		} else {
+			buffer_reset     (con->uri.query);
+			buffer_copy_string_buffer(con->uri.path_raw, con->request.uri);
+		}
+
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",  "-- splitting Request-URI");
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Request-URI  : ", con->request.uri);
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "URI-scheme   : ", con->uri.scheme);
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "URI-authority: ", con->uri.authority);
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "URI-path     : ", con->uri.path_raw);
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "URI-query    : ", con->uri.query);
+		}
+
+		/* disable keep-alive if requested */
+
+		if (con->request_count > con->conf.max_keep_alive_requests) {
+			con->keep_alive = 0;
+		}
+
+
+		/**
+		 *
+		 * call plugins
+		 *
+		 * - based on the raw URL
+		 *
+		 */
+
+		switch(r = plugins_call_handle_uri_raw(srv, con)) {
+		case HANDLER_GO_ON:
+			break;
+		case HANDLER_FINISHED:
+		case HANDLER_COMEBACK:
+		case HANDLER_WAIT_FOR_EVENT:
+		case HANDLER_ERROR:
+			return r;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "sd", "handle_uri_raw: unknown return value", r);
+			break;
+		}
+
+		/* build filename
+		 *
+		 * - decode url-encodings  (e.g. %20 -> ' ')
+		 * - remove path-modifiers (e.g. /../)
+		 */
+
+
+
+		if (con->request.http_method == HTTP_METHOD_OPTIONS &&
+		    con->uri.path_raw->ptr[0] == '*' && con->uri.path_raw->ptr[1] == '\0') {
+			/* OPTIONS * ... */
+			buffer_copy_string_buffer(con->uri.path, con->uri.path_raw);
+		} else {
+			buffer_copy_string_buffer(srv->tmp_buf, con->uri.path_raw);
+			buffer_urldecode_path(srv->tmp_buf);
+			buffer_path_simplify(con->uri.path, srv->tmp_buf);
+		}
+
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",  "-- sanatising URI");
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "URI-path     : ", con->uri.path);
+		}
+
+		/**
+		 *
+		 * call plugins
+		 *
+		 * - based on the clean URL
+		 *
+		 */
+
+		config_patch_connection(srv, con, COMP_HTTP_URL); /* HTTPurl */
+		config_patch_connection(srv, con, COMP_HTTP_QUERY_STRING); /* HTTPqs */
+
+		/* do we have to downgrade to 1.0 ? */
+		if (!con->conf.allow_http11) {
+			con->request.http_version = HTTP_VERSION_1_0;
+		}
+
+		switch(r = plugins_call_handle_uri_clean(srv, con)) {
+		case HANDLER_GO_ON:
+			break;
+		case HANDLER_FINISHED:
+		case HANDLER_COMEBACK:
+		case HANDLER_WAIT_FOR_EVENT:
+		case HANDLER_ERROR:
+			return r;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "");
+			break;
+		}
+
+		if (con->request.http_method == HTTP_METHOD_OPTIONS &&
+		    con->uri.path->ptr[0] == '*' && con->uri.path_raw->ptr[1] == '\0') {
+			/* option requests are handled directly without checking of the path */
+
+			response_header_insert(srv, con, CONST_STR_LEN("Allow"), CONST_STR_LEN("OPTIONS, GET, HEAD, POST"));
+
+			con->http_status = 200;
+			con->file_finished = 1;
+
+			return HANDLER_FINISHED;
+		}
+
+		/***
+		 *
+		 * border
+		 *
+		 * logical filename (URI) becomes a physical filename here
+		 *
+		 *
+		 *
+		 */
+
+
+
+
+		/* 1. stat()
+		 * ... ISREG() -> ok, go on
+		 * ... ISDIR() -> index-file -> redirect
+		 *
+		 * 2. pathinfo()
+		 * ... ISREG()
+		 *
+		 * 3. -> 404
+		 *
+		 */
+
+		/*
+		 * SEARCH DOCUMENT ROOT
+		 */
+
+		/* set a default */
+
+		buffer_copy_string_buffer(con->physical.doc_root, con->conf.document_root);
+		buffer_copy_string_buffer(con->physical.rel_path, con->uri.path);
+
+#if defined(__WIN32) || defined(__CYGWIN__)
+		/* strip dots from the end and spaces
+		 *
+		 * windows/dos handle those filenames as the same file
+		 *
+		 * foo == foo. == foo..... == "foo...   " == "foo..  ./"
+		 *
+		 * This will affect in some cases PATHINFO
+		 *
+		 * on native windows we could prepend the filename with \\?\ to circumvent
+		 * this behaviour. I have no idea how to push this through cygwin
+		 *
+		 * */
+
+		if (con->physical.rel_path->used > 1) {
+			buffer *b = con->physical.rel_path;
+			size_t i;
+
+			if (b->used > 2 &&
+			    b->ptr[b->used-2] == '/' &&
+			    (b->ptr[b->used-3] == ' ' ||
+			     b->ptr[b->used-3] == '.')) {
+				b->ptr[b->used--] = '\0';
+			}
+
+			for (i = b->used - 2; b->used > 1; i--) {
+				if (b->ptr[i] == ' ' ||
+				    b->ptr[i] == '.') {
+					b->ptr[b->used--] = '\0';
+				} else {
+					break;
+				}
+			}
+		}
+#endif
+
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",  "-- before doc_root");
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Doc-Root     :", con->physical.doc_root);
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Rel-Path     :", con->physical.rel_path);
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+		}
+		/* the docroot plugin should set the doc_root and might also set the physical.path
+		 * for us (all vhost-plugins are supposed to set the doc_root)
+		 * */
+		switch(r = plugins_call_handle_docroot(srv, con)) {
+		case HANDLER_GO_ON:
+			break;
+		case HANDLER_FINISHED:
+		case HANDLER_COMEBACK:
+		case HANDLER_WAIT_FOR_EVENT:
+		case HANDLER_ERROR:
+			return r;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "");
+			break;
+		}
+
+		/* MacOS X and Windows can't distiguish between upper and lower-case
+		 *
+		 * convert to lower-case
+		 */
+		if (con->conf.force_lowercase_filenames) {
+			buffer_to_lower(con->physical.rel_path);
+		}
+
+		/* the docroot plugins might set the servername, if they don't we take http-host */
+		if (buffer_is_empty(con->server_name)) {
+			buffer_copy_string_buffer(con->server_name, con->uri.authority);
+		}
+
+		/**
+		 * create physical filename
+		 * -> physical.path = docroot + rel_path
+		 *
+		 */
+
+		buffer_copy_string_buffer(con->physical.path, con->physical.doc_root);
+		BUFFER_APPEND_SLASH(con->physical.path);
+		buffer_copy_string_buffer(con->physical.basedir, con->physical.path);
+		if (con->physical.rel_path->used &&
+		    con->physical.rel_path->ptr[0] == '/') {
+			buffer_append_string_len(con->physical.path, con->physical.rel_path->ptr + 1, con->physical.rel_path->used - 2);
+		} else {
+			buffer_append_string_buffer(con->physical.path, con->physical.rel_path);
+		}
+
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",  "-- after doc_root");
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Doc-Root     :", con->physical.doc_root);
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Rel-Path     :", con->physical.rel_path);
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+		}
+
+		switch(r = plugins_call_handle_physical(srv, con)) {
+		case HANDLER_GO_ON:
+			break;
+		case HANDLER_FINISHED:
+		case HANDLER_COMEBACK:
+		case HANDLER_WAIT_FOR_EVENT:
+		case HANDLER_ERROR:
+			return r;
+		default:
+			log_error_write(srv, __FILE__, __LINE__, "");
+			break;
+		}
+
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",  "-- logical -> physical");
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Doc-Root     :", con->physical.doc_root);
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Rel-Path     :", con->physical.rel_path);
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+		}
+	}
+
+	/*
+	 * Noone catched away the file from normal path of execution yet (like mod_access)
+	 *
+	 * Go on and check of the file exists at all
+	 */
+
+	if (con->mode == DIRECT) {
+		char *slash = NULL;
+		char *pathinfo = NULL;
+		int found = 0;
+		stat_cache_entry *sce = NULL;
+
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",  "-- handling physical path");
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+		}
+
+		if (HANDLER_ERROR != stat_cache_get_entry(srv, con, con->physical.path, &sce)) {
+			/* file exists */
+
+			if (con->conf.log_request_handling) {
+				log_error_write(srv, __FILE__, __LINE__,  "s",  "-- file found");
+				log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+			}
+#ifdef HAVE_LSTAT
+			if ((sce->is_symlink != 0) && !con->conf.follow_symlink) {
+				con->http_status = 403;
+
+				if (con->conf.log_request_handling) {
+					log_error_write(srv, __FILE__, __LINE__,  "s",  "-- access denied due symlink restriction");
+					log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+				}
+
+				buffer_reset(con->physical.path);
+				return HANDLER_FINISHED;
+			};
+#endif
+			if (S_ISDIR(sce->st.st_mode)) {
+				if (con->physical.path->ptr[con->physical.path->used - 2] != '/') {
+					/* redirect to .../ */
+
+					http_response_redirect_to_directory(srv, con);
+
+					return HANDLER_FINISHED;
+				}
+#ifdef HAVE_LSTAT
+			} else if (!S_ISREG(sce->st.st_mode) && !sce->is_symlink) {
+#else
+			} else if (!S_ISREG(sce->st.st_mode)) {
+#endif
+				/* any special handling of non-reg files ?*/
+
+
+			}
+		} else {
+			switch (errno) {
+			case EACCES:
+				con->http_status = 403;
+
+				if (con->conf.log_request_handling) {
+					log_error_write(srv, __FILE__, __LINE__,  "s",  "-- access denied");
+					log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+				}
+
+				buffer_reset(con->physical.path);
+				return HANDLER_FINISHED;
+			case ENOENT:
+				con->http_status = 404;
+
+				if (con->conf.log_request_handling) {
+					log_error_write(srv, __FILE__, __LINE__,  "s",  "-- file not found");
+					log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+				}
+
+				buffer_reset(con->physical.path);
+				return HANDLER_FINISHED;
+			case ENOTDIR:
+				/* PATH_INFO ! :) */
+				break;
+			default:
+				/* we have no idea what happend. let's tell the user so. */
+				con->http_status = 500;
+				buffer_reset(con->physical.path);
+
+				log_error_write(srv, __FILE__, __LINE__, "ssbsb",
+						"file not found ... or so: ", strerror(errno),
+						con->uri.path,
+						"->", con->physical.path);
+
+				return HANDLER_FINISHED;
+			}
+
+			/* not found, perhaps PATHINFO */
+
+			buffer_copy_string_buffer(srv->tmp_buf, con->physical.path);
+
+			do {
+				if (slash) {
+					buffer_copy_string_len(con->physical.path, srv->tmp_buf->ptr, slash - srv->tmp_buf->ptr);
+				} else {
+					buffer_copy_string_buffer(con->physical.path, srv->tmp_buf);
+				}
+
+				if (HANDLER_ERROR != stat_cache_get_entry(srv, con, con->physical.path, &sce)) {
+					found = S_ISREG(sce->st.st_mode);
+					break;
+				}
+
+				if (pathinfo != NULL) {
+					*pathinfo = '\0';
+				}
+				slash = strrchr(srv->tmp_buf->ptr, '/');
+
+				if (pathinfo != NULL) {
+					/* restore '/' */
+					*pathinfo = '/';
+				}
+
+				if (slash) pathinfo = slash;
+			} while ((found == 0) && (slash != NULL) && ((size_t)(slash - srv->tmp_buf->ptr) > (con->physical.basedir->used - 2)));
+
+			if (found == 0) {
+				/* no it really doesn't exists */
+				con->http_status = 404;
+
+				if (con->conf.log_file_not_found) {
+					log_error_write(srv, __FILE__, __LINE__, "sbsb",
+							"file not found:", con->uri.path,
+							"->", con->physical.path);
+				}
+
+				buffer_reset(con->physical.path);
+
+				return HANDLER_FINISHED;
+			}
+
+#ifdef HAVE_LSTAT
+			if ((sce->is_symlink != 0) && !con->conf.follow_symlink) {
+				con->http_status = 403;
+
+				if (con->conf.log_request_handling) {
+					log_error_write(srv, __FILE__, __LINE__,  "s",  "-- access denied due symlink restriction");
+					log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+				}
+
+				buffer_reset(con->physical.path);
+				return HANDLER_FINISHED;
+			};
+#endif
+
+			/* we have a PATHINFO */
+			if (pathinfo) {
+				buffer_copy_string(con->request.pathinfo, pathinfo);
+
+				/*
+				 * shorten uri.path
+				 */
+
+				con->uri.path->used -= strlen(pathinfo);
+				con->uri.path->ptr[con->uri.path->used - 1] = '\0';
+			}
+
+			if (con->conf.log_request_handling) {
+				log_error_write(srv, __FILE__, __LINE__,  "s",  "-- after pathinfo check");
+				log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+				log_error_write(srv, __FILE__, __LINE__,  "sb", "URI          :", con->uri.path);
+				log_error_write(srv, __FILE__, __LINE__,  "sb", "Pathinfo     :", con->request.pathinfo);
+			}
+		}
+
+		if (con->conf.log_request_handling) {
+			log_error_write(srv, __FILE__, __LINE__,  "s",  "-- handling subrequest");
+			log_error_write(srv, __FILE__, __LINE__,  "sb", "Path         :", con->physical.path);
+		}
+
+		/* call the handlers */
+		switch(r = plugins_call_handle_subrequest_start(srv, con)) {
+		case HANDLER_GO_ON:
+			/* request was not handled */
+			break;
+		case HANDLER_FINISHED:
+		default:
+			if (con->conf.log_request_handling) {
+				log_error_write(srv, __FILE__, __LINE__,  "s",  "-- subrequest finished");
+			}
+
+			/* something strange happend */
+			return r;
+		}
+
+		/* if we are still here, no one wanted the file, status 403 is ok I think */
+
+		if (con->mode == DIRECT && con->http_status == 0) {
+			switch (con->request.http_method) {
+			case HTTP_METHOD_OPTIONS:
+				con->http_status = 200;
+				break;
+			default:
+				con->http_status = 403;
+			}
+
+			return HANDLER_FINISHED;
+		}
+
+	}
+
+	switch(r = plugins_call_handle_subrequest(srv, con)) {
+	case HANDLER_GO_ON:
+		/* request was not handled, looks like we are done */
+		return HANDLER_FINISHED;
+	case HANDLER_FINISHED:
+		/* request is finished */
+	default:
+		/* something strange happend */
+		return r;
+	}
+
+	/* can't happen */
+	return HANDLER_COMEBACK;
+}
+
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/response.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/response.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/response.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,19 @@
+#ifndef _RESPONSE_H_
+#define _RESPONSE_H_
+
+#include <time.h>
+
+#include "server.h"
+
+int http_response_parse(server *srv, connection *con);
+int http_response_write_header(server *srv, connection *con);
+
+int response_header_insert(server *srv, connection *con, const char *key, size_t keylen, const char *value, size_t vallen);
+int response_header_overwrite(server *srv, connection *con, const char *key, size_t keylen, const char *value, size_t vallen);
+
+handler_t http_response_prepare(server *srv, connection *con);
+int http_response_redirect_to_directory(server *srv, connection *con);
+int http_response_handle_cachable(server *srv, connection *con, buffer * mtime);
+
+buffer * strftime_cache_get(server *srv, time_t last_mod);
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/server.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/server.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/server.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,1493 @@
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <time.h>
+#include <signal.h>
+#include <assert.h>
+#include <locale.h>
+
+#include <stdio.h>
+
+#include "server.h"
+#include "buffer.h"
+#include "network.h"
+#include "log.h"
+#include "keyvalue.h"
+#include "response.h"
+#include "request.h"
+#include "chunk.h"
+#include "http_chunk.h"
+#include "fdevent.h"
+#include "connections.h"
+#include "stat_cache.h"
+#include "plugin.h"
+#include "joblist.h"
+#include "network_backends.h"
+
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
+#ifdef HAVE_VALGRIND_VALGRIND_H
+#include <valgrind/valgrind.h>
+#endif
+
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+#ifdef HAVE_PWD_H
+#include <grp.h>
+#include <pwd.h>
+#endif
+
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
+
+#ifdef HAVE_SYS_PRCTL_H
+#include <sys/prctl.h>
+#endif
+
+#ifdef USE_OPENSSL
+# include <openssl/err.h> 
+#endif
+
+#ifndef __sgi
+/* IRIX doesn't like the alarm based time() optimization */
+/* #define USE_ALARM */
+#endif
+
+static volatile sig_atomic_t srv_shutdown = 0;
+static volatile sig_atomic_t graceful_shutdown = 0;
+static volatile sig_atomic_t handle_sig_alarm = 1;
+static volatile sig_atomic_t handle_sig_hup = 0;
+static volatile sig_atomic_t forwarded_sig_hup = 0;
+
+#if defined(HAVE_SIGACTION) && defined(SA_SIGINFO)
+static volatile siginfo_t last_sigterm_info;
+static volatile siginfo_t last_sighup_info;
+
+static void sigaction_handler(int sig, siginfo_t *si, void *context) {
+	UNUSED(context);
+
+	switch (sig) {
+	case SIGTERM:
+		srv_shutdown = 1;
+		memcpy(&last_sigterm_info, si, sizeof(*si));
+		break;
+	case SIGINT:
+		if (graceful_shutdown) {
+			srv_shutdown = 1;
+		} else {
+			graceful_shutdown = 1;
+		}
+		memcpy(&last_sigterm_info, si, sizeof(*si));
+
+		break;
+	case SIGALRM: 
+		handle_sig_alarm = 1; 
+		break;
+	case SIGHUP:
+		/** 
+		 * we send the SIGHUP to all procs in the process-group
+		 * this includes ourself
+		 * 
+		 * make sure we only send it once and don't create a 
+		 * infinite loop
+		 */
+		if (!forwarded_sig_hup) {
+			handle_sig_hup = 1;
+			memcpy(&last_sighup_info, si, sizeof(*si));
+		} else {
+			forwarded_sig_hup = 0;
+		}
+		break;
+	case SIGCHLD:
+		break;
+	}
+}
+#elif defined(HAVE_SIGNAL) || defined(HAVE_SIGACTION)
+static void signal_handler(int sig) {
+	switch (sig) {
+	case SIGTERM: srv_shutdown = 1; break;
+	case SIGINT:
+	     if (graceful_shutdown) srv_shutdown = 1;
+	     else graceful_shutdown = 1;
+
+	     break;
+	case SIGALRM: handle_sig_alarm = 1; break;
+	case SIGHUP:  handle_sig_hup = 1; break;
+	case SIGCHLD:  break;
+	}
+}
+#endif
+
+#ifdef HAVE_FORK
+static void daemonize(void) {
+#ifdef SIGTTOU
+	signal(SIGTTOU, SIG_IGN);
+#endif
+#ifdef SIGTTIN
+	signal(SIGTTIN, SIG_IGN);
+#endif
+#ifdef SIGTSTP
+	signal(SIGTSTP, SIG_IGN);
+#endif
+	if (0 != fork()) exit(0);
+
+	if (-1 == setsid()) exit(0);
+
+	signal(SIGHUP, SIG_IGN);
+
+	if (0 != fork()) exit(0);
+
+	if (0 != chdir("/")) exit(0);
+}
+#endif
+
+static server *server_init(void) {
+	int i;
+
+	server *srv = calloc(1, sizeof(*srv));
+	assert(srv);
+#define CLEAN(x) \
+	srv->x = buffer_init();
+
+	CLEAN(response_header);
+	CLEAN(parse_full_path);
+	CLEAN(ts_debug_str);
+	CLEAN(ts_date_str);
+	CLEAN(errorlog_buf);
+	CLEAN(response_range);
+	CLEAN(tmp_buf);
+	srv->empty_string = buffer_init_string("");
+	CLEAN(cond_check_buf);
+
+	CLEAN(srvconf.errorlog_file);
+	CLEAN(srvconf.groupname);
+	CLEAN(srvconf.username);
+	CLEAN(srvconf.changeroot);
+	CLEAN(srvconf.bindhost);
+	CLEAN(srvconf.event_handler);
+	CLEAN(srvconf.pid_file);
+
+	CLEAN(tmp_chunk_len);
+#undef CLEAN
+
+#define CLEAN(x) \
+	srv->x = array_init();
+
+	CLEAN(config_context);
+	CLEAN(config_touched);
+	CLEAN(status);
+#undef CLEAN
+
+	for (i = 0; i < FILE_CACHE_MAX; i++) {
+		srv->mtime_cache[i].mtime = (time_t)-1;
+		srv->mtime_cache[i].str = buffer_init();
+	}
+
+	srv->cur_ts = time(NULL);
+	srv->startup_ts = srv->cur_ts;
+
+	srv->conns = calloc(1, sizeof(*srv->conns));
+	assert(srv->conns);
+
+	srv->joblist = calloc(1, sizeof(*srv->joblist));
+	assert(srv->joblist);
+
+	srv->fdwaitqueue = calloc(1, sizeof(*srv->fdwaitqueue));
+	assert(srv->fdwaitqueue);
+
+	srv->srvconf.modules = array_init();
+	srv->srvconf.modules_dir = buffer_init_string(LIBRARY_DIR);
+	srv->srvconf.network_backend = buffer_init();
+	srv->srvconf.upload_tempdirs = array_init();
+
+	/* use syslog */
+	srv->errorlog_fd = -1;
+	srv->errorlog_mode = ERRORLOG_STDERR;
+
+	srv->split_vals = array_init();
+
+	return srv;
+}
+
+static void server_free(server *srv) {
+	size_t i;
+
+	for (i = 0; i < FILE_CACHE_MAX; i++) {
+		buffer_free(srv->mtime_cache[i].str);
+	}
+
+#define CLEAN(x) \
+	buffer_free(srv->x);
+
+	CLEAN(response_header);
+	CLEAN(parse_full_path);
+	CLEAN(ts_debug_str);
+	CLEAN(ts_date_str);
+	CLEAN(errorlog_buf);
+	CLEAN(response_range);
+	CLEAN(tmp_buf);
+	CLEAN(empty_string);
+	CLEAN(cond_check_buf);
+
+	CLEAN(srvconf.errorlog_file);
+	CLEAN(srvconf.groupname);
+	CLEAN(srvconf.username);
+	CLEAN(srvconf.changeroot);
+	CLEAN(srvconf.bindhost);
+	CLEAN(srvconf.event_handler);
+	CLEAN(srvconf.pid_file);
+	CLEAN(srvconf.modules_dir);
+	CLEAN(srvconf.network_backend);
+
+	CLEAN(tmp_chunk_len);
+#undef CLEAN
+
+#if 0
+	fdevent_unregister(srv->ev, srv->fd);
+#endif
+	fdevent_free(srv->ev);
+
+	free(srv->conns);
+
+	if (srv->config_storage) {
+		for (i = 0; i < srv->config_context->used; i++) {
+			specific_config *s = srv->config_storage[i];
+
+			if (!s) continue;
+
+			buffer_free(s->document_root);
+			buffer_free(s->server_name);
+			buffer_free(s->server_tag);
+			buffer_free(s->ssl_pemfile);
+			buffer_free(s->ssl_ca_file);
+			buffer_free(s->ssl_cipher_list);
+			buffer_free(s->error_handler);
+			buffer_free(s->errorfile_prefix);
+			array_free(s->mimetypes);
+#ifdef USE_OPENSSL
+			SSL_CTX_free(s->ssl_ctx);
+#endif
+			free(s);
+		}
+		free(srv->config_storage);
+		srv->config_storage = NULL;
+	}
+
+#define CLEAN(x) \
+	array_free(srv->x);
+
+	CLEAN(config_context);
+	CLEAN(config_touched);
+	CLEAN(status);
+	CLEAN(srvconf.upload_tempdirs);
+#undef CLEAN
+
+	joblist_free(srv, srv->joblist);
+	fdwaitqueue_free(srv, srv->fdwaitqueue);
+
+	if (srv->stat_cache) {
+		stat_cache_free(srv->stat_cache);
+	}
+
+	array_free(srv->srvconf.modules);
+	array_free(srv->split_vals);
+
+#ifdef USE_OPENSSL
+	if (srv->ssl_is_init) {
+		CRYPTO_cleanup_all_ex_data();
+		ERR_free_strings();
+		ERR_remove_state(0);
+		EVP_cleanup();
+	}
+#endif
+
+	free(srv);
+}
+
+static void show_version (void) {
+#ifdef USE_OPENSSL
+# define TEXT_SSL " (ssl)"
+#else
+# define TEXT_SSL
+#endif
+	char *b = PACKAGE_NAME "-" PACKAGE_VERSION TEXT_SSL \
+" - a light and fast webserver\n" \
+"Build-Date: " __DATE__ " " __TIME__ "\n";
+;
+#undef TEXT_SSL
+	write(STDOUT_FILENO, b, strlen(b));
+}
+
+static void show_features (void) {
+  const char features[] = ""
+#ifdef USE_SELECT
+      "\t+ select (generic)\n"
+#else
+      "\t- select (generic)\n"
+#endif
+#ifdef USE_POLL
+      "\t+ poll (Unix)\n"
+#else
+      "\t- poll (Unix)\n"
+#endif
+#ifdef USE_LINUX_SIGIO
+      "\t+ rt-signals (Linux 2.4+)\n"
+#else
+      "\t- rt-signals (Linux 2.4+)\n"
+#endif
+#ifdef USE_LINUX_EPOLL
+      "\t+ epoll (Linux 2.6)\n"
+#else
+      "\t- epoll (Linux 2.6)\n"
+#endif
+#ifdef USE_SOLARIS_DEVPOLL
+      "\t+ /dev/poll (Solaris)\n"
+#else
+      "\t- /dev/poll (Solaris)\n"
+#endif
+#ifdef USE_FREEBSD_KQUEUE
+      "\t+ kqueue (FreeBSD)\n"
+#else
+      "\t- kqueue (FreeBSD)\n"
+#endif
+      "\nNetwork handler:\n\n"
+#if defined(USE_LINUX_SENDFILE) || defined(USE_FREEBSD_SENDFILE) || defined(USE_SOLARIS_SENDFILEV) || defined(USE_AIX_SENDFILE)
+      "\t+ sendfile\n"
+#else
+  #ifdef USE_WRITEV
+      "\t+ writev\n"
+  #else
+      "\t+ write\n"
+  #endif
+  #ifdef USE_MMAP
+      "\t+ mmap support\n"
+  #else
+      "\t- mmap support\n"
+  #endif
+#endif
+      "\nFeatures:\n\n"
+#ifdef HAVE_IPV6
+      "\t+ IPv6 support\n"
+#else
+      "\t- IPv6 support\n"
+#endif
+#if defined HAVE_ZLIB_H && defined HAVE_LIBZ
+      "\t+ zlib support\n"
+#else
+      "\t- zlib support\n"
+#endif
+#if defined HAVE_BZLIB_H && defined HAVE_LIBBZ2
+      "\t+ bzip2 support\n"
+#else
+      "\t- bzip2 support\n"
+#endif
+#ifdef HAVE_LIBCRYPT
+      "\t+ crypt support\n"
+#else
+      "\t- crypt support\n"
+#endif
+#ifdef USE_OPENSSL
+      "\t+ SSL Support\n"
+#else
+      "\t- SSL Support\n"
+#endif
+#ifdef HAVE_LIBPCRE
+      "\t+ PCRE support\n"
+#else
+      "\t- PCRE support\n"
+#endif
+#ifdef HAVE_MYSQL
+      "\t+ mySQL support\n"
+#else
+      "\t- mySQL support\n"
+#endif
+#if defined(HAVE_LDAP_H) && defined(HAVE_LBER_H) && defined(HAVE_LIBLDAP) && defined(HAVE_LIBLBER)
+      "\t+ LDAP support\n"
+#else
+      "\t- LDAP support\n"
+#endif
+#ifdef HAVE_MEMCACHE_H
+      "\t+ memcached support\n"
+#else
+      "\t- memcached support\n"
+#endif
+#ifdef HAVE_FAM_H
+      "\t+ FAM support\n"
+#else
+      "\t- FAM support\n"
+#endif
+#ifdef HAVE_LUA_H
+      "\t+ LUA support\n"
+#else
+      "\t- LUA support\n"
+#endif
+#ifdef HAVE_LIBXML_H
+      "\t+ xml support\n"
+#else
+      "\t- xml support\n"
+#endif
+#ifdef HAVE_SQLITE3_H
+      "\t+ SQLite support\n"
+#else
+      "\t- SQLite support\n"
+#endif
+#ifdef HAVE_GDBM_H
+      "\t+ GDBM support\n"
+#else
+      "\t- GDBM support\n"
+#endif
+      "\n";
+  show_version();
+  printf("\nEvent Handlers:\n\n%s", features);
+}
+
+static void show_help (void) {
+#ifdef USE_OPENSSL
+# define TEXT_SSL " (ssl)"
+#else
+# define TEXT_SSL
+#endif
+	char *b = PACKAGE_NAME "-" PACKAGE_VERSION TEXT_SSL " ("__DATE__ " " __TIME__ ")" \
+" - a light and fast webserver\n" \
+"usage:\n" \
+" -f <name>  filename of the config-file\n" \
+" -m <name>  module directory (default: "LIBRARY_DIR")\n" \
+" -p         print the parsed config-file in internal form, and exit\n" \
+" -t         test the config-file, and exit\n" \
+" -D         don't go to background (default: go to background)\n" \
+" -v         show version\n" \
+" -V         show compile-time features\n" \
+" -h         show this help\n" \
+"\n"
+;
+#undef TEXT_SSL
+#undef TEXT_IPV6
+	write(STDOUT_FILENO, b, strlen(b));
+}
+
+int main (int argc, char **argv) {
+	server *srv = NULL;
+	int print_config = 0;
+	int test_config = 0;
+	int i_am_root;
+	int o;
+	int num_childs = 0;
+	int pid_fd = -1, fd;
+	size_t i;
+#ifdef HAVE_SIGACTION
+	struct sigaction act;
+#endif
+#ifdef HAVE_GETRLIMIT
+	struct rlimit rlim;
+#endif
+
+#ifdef USE_ALARM
+	struct itimerval interval;
+
+	interval.it_interval.tv_sec = 1;
+	interval.it_interval.tv_usec = 0;
+	interval.it_value.tv_sec = 1;
+	interval.it_value.tv_usec = 0;
+#endif
+
+
+	/* for nice %b handling in strfime() */
+	setlocale(LC_TIME, "C");
+
+	if (NULL == (srv = server_init())) {
+		fprintf(stderr, "did this really happen?\n");
+		return -1;
+	}
+
+	/* init structs done */
+
+	srv->srvconf.port = 0;
+#ifdef HAVE_GETUID
+	i_am_root = (getuid() == 0);
+#else
+	i_am_root = 0;
+#endif
+	srv->srvconf.dont_daemonize = 0;
+
+	while(-1 != (o = getopt(argc, argv, "f:m:hvVDpt"))) {
+		switch(o) {
+		case 'f':
+			if (config_read(srv, optarg)) {
+				server_free(srv);
+				return -1;
+			}
+			break;
+		case 'm':
+			buffer_copy_string(srv->srvconf.modules_dir, optarg);
+			break;
+		case 'p': print_config = 1; break;
+		case 't': test_config = 1; break;
+		case 'D': srv->srvconf.dont_daemonize = 1; break;
+		case 'v': show_version(); return 0;
+		case 'V': show_features(); return 0;
+		case 'h': show_help(); return 0;
+		default:
+			show_help();
+			server_free(srv);
+			return -1;
+		}
+	}
+
+	if (!srv->config_storage) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"No configuration available. Try using -f option.");
+
+		server_free(srv);
+		return -1;
+	}
+
+	if (print_config) {
+		data_unset *dc = srv->config_context->data[0];
+		if (dc) {
+			dc->print(dc, 0);
+			fprintf(stdout, "\n");
+		} else {
+			/* shouldn't happend */
+			fprintf(stderr, "global config not found\n");
+		}
+	}
+
+	if (test_config) {
+		printf("Syntax OK\n");
+	}
+
+	if (test_config || print_config) {
+		server_free(srv);
+		return 0;
+	}
+
+	/* close stdin and stdout, as they are not needed */
+	/* move stdin to /dev/null */
+	if (-1 != (fd = open("/dev/null", O_RDONLY))) {
+		close(STDIN_FILENO);
+		dup2(fd, STDIN_FILENO);
+		close(fd);
+	}
+
+	/* move stdout to /dev/null */
+	if (-1 != (fd = open("/dev/null", O_WRONLY))) {
+		close(STDOUT_FILENO);
+		dup2(fd, STDOUT_FILENO);
+		close(fd);
+	}
+
+	if (0 != config_set_defaults(srv)) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"setting default values failed");
+		server_free(srv);
+		return -1;
+	}
+
+	/* UID handling */
+#ifdef HAVE_GETUID
+	if (!i_am_root && (geteuid() == 0 || getegid() == 0)) {
+		/* we are setuid-root */
+
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"Are you nuts ? Don't apply a SUID bit to this binary");
+
+		server_free(srv);
+		return -1;
+	}
+#endif
+
+	/* check document-root */
+	if (srv->config_storage[0]->document_root->used <= 1) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"document-root is not set\n");
+
+		server_free(srv);
+
+		return -1;
+	}
+
+	if (plugins_load(srv)) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"loading plugins finally failed");
+
+		plugins_free(srv);
+		server_free(srv);
+
+		return -1;
+	}
+
+	/* open pid file BEFORE chroot */
+	if (srv->srvconf.pid_file->used) {
+		if (-1 == (pid_fd = open(srv->srvconf.pid_file->ptr, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH))) {
+			struct stat st;
+			if (errno != EEXIST) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs",
+					"opening pid-file failed:", srv->srvconf.pid_file, strerror(errno));
+				return -1;
+			}
+
+			if (0 != stat(srv->srvconf.pid_file->ptr, &st)) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs",
+						"stating existing pid-file failed:", srv->srvconf.pid_file, strerror(errno));
+			}
+
+			if (!S_ISREG(st.st_mode)) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"pid-file exists and isn't regular file:", srv->srvconf.pid_file);
+				return -1;
+			}
+
+			if (-1 == (pid_fd = open(srv->srvconf.pid_file->ptr, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH))) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs",
+						"opening pid-file failed:", srv->srvconf.pid_file, strerror(errno));
+				return -1;
+			}
+		}
+	}
+
+	if (srv->event_handler == FDEVENT_HANDLER_SELECT) {
+		/* select limits itself
+		 *
+		 * as it is a hard limit and will lead to a segfault we add some safety
+		 * */
+		srv->max_fds = FD_SETSIZE - 200;
+	} else {
+		srv->max_fds = 4096;
+	}
+
+	if (i_am_root) {
+		struct group *grp = NULL;
+		struct passwd *pwd = NULL;
+		int use_rlimit = 1;
+
+#ifdef HAVE_VALGRIND_VALGRIND_H
+		if (RUNNING_ON_VALGRIND) use_rlimit = 0;
+#endif
+
+#ifdef HAVE_GETRLIMIT
+		if (0 != getrlimit(RLIMIT_NOFILE, &rlim)) {
+			log_error_write(srv, __FILE__, __LINE__,
+					"ss", "couldn't get 'max filedescriptors'",
+					strerror(errno));
+			return -1;
+		}
+
+		if (use_rlimit && srv->srvconf.max_fds) {
+			/* set rlimits */
+
+			rlim.rlim_cur = srv->srvconf.max_fds;
+			rlim.rlim_max = srv->srvconf.max_fds;
+
+			if (0 != setrlimit(RLIMIT_NOFILE, &rlim)) {
+				log_error_write(srv, __FILE__, __LINE__,
+						"ss", "couldn't set 'max filedescriptors'",
+						strerror(errno));
+				return -1;
+			}
+		}
+
+		if (srv->event_handler == FDEVENT_HANDLER_SELECT) {
+			srv->max_fds = rlim.rlim_cur < FD_SETSIZE - 200 ? rlim.rlim_cur : FD_SETSIZE - 200;
+		} else {
+			srv->max_fds = rlim.rlim_cur;
+		}
+
+		/* set core file rlimit, if enable_cores is set */
+		if (use_rlimit && srv->srvconf.enable_cores && getrlimit(RLIMIT_CORE, &rlim) == 0) {
+			rlim.rlim_cur = rlim.rlim_max;
+			setrlimit(RLIMIT_CORE, &rlim);
+		}
+#endif
+		if (srv->event_handler == FDEVENT_HANDLER_SELECT) {
+			/* don't raise the limit above FD_SET_SIZE */
+			if (srv->max_fds > FD_SETSIZE - 200) {
+				log_error_write(srv, __FILE__, __LINE__, "sd",
+						"can't raise max filedescriptors above",  FD_SETSIZE - 200,
+						"if event-handler is 'select'. Use 'poll' or something else or reduce server.max-fds.");
+				return -1;
+			}
+		}
+
+
+#ifdef HAVE_PWD_H
+		/* set user and group */
+		if (srv->srvconf.username->used) {
+			if (NULL == (pwd = getpwnam(srv->srvconf.username->ptr))) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"can't find username", srv->srvconf.username);
+				return -1;
+			}
+
+			if (pwd->pw_uid == 0) {
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"I will not set uid to 0\n");
+				return -1;
+			}
+		}
+
+		if (srv->srvconf.groupname->used) {
+			if (NULL == (grp = getgrnam(srv->srvconf.groupname->ptr))) {
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+					"can't find groupname", srv->srvconf.groupname);
+				return -1;
+			}
+			if (grp->gr_gid == 0) {
+				log_error_write(srv, __FILE__, __LINE__, "s",
+						"I will not set gid to 0\n");
+				return -1;
+			}
+		}
+#endif
+		/* we need root-perms for port < 1024 */
+		if (0 != network_init(srv)) {
+			plugins_free(srv);
+			server_free(srv);
+
+			return -1;
+		}
+#ifdef HAVE_PWD_H
+		/* 
+		 * Change group before chroot, when we have access
+		 * to /etc/group
+		 * */
+		if (srv->srvconf.groupname->used) {
+			setgid(grp->gr_gid);
+			setgroups(0, NULL);
+			if (srv->srvconf.username->used) {
+				initgroups(srv->srvconf.username->ptr, grp->gr_gid);
+			}
+		}
+#endif
+#ifdef HAVE_CHROOT
+		if (srv->srvconf.changeroot->used) {
+			tzset();
+
+			if (-1 == chroot(srv->srvconf.changeroot->ptr)) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "chroot failed: ", strerror(errno));
+				return -1;
+			}
+			if (-1 == chdir("/")) {
+				log_error_write(srv, __FILE__, __LINE__, "ss", "chdir failed: ", strerror(errno));
+				return -1;
+			}
+		}
+#endif
+#ifdef HAVE_PWD_H
+		/* drop root privs */
+		if (srv->srvconf.username->used) {
+			setuid(pwd->pw_uid);
+		}
+#endif
+#if defined(HAVE_SYS_PRCTL_H) && defined(PR_SET_DUMPABLE)
+		/**
+		 * on IRIX 6.5.30 they have prctl() but no DUMPABLE
+		 */
+		if (srv->srvconf.enable_cores) {
+			prctl(PR_SET_DUMPABLE, 1, 0, 0, 0);
+		}
+#endif
+	} else {
+
+#ifdef HAVE_GETRLIMIT
+		if (0 != getrlimit(RLIMIT_NOFILE, &rlim)) {
+			log_error_write(srv, __FILE__, __LINE__,
+					"ss", "couldn't get 'max filedescriptors'",
+					strerror(errno));
+			return -1;
+		}
+
+		/**
+		 * we are not root can can't increase the fd-limit, but we can reduce it
+		 */
+		if (srv->srvconf.max_fds && srv->srvconf.max_fds < rlim.rlim_cur) {
+			/* set rlimits */
+
+			rlim.rlim_cur = srv->srvconf.max_fds;
+
+			if (0 != setrlimit(RLIMIT_NOFILE, &rlim)) {
+				log_error_write(srv, __FILE__, __LINE__,
+						"ss", "couldn't set 'max filedescriptors'",
+						strerror(errno));
+				return -1;
+			}
+		}
+
+		if (srv->event_handler == FDEVENT_HANDLER_SELECT) {
+			srv->max_fds = rlim.rlim_cur < FD_SETSIZE - 200 ? rlim.rlim_cur : FD_SETSIZE - 200;
+		} else {
+			srv->max_fds = rlim.rlim_cur;
+		}
+
+		/* set core file rlimit, if enable_cores is set */
+		if (srv->srvconf.enable_cores && getrlimit(RLIMIT_CORE, &rlim) == 0) {
+			rlim.rlim_cur = rlim.rlim_max;
+			setrlimit(RLIMIT_CORE, &rlim);
+		}
+
+#endif
+		if (srv->event_handler == FDEVENT_HANDLER_SELECT) {
+			/* don't raise the limit above FD_SET_SIZE */
+			if (srv->max_fds > FD_SETSIZE - 200) {
+				log_error_write(srv, __FILE__, __LINE__, "sd",
+						"can't raise max filedescriptors above",  FD_SETSIZE - 200,
+						"if event-handler is 'select'. Use 'poll' or something else or reduce server.max-fds.");
+				return -1;
+			}
+		}
+
+		if (0 != network_init(srv)) {
+			plugins_free(srv);
+			server_free(srv);
+
+			return -1;
+		}
+	}
+
+	/* set max-conns */
+	if (srv->srvconf.max_conns > srv->max_fds) {
+		/* we can't have more connections than max-fds */
+		srv->max_conns = srv->max_fds;
+	} else if (srv->srvconf.max_conns) {
+		/* otherwise respect the wishes of the user */
+		srv->max_conns = srv->srvconf.max_conns;
+	} else {
+		/* or use the default */
+		srv->max_conns = srv->max_fds;
+	}
+
+	if (HANDLER_GO_ON != plugins_call_init(srv)) {
+		log_error_write(srv, __FILE__, __LINE__, "s", "Initialization of plugins failed. Going down.");
+
+		plugins_free(srv);
+		network_close(srv);
+		server_free(srv);
+
+		return -1;
+	}
+
+#ifdef HAVE_FORK
+	/* network is up, let's deamonize ourself */
+	if (srv->srvconf.dont_daemonize == 0) daemonize();
+#endif
+
+	srv->gid = getgid();
+	srv->uid = getuid();
+
+	/* write pid file */
+	if (pid_fd != -1) {
+		buffer_copy_long(srv->tmp_buf, getpid());
+		buffer_append_string(srv->tmp_buf, "\n");
+		write(pid_fd, srv->tmp_buf->ptr, srv->tmp_buf->used - 1);
+		close(pid_fd);
+		pid_fd = -1;
+	}
+
+	// Close stderr ASAP in the child process to make sure that nothing
+	// is being written to that fd which may not be valid anymore.
+	if (-1 == log_error_open(srv)) {
+		log_error_write(srv, __FILE__, __LINE__, "s", "Opening errorlog failed. Going down.");
+
+		plugins_free(srv);
+		network_close(srv);
+		server_free(srv);
+		return -1;
+	}
+
+	if (HANDLER_GO_ON != plugins_call_set_defaults(srv)) {
+		log_error_write(srv, __FILE__, __LINE__, "s", "Configuration of plugins failed. Going down.");
+
+		plugins_free(srv);
+		network_close(srv);
+		server_free(srv);
+
+		return -1;
+	}
+
+	/* dump unused config-keys */
+	for (i = 0; i < srv->config_context->used; i++) {
+		array *config = ((data_config *)srv->config_context->data[i])->value;
+		size_t j;
+
+		for (j = 0; config && j < config->used; j++) {
+			data_unset *du = config->data[j];
+
+			/* all var.* is known as user defined variable */
+			if (strncmp(du->key->ptr, "var.", sizeof("var.") - 1) == 0) {
+				continue;
+			}
+
+			if (NULL == array_get_element(srv->config_touched, du->key->ptr)) {
+				log_error_write(srv, __FILE__, __LINE__, "sbs",
+						"WARNING: unknown config-key:",
+						du->key,
+						"(ignored)");
+			}
+		}
+	}
+
+	if (srv->config_unsupported) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"Configuration contains unsupported keys. Going down.");
+	}
+
+	if (srv->config_deprecated) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+				"Configuration contains deprecated keys. Going down.");
+	}
+
+	if (srv->config_unsupported || srv->config_deprecated) {
+		plugins_free(srv);
+		network_close(srv);
+		server_free(srv);
+
+		return -1;
+	}
+
+
+
+
+#ifdef HAVE_SIGACTION
+	memset(&act, 0, sizeof(act));
+	act.sa_handler = SIG_IGN;
+	sigaction(SIGPIPE, &act, NULL);
+	sigaction(SIGUSR1, &act, NULL);
+# if defined(SA_SIGINFO)
+	act.sa_sigaction = sigaction_handler;
+	sigemptyset(&act.sa_mask);
+	act.sa_flags = SA_SIGINFO;
+# else
+	act.sa_handler = signal_handler;
+	sigemptyset(&act.sa_mask);
+	act.sa_flags = 0;
+# endif
+	sigaction(SIGINT,  &act, NULL);
+	sigaction(SIGTERM, &act, NULL);
+	sigaction(SIGHUP,  &act, NULL);
+	sigaction(SIGALRM, &act, NULL);
+	sigaction(SIGCHLD, &act, NULL);
+
+#elif defined(HAVE_SIGNAL)
+	/* ignore the SIGPIPE from sendfile() */
+	signal(SIGPIPE, SIG_IGN);
+	signal(SIGUSR1, SIG_IGN);
+	signal(SIGALRM, signal_handler);
+	signal(SIGTERM, signal_handler);
+	signal(SIGHUP,  signal_handler);
+	signal(SIGCHLD,  signal_handler);
+	signal(SIGINT,  signal_handler);
+#endif
+
+#ifdef USE_ALARM
+	signal(SIGALRM, signal_handler);
+
+	/* setup periodic timer (1 second) */
+	if (setitimer(ITIMER_REAL, &interval, NULL)) {
+		log_error_write(srv, __FILE__, __LINE__, "s", "setting timer failed");
+		return -1;
+	}
+
+	getitimer(ITIMER_REAL, &interval);
+#endif
+
+#ifdef HAVE_FORK
+	/* start watcher and workers */
+	num_childs = srv->srvconf.max_worker;
+	if (num_childs > 0) {
+		int child = 0;
+		while (!child && !srv_shutdown && !graceful_shutdown) {
+			if (num_childs > 0) {
+				switch (fork()) {
+				case -1:
+					return -1;
+				case 0:
+					child = 1;
+					break;
+				default:
+					num_childs--;
+					break;
+				}
+			} else {
+				int status;
+
+				if (-1 != wait(&status)) {
+					/** 
+					 * one of our workers went away 
+					 */
+					num_childs++;
+				} else {
+					switch (errno) {
+					case EINTR:
+						/**
+						 * if we receive a SIGHUP we have to close our logs ourself as we don't 
+						 * have the mainloop who can help us here
+						 */
+						if (handle_sig_hup) {
+							handle_sig_hup = 0;
+
+							log_error_cycle(srv);
+
+							/**
+							 * forward to all procs in the process-group
+							 * 
+							 * we also send it ourself
+							 */
+							if (!forwarded_sig_hup) {
+								forwarded_sig_hup = 1;
+								kill(0, SIGHUP);
+							}
+						}
+						break;
+					default:
+						break;
+					}
+				}
+			}
+		}
+
+		/**
+		 * for the parent this is the exit-point 
+		 */
+		if (!child) {
+			/** 
+			 * kill all children too 
+			 */
+			if (graceful_shutdown) {
+				kill(0, SIGINT);
+			} else if (srv_shutdown) {
+				kill(0, SIGTERM);
+			}
+
+			log_error_close(srv);
+			network_close(srv);
+			connections_free(srv);
+			plugins_free(srv);
+			server_free(srv);
+			return 0;
+		}
+	}
+#endif
+
+	if (NULL == (srv->ev = fdevent_init(srv->max_fds + 1, srv->event_handler))) {
+		log_error_write(srv, __FILE__, __LINE__,
+				"s", "fdevent_init failed");
+		return -1;
+	}
+	/*
+	 * kqueue() is called here, select resets its internals,
+	 * all server sockets get their handlers
+	 *
+	 * */
+	if (0 != network_register_fdevents(srv)) {
+		plugins_free(srv);
+		network_close(srv);
+		server_free(srv);
+
+		return -1;
+	}
+
+	/* might fail if user is using fam (not gamin) and famd isn't running */
+	if (NULL == (srv->stat_cache = stat_cache_init())) {
+		log_error_write(srv, __FILE__, __LINE__, "s",
+			"stat-cache could not be setup, dieing.");
+		return -1;
+	}
+
+#ifdef HAVE_FAM_H
+	/* setup FAM */
+	if (srv->srvconf.stat_cache_engine == STAT_CACHE_ENGINE_FAM) {
+		if (0 != FAMOpen2(srv->stat_cache->fam, "lighttpd")) {
+			log_error_write(srv, __FILE__, __LINE__, "s",
+					 "could not open a fam connection, dieing.");
+			return -1;
+		}
+#ifdef HAVE_FAMNOEXISTS
+		FAMNoExists(srv->stat_cache->fam);
+#endif
+
+		srv->stat_cache->fam_fcce_ndx = -1;
+		fdevent_register(srv->ev, FAMCONNECTION_GETFD(srv->stat_cache->fam), stat_cache_handle_fdevent, NULL);
+		fdevent_event_add(srv->ev, &(srv->stat_cache->fam_fcce_ndx), FAMCONNECTION_GETFD(srv->stat_cache->fam), FDEVENT_IN);
+	}
+#endif
+
+
+	/* get the current number of FDs */
+	srv->cur_fds = open("/dev/null", O_RDONLY);
+	close(srv->cur_fds);
+
+	for (i = 0; i < srv->srv_sockets.used; i++) {
+		server_socket *srv_socket = srv->srv_sockets.ptr[i];
+		if (-1 == fdevent_fcntl_set(srv->ev, srv_socket->fd)) {
+			log_error_write(srv, __FILE__, __LINE__, "ss", "fcntl failed:", strerror(errno));
+			return -1;
+		}
+	}
+
+	/* main-loop */
+	while (!srv_shutdown) {
+		int n;
+		size_t ndx;
+		time_t min_ts;
+
+		if (handle_sig_hup) {
+			handler_t r;
+
+			/* reset notification */
+			handle_sig_hup = 0;
+
+
+			/* cycle logfiles */
+
+			switch(r = plugins_call_handle_sighup(srv)) {
+			case HANDLER_GO_ON:
+				break;
+			default:
+				log_error_write(srv, __FILE__, __LINE__, "sd", "sighup-handler return with an error", r);
+				break;
+			}
+
+			if (-1 == log_error_cycle(srv)) {
+				log_error_write(srv, __FILE__, __LINE__, "s", "cycling errorlog failed, dying");
+
+				return -1;
+			} else {
+#ifdef HAVE_SIGACTION
+				log_error_write(srv, __FILE__, __LINE__, "sdsd", 
+					"logfiles cycled UID =",
+					last_sighup_info.si_uid,
+					"PID =",
+					last_sighup_info.si_pid);
+#else
+				log_error_write(srv, __FILE__, __LINE__, "s", 
+					"logfiles cycled");
+#endif
+			}
+		}
+
+		if (handle_sig_alarm) {
+			/* a new second */
+
+#ifdef USE_ALARM
+			/* reset notification */
+			handle_sig_alarm = 0;
+#endif
+
+			/* get current time */
+			min_ts = time(NULL);
+
+			if (min_ts != srv->cur_ts) {
+				int cs = 0;
+				connections *conns = srv->conns;
+				handler_t r;
+
+				switch(r = plugins_call_handle_trigger(srv)) {
+				case HANDLER_GO_ON:
+					break;
+				case HANDLER_ERROR:
+					log_error_write(srv, __FILE__, __LINE__, "s", "one of the triggers failed");
+					break;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "d", r);
+					break;
+				}
+
+				/* trigger waitpid */
+				srv->cur_ts = min_ts;
+
+				/* cleanup stat-cache */
+				stat_cache_trigger_cleanup(srv);
+				/**
+				 * check all connections for timeouts
+				 *
+				 */
+				for (ndx = 0; ndx < conns->used; ndx++) {
+					int changed = 0;
+					connection *con;
+					int t_diff;
+
+					con = conns->ptr[ndx];
+
+					if (con->state == CON_STATE_READ ||
+					    con->state == CON_STATE_READ_POST) {
+						if (con->request_count == 1) {
+							if (srv->cur_ts - con->read_idle_ts > con->conf.max_read_idle) {
+								/* time - out */
+#if 0
+								log_error_write(srv, __FILE__, __LINE__, "sd",
+										"connection closed - read-timeout:", con->fd);
+#endif
+								connection_set_state(srv, con, CON_STATE_ERROR);
+								changed = 1;
+							}
+						} else {
+							if (srv->cur_ts - con->read_idle_ts > con->conf.max_keep_alive_idle) {
+								/* time - out */
+#if 0
+								log_error_write(srv, __FILE__, __LINE__, "sd",
+										"connection closed - read-timeout:", con->fd);
+#endif
+								connection_set_state(srv, con, CON_STATE_ERROR);
+								changed = 1;
+							}
+						}
+					}
+
+					if ((con->state == CON_STATE_WRITE) &&
+					    (con->write_request_ts != 0)) {
+#if 0
+						if (srv->cur_ts - con->write_request_ts > 60) {
+							log_error_write(srv, __FILE__, __LINE__, "sdd",
+									"connection closed - pre-write-request-timeout:", con->fd, srv->cur_ts - con->write_request_ts);
+						}
+#endif
+
+						if (srv->cur_ts - con->write_request_ts > con->conf.max_write_idle) {
+							/* time - out */
+#if 1
+							log_error_write(srv, __FILE__, __LINE__, "sbsosds",
+									"NOTE: a request for",
+									con->request.uri,
+									"timed out after writing",
+									con->bytes_written,
+									"bytes. We waited",
+									(int)con->conf.max_write_idle,
+									"seconds. If this a problem increase server.max-write-idle");
+#endif
+							connection_set_state(srv, con, CON_STATE_ERROR);
+							changed = 1;
+						}
+					}
+					/* we don't like div by zero */
+					if (0 == (t_diff = srv->cur_ts - con->connection_start)) t_diff = 1;
+
+					if (con->traffic_limit_reached &&
+					    (con->conf.kbytes_per_second == 0 ||
+					     ((con->bytes_written / t_diff) < con->conf.kbytes_per_second * 1024))) {
+						/* enable connection again */
+						con->traffic_limit_reached = 0;
+
+						changed = 1;
+					}
+
+					if (changed) {
+						connection_state_machine(srv, con);
+					}
+					con->bytes_written_cur_second = 0;
+					*(con->conf.global_bytes_per_second_cnt_ptr) = 0;
+
+#if 0
+					if (cs == 0) {
+						fprintf(stderr, "connection-state: ");
+						cs = 1;
+					}
+
+					fprintf(stderr, "c[%d,%d]: %s ",
+						con->fd,
+						con->fcgi.fd,
+						connection_get_state(con->state));
+#endif
+				}
+
+				if (cs == 1) fprintf(stderr, "\n");
+			}
+		}
+
+		if (srv->sockets_disabled) {
+			/* our server sockets are disabled, why ? */
+
+			if ((srv->cur_fds + srv->want_fds < srv->max_fds * 0.8) && /* we have enough unused fds */
+			    (srv->conns->used < srv->max_conns * 0.9) &&
+			    (0 == graceful_shutdown)) {
+				for (i = 0; i < srv->srv_sockets.used; i++) {
+					server_socket *srv_socket = srv->srv_sockets.ptr[i];
+					fdevent_event_add(srv->ev, &(srv_socket->fde_ndx), srv_socket->fd, FDEVENT_IN);
+				}
+
+				log_error_write(srv, __FILE__, __LINE__, "s", "[note] sockets enabled again");
+
+				srv->sockets_disabled = 0;
+			}
+		} else {
+			if ((srv->cur_fds + srv->want_fds > srv->max_fds * 0.9) || /* out of fds */
+			    (srv->conns->used > srv->max_conns) || /* out of connections */
+			    (graceful_shutdown)) { /* graceful_shutdown */
+
+				/* disable server-fds */
+
+				for (i = 0; i < srv->srv_sockets.used; i++) {
+					server_socket *srv_socket = srv->srv_sockets.ptr[i];
+					fdevent_event_del(srv->ev, &(srv_socket->fde_ndx), srv_socket->fd);
+
+					if (graceful_shutdown) {
+						/* we don't want this socket anymore,
+						 *
+						 * closing it right away will make it possible for
+						 * the next lighttpd to take over (graceful restart)
+						 *  */
+
+						fdevent_unregister(srv->ev, srv_socket->fd);
+						close(srv_socket->fd);
+						srv_socket->fd = -1;
+
+						/* network_close() will cleanup after us */
+
+						if (srv->srvconf.pid_file->used &&
+						    srv->srvconf.changeroot->used == 0) {
+							if (0 != unlink(srv->srvconf.pid_file->ptr)) {
+								if (errno != EACCES && errno != EPERM) {
+									log_error_write(srv, __FILE__, __LINE__, "sbds",
+											"unlink failed for:",
+											srv->srvconf.pid_file,
+											errno,
+											strerror(errno));
+								}
+							}
+						}
+					}
+				}
+
+				if (graceful_shutdown) {
+					log_error_write(srv, __FILE__, __LINE__, "s", "[note] graceful shutdown started");
+				} else if (srv->conns->used > srv->max_conns) {
+					log_error_write(srv, __FILE__, __LINE__, "s", "[note] sockets disabled, connection limit reached");
+				} else {
+					log_error_write(srv, __FILE__, __LINE__, "s", "[note] sockets disabled, out-of-fds");
+				}
+
+				srv->sockets_disabled = 1;
+			}
+		}
+
+		if (graceful_shutdown && srv->conns->used == 0) {
+			/* we are in graceful shutdown phase and all connections are closed
+			 * we are ready to terminate without harming anyone */
+			srv_shutdown = 1;
+		}
+
+		/* we still have some fds to share */
+		if (srv->want_fds) {
+			/* check the fdwaitqueue for waiting fds */
+			int free_fds = srv->max_fds - srv->cur_fds - 16;
+			connection *con;
+
+			for (; free_fds > 0 && NULL != (con = fdwaitqueue_unshift(srv, srv->fdwaitqueue)); free_fds--) {
+				connection_state_machine(srv, con);
+
+				srv->want_fds--;
+			}
+		}
+
+		if ((n = fdevent_poll(srv->ev, 1000)) > 0) {
+			/* n is the number of events */
+			int revents;
+			int fd_ndx;
+#if 0
+			if (n > 0) {
+				log_error_write(srv, __FILE__, __LINE__, "sd",
+						"polls:", n);
+			}
+#endif
+			fd_ndx = -1;
+			do {
+				fdevent_handler handler;
+				void *context;
+				handler_t r;
+
+				fd_ndx  = fdevent_event_next_fdndx (srv->ev, fd_ndx);
+				revents = fdevent_event_get_revent (srv->ev, fd_ndx);
+				fd      = fdevent_event_get_fd     (srv->ev, fd_ndx);
+				handler = fdevent_get_handler(srv->ev, fd);
+				context = fdevent_get_context(srv->ev, fd);
+
+				/* connection_handle_fdevent needs a joblist_append */
+#if 0
+				log_error_write(srv, __FILE__, __LINE__, "sdd",
+						"event for", fd, revents);
+#endif
+				switch (r = (*handler)(srv, context, revents)) {
+				case HANDLER_FINISHED:
+				case HANDLER_GO_ON:
+				case HANDLER_WAIT_FOR_EVENT:
+				case HANDLER_WAIT_FOR_FD:
+					break;
+				case HANDLER_ERROR:
+					/* should never happen */
+					SEGFAULT();
+					break;
+				default:
+					log_error_write(srv, __FILE__, __LINE__, "d", r);
+					break;
+				}
+			} while (--n > 0);
+		} else if (n < 0 && errno != EINTR) {
+			log_error_write(srv, __FILE__, __LINE__, "ss",
+					"fdevent_poll failed:",
+					strerror(errno));
+		}
+
+		for (ndx = 0; ndx < srv->joblist->used; ndx++) {
+			connection *con = srv->joblist->ptr[ndx];
+			handler_t r;
+
+			connection_state_machine(srv, con);
+
+			switch(r = plugins_call_handle_joblist(srv, con)) {
+			case HANDLER_FINISHED:
+			case HANDLER_GO_ON:
+				break;
+			default:
+				log_error_write(srv, __FILE__, __LINE__, "d", r);
+				break;
+			}
+
+			con->in_joblist = 0;
+		}
+
+		srv->joblist->used = 0;
+	}
+
+	if (srv->srvconf.pid_file->used &&
+	    srv->srvconf.changeroot->used == 0 &&
+	    0 == graceful_shutdown) {
+		if (0 != unlink(srv->srvconf.pid_file->ptr)) {
+			if (errno != EACCES && errno != EPERM) {
+				log_error_write(srv, __FILE__, __LINE__, "sbds",
+						"unlink failed for:",
+						srv->srvconf.pid_file,
+						errno,
+						strerror(errno));
+			}
+		}
+	}
+
+#ifdef HAVE_SIGACTION
+	log_error_write(srv, __FILE__, __LINE__, "sdsd", 
+			"server stopped by UID =",
+			last_sigterm_info.si_uid,
+			"PID =",
+			last_sigterm_info.si_pid);
+#else
+	log_error_write(srv, __FILE__, __LINE__, "s", 
+			"server stopped");
+#endif
+
+	/* clean-up */
+	log_error_close(srv);
+	network_close(srv);
+	connections_free(srv);
+	plugins_free(srv);
+	server_free(srv);
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/server.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/server.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/server.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,17 @@
+#ifndef _SERVER_H_
+#define _SERVER_H_
+
+#include "base.h"
+
+typedef struct {
+	char *key;
+	char *value;
+} two_strings;
+
+typedef enum { CONFIG_UNSET, CONFIG_DOCUMENT_ROOT } config_var_t;
+
+int config_read(server *srv, const char *fn);
+int config_set_defaults(server *srv);
+buffer *config_get_value_buffer(server *srv, connection *con, config_var_t field);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/settings.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/settings.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/settings.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,46 @@
+#ifndef _LIGHTTPD_SETTINGS_H_
+#define _LIGHTTPD_SETTINGS_H_
+
+#define BV(x) (1 << x)
+
+#define INET_NTOP_CACHE_MAX 4
+#define FILE_CACHE_MAX      16
+
+/**
+ * max size of a buffer which will just be reset
+ * to ->used = 0 instead of really freeing the buffer
+ *
+ * 64kB (no real reason, just a guess)
+ */
+#define BUFFER_MAX_REUSE_SIZE  (4 * 1024)
+#define MAX_READ_LIMIT (4*1024*1024)
+
+
+/**
+ * max size of the HTTP request header
+ *
+ * 32k should be enough for everything (just a guess)
+ *
+ */
+#define MAX_HTTP_REQUEST_HEADER  (32 * 1024)
+
+typedef enum { HANDLER_UNSET,
+		HANDLER_GO_ON,
+		HANDLER_FINISHED,
+		HANDLER_COMEBACK,
+		HANDLER_WAIT_FOR_EVENT,
+		HANDLER_ERROR,
+		HANDLER_WAIT_FOR_FD
+} handler_t;
+
+
+/* we use it in a enum */
+#ifdef TRUE
+#undef TRUE
+#endif
+
+#ifdef FALSE
+#undef FALSE
+#endif
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/spawn-fcgi.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/spawn-fcgi.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/spawn-fcgi.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,460 @@
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+
+#ifdef HAVE_PWD_H
+#include <grp.h>
+#include <pwd.h>
+#endif
+
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
+#define FCGI_LISTENSOCK_FILENO 0
+
+#include "sys-socket.h"
+
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+/* for solaris 2.5 and netbsd 1.3.x */
+#ifndef HAVE_SOCKLEN_T
+typedef int socklen_t;
+#endif
+
+#ifdef HAVE_SYS_UN_H
+int fcgi_spawn_connection(char *appPath, char **appArgv, char *addr, unsigned short port, const char *unixsocket, int child_count, int pid_fd, int nofork) {
+	int fcgi_fd;
+	int socket_type, status;
+	struct timeval tv = { 0, 100 * 1000 };
+
+	struct sockaddr_un fcgi_addr_un;
+	struct sockaddr_in fcgi_addr_in;
+	struct sockaddr *fcgi_addr;
+
+	socklen_t servlen;
+
+	pid_t child;
+	int val;
+
+	if (child_count < 2) {
+		child_count = 5;
+	}
+
+	if (child_count > 256) {
+		child_count = 256;
+	}
+
+
+	if (unixsocket) {
+		memset(&fcgi_addr, 0, sizeof(fcgi_addr));
+
+		fcgi_addr_un.sun_family = AF_UNIX;
+		strcpy(fcgi_addr_un.sun_path, unixsocket);
+
+#ifdef SUN_LEN
+		servlen = SUN_LEN(&fcgi_addr_un);
+#else
+		/* stevens says: */
+		servlen = strlen(fcgi_addr_un.sun_path) + sizeof(fcgi_addr_un.sun_family);
+#endif
+		socket_type = AF_UNIX;
+		fcgi_addr = (struct sockaddr *) &fcgi_addr_un;
+
+		/* check if some backend is listening on the socket
+		 * as if we delete the socket-file and rebind there will be no "socket already in use" error
+		 */
+		if (-1 == (fcgi_fd = socket(socket_type, SOCK_STREAM, 0))) {
+			fprintf(stderr, "%s.%d\n",
+				__FILE__, __LINE__);
+			return -1;
+		}
+
+		if (-1 != connect(fcgi_fd, fcgi_addr, servlen)) {
+			fprintf(stderr, "%s.%d: socket is already used, can't spawn\n",
+				__FILE__, __LINE__);
+			return -1;
+		}
+
+		/* cleanup previous socket if it exists */
+		unlink(unixsocket);
+		close(fcgi_fd);
+	} else {
+		fcgi_addr_in.sin_family = AF_INET;
+                if (addr != NULL) {
+                        fcgi_addr_in.sin_addr.s_addr = inet_addr(addr);
+                } else {
+                        fcgi_addr_in.sin_addr.s_addr = htonl(INADDR_ANY);
+                }
+		fcgi_addr_in.sin_port = htons(port);
+		servlen = sizeof(fcgi_addr_in);
+
+		socket_type = AF_INET;
+		fcgi_addr = (struct sockaddr *) &fcgi_addr_in;
+	}
+
+	/* open socket */
+	if (-1 == (fcgi_fd = socket(socket_type, SOCK_STREAM, 0))) {
+		fprintf(stderr, "%s.%d\n",
+			__FILE__, __LINE__);
+		return -1;
+	}
+
+	val = 1;
+	if (setsockopt(fcgi_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) < 0) {
+		fprintf(stderr, "%s.%d\n",
+			__FILE__, __LINE__);
+		return -1;
+	}
+
+	/* create socket */
+	if (-1 == bind(fcgi_fd, fcgi_addr, servlen)) {
+		fprintf(stderr, "%s.%d: bind failed: %s\n",
+			__FILE__, __LINE__,
+			strerror(errno));
+		return -1;
+	}
+
+	if (-1 == listen(fcgi_fd, 1024)) {
+		fprintf(stderr, "%s.%d: fd = -1\n",
+			__FILE__, __LINE__);
+		return -1;
+	}
+
+	if (!nofork) {
+		child = fork();
+	} else {
+		child = 0;
+	}
+
+	switch (child) {
+	case 0: {
+		char cgi_childs[64];
+
+		int i = 0;
+
+		/* is safe as we limit to 256 childs */
+		sprintf(cgi_childs, "PHP_FCGI_CHILDREN=%d", child_count);
+
+		if(fcgi_fd != FCGI_LISTENSOCK_FILENO) {
+			close(FCGI_LISTENSOCK_FILENO);
+			dup2(fcgi_fd, FCGI_LISTENSOCK_FILENO);
+			close(fcgi_fd);
+		}
+
+		/* we don't need the client socket */
+		for (i = 3; i < 256; i++) {
+			close(i);
+		}
+
+		/* create environment */
+
+		putenv(cgi_childs);
+
+		/* fork and replace shell */
+		if (appArgv) {
+			execv(appArgv[0], appArgv);
+
+		} else {
+			char *b = malloc(strlen("exec ") + strlen(appPath) + 1);
+			strcpy(b, "exec ");
+			strcat(b, appPath);
+
+			/* exec the cgi */
+			execl("/bin/sh", "sh", "-c", b, (char *)NULL);
+		}
+
+		exit(errno);
+
+		break;
+	}
+	case -1:
+		/* error */
+		break;
+	default:
+		/* father */
+
+		/* wait */
+		select(0, NULL, NULL, NULL, &tv);
+
+		switch (waitpid(child, &status, WNOHANG)) {
+		case 0:
+			fprintf(stderr, "%s.%d: child spawned successfully: PID: %d\n",
+				__FILE__, __LINE__,
+				child);
+
+			/* write pid file */
+			if (pid_fd != -1) {
+				/* assume a 32bit pid_t */
+				char pidbuf[12];
+
+				snprintf(pidbuf, sizeof(pidbuf) - 1, "%d", child);
+
+				write(pid_fd, pidbuf, strlen(pidbuf));
+				close(pid_fd);
+				pid_fd = -1;
+			}
+
+			break;
+		case -1:
+			break;
+		default:
+			if (WIFEXITED(status)) {
+				fprintf(stderr, "%s.%d: child exited with: %d, %s\n",
+					__FILE__, __LINE__,
+					WEXITSTATUS(status), strerror(WEXITSTATUS(status)));
+			} else if (WIFSIGNALED(status)) {
+				fprintf(stderr, "%s.%d: child signaled: %d\n",
+					__FILE__, __LINE__,
+					WTERMSIG(status));
+			} else {
+				fprintf(stderr, "%s.%d: child died somehow: %d\n",
+					__FILE__, __LINE__,
+					status);
+			}
+		}
+
+		break;
+	}
+
+	close(fcgi_fd);
+
+	return 0;
+}
+
+
+void show_version () {
+	char *b = "spawn-fcgi" "-" PACKAGE_VERSION \
+" - spawns fastcgi processes\n"
+;
+	write(1, b, strlen(b));
+}
+
+void show_help () {
+	char *b = \
+"Usage: spawn-fcgi [options] -- <fcgiapp> [fcgi app arguments]\n" \
+"\n" \
+"spawn-fcgi v" PACKAGE_VERSION " - spawns fastcgi processes\n" \
+"\n" \
+"Options:\n" \
+" -f <fcgiapp> filename of the fcgi-application\n" \
+" -a <addr>    bind to ip address\n" \
+" -p <port>    bind to tcp-port\n" \
+" -s <path>    bind to unix-domain socket\n" \
+" -C <childs>  (PHP only) numbers of childs to spawn (default 5)\n" \
+" -P <path>    name of PID-file for spawed process\n" \
+" -n           no fork (for daemontools)\n" \
+" -v           show version\n" \
+" -h           show this help\n" \
+"(root only)\n" \
+" -c <dir>     chroot to directory\n" \
+" -u <user>    change to user-id\n" \
+" -g <group>   change to group-id\n" \
+;
+	write(1, b, strlen(b));
+}
+
+
+int main(int argc, char **argv) {
+	char *fcgi_app = NULL, *changeroot = NULL, *username = NULL,
+               *groupname = NULL, *unixsocket = NULL, *pid_file = NULL,
+                *addr = NULL;
+	char **fcgi_app_argv = { NULL };
+	unsigned short port = 0;
+	int child_count = 5;
+	int i_am_root, o;
+	int pid_fd = -1;
+	int nofork = 0;
+	struct sockaddr_un un;
+	const size_t sun_path_len = sizeof(un.sun_path);
+
+	i_am_root = (getuid() == 0);
+
+	while(-1 != (o = getopt(argc, argv, "c:f:g:hna:p:u:vC:s:P:"))) {
+		switch(o) {
+		case 'f': fcgi_app = optarg; break;
+		case 'a': addr = optarg;/* ip addr */ break;
+		case 'p': port = strtol(optarg, NULL, 10);/* port */ break;
+		case 'C': child_count = strtol(optarg, NULL, 10);/*  */ break;
+		case 's': unixsocket = optarg; /* unix-domain socket */ break;
+		case 'c': if (i_am_root) { changeroot = optarg; }/* chroot() */ break;
+		case 'u': if (i_am_root) { username = optarg; } /* set user */ break;
+		case 'g': if (i_am_root) { groupname = optarg; } /* set group */ break;
+		case 'n': nofork = 1; break;
+		case 'P': pid_file = optarg; /* PID file */ break;
+		case 'v': show_version(); return 0;
+		case 'h': show_help(); return 0;
+		default:
+			show_help();
+			return -1;
+		}
+	}
+
+	if (optind < argc) {
+		fcgi_app_argv = &argv[optind];
+	}
+
+	if ((fcgi_app == NULL && fcgi_app_argv == NULL) || (port == 0 && unixsocket == NULL)) {
+		show_help();
+		return -1;
+	}
+
+	if (unixsocket && port) {
+		fprintf(stderr, "%s.%d: %s\n",
+			__FILE__, __LINE__,
+			"either a unix domain socket or a tcp-port, but not both\n");
+
+		return -1;
+	}
+
+	if (unixsocket && strlen(unixsocket) > sun_path_len - 1) {
+		fprintf(stderr, "%s.%d: %s\n",
+			__FILE__, __LINE__,
+			"path of the unix socket is too long\n");
+
+		return -1;
+	}
+
+	/* UID handling */
+	if (!i_am_root && (geteuid() == 0 || getegid() == 0)) {
+		/* we are setuid-root */
+
+		fprintf(stderr, "%s.%d: %s\n",
+			__FILE__, __LINE__,
+			"Are you nuts ? Don't apply a SUID bit to this binary\n");
+
+		return -1;
+	}
+
+	if (pid_file &&
+	    (-1 == (pid_fd = open(pid_file, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)))) {
+		struct stat st;
+		if (errno != EEXIST) {
+			fprintf(stderr, "%s.%d: opening pid-file '%s' failed: %s\n",
+				__FILE__, __LINE__,
+				pid_file, strerror(errno));
+
+			return -1;
+		}
+
+		/* ok, file exists */
+
+		if (0 != stat(pid_file, &st)) {
+			fprintf(stderr, "%s.%d: stating pid-file '%s' failed: %s\n",
+				__FILE__, __LINE__,
+				pid_file, strerror(errno));
+
+			return -1;
+		}
+
+		/* is it a regular file ? */
+
+		if (!S_ISREG(st.st_mode)) {
+			fprintf(stderr, "%s.%d: pid-file exists and isn't regular file: '%s'\n",
+				__FILE__, __LINE__,
+				pid_file);
+
+			return -1;
+		}
+
+		if (-1 == (pid_fd = open(pid_file, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH))) {
+			fprintf(stderr, "%s.%d: opening pid-file '%s' failed: %s\n",
+				__FILE__, __LINE__,
+				pid_file, strerror(errno));
+
+			return -1;
+		}
+	}
+
+	if (i_am_root) {
+		struct group *grp = NULL;
+		struct passwd *pwd = NULL;
+
+		/* set user and group */
+
+		if (username) {
+			if (NULL == (pwd = getpwnam(username))) {
+				fprintf(stderr, "%s.%d: %s, %s\n",
+					__FILE__, __LINE__,
+					"can't find username", username);
+				return -1;
+			}
+
+			if (pwd->pw_uid == 0) {
+				fprintf(stderr, "%s.%d: %s\n",
+					__FILE__, __LINE__,
+					"I will not set uid to 0\n");
+				return -1;
+			}
+		}
+
+		if (groupname) {
+			if (NULL == (grp = getgrnam(groupname))) {
+				fprintf(stderr, "%s.%d: %s %s\n",
+					__FILE__, __LINE__,
+					"can't find groupname",
+					groupname);
+				return -1;
+			}
+			if (grp->gr_gid == 0) {
+				fprintf(stderr, "%s.%d: %s\n",
+					__FILE__, __LINE__,
+					"I will not set gid to 0\n");
+				return -1;
+			}
+		}
+
+		/*
+		 * Change group before chroot, when we have access
+		 * to /etc/group
+		 */
+		if (groupname) {
+			setgid(grp->gr_gid);
+			setgroups(0, NULL);
+			if (username) {
+				initgroups(username, grp->gr_gid);
+			}
+		}
+
+		if (changeroot) {
+			if (-1 == chroot(changeroot)) {
+				fprintf(stderr, "%s.%d: %s %s\n",
+					__FILE__, __LINE__,
+					"chroot failed: ", strerror(errno));
+				return -1;
+			}
+			if (-1 == chdir("/")) {
+				fprintf(stderr, "%s.%d: %s %s\n",
+					__FILE__, __LINE__,
+					"chdir failed: ", strerror(errno));
+				return -1;
+			}
+		}
+
+		/* drop root privs */
+		if (username) {
+			setuid(pwd->pw_uid);
+		}
+	}
+
+       return fcgi_spawn_connection(fcgi_app, fcgi_app_argv, addr, port, unixsocket, child_count, pid_fd, nofork);
+}
+#else
+int main() {
+	return -1;
+}
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/splaytree.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/splaytree.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/splaytree.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,210 @@
+/*
+           An implementation of top-down splaying with sizes
+             D. Sleator <sleator at cs.cmu.edu>, January 1994.
+
+  This extends top-down-splay.c to maintain a size field in each node.
+  This is the number of nodes in the subtree rooted there.  This makes
+  it possible to efficiently compute the rank of a key.  (The rank is
+  the number of nodes to the left of the given key.)  It it also
+  possible to quickly find the node of a given rank.  Both of these
+  operations are illustrated in the code below.  The remainder of this
+  introduction is taken from top-down-splay.c.
+
+  "Splay trees", or "self-adjusting search trees" are a simple and
+  efficient data structure for storing an ordered set.  The data
+  structure consists of a binary tree, with no additional fields.  It
+  allows searching, insertion, deletion, deletemin, deletemax,
+  splitting, joining, and many other operations, all with amortized
+  logarithmic performance.  Since the trees adapt to the sequence of
+  requests, their performance on real access patterns is typically even
+  better.  Splay trees are described in a number of texts and papers
+  [1,2,3,4].
+
+  The code here is adapted from simple top-down splay, at the bottom of
+  page 669 of [2].  It can be obtained via anonymous ftp from
+  spade.pc.cs.cmu.edu in directory /usr/sleator/public.
+
+  The chief modification here is that the splay operation works even if the
+  item being splayed is not in the tree, and even if the tree root of the
+  tree is NULL.  So the line:
+
+                              t = splay(i, t);
+
+  causes it to search for item with key i in the tree rooted at t.  If it's
+  there, it is splayed to the root.  If it isn't there, then the node put
+  at the root is the last one before NULL that would have been reached in a
+  normal binary search for i.  (It's a neighbor of i in the tree.)  This
+  allows many other operations to be easily implemented, as shown below.
+
+  [1] "Data Structures and Their Algorithms", Lewis and Denenberg,
+       Harper Collins, 1991, pp 243-251.
+  [2] "Self-adjusting Binary Search Trees" Sleator and Tarjan,
+       JACM Volume 32, No 3, July 1985, pp 652-686.
+  [3] "Data Structure and Algorithm Analysis", Mark Weiss,
+       Benjamin Cummins, 1992, pp 119-130.
+  [4] "Data Structures, Algorithms, and Performance", Derick Wood,
+       Addison-Wesley, 1993, pp 367-375
+*/
+
+#include <stdlib.h>
+#include <assert.h>
+#include "splaytree.h"
+
+#define compare(i,j) ((i)-(j))
+/* This is the comparison.                                       */
+/* Returns <0 if i<j, =0 if i=j, and >0 if i>j                   */
+
+#define node_size splaytree_size
+
+/* Splay using the key i (which may or may not be in the tree.)
+ * The starting root is t, and the tree used is defined by rat
+ * size fields are maintained */
+splay_tree * splaytree_splay (splay_tree *t, int i) {
+    splay_tree N, *l, *r, *y;
+    int comp, root_size, l_size, r_size;
+
+    if (t == NULL) return t;
+    N.left = N.right = NULL;
+    l = r = &N;
+    root_size = node_size(t);
+    l_size = r_size = 0;
+
+    for (;;) {
+        comp = compare(i, t->key);
+        if (comp < 0) {
+            if (t->left == NULL) break;
+            if (compare(i, t->left->key) < 0) {
+                y = t->left;                           /* rotate right */
+                t->left = y->right;
+                y->right = t;
+                t->size = node_size(t->left) + node_size(t->right) + 1;
+                t = y;
+                if (t->left == NULL) break;
+            }
+            r->left = t;                               /* link right */
+            r = t;
+            t = t->left;
+            r_size += 1+node_size(r->right);
+        } else if (comp > 0) {
+            if (t->right == NULL) break;
+            if (compare(i, t->right->key) > 0) {
+                y = t->right;                          /* rotate left */
+                t->right = y->left;
+                y->left = t;
+		t->size = node_size(t->left) + node_size(t->right) + 1;
+                t = y;
+                if (t->right == NULL) break;
+            }
+            l->right = t;                              /* link left */
+            l = t;
+            t = t->right;
+            l_size += 1+node_size(l->left);
+        } else {
+            break;
+        }
+    }
+    l_size += node_size(t->left);  /* Now l_size and r_size are the sizes of */
+    r_size += node_size(t->right); /* the left and right trees we just built.*/
+    t->size = l_size + r_size + 1;
+
+    l->right = r->left = NULL;
+
+    /* The following two loops correct the size fields of the right path  */
+    /* from the left child of the root and the right path from the left   */
+    /* child of the root.                                                 */
+    for (y = N.right; y != NULL; y = y->right) {
+        y->size = l_size;
+        l_size -= 1+node_size(y->left);
+    }
+    for (y = N.left; y != NULL; y = y->left) {
+        y->size = r_size;
+        r_size -= 1+node_size(y->right);
+    }
+
+    l->right = t->left;                                /* assemble */
+    r->left = t->right;
+    t->left = N.right;
+    t->right = N.left;
+
+    return t;
+}
+
+splay_tree * splaytree_insert(splay_tree * t, int i, void *data) {
+/* Insert key i into the tree t, if it is not already there. */
+/* Return a pointer to the resulting tree.                   */
+    splay_tree * new;
+
+    if (t != NULL) {
+	t = splaytree_splay(t, i);
+	if (compare(i, t->key)==0) {
+	    return t;  /* it's already there */
+	}
+    }
+    new = (splay_tree *) malloc (sizeof (splay_tree));
+    assert(new);
+    if (t == NULL) {
+	new->left = new->right = NULL;
+    } else if (compare(i, t->key) < 0) {
+	new->left = t->left;
+	new->right = t;
+	t->left = NULL;
+	t->size = 1+node_size(t->right);
+    } else {
+	new->right = t->right;
+	new->left = t;
+	t->right = NULL;
+	t->size = 1+node_size(t->left);
+    }
+    new->key = i;
+    new->data = data;
+    new->size = 1 + node_size(new->left) + node_size(new->right);
+    return new;
+}
+
+splay_tree * splaytree_delete(splay_tree *t, int i) {
+/* Deletes i from the tree if it's there.               */
+/* Return a pointer to the resulting tree.              */
+    splay_tree * x;
+    int tsize;
+
+    if (t==NULL) return NULL;
+    tsize = t->size;
+    t = splaytree_splay(t, i);
+    if (compare(i, t->key) == 0) {               /* found it */
+	if (t->left == NULL) {
+	    x = t->right;
+	} else {
+	    x = splaytree_splay(t->left, i);
+	    x->right = t->right;
+	}
+	free(t);
+	if (x != NULL) {
+	    x->size = tsize-1;
+	}
+	return x;
+    } else {
+	return t;                         /* It wasn't there */
+    }
+}
+
+splay_tree *find_rank(int r, splay_tree *t) {
+/* Returns a pointer to the node in the tree with the given rank.  */
+/* Returns NULL if there is no such node.                          */
+/* Does not change the tree.  To guarantee logarithmic behavior,   */
+/* the node found here should be splayed to the root.              */
+    int lsize;
+    if ((r < 0) || (r >= node_size(t))) return NULL;
+    for (;;) {
+	lsize = node_size(t->left);
+	if (r < lsize) {
+	    t = t->left;
+	} else if (r > lsize) {
+	    r = r - lsize -1;
+	    t = t->right;
+	} else {
+	    return t;
+	}
+    }
+}
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/splaytree.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/splaytree.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/splaytree.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,24 @@
+#ifndef _SPLAY_TREE_H_
+#define _SPLAY_TREE_H_
+
+typedef struct tree_node {
+    struct tree_node * left, * right;
+    int key;
+    int size;   /* maintained to be the number of nodes rooted here */
+
+    void *data;
+} splay_tree;
+
+
+splay_tree * splaytree_splay (splay_tree *t, int key);
+splay_tree * splaytree_insert(splay_tree *t, int key, void *data);
+splay_tree * splaytree_delete(splay_tree *t, int key);
+splay_tree * splaytree_size(splay_tree *t);
+
+#define splaytree_size(x) (((x)==NULL) ? 0 : ((x)->size))
+/* This macro returns the size of a node.  Unlike "x->size",     */
+/* it works even if x=NULL.  The test could be avoided by using  */
+/* a special version of NULL which was a real node with size 0.  */
+
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/stat_cache.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/stat_cache.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/stat_cache.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,747 @@
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <assert.h>
+
+#include "log.h"
+#include "stat_cache.h"
+#include "fdevent.h"
+#include "etag.h"
+
+#ifdef HAVE_ATTR_ATTRIBUTES_H
+#include <attr/attributes.h>
+#endif
+
+#ifdef HAVE_FAM_H
+# include <fam.h>
+#endif
+
+#include "sys-mmap.h"
+
+/* NetBSD 1.3.x needs it */
+#ifndef MAP_FAILED
+# define MAP_FAILED -1
+#endif
+
+#ifndef O_LARGEFILE
+# define O_LARGEFILE 0
+#endif
+
+#ifndef HAVE_LSTAT
+#define lstat stat
+#endif
+
+#if 0
+/* enables debug code for testing if all nodes in the stat-cache as accessable */
+#define DEBUG_STAT_CACHE
+#endif
+
+/*
+ * stat-cache
+ *
+ * we cache the stat() calls in our own storage
+ * the directories are cached in FAM
+ *
+ * if we get a change-event from FAM, we increment the version in the FAM->dir mapping
+ *
+ * if the stat()-cache is queried we check if the version id for the directory is the
+ * same and return immediatly.
+ *
+ *
+ * What we need:
+ *
+ * - for each stat-cache entry we need a fast indirect lookup on the directory name
+ * - for each FAMRequest we have to find the version in the directory cache (index as userdata)
+ *
+ * stat <<-> directory <-> FAMRequest
+ *
+ * if file is deleted, directory is dirty, file is rechecked ...
+ * if directory is deleted, directory mapping is removed
+ *
+ * */
+
+#ifdef HAVE_FAM_H
+typedef struct {
+	FAMRequest *req;
+	FAMConnection *fc;
+
+	buffer *name;
+
+	int version;
+} fam_dir_entry;
+#endif
+
+/* the directory name is too long to always compare on it
+ * - we need a hash
+ * - the hash-key is used as sorting criteria for a tree
+ * - a splay-tree is used as we can use the caching effect of it
+ */
+
+/* we want to cleanup the stat-cache every few seconds, let's say 10
+ *
+ * - remove entries which are outdated since 30s
+ * - remove entries which are fresh but havn't been used since 60s
+ * - if we don't have a stat-cache entry for a directory, release it from the monitor
+ */
+
+#ifdef DEBUG_STAT_CACHE
+typedef struct {
+	int *ptr;
+
+	size_t used;
+	size_t size;
+} fake_keys;
+
+static fake_keys ctrl;
+#endif
+
+stat_cache *stat_cache_init(void) {
+	stat_cache *fc = NULL;
+
+	fc = calloc(1, sizeof(*fc));
+
+	fc->dir_name = buffer_init();
+	fc->hash_key = buffer_init();
+#ifdef HAVE_FAM_H
+	fc->fam = calloc(1, sizeof(*fc->fam));
+#endif
+
+#ifdef DEBUG_STAT_CACHE
+	ctrl.size = 0;
+#endif
+
+	return fc;
+}
+
+static stat_cache_entry * stat_cache_entry_init(void) {
+	stat_cache_entry *sce = NULL;
+
+	sce = calloc(1, sizeof(*sce));
+
+	sce->name = buffer_init();
+	sce->etag = buffer_init();
+	sce->content_type = buffer_init();
+
+	return sce;
+}
+
+static void stat_cache_entry_free(void *data) {
+	stat_cache_entry *sce = data;
+	if (!sce) return;
+
+	buffer_free(sce->etag);
+	buffer_free(sce->name);
+	buffer_free(sce->content_type);
+
+	free(sce);
+}
+
+#ifdef HAVE_FAM_H
+static fam_dir_entry * fam_dir_entry_init(void) {
+	fam_dir_entry *fam_dir = NULL;
+
+	fam_dir = calloc(1, sizeof(*fam_dir));
+
+	fam_dir->name = buffer_init();
+
+	return fam_dir;
+}
+
+static void fam_dir_entry_free(void *data) {
+	fam_dir_entry *fam_dir = data;
+
+	if (!fam_dir) return;
+
+	FAMCancelMonitor(fam_dir->fc, fam_dir->req);
+
+	buffer_free(fam_dir->name);
+	free(fam_dir->req);
+
+	free(fam_dir);
+}
+#endif
+
+void stat_cache_free(stat_cache *sc) {
+	while (sc->files) {
+		int osize;
+		splay_tree *node = sc->files;
+
+		osize = sc->files->size;
+
+		stat_cache_entry_free(node->data);
+		sc->files = splaytree_delete(sc->files, node->key);
+
+		assert(osize - 1 == splaytree_size(sc->files));
+	}
+
+	buffer_free(sc->dir_name);
+	buffer_free(sc->hash_key);
+
+#ifdef HAVE_FAM_H
+	while (sc->dirs) {
+		int osize;
+		splay_tree *node = sc->dirs;
+
+		osize = sc->dirs->size;
+
+		fam_dir_entry_free(node->data);
+		sc->dirs = splaytree_delete(sc->dirs, node->key);
+
+		if (osize == 1) {
+			assert(NULL == sc->dirs);
+		} else {
+			assert(osize == (sc->dirs->size + 1));
+		}
+	}
+
+	if (sc->fam) {
+		FAMClose(sc->fam);
+		free(sc->fam);
+	}
+#endif
+	free(sc);
+}
+
+#ifdef HAVE_XATTR
+static int stat_cache_attr_get(buffer *buf, char *name) {
+	int attrlen;
+	int ret;
+
+	attrlen = 1024;
+	buffer_prepare_copy(buf, attrlen);
+	attrlen--;
+	if(0 == (ret = attr_get(name, "Content-Type", buf->ptr, &attrlen, 0))) {
+		buf->used = attrlen + 1;
+		buf->ptr[attrlen] = '\0';
+	}
+	return ret;
+}
+#endif
+
+/* the famous DJB hash function for strings */
+static uint32_t hashme(buffer *str) {
+	uint32_t hash = 5381;
+	const char *s;
+	for (s = str->ptr; *s; s++) {
+		hash = ((hash << 5) + hash) + *s;
+	}
+
+	hash &= ~(1 << 31); /* strip the highest bit */
+
+	return hash;
+}
+
+#ifdef HAVE_FAM_H
+handler_t stat_cache_handle_fdevent(void *_srv, void *_fce, int revent) {
+	size_t i;
+	server *srv = _srv;
+	stat_cache *sc = srv->stat_cache;
+	size_t events;
+
+	UNUSED(_fce);
+	/* */
+
+	if ((revent & FDEVENT_IN) &&
+	    sc->fam) {
+
+		events = FAMPending(sc->fam);
+
+		for (i = 0; i < events; i++) {
+			FAMEvent fe;
+			fam_dir_entry *fam_dir;
+			splay_tree *node;
+			int ndx, j;
+
+			FAMNextEvent(sc->fam, &fe);
+
+			/* handle event */
+
+			switch(fe.code) {
+			case FAMChanged:
+			case FAMDeleted:
+			case FAMMoved:
+				/* if the filename is a directory remove the entry */
+
+				fam_dir = fe.userdata;
+				fam_dir->version++;
+
+				/* file/dir is still here */
+				if (fe.code == FAMChanged) break;
+
+				/* we have 2 versions, follow and no-follow-symlink */
+
+				for (j = 0; j < 2; j++) {
+					buffer_copy_string(sc->hash_key, fe.filename);
+					buffer_append_long(sc->hash_key, j);
+
+					ndx = hashme(sc->hash_key);
+
+					sc->dirs = splaytree_splay(sc->dirs, ndx);
+					node = sc->dirs;
+
+					if (node && (node->key == ndx)) {
+						int osize = splaytree_size(sc->dirs);
+
+						fam_dir_entry_free(node->data);
+						sc->dirs = splaytree_delete(sc->dirs, ndx);
+
+						assert(osize - 1 == splaytree_size(sc->dirs));
+					}
+				}
+				break;
+			default:
+				break;
+			}
+		}
+	}
+
+	if (revent & FDEVENT_HUP) {
+		/* fam closed the connection */
+		srv->stat_cache->fam_fcce_ndx = -1;
+
+		fdevent_event_del(srv->ev, &(sc->fam_fcce_ndx), FAMCONNECTION_GETFD(sc->fam));
+		fdevent_unregister(srv->ev, FAMCONNECTION_GETFD(sc->fam));
+
+		FAMClose(sc->fam);
+		free(sc->fam);
+
+		sc->fam = NULL;
+	}
+
+	return HANDLER_GO_ON;
+}
+
+static int buffer_copy_dirname(buffer *dst, buffer *file) {
+	size_t i;
+
+	if (buffer_is_empty(file)) return -1;
+
+	for (i = file->used - 1; i+1 > 0; i--) {
+		if (file->ptr[i] == '/') {
+			buffer_copy_string_len(dst, file->ptr, i);
+			return 0;
+		}
+	}
+
+	return -1;
+}
+#endif
+
+#ifdef HAVE_LSTAT
+static int stat_cache_lstat(server *srv, buffer *dname, struct stat *lst) {
+	if (lstat(dname->ptr, lst) == 0) {
+		return S_ISLNK(lst->st_mode) ? 0 : 1;
+	}
+	else {
+		log_error_write(srv, __FILE__, __LINE__, "sbs",
+				"lstat failed for:",
+				dname, strerror(errno));
+	};
+	return -1;
+}
+#endif
+
+/***
+ *
+ *
+ *
+ * returns:
+ *  - HANDLER_FINISHED on cache-miss (don't forget to reopen the file)
+ *  - HANDLER_ERROR on stat() failed -> see errno for problem
+ */
+
+handler_t stat_cache_get_entry(server *srv, connection *con, buffer *name, stat_cache_entry **ret_sce) {
+#ifdef HAVE_FAM_H
+	fam_dir_entry *fam_dir = NULL;
+	int dir_ndx = -1;
+	splay_tree *dir_node = NULL;
+#endif
+	stat_cache_entry *sce = NULL;
+	stat_cache *sc;
+	struct stat st;
+	size_t k;
+	int fd;
+	struct stat lst;
+#ifdef DEBUG_STAT_CACHE
+	size_t i;
+#endif
+
+	int file_ndx;
+	splay_tree *file_node = NULL;
+
+	*ret_sce = NULL;
+
+	/*
+	 * check if the directory for this file has changed
+	 */
+
+	sc = srv->stat_cache;
+
+	buffer_copy_string_buffer(sc->hash_key, name);
+	buffer_append_long(sc->hash_key, con->conf.follow_symlink);
+
+	file_ndx = hashme(sc->hash_key);
+	sc->files = splaytree_splay(sc->files, file_ndx);
+
+#ifdef DEBUG_STAT_CACHE
+	for (i = 0; i < ctrl.used; i++) {
+		if (ctrl.ptr[i] == file_ndx) break;
+	}
+#endif
+
+	if (sc->files && (sc->files->key == file_ndx)) {
+#ifdef DEBUG_STAT_CACHE
+		/* it was in the cache */
+		assert(i < ctrl.used);
+#endif
+
+		/* we have seen this file already and
+		 * don't stat() it again in the same second */
+
+		file_node = sc->files;
+
+		sce = file_node->data;
+
+		/* check if the name is the same, we might have a collision */
+
+		if (buffer_is_equal(name, sce->name)) {
+			if (srv->srvconf.stat_cache_engine == STAT_CACHE_ENGINE_SIMPLE) {
+				if (sce->stat_ts == srv->cur_ts) {
+					*ret_sce = sce;
+					return HANDLER_GO_ON;
+				}
+			}
+		} else {
+			/* oops, a collision,
+			 *
+			 * file_node is used by the FAM check below to see if we know this file
+			 * and if we can save a stat().
+			 *
+			 * BUT, the sce is not reset here as the entry into the cache is ok, we
+			 * it is just not pointing to our requested file.
+			 *
+			 *  */
+
+			file_node = NULL;
+		}
+	} else {
+#ifdef DEBUG_STAT_CACHE
+		if (i != ctrl.used) {
+			fprintf(stderr, "%s.%d: %08x was already inserted but not found in cache, %s\n", __FILE__, __LINE__, file_ndx, name->ptr);
+		}
+		assert(i == ctrl.used);
+#endif
+	}
+
+#ifdef HAVE_FAM_H
+	/* dir-check */
+	if (srv->srvconf.stat_cache_engine == STAT_CACHE_ENGINE_FAM) {
+		if (0 != buffer_copy_dirname(sc->dir_name, name)) {
+			SEGFAULT();
+		}
+
+		buffer_copy_string_buffer(sc->hash_key, sc->dir_name);
+		buffer_append_long(sc->hash_key, con->conf.follow_symlink);
+
+		dir_ndx = hashme(sc->hash_key);
+
+		sc->dirs = splaytree_splay(sc->dirs, dir_ndx);
+
+		if (sc->dirs && (sc->dirs->key == dir_ndx)) {
+			dir_node = sc->dirs;
+		}
+
+		if (dir_node && file_node) {
+			/* we found a file */
+
+			sce = file_node->data;
+			fam_dir = dir_node->data;
+
+			if (fam_dir->version == sce->dir_version) {
+				/* the stat()-cache entry is still ok */
+
+				*ret_sce = sce;
+				return HANDLER_GO_ON;
+			}
+		}
+	}
+#endif
+
+	/*
+	 * *lol*
+	 * - open() + fstat() on a named-pipe results in a (intended) hang.
+	 * - stat() if regular file + open() to see if we can read from it is better
+	 *
+	 * */
+	if (-1 == stat(name->ptr, &st)) {
+		return HANDLER_ERROR;
+	}
+
+
+	if (S_ISREG(st.st_mode)) {
+		/* try to open the file to check if we can read it */
+		if (-1 == (fd = open(name->ptr, O_RDONLY))) {
+			return HANDLER_ERROR;
+		}
+		close(fd);
+	}
+
+	if (NULL == sce) {
+		int osize = 0;
+
+		if (sc->files) {
+			osize = sc->files->size;
+		}
+
+		sce = stat_cache_entry_init();
+		buffer_copy_string_buffer(sce->name, name);
+
+		sc->files = splaytree_insert(sc->files, file_ndx, sce);
+#ifdef DEBUG_STAT_CACHE
+		if (ctrl.size == 0) {
+			ctrl.size = 16;
+			ctrl.used = 0;
+			ctrl.ptr = malloc(ctrl.size * sizeof(*ctrl.ptr));
+		} else if (ctrl.size == ctrl.used) {
+			ctrl.size += 16;
+			ctrl.ptr = realloc(ctrl.ptr, ctrl.size * sizeof(*ctrl.ptr));
+		}
+
+		ctrl.ptr[ctrl.used++] = file_ndx;
+
+		assert(sc->files);
+		assert(sc->files->data == sce);
+		assert(osize + 1 == splaytree_size(sc->files));
+#endif
+	}
+
+	sce->st = st;
+	sce->stat_ts = srv->cur_ts;
+
+	/* catch the obvious symlinks
+	 *
+	 * this is not a secure check as we still have a race-condition between
+	 * the stat() and the open. We can only solve this by
+	 * 1. open() the file
+	 * 2. fstat() the fd
+	 *
+	 * and keeping the file open for the rest of the time. But this can
+	 * only be done at network level.
+	 *
+	 * per default it is not a symlink
+	 * */
+#ifdef HAVE_LSTAT
+	sce->is_symlink = 0;
+
+	/* we want to only check for symlinks if we should block symlinks.
+	 */
+	if (!con->conf.follow_symlink) {
+		if (stat_cache_lstat(srv, name, &lst)  == 0) {
+#ifdef DEBUG_STAT_CACHE
+				log_error_write(srv, __FILE__, __LINE__, "sb",
+						"found symlink", name);
+#endif
+				sce->is_symlink = 1;
+		}
+
+		/*
+		 * we assume "/" can not be symlink, so
+		 * skip the symlink stuff if our path is /
+		 **/
+		else if ((name->used > 2)) {
+			buffer *dname;
+			char *s_cur;
+
+			dname = buffer_init();
+			buffer_copy_string_buffer(dname, name);
+
+			while ((s_cur = strrchr(dname->ptr,'/'))) {
+				*s_cur = '\0';
+				dname->used = s_cur - dname->ptr + 1;
+				if (dname->ptr == s_cur) {
+#ifdef DEBUG_STAT_CACHE
+					log_error_write(srv, __FILE__, __LINE__, "s", "reached /");
+#endif
+					break;
+				}
+#ifdef DEBUG_STAT_CACHE
+				log_error_write(srv, __FILE__, __LINE__, "sbs",
+						"checking if", dname, "is a symlink");
+#endif
+				if (stat_cache_lstat(srv, dname, &lst)  == 0) {
+					sce->is_symlink = 1;
+#ifdef DEBUG_STAT_CACHE
+					log_error_write(srv, __FILE__, __LINE__, "sb",
+							"found symlink", dname);
+#endif
+					break;
+				};
+			};
+			buffer_free(dname);
+		};
+	};
+#endif
+
+	if (S_ISREG(st.st_mode)) {
+		/* determine mimetype */
+		buffer_reset(sce->content_type);
+
+		for (k = 0; k < con->conf.mimetypes->used; k++) {
+			data_string *ds = (data_string *)con->conf.mimetypes->data[k];
+			buffer *type = ds->key;
+
+			if (type->used == 0) continue;
+
+			/* check if the right side is the same */
+			if (type->used > name->used) continue;
+
+			if (0 == strncasecmp(name->ptr + name->used - type->used, type->ptr, type->used - 1)) {
+				buffer_copy_string_buffer(sce->content_type, ds->value);
+				break;
+			}
+		}
+ 		etag_create(sce->etag, &(sce->st), con->etag_flags);
+#ifdef HAVE_XATTR
+		if (con->conf.use_xattr && buffer_is_empty(sce->content_type)) {
+			stat_cache_attr_get(sce->content_type, name->ptr);
+		}
+#endif
+	} else if (S_ISDIR(st.st_mode)) {
+ 		etag_create(sce->etag, &(sce->st), con->etag_flags);
+	}
+
+#ifdef HAVE_FAM_H
+	if (sc->fam &&
+	    (srv->srvconf.stat_cache_engine == STAT_CACHE_ENGINE_FAM)) {
+		/* is this directory already registered ? */
+		if (!dir_node) {
+			fam_dir = fam_dir_entry_init();
+			fam_dir->fc = sc->fam;
+
+			buffer_copy_string_buffer(fam_dir->name, sc->dir_name);
+
+			fam_dir->version = 1;
+
+			fam_dir->req = calloc(1, sizeof(FAMRequest));
+
+			if (0 != FAMMonitorDirectory(sc->fam, fam_dir->name->ptr,
+						     fam_dir->req, fam_dir)) {
+
+				log_error_write(srv, __FILE__, __LINE__, "sbsbs",
+						"monitoring dir failed:",
+						fam_dir->name, 
+						"file:", name,
+						FamErrlist[FAMErrno]);
+
+				fam_dir_entry_free(fam_dir);
+			} else {
+				int osize = 0;
+
+			       	if (sc->dirs) {
+					osize = sc->dirs->size;
+				}
+
+				sc->dirs = splaytree_insert(sc->dirs, dir_ndx, fam_dir);
+				assert(sc->dirs);
+				assert(sc->dirs->data == fam_dir);
+				assert(osize == (sc->dirs->size - 1));
+			}
+		} else {
+			fam_dir = dir_node->data;
+		}
+
+		/* bind the fam_fc to the stat() cache entry */
+
+		if (fam_dir) {
+			sce->dir_version = fam_dir->version;
+			sce->dir_ndx     = dir_ndx;
+		}
+	}
+#endif
+
+	*ret_sce = sce;
+
+	return HANDLER_GO_ON;
+}
+
+/**
+ * remove stat() from cache which havn't been stat()ed for
+ * more than 10 seconds
+ *
+ *
+ * walk though the stat-cache, collect the ids which are too old
+ * and remove them in a second loop
+ */
+
+static int stat_cache_tag_old_entries(server *srv, splay_tree *t, int *keys, size_t *ndx) {
+	stat_cache_entry *sce;
+
+	if (!t) return 0;
+
+	stat_cache_tag_old_entries(srv, t->left, keys, ndx);
+	stat_cache_tag_old_entries(srv, t->right, keys, ndx);
+
+	sce = t->data;
+
+	if (srv->cur_ts - sce->stat_ts > 2) {
+		keys[(*ndx)++] = t->key;
+	}
+
+	return 0;
+}
+
+int stat_cache_trigger_cleanup(server *srv) {
+	stat_cache *sc;
+	size_t max_ndx = 0, i;
+	int *keys;
+
+	sc = srv->stat_cache;
+
+	if (!sc->files) return 0;
+
+	keys = calloc(1, sizeof(size_t) * sc->files->size);
+
+	stat_cache_tag_old_entries(srv, sc->files, keys, &max_ndx);
+
+	for (i = 0; i < max_ndx; i++) {
+		int ndx = keys[i];
+		splay_tree *node;
+
+		sc->files = splaytree_splay(sc->files, ndx);
+
+		node = sc->files;
+
+		if (node && (node->key == ndx)) {
+#ifdef DEBUG_STAT_CACHE
+			size_t j;
+			int osize = splaytree_size(sc->files);
+			stat_cache_entry *sce = node->data;
+#endif
+			stat_cache_entry_free(node->data);
+			sc->files = splaytree_delete(sc->files, ndx);
+
+#ifdef DEBUG_STAT_CACHE
+			for (j = 0; j < ctrl.used; j++) {
+				if (ctrl.ptr[j] == ndx) {
+					ctrl.ptr[j] = ctrl.ptr[--ctrl.used];
+					break;
+				}
+			}
+
+			assert(osize - 1 == splaytree_size(sc->files));
+#endif
+		}
+	}
+
+	free(keys);
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/stat_cache.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/stat_cache.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/stat_cache.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,13 @@
+#ifndef _FILE_CACHE_H_
+#define _FILE_CACHE_H_
+
+#include "base.h"
+
+stat_cache *stat_cache_init(void);
+void stat_cache_free(stat_cache *fc);
+
+handler_t stat_cache_get_entry(server *srv, connection *con, buffer *name, stat_cache_entry **fce);
+handler_t stat_cache_handle_fdevent(void *_srv, void *_fce, int revent);
+
+int stat_cache_trigger_cleanup(server *srv);
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/status_counter.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/status_counter.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/status_counter.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,60 @@
+#include <stdlib.h>
+
+#include "status_counter.h"
+/**
+ * The status array can carry all the status information you want
+ * the key to the array is <module-prefix>.<name>
+ * and the values are counters
+ *
+ * example:
+ *   fastcgi.backends        = 10
+ *   fastcgi.active-backends = 6
+ *   fastcgi.backend.<key>.load = 24
+ *   fastcgi.backend.<key>....
+ *
+ *   fastcgi.backend.<key>.disconnects = ...
+ */
+
+data_integer *status_counter_get_counter(server *srv, const char *s, size_t len) {
+	data_integer *di;
+
+	if (NULL == (di = (data_integer *)array_get_element(srv->status, s))) {
+		/* not found, create it */
+
+		if (NULL == (di = (data_integer *)array_get_unused_element(srv->status, TYPE_INTEGER))) {
+			di = data_integer_init();
+		}
+		buffer_copy_string_len(di->key, s, len);
+		di->value = 0;
+
+		array_insert_unique(srv->status, (data_unset *)di);
+	}
+	return di;
+}
+
+/* dummies of the statistic framework functions
+ * they will be moved to a statistics.c later */
+int status_counter_inc(server *srv, const char *s, size_t len) {
+	data_integer *di = status_counter_get_counter(srv, s, len);
+
+	di->value++;
+
+	return 0;
+}
+
+int status_counter_dec(server *srv, const char *s, size_t len) {
+	data_integer *di = status_counter_get_counter(srv, s, len);
+
+	if (di->value > 0) di->value--;
+
+	return 0;
+}
+
+int status_counter_set(server *srv, const char *s, size_t len, int val) {
+	data_integer *di = status_counter_get_counter(srv, s, len);
+
+	di->value = val;
+
+	return 0;
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/src/status_counter.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/status_counter.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/status_counter.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,14 @@
+#ifndef _STATUS_COUNTER_H_
+#define _STATUS_COUNTER_H_
+
+#include <sys/types.h>
+
+#include "array.h"
+#include "base.h"
+
+data_integer *status_counter_get_counter(server *srv, const char *s, size_t len);
+int status_counter_inc(server *srv, const char *s, size_t len);
+int status_counter_dec(server *srv, const char *s, size_t len);
+int status_counter_set(server *srv, const char *s, size_t len, int val);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/stream.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/stream.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/stream.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,107 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "stream.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "sys-mmap.h"
+
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+int stream_open(stream *f, buffer *fn) {
+	struct stat st;
+#ifdef HAVE_MMAP
+	int fd;
+#elif defined __WIN32
+	HANDLE *fh, *mh;
+	void *p;
+#endif
+
+	f->start = NULL;
+
+	if (-1 == stat(fn->ptr, &st)) {
+		return -1;
+	}
+
+	f->size = st.st_size;
+
+#ifdef HAVE_MMAP
+	if (-1 == (fd = open(fn->ptr, O_RDONLY | O_BINARY))) {
+		return -1;
+	}
+
+	f->start = mmap(0, f->size, PROT_READ, MAP_SHARED, fd, 0);
+
+	close(fd);
+
+	if (MAP_FAILED == f->start) {
+		return -1;
+	}
+
+#elif defined __WIN32
+	fh = CreateFile(fn->ptr,
+			GENERIC_READ,
+			FILE_SHARE_READ,
+			NULL,
+			OPEN_EXISTING,
+			FILE_ATTRIBUTE_READONLY,
+			NULL);
+
+	if (!fh) return -1;
+
+	mh = CreateFileMapping( fh,
+			NULL,
+			PAGE_READONLY,
+			(sizeof(off_t) > 4) ? f->size >> 32 : 0,
+			f->size & 0xffffffff,
+			NULL);
+
+	if (!mh) {
+/*
+		LPVOID lpMsgBuf;
+		FormatMessage(
+		        FORMAT_MESSAGE_ALLOCATE_BUFFER |
+		        FORMAT_MESSAGE_FROM_SYSTEM,
+		        NULL,
+		        GetLastError(),
+		        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+		        (LPTSTR) &lpMsgBuf,
+		        0, NULL );
+*/
+		return -1;
+	}
+
+	p = MapViewOfFile(mh,
+			FILE_MAP_READ,
+			0,
+			0,
+			0);
+	CloseHandle(mh);
+	CloseHandle(fh);
+
+	f->start = p;
+#else
+# error no mmap found
+#endif
+
+	return 0;
+}
+
+int stream_close(stream *f) {
+#ifdef HAVE_MMAP
+	if (f->start) munmap(f->start, f->size);
+#elif defined(__WIN32)
+	if (f->start) UnmapViewOfFile(f->start);
+#endif
+
+	f->start = NULL;
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/src/stream.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/stream.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/stream.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,14 @@
+#ifndef _STREAM_H_
+#define _STREAM_H_
+
+#include "buffer.h"
+
+typedef struct {
+	char *start;
+	off_t size;
+} stream;
+
+int stream_open(stream *f, buffer *fn);
+int stream_close(stream *f);
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/sys-mmap.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/sys-mmap.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/sys-mmap.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,24 @@
+#ifndef WIN32_MMAP_H
+#define WIN32_MMAP_H
+
+#ifdef __WIN32
+
+#define MAP_FAILED -1
+#define PROT_SHARED 0
+#define MAP_SHARED 0
+#define PROT_READ 0
+
+#define mmap(a, b, c, d, e, f) (-1)
+#define munmap(a, b) (-1)
+
+#include <windows.h>
+
+#else
+#include <sys/mman.h>
+
+#ifndef MAP_FAILED
+#define MAP_FAILED -1
+#endif
+#endif
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/src/sys-socket.h
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/src/sys-socket.h	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/src/sys-socket.h	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,25 @@
+#ifndef WIN32_SOCKET_H
+#define WIN32_SOCKET_H
+
+#ifdef __WIN32
+
+#include <winsock2.h>
+
+#define ECONNRESET WSAECONNRESET
+#define EINPROGRESS WSAEINPROGRESS
+#define EALREADY WSAEALREADY
+#define ECONNABORTED WSAECONNABORTED
+#define ioctl ioctlsocket
+#define hstrerror(x) ""
+#else
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <sys/un.h>
+#include <arpa/inet.h>
+
+#include <netdb.h>
+#endif
+
+#endif

Added: lighttpd/tags/1.4.19-5+lenny2/tests/404-handler.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/404-handler.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/404-handler.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,49 @@
+debug.log-request-handling   = "enable"
+debug.log-response-header   = "enable"
+debug.log-request-header   = "enable"
+
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Apache 1.3.29"
+
+
+server.modules              = (
+				  "mod_fastcgi",
+				  "mod_cgi",
+				"mod_accesslog" )
+
+######################## MODULE CONFIG ############################
+
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".html" => "text/html" )
+
+cgi.assign = (".pl" => "/usr/bin/perl" )
+
+# fastcgi.server += ( "/404.pl" =>
+#                    ( "404-handler" =>
+#                      (
+#                        "socket" => env.SRCDIR + "/tmp/pl-404-fastcgi-1.socket",
+#                        "bin-path" => server.document-root + "/404.pl",
+#                        "max-procs" => 1,
+#                        "check-local" => "disable",
+#                        "broken-scriptfilename" => "enable",
+#                      )
+#                    ),
+#                  )
+
+$HTTP["url"] =~ "^/static/" {
+  server.error-handler-404 = "/404.html"
+}
+else $HTTP["url"] =~ "." {
+  server.error-handler-404 = "/404.pl"
+}

Added: lighttpd/tags/1.4.19-5+lenny2/tests/LightyTest.pm
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/LightyTest.pm	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/LightyTest.pm	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,308 @@
+#! /usr/bin/perl -w
+
+package LightyTest;
+use strict;
+use IO::Socket;
+use Test::More;
+use Socket;
+use Cwd 'abs_path';
+
+sub mtime {
+	my $file = shift;
+	my @stat = stat $file;
+	return @stat ? $stat[9] : 0;
+}
+sub new {
+	my $class = shift;
+	my $self = {};
+	my $lpath;
+
+	$self->{CONFIGFILE} = 'lighttpd.conf';
+
+	$lpath = (defined $ENV{'top_builddir'} ? $ENV{'top_builddir'} : '..');
+	$self->{BASEDIR} = abs_path($lpath);
+
+	$lpath = (defined $ENV{'top_builddir'} ? $ENV{'top_builddir'}."/tests/" : '.');
+	$self->{TESTDIR} = abs_path($lpath);
+
+	$lpath = (defined $ENV{'srcdir'} ? $ENV{'srcdir'} : '.');
+	$self->{SRCDIR} = abs_path($lpath);
+
+
+	if (mtime($self->{BASEDIR}.'/src/lighttpd') > mtime($self->{BASEDIR}.'/build/lighttpd')) {
+		$self->{LIGHTTPD_PATH} = $self->{BASEDIR}.'/src/lighttpd';
+		$self->{MODULES_PATH} = $self->{BASEDIR}.'/src/.libs';
+	} else {
+		$self->{LIGHTTPD_PATH} = $self->{BASEDIR}.'/build/lighttpd';
+		$self->{MODULES_PATH} = $self->{BASEDIR}.'/build';
+	}
+	$self->{LIGHTTPD_PIDFILE} = $self->{TESTDIR}.'/tmp/lighttpd/lighttpd.pid';
+	$self->{PIDOF_PIDFILE} = $self->{TESTDIR}.'/tmp/lighttpd/pidof.pid';
+	$self->{PORT} = 2048;
+
+	my ($name, $aliases, $addrtype, $net) = gethostbyaddr(inet_aton("127.0.0.1"), AF_INET);
+
+	$self->{HOSTNAME} = $name;
+
+	bless($self, $class);
+
+	return $self;
+}
+
+sub listening_on {
+	my $self = shift;
+	my $port = shift;
+
+	my $remote = 
+ 	  IO::Socket::INET->new(Proto    => "tcp",
+				PeerAddr => "127.0.0.1",
+				PeerPort => $port) or return 0;
+
+	close $remote;
+
+	return 1;
+}
+
+sub stop_proc {
+	my $self = shift;
+
+	open F, $self->{LIGHTTPD_PIDFILE} or return -1;
+	my $pid = <F>;
+	close F;
+
+	if (defined $pid) {
+		kill('TERM',$pid) or return -1;
+		select(undef, undef, undef, 0.1);
+	}
+
+	return 0;
+}
+
+
+sub start_proc {
+	my $self = shift;
+	# kill old proc if necessary
+	$self->stop_proc;
+
+	# pre-process configfile if necessary
+	#
+
+	$ENV{'SRCDIR'} = $self->{BASEDIR}.'/tests';
+
+	unlink($self->{LIGHTTPD_PIDFILE});
+	if (defined $ENV{"TRACEME"} && $ENV{"TRACEME"} eq 'strace') {
+		system("strace -tt -s 512 -o strace ".$self->{LIGHTTPD_PATH}." -D -f ".$self->{SRCDIR}."/".$self->{CONFIGFILE}." -m ".$self->{MODULES_PATH}." &");
+	} elsif (defined $ENV{"TRACEME"} && $ENV{"TRACEME"} eq 'truss') {
+		system("/usr/dtrctkit/bin/dtruss -d -e ".$self->{LIGHTTPD_PATH}." -D -f ".$self->{SRCDIR}."/".$self->{CONFIGFILE}." -m ".$self->{MODULES_PATH}." 2> strace &");
+	} elsif (defined $ENV{"TRACEME"} && $ENV{"TRACEME"} eq 'valgrind') {
+		system("valgrind --tool=memcheck --show-reachable=yes --leak-check=yes --log-file=valgrind ".$self->{LIGHTTPD_PATH}." -D -f ".$self->{SRCDIR}."/".$self->{CONFIGFILE}." -m ".$self->{MODULES_PATH}." &");
+	} else {
+		system($self->{LIGHTTPD_PATH}." -f ".$self->{SRCDIR}."/".$self->{CONFIGFILE}." -m ".$self->{MODULES_PATH});
+	}
+
+	select(undef, undef, undef, 0.1);
+	if (not -e $self->{LIGHTTPD_PIDFILE} or 0 == kill 0, `cat $self->{LIGHTTPD_PIDFILE}`) {
+		select(undef, undef, undef, 2);	
+	}
+
+	unlink($self->{TESTDIR}."/tmp/cfg.file");
+
+	# no pidfile, we failed
+	if (not -e $self->{LIGHTTPD_PIDFILE}) {
+		diag(sprintf('Could not find pidfile: %s', $self->{LIGHTTPD_PIDFILE}));
+		return -1;
+	}
+
+	# the process is gone, we failed
+	if (0 == kill 0, `cat $self->{LIGHTTPD_PIDFILE}`) {
+		diag(sprintf('the process referenced by %s is not up', $self->{LIGHTTPD_PIDFILE}));
+		return -1;
+	}
+
+	0;
+}
+
+sub handle_http {
+	my $self = shift;
+	my $t = shift;
+	my $EOL = "\015\012";
+	my $BLANK = $EOL x 2;
+	my $host = "127.0.0.1";
+
+	my @request = $t->{REQUEST};
+	my @response = $t->{RESPONSE};
+
+	my $remote = 
+ 	  IO::Socket::INET->new(Proto    => "tcp",
+				PeerAddr => $host,
+				PeerPort => $self->{PORT});
+
+	if (not defined $remote) {
+		diag("connect failed: $!");
+	       	return -1;
+	}
+
+	$remote->autoflush(1);
+
+	foreach(@request) {
+		# pipeline requests
+		s/\r//g;
+		s/\n/$EOL/g;
+
+		print $remote $_.$BLANK;	
+	}
+
+	my $lines = "";
+
+	# read everything
+	while(<$remote>) {
+		$lines .= $_;
+	}
+	
+	close $remote;
+
+	my $full_response = $lines;
+
+	my $href;
+	foreach $href ( @{ $t->{RESPONSE} }) {
+		# first line is always response header
+		my %resp_hdr;
+		my $resp_body;
+		my $resp_line;
+		my $conditions = $_;
+
+		for (my $ln = 0; defined $lines; $ln++) {
+			(my $line, $lines) = split($EOL, $lines, 2);
+
+			# header finished
+			last if(length($line) == 0);
+
+			if ($ln == 0) {
+				# response header
+				$resp_line = $line;
+			} else {
+				# response vars
+
+				if ($line =~ /^([^:]+):\s*(.+)$/) {
+					(my $h = $1) =~ tr/[A-Z]/[a-z]/;
+
+					if (defined $resp_hdr{$h}) {
+						diag(sprintf("header %s is duplicated: %s and %s\n",
+						             $h, $resp_hdr{$h}, $2));
+					} else {
+						$resp_hdr{$h} = $2;
+					}
+				} else {
+					diag(sprintf("unexpected line '$line'\n"));
+					return -1;
+				}
+			}
+		}
+
+		$t->{etag} = $resp_hdr{'etag'};
+		$t->{date} = $resp_hdr{'date'};
+
+		# check length
+		if (defined $resp_hdr{"content-length"}) {
+			$resp_body = substr($lines, 0, $resp_hdr{"content-length"});
+			if (length($lines) < $resp_hdr{"content-length"}) {
+				$lines = "";
+			} else {
+				$lines = substr($lines, $resp_hdr{"content-length"});
+			}
+			undef $lines if (length($lines) == 0);
+		} else {
+			$resp_body = $lines;
+			undef $lines;
+		}
+
+		# check conditions
+		if ($resp_line =~ /^(HTTP\/1\.[01]) ([0-9]{3}) .+$/) {
+			if ($href->{'HTTP-Protocol'} ne $1) {
+				diag(sprintf("proto failed: expected '%s', got '%s'\n", $href->{'HTTP-Protocol'}, $1));
+				return -1;
+			}
+			if ($href->{'HTTP-Status'} ne $2) {
+				diag(sprintf("status failed: expected '%s', got '%s'\n", $href->{'HTTP-Status'}, $2));
+				return -1;
+			}
+		} else {
+			diag(sprintf("unexpected resp_line '$resp_line'\n"));
+			return -1;
+		}
+
+		if (defined $href->{'HTTP-Content'}) {
+			$resp_body = "" unless defined $resp_body;
+			if ($href->{'HTTP-Content'} ne $resp_body) {
+				diag(sprintf("body failed: expected '%s', got '%s'\n", $href->{'HTTP-Content'}, $resp_body));
+				return -1;
+			}
+		} elsif (defined $href->{'-HTTP-Content'}) {
+			if (defined $resp_body && $resp_body ne '') {
+				diag(sprintf("body failed: expected empty body, got '%s'\n", $resp_body));
+				return -1;
+			}
+		}
+
+		foreach (keys %{ $href }) {
+			## filter special keys
+			next if $_ eq 'HTTP-Protocol';
+			next if $_ eq 'HTTP-Status';
+			next if $_ eq 'HTTP-Content';
+			next if $_ eq '-HTTP-Content';
+
+			(my $k = $_) =~ tr/[A-Z]/[a-z]/;
+
+			my $verify_value = 1;
+			my $key_inverted = 0;
+
+			if (substr($k, 0, 1) eq '+') {
+				## the key has to exist, but the value is ignored
+				$k = substr($k, 1);
+				$verify_value = 0;
+			} elsif (substr($k, 0, 1) eq '-') {
+				## the key should NOT exist
+				$k = substr($k, 1);
+				$key_inverted = 1;
+				$verify_value = 0; ## skip the value check
+			}
+
+			if ($key_inverted) {
+				if (defined $resp_hdr{$k}) {
+					diag(sprintf("required header '%s' is missing\n", $k));
+					return -1;
+				}
+			} else {
+				if (not defined $resp_hdr{$k}) {
+					diag(sprintf("required header '%s' is missing\n", $k));
+					return -1;
+				}
+			}
+
+			if ($verify_value) {
+				if ($href->{$_} =~ /^\/(.+)\/$/) {
+					if ($resp_hdr{$k} !~ /$1/) {
+						diag(sprintf("response-header failed: expected '%s', got '%s', regex: %s\n", 
+					             $href->{$_}, $resp_hdr{$k}, $1));
+						return -1;
+					}
+				} elsif ($href->{$_} ne $resp_hdr{$k}) {
+					diag(sprintf("response-header failed: expected '%s', got '%s'\n", 
+					     $href->{$_}, $resp_hdr{$k}));
+					return -1;
+				}
+			}
+		}
+	}
+
+	# we should have sucked up everything
+	if (defined $lines) {
+		diag(sprintf("unexpected lines '$lines'\n"));
+		return -1;
+	}
+
+	return 0;
+}
+    
+1;
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/LightyTest.pm
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,76 @@
+# lighttpd.conf and conformance.pl expect this directory
+testdir=$(srcdir)/tmp/lighttpd/
+
+if CHECK_WITH_FASTCGI
+check_PROGRAMS=fcgi-auth fcgi-responder
+
+fcgi_auth_SOURCES=fcgi-auth.c
+fcgi_auth_LDADD=-lfcgi
+
+fcgi_responder_SOURCES=fcgi-responder.c
+fcgi_responder_LDADD=-lfcgi
+endif
+
+TESTS=\
+	prepare.sh \
+	run-tests.pl \
+	cleanup.sh
+
+CONFS=fastcgi-10.conf \
+      fastcgi-auth.conf \
+      fastcgi-responder.conf \
+      fastcgi-13.conf \
+      bug-06.conf \
+      bug-12.conf \
+      core-var-include.t \
+      var-include.conf \
+      var-include-sub.conf \
+      condition.conf \
+      core-condition.t \
+      core-request.t \
+      core-response.t \
+      core-keepalive.t \
+      core.t \
+	  mod-proxy.t \
+	  proxy.conf \
+	  mod-secdownload.t \
+      mod-access.t \
+      mod-auth.t \
+      mod-cgi.t \
+      mod-compress.t \
+      mod-fastcgi.t \
+      mod-redirect.t \
+      mod-rewrite.t \
+      mod-userdir.t \
+	  env-variables.t \
+	  env-variables.conf \
+	  symlink.t \
+      request.t \
+      mod-ssi.t \
+      LightyTest.pm \
+      mod-setenv.t \
+      lowercase.t \
+      lowercase.conf \
+      cachable.t \
+      core-404-handler.t \
+      404-handler.conf
+
+TESTS_ENVIRONMENT=$(srcdir)/wrapper.sh $(srcdir) $(top_builddir)
+
+EXTRA_DIST=wrapper.sh lighttpd.conf \
+	lighttpd.user \
+	lighttpd.htpasswd \
+	SConscript \
+	$(CONFS) \
+	$(TESTS)
+
+SUBDIRS=docroot
+
+leak-check:
+	for i in $(TESTS); do \
+		$(srcdir)/$$i; \
+		echo $$?; \
+	done
+
+clean-local:
+	rm -f *.out

Added: lighttpd/tags/1.4.19-5+lenny2/tests/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,729 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+ at CHECK_WITH_FASTCGI_TRUE@check_PROGRAMS = fcgi-auth$(EXEEXT) \
+ at CHECK_WITH_FASTCGI_TRUE@	fcgi-responder$(EXEEXT)
+subdir = tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__fcgi_auth_SOURCES_DIST = fcgi-auth.c
+ at CHECK_WITH_FASTCGI_TRUE@am_fcgi_auth_OBJECTS = fcgi-auth.$(OBJEXT)
+fcgi_auth_OBJECTS = $(am_fcgi_auth_OBJECTS)
+fcgi_auth_DEPENDENCIES =
+am__fcgi_responder_SOURCES_DIST = fcgi-responder.c
+ at CHECK_WITH_FASTCGI_TRUE@am_fcgi_responder_OBJECTS =  \
+ at CHECK_WITH_FASTCGI_TRUE@	fcgi-responder.$(OBJEXT)
+fcgi_responder_OBJECTS = $(am_fcgi_responder_OBJECTS)
+fcgi_responder_DEPENDENCIES =
+DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+SOURCES = $(fcgi_auth_SOURCES) $(fcgi_responder_SOURCES)
+DIST_SOURCES = $(am__fcgi_auth_SOURCES_DIST) \
+	$(am__fcgi_responder_SOURCES_DIST)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# lighttpd.conf and conformance.pl expect this directory
+testdir = $(srcdir)/tmp/lighttpd/
+ at CHECK_WITH_FASTCGI_TRUE@fcgi_auth_SOURCES = fcgi-auth.c
+ at CHECK_WITH_FASTCGI_TRUE@fcgi_auth_LDADD = -lfcgi
+ at CHECK_WITH_FASTCGI_TRUE@fcgi_responder_SOURCES = fcgi-responder.c
+ at CHECK_WITH_FASTCGI_TRUE@fcgi_responder_LDADD = -lfcgi
+TESTS = \
+	prepare.sh \
+	run-tests.pl \
+	cleanup.sh
+
+CONFS = fastcgi-10.conf \
+      fastcgi-auth.conf \
+      fastcgi-responder.conf \
+      fastcgi-13.conf \
+      bug-06.conf \
+      bug-12.conf \
+      core-var-include.t \
+      var-include.conf \
+      var-include-sub.conf \
+      condition.conf \
+      core-condition.t \
+      core-request.t \
+      core-response.t \
+      core-keepalive.t \
+      core.t \
+	  mod-proxy.t \
+	  proxy.conf \
+	  mod-secdownload.t \
+      mod-access.t \
+      mod-auth.t \
+      mod-cgi.t \
+      mod-compress.t \
+      mod-fastcgi.t \
+      mod-redirect.t \
+      mod-rewrite.t \
+      mod-userdir.t \
+	  env-variables.t \
+	  env-variables.conf \
+	  symlink.t \
+      request.t \
+      mod-ssi.t \
+      LightyTest.pm \
+      mod-setenv.t \
+      lowercase.t \
+      lowercase.conf \
+      cachable.t \
+      core-404-handler.t \
+      404-handler.conf
+
+TESTS_ENVIRONMENT = $(srcdir)/wrapper.sh $(srcdir) $(top_builddir)
+EXTRA_DIST = wrapper.sh lighttpd.conf \
+	lighttpd.user \
+	lighttpd.htpasswd \
+	SConscript \
+	$(CONFS) \
+	$(TESTS)
+
+SUBDIRS = docroot
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  tests/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; for p in $$list; do \
+	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  echo " rm -f $$p $$f"; \
+	  rm -f $$p $$f ; \
+	done
+fcgi-auth$(EXEEXT): $(fcgi_auth_OBJECTS) $(fcgi_auth_DEPENDENCIES) 
+	@rm -f fcgi-auth$(EXEEXT)
+	$(LINK) $(fcgi_auth_OBJECTS) $(fcgi_auth_LDADD) $(LIBS)
+fcgi-responder$(EXEEXT): $(fcgi_responder_OBJECTS) $(fcgi_responder_DEPENDENCIES) 
+	@rm -f fcgi-responder$(EXEEXT)
+	$(LINK) $(fcgi_responder_OBJECTS) $(fcgi_responder_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fcgi-auth.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fcgi-responder.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+	@failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[	 ]'; \
+	srcdir=$(srcdir); export srcdir; \
+	list=' $(TESTS) '; \
+	if test -n "$$list"; then \
+	  for tst in $$list; do \
+	    if test -f ./$$tst; then dir=./; \
+	    elif test -f $$tst; then dir=; \
+	    else dir="$(srcdir)/"; fi; \
+	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *$$ws$$tst$$ws*) \
+		xpass=`expr $$xpass + 1`; \
+		failed=`expr $$failed + 1`; \
+		echo "XPASS: $$tst"; \
+	      ;; \
+	      *) \
+		echo "PASS: $$tst"; \
+	      ;; \
+	      esac; \
+	    elif test $$? -ne 77; then \
+	      all=`expr $$all + 1`; \
+	      case " $(XFAIL_TESTS) " in \
+	      *$$ws$$tst$$ws*) \
+		xfail=`expr $$xfail + 1`; \
+		echo "XFAIL: $$tst"; \
+	      ;; \
+	      *) \
+		failed=`expr $$failed + 1`; \
+		echo "FAIL: $$tst"; \
+	      ;; \
+	      esac; \
+	    else \
+	      skip=`expr $$skip + 1`; \
+	      echo "SKIP: $$tst"; \
+	    fi; \
+	  done; \
+	  if test "$$failed" -eq 0; then \
+	    if test "$$xfail" -eq 0; then \
+	      banner="All $$all tests passed"; \
+	    else \
+	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+	    fi; \
+	  else \
+	    if test "$$xpass" -eq 0; then \
+	      banner="$$failed of $$all tests failed"; \
+	    else \
+	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+	    fi; \
+	  fi; \
+	  dashes="$$banner"; \
+	  skipped=""; \
+	  if test "$$skip" -ne 0; then \
+	    skipped="($$skip tests were not run)"; \
+	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$skipped"; \
+	  fi; \
+	  report=""; \
+	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+	    report="Please report to $(PACKAGE_BUGREPORT)"; \
+	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+	      dashes="$$report"; \
+	  fi; \
+	  dashes=`echo "$$dashes" | sed s/./=/g`; \
+	  echo "$$dashes"; \
+	  echo "$$banner"; \
+	  test -z "$$skipped" || echo "$$skipped"; \
+	  test -z "$$report" || echo "$$report"; \
+	  echo "$$dashes"; \
+	  test "$$failed" -eq 0; \
+	else :; fi
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \
+	mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+	install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool clean-local \
+	ctags ctags-recursive distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+leak-check:
+	for i in $(TESTS); do \
+		$(srcdir)/$$i; \
+		echo $$?; \
+	done
+
+clean-local:
+	rm -f *.out
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/tests/SConscript
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/SConscript	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/SConscript	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,45 @@
+Import('env')
+
+tests = Split('prepare.sh \
+        run-tests.pl \
+        cleanup.sh')
+
+extra_dist = Split('fastcgi-10.conf \
+      fastcgi-auth.conf \
+      fastcgi-responder.conf \
+      fastcgi-13.conf \
+      bug-06.conf \
+      bug-12.conf \
+      core-var-include.t \
+      var-include.conf \
+      var-include-sub.conf \
+      condition.conf \
+      core-condition.t \
+      core-request.t \
+      core-response.t \
+      core-keepalive.t \
+      core.t \
+      mod-access.t \
+      mod-auth.t \
+      mod-cgi.t \
+      mod-compress.t \
+      mod-fastcgi.t \
+      mod-redirect.t \
+      mod-userdir.t \
+      mod-rewrite.t \
+      request.t \
+      mod-ssi.t \
+      LightyTest.pm \
+      mod-setenv.t')
+
+t  = env.Command('foo1', 'prepare.sh', '(cd ./tests/; ./prepare.sh; cd ..)')
+t += env.Command('foo2', 'run-tests.pl', '( cd ./tests/; SHELL=/bin/sh ./run-tests.pl; cd ..)')
+t += env.Command('foo3', 'cleanup.sh', '(cd ./tests/; ./cleanup.sh; cd ..)')
+
+if env['LIBFCGI']:
+	fcgis = []
+	fcgis += env.Program("fcgi-auth", "fcgi-auth.c", LIBS=env['LIBFCGI'])
+	fcgis += env.Program("fcgi-responder", "fcgi-responder.c", LIBS=env['LIBFCGI'])
+	env.Depends(t, fcgis)
+
+env.Alias('check', t )

Added: lighttpd/tags/1.4.19-5+lenny2/tests/bug-06.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/bug-06.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/bug-06.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,163 @@
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+# server.license              = "00000001000000013feccb804014587f000000010000000105911c976a3d462c8eaa2d7ca850432c"
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Apache 1.3.29"
+
+
+##
+## Format: <errorfile-prefix><status>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix    = "/home/weigon/projects/lighttpd/doc/status-"
+
+server.dir-listing          = "enable"
+
+#server.event-handler        = "linux-sysepoll"
+#server.event-handler        = "linux-rtsig"
+
+#server.modules.path         = ""
+server.modules              = (
+				"mod_rewrite",
+				"mod_setenv",
+			        "mod_access",
+				"mod_auth",
+#				"mod_httptls",
+				"mod_status",
+				"mod_expire",
+				"mod_simple_vhost",
+				"mod_redirect",
+#				"mod_evhost",
+#				"mod_localizer",
+				"mod_fastcgi",
+				"mod_cgi",
+				"mod_compress",
+				"mod_accesslog" )
+
+server.indexfiles           = ( "index.html",
+                                "index.htm", "default.htm", "index.php" )
+
+#,-- only root can use these options
+#|
+#|# chroot() to directory (default: no chroot() )
+#| server.chroot  /
+#|# change uid to <uid> (default: don't care)
+#| server.userid wwwrun
+#|# change uid to <uid> (default: don't care)
+#| server.groupid wwwrun
+#|
+#`--
+
+
+######################## MODULE CONFIG ############################
+
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".png"  => "image/png",
+                                ".jpg"  => "image/jpeg",
+                                ".jpeg" => "image/jpeg",
+                                ".gif"  => "image/gif",
+                                ".html" => "text/html",
+                                ".htm"  => "text/html",
+                                ".pdf"  => "application/pdf",
+                                ".swf"  => "application/x-shockwave-flash",
+                                ".spl"  => "application/futuresplash",
+                                ".txt"  => "text/plain",
+                                ".tar.gz" =>   "application/x-tgz",
+                                ".tgz"  => "application/x-tgz",
+                                ".gz"   => "application/x-gzip",
+				".c"    => "text/plain",
+				".conf" => "text/plain" )
+
+compress.cache-dir          = env.SRCDIR + "/tmp/lighttpd/cache/compress/"
+compress.filetype           = ("text/plain", "text/html")
+
+setenv.add-environment      = ( "TRAC_ENV" => "foo")
+setenv.add-request-header   = ( "FOO" => "foo")
+setenv.add-response-header  = ( "BAR" => "foo")
+
+fastcgi.debug               = 0
+fastcgi.server              = ( ".php" => (
+                                  "grisu" => (
+				    "host" => "127.0.0.1",
+				    "port" => 1026,
+#				    "mode" => "authorizer",
+#				    "docroot" => env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/",
+				  )
+				)
+			      )
+
+
+cgi.assign                  = ( ".pl"  => "/usr/bin/perl",
+                                ".cgi" => "/usr/bin/perl",
+				".py"  => "/usr/bin/python" )
+
+
+
+ssl.engine                  = "disable"
+ssl.pemfile                 = "server.pem"
+
+auth.backend                = "plain"
+auth.backend.plain.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.user"
+auth.backend.plain.groupfile = "lighttpd.group"
+
+auth.backend.ldap.hostname  = "localhost"
+auth.backend.ldap.base-dn   = "dc=my-domain,dc=com"
+auth.backend.ldap.filter    = "(uid=$)"
+
+auth.require                = ( "/server-status" =>
+                                (
+				  "method"  => "digest",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				),
+				"/auth.php" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "user=jan"
+				),
+				"/server-config" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "user=weigon", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				)
+                              )
+
+url.access-deny             = ( "~", ".inc")
+
+url.redirect                = ( "^/redirect/$" => "http://localhost:2048/" )
+
+expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#cache.cache-dir             = "/home/weigon/wwwroot/cache/"
+
+#### status module
+status.status-url           = "/server-status"
+status.config-url           = "/server-config"
+
+simple-vhost.document-root  = "pages"
+simple-vhost.server-root    = env.SRCDIR + "/tmp/lighttpd/servers/"
+simple-vhost.default-host   = "www.example.org"
+
+$HTTP["host"] == "vvv.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+}
+
+$HTTP["host"] == "zzz.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "zzz.example.org"
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/bug-12.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/bug-12.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/bug-12.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,165 @@
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+# server.license              = "00000001000000013feccb804014587f000000010000000105911c976a3d462c8eaa2d7ca850432c"
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Apache 1.3.29"
+
+
+##
+## Format: <errorfile-prefix><status>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix    = "/home/weigon/projects/lighttpd/doc/status-"
+
+server.dir-listing          = "enable"
+
+#server.event-handler        = "linux-sysepoll"
+#server.event-handler        = "linux-rtsig"
+
+#server.modules.path         = ""
+server.modules              = (
+				"mod_rewrite",
+				"mod_setenv",
+			        "mod_access",
+				"mod_auth",
+#				"mod_httptls",
+				"mod_status",
+				"mod_expire",
+				"mod_simple_vhost",
+				"mod_redirect",
+#				"mod_evhost",
+#				"mod_localizer",
+				"mod_fastcgi",
+				"mod_cgi",
+				"mod_compress",
+				"mod_accesslog" )
+
+server.indexfiles           = ( "index.html",
+                                "index.htm", "default.htm", "index.php" )
+
+server.error-handler-404 = "/indexfile/return-404.php"
+
+#,-- only root can use these options
+#|
+#|# chroot() to directory (default: no chroot() )
+#| server.chroot  /
+#|# change uid to <uid> (default: don't care)
+#| server.userid wwwrun
+#|# change uid to <uid> (default: don't care)
+#| server.groupid wwwrun
+#|
+#`--
+
+
+######################## MODULE CONFIG ############################
+
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".png"  => "image/png",
+                                ".jpg"  => "image/jpeg",
+                                ".jpeg" => "image/jpeg",
+                                ".gif"  => "image/gif",
+                                ".html" => "text/html",
+                                ".htm"  => "text/html",
+                                ".pdf"  => "application/pdf",
+                                ".swf"  => "application/x-shockwave-flash",
+                                ".spl"  => "application/futuresplash",
+                                ".txt"  => "text/plain",
+                                ".tar.gz" =>   "application/x-tgz",
+                                ".tgz"  => "application/x-tgz",
+                                ".gz"   => "application/x-gzip",
+				".c"    => "text/plain",
+				".conf" => "text/plain" )
+
+compress.cache-dir          = env.SRCDIR + "/tmp/lighttpd/cache/compress/"
+compress.filetype           = ("text/plain", "text/html")
+
+setenv.add-environment      = ( "TRAC_ENV" => "foo")
+setenv.add-request-header   = ( "FOO" => "foo")
+setenv.add-response-header  = ( "BAR" => "foo")
+
+fastcgi.debug               = 0
+fastcgi.server              = ( ".php" => (
+                                  "grisu" => (
+				    "host" => "127.0.0.1",
+				    "port" => 1026,
+#				    "mode" => "authorizer",
+#				    "docroot" => env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/",
+				  )
+				)
+			      )
+
+
+cgi.assign                  = ( ".pl"  => "/usr/bin/perl",
+                                ".cgi" => "/usr/bin/perl",
+				".py"  => "/usr/bin/python" )
+
+
+
+ssl.engine                  = "disable"
+ssl.pemfile                 = "server.pem"
+
+auth.backend                = "plain"
+auth.backend.plain.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.user"
+auth.backend.plain.groupfile = "lighttpd.group"
+
+auth.backend.ldap.hostname  = "localhost"
+auth.backend.ldap.base-dn   = "dc=my-domain,dc=com"
+auth.backend.ldap.filter    = "(uid=$)"
+
+auth.require                = ( "/server-status" =>
+                                (
+				  "method"  => "digest",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				),
+				"/auth.php" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "user=jan"
+				),
+				"/server-config" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "user=weigon", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				)
+                              )
+
+url.access-deny             = ( "~", ".inc")
+
+url.redirect                = ( "^/redirect/$" => "http://localhost:2048/" )
+
+expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#cache.cache-dir             = "/home/weigon/wwwroot/cache/"
+
+#### status module
+status.status-url           = "/server-status"
+status.config-url           = "/server-config"
+
+simple-vhost.document-root  = "pages"
+simple-vhost.server-root    = env.SRCDIR + "/tmp/lighttpd/servers/"
+simple-vhost.default-host   = "www.example.org"
+
+$HTTP["host"] == "vvv.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+}
+
+$HTTP["host"] == "zzz.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "zzz.example.org"
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/cachable.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/cachable.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/cachable.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,121 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 13;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+$tf->{CONFIGFILE} = 'lighttpd.conf';
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+## check if If-Modified-Since, If-None-Match works
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-Modified-Since: Sun, 01 Jan 1970 00:00:01 GMT
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - old If-Modified-Since');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-Modified-Since: Sun, 01 Jan 1970 00:00:01 GMT; foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+Last-Modified' => ''} ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - old If-Modified-Since, comment');
+
+my $now = $t->{date};
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-Modified-Since: $now
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304 } ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - new If-Modified-Since');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-Modified-Since: $now; foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304 } ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - new If-Modified-Since, comment');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-None-Match: foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+ETag' => ''} ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - old If-None-Match');
+
+my $etag = $t->{etag};
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-None-Match: $etag
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304 } ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - old If-None-Match');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-None-Match: $etag
+If-Modified-Since: Sun, 01 Jan 1970 00:00:01 GMT; foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - ETag + old Last-Modified');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-None-Match: $etag
+If-Modified-Since: $now; foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304 } ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - ETag, Last-Modified + comment');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-None-Match: Foo
+If-Modified-Since: Sun, 01 Jan 1970 00:00:01 GMT; foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - old ETAG + old Last-Modified');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-None-Match: $etag
+If-Modified-Since: $now foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 412 } ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - ETag + Last-Modified + overlong timestamp');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-None-Match: $etag
+Host: etag.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Conditional GET - ETag + disabled etags on server side');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/cachable.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/cleanup.sh
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/cleanup.sh	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/cleanup.sh	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+if test x$srcdir = x; then
+	srcdir=.
+fi
+
+tmpdir=$top_builddir/tests/tmp/
+
+# remove test-framework
+rm -rf $tmpdir
+
+printf "%-40s" "cleaning up"
+
+exit 0


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/cleanup.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/condition.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/condition.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/condition.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,59 @@
+
+debug.log-request-handling = "enable"
+debug.log-condition-handling = "enable"
+
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Apache 1.3.29"
+
+
+server.modules              = (
+				  "mod_redirect",
+				"mod_accesslog" )
+
+######################## MODULE CONFIG ############################
+
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".html" => "text/html" )
+
+url.redirect = ("^" => "/default")
+
+$HTTP["host"] == "www.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "www.example.org"
+  url.redirect = ("^" => "/match_1")
+}
+else $HTTP["host"] == "test1.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "test1.example.org"
+  url.redirect = ("^" => "/match_2")
+}
+# comments
+else $HTTP["host"] == "test2.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "test2.example.org"
+  url.redirect = ("^" => "/match_3")
+}
+
+	 # comments
+
+else $HTTP["host"] == "test3.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "test3.example.org"
+  url.redirect = ("^" => "/match_4")
+
+  # comments
+  $HTTP["url"] == "/index.html" {
+    url.redirect = ("^" => "/match_5")
+  }
+}

Added: lighttpd/tags/1.4.19-5+lenny2/tests/core-404-handler.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/core-404-handler.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/core-404-handler.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,76 @@
+#!/usr/bin/env perl
+#
+# combinations we have to test:
+# plain 404 case
+# 404-handler -> static file (verify content)
+# 404-handler -> fastcgi
+#   returning 200
+#   returning 302 + Location
+#   returning 404
+#   returning no status -> 200
+#
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 8;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+$tf->{CONFIGFILE} = '404-handler.conf';
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST}  = ( <<EOF
+GET /static/notfound HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => "static not found\n" } ];
+ok($tf->handle_http($t) == 0, '404 handler => static');
+
+#
+#
+#
+$t->{REQUEST}  = ( <<EOF
+GET /dynamic/200/notfound HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => "found here\n" } ];
+ok($tf->handle_http($t) == 0, '404 handler => dynamic(200)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /dynamic/302/notfound HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 302, 'Location' => "http://www.example.org/" } ];
+ok($tf->handle_http($t) == 0, '404 handler => dynamic(302)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /dynamic/404/notfound HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, 'HTTP-Content' => "Not found here\n" } ];
+ok($tf->handle_http($t) == 0, '404 handler => dynamic(404)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /dynamic/nostatus/notfound HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => "found here\n" } ];
+ok($tf->handle_http($t) == 0, '404 handler => dynamic(nostatus)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /send404.pl HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, 'HTTP-Content' => "send404\n" } ];
+ok($tf->handle_http($t) == 0, '404 generated by CGI should stay 404');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/core-condition.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/core-condition.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/core-condition.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,139 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 17;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+$tf->{CONFIGFILE} = 'condition.conf';
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_1" } ];
+ok($tf->handle_http($t) == 0, 'config deny');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Host: test1.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_2" } ];
+ok($tf->handle_http($t) == 0, '2nd child of chaining');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Host: test2.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_3" } ];
+ok($tf->handle_http($t) == 0, '3rd child of chaining');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Host: test3.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/match_5" } ];
+ok($tf->handle_http($t) == 0, 'nesting');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+
+$tf->{CONFIGFILE} = 'lighttpd.conf';
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST}  = ( <<EOF
+GET /nofile.png HTTP/1.0
+Host: referer.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+ok($tf->handle_http($t) == 0, 'condition: Referer - no referer');
+
+$t->{REQUEST}  = ( <<EOF
+GET /nofile.png HTTP/1.0
+Host: referer.example.org
+Referer: http://referer.example.org/
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+ok($tf->handle_http($t) == 0, 'condition: Referer - referer matches regex');
+
+$t->{REQUEST}  = ( <<EOF
+GET /image.jpg HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'condition: Referer - no referer');
+
+$t->{REQUEST}  = ( <<EOF
+GET /image.jpg HTTP/1.0
+Host: www.example.org
+Referer: http://referer.example.org/
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'condition: Referer - referer matches regex');
+
+$t->{REQUEST}  = ( <<EOF
+GET /image.jpg HTTP/1.0
+Host: www.example.org
+Referer: http://evil-referer.example.org/
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+ok($tf->handle_http($t) == 0, 'condition: Referer - referer doesn\'t match');
+
+$t->{REQUEST} = ( <<EOF
+GET /nofile HTTP/1.1
+Host: bug255.example.org
+
+GET /nofile HTTP/1.1
+Host: bug255.example.org
+Connection: close
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 403 },  { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 403 } ];
+ok($tf->handle_http($t) == 0, 'remote ip cache (#255)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /empty-ref.noref HTTP/1.0
+Cookie: empty-ref
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+ok($tf->handle_http($t) == 0, 'condition: $HTTP["referer"] == "" and Referer is no set');
+
+$t->{REQUEST}  = ( <<EOF
+GET /empty-ref.noref HTTP/1.0
+Cookie: empty-ref
+Referer:
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+ok($tf->handle_http($t) == 0, 'condition: $HTTP["referer"] == "" and Referer is empty');
+
+$t->{REQUEST}  = ( <<EOF
+GET /empty-ref.noref HTTP/1.0
+Cookie: empty-ref
+Referer: foobar
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+ok($tf->handle_http($t) == 0, 'condition: $HTTP["referer"] == "" and Referer: foobar');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/core-condition.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/core-keepalive.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/core-keepalive.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/core-keepalive.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,91 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 7;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST} = ( <<EOF
+GET /12345.txt HTTP/1.0
+Connection: keep-alive
+Host: 123.example.org
+
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+Connection: close
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } , { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+
+ok($tf->handle_http($t) == 0, 'Explicit HTTP/1.0 Keep-Alive');
+
+undef $t->{RESPONSE};
+
+$t->{REQUEST} = ( <<EOF
+GET /12345.txt HTTP/1.0
+Connection: keep-alive
+Host: 123.example.org
+
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+Connection: close
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } , { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+
+ok($tf->handle_http($t) == 0, 'Explicit HTTP/1.0 Keep-Alive');
+
+undef $t->{RESPONSE};
+
+$t->{REQUEST} = ( <<EOF
+GET /12345.txt HTTP/1.0
+Connection: keep-alive
+Host: 123.example.org
+
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } , { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Implicit HTTP/1.0 Keep-Alive');
+
+
+$t->{REQUEST} = ( <<EOF
+GET /12345.txt HTTP/1.1
+Connection: keep-alive
+Host: 123.example.org
+
+GET /12345.txt HTTP/1.1
+Host: 123.example.org
+Connection: close
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } , { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Explicit HTTP/1.1 Keep-Alive');
+
+$t->{REQUEST} = ( <<EOF
+GET /12345.txt HTTP/1.1
+Host: 123.example.org
+
+GET /12345.txt HTTP/1.1
+Host: 123.example.org
+Connection: close
+EOF
+ );
+
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } , { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ];
+
+ok($tf->handle_http($t) == 0, 'Implicit HTTP/1.1 Keep-Alive');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/core-keepalive.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/core-request.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/core-request.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/core-request.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,310 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 36;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+## Low-Level Request-Header Parsing - URI
+
+$t->{REQUEST}  = ( <<EOF
+GET /index%2ehtml HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'URL-encoding');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html%00 HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+ok($tf->handle_http($t) == 0, 'URL-encoding, %00');
+
+
+
+## Low-Level Request-Header Parsing - Host
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'hostname');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: 127.0.0.1
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'IPv4 address');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: [::1]
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'IPv6 address');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: www.example.org:80
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'hostname + port');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: 127.0.0.1:80
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'IPv4 address + port');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: [::1]:80
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'IPv6 address + port');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: ../123.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'directory traversal');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: .jsdh.sfdg.sdfg.
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'leading and trailing dot');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: jsdh.sfdg.sdfg.
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'trailing dot is ok');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: .jsdh.sfdg.sdfg
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'leading dot');
+
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: jsdh..sfdg.sdfg
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'two dots');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: jsdh.sfdg.sdfg:asd
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'broken port-number');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: jsdh.sfdg.sdfg:-1
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'negative port-number');
+
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: :80
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'port given but host missing');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: .jsdh.sfdg.:sdfg.
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'port and host are broken');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: a.b-c.d123
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'allowed characters in host-name');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: -a.c
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'leading dash');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: .
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'dot only');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: a192.168.2.10:1234
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'broken IPv4 address - non-digit');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: 192.168.2:1234
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'broken IPv4 address - too short');
+
+
+
+## Low-Level Request-Header Parsing - Content-Length
+
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Content-Length: -2
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'negative Content-Length');
+
+$t->{REQUEST}  = ( <<EOF
+POST /12345.txt HTTP/1.0
+Host: 123.example.org
+Content-Length: 2147483648
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 413 } ];
+ok($tf->handle_http($t) == 0, 'Content-Length > max-request-size');
+
+$t->{REQUEST}  = ( <<EOF
+POST /12345.txt HTTP/1.0
+Host: 123.example.org
+Content-Length:
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 411 } ];
+ok($tf->handle_http($t) == 0, 'Content-Length is empty');
+
+print "\nLow-Level Request-Header Parsing - HTTP/1.1\n";
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.1
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'Host missing');
+
+print "\nContent-Type\n";
+$t->{REQUEST}  = ( <<EOF
+GET /image.jpg HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'image/jpeg' } ];
+ok($tf->handle_http($t) == 0, 'Content-Type - image/jpeg');
+
+$t->{REQUEST}  = ( <<EOF
+GET /image.JPG HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'image/jpeg' } ];
+ok($tf->handle_http($t) == 0, 'Content-Type - image/jpeg (upper case)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /a HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'application/octet-stream' } ];
+ok($tf->handle_http($t) == 0, 'Content-Type - unknown');
+
+$t->{REQUEST}  = ( <<EOF
+GET  HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'empty request-URI');
+
+$t->{REQUEST}  = ( <<EOF
+GET /Foo.txt HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'uppercase filenames');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Location: foo
+Location: foobar
+  baz
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, '#1232 - duplicate headers with line-wrapping');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Location: 
+Location: foobar
+  baz
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, '#1232 - duplicate headers with line-wrapping - test 2');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+A: 
+Location: foobar
+  baz
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, '#1232 - duplicate headers with line-wrapping - test 3');
+
+
+
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/core-request.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/core-response.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/core-response.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/core-response.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,108 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 12;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+## Low-Level Response-Header Parsing - HTTP/1.1
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.1
+Host: www.example.org
+Connection: close
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, '+Date' => '' } ];
+ok($tf->handle_http($t) == 0, 'Date header');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.1
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 400, 'Connection' => 'close' } ];
+ok($tf->handle_http($t) == 0, 'Host missing');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+ETag' => '' } ];
+ok($tf->handle_http($t) == 0, 'ETag is set');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'ETag' => '/^".+"$/' } ];
+ok($tf->handle_http($t) == 0, 'ETag has quotes');
+
+
+
+## Low-Level Response-Header Parsing - Content-Length
+
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.html HTTP/1.0
+Host: 123.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Length' => '6' } ];
+ok($tf->handle_http($t) == 0, 'Content-Length for text/html');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Length' => '6' } ];
+ok($tf->handle_http($t) == 0, 'Content-Length for text/plain');
+
+
+## Low-Level Response-Header Parsing - Location
+
+$t->{REQUEST}  = ( <<EOF
+GET /dummydir HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://'.$tf->{HOSTNAME}.':'.$tf->{PORT}.'/dummydir/' } ];
+ok($tf->handle_http($t) == 0, 'internal redirect in directory');
+
+$t->{REQUEST}  = ( <<EOF
+GET /dummydir?foo HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://'.$tf->{HOSTNAME}.':'.$tf->{PORT}.'/dummydir/?foo' } ];
+ok($tf->handle_http($t) == 0, 'internal redirect in directory + querystring');
+
+## simple-vhost
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: no-simple.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Length' => '6' } ];
+ok($tf->handle_http($t) == 0, 'disabling simple-vhost via conditionals');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: simple.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+ok($tf->handle_http($t) == 0, 'simple-vhost via conditionals');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/core-response.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/core-var-include.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/core-var-include.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/core-var-include.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,61 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 17;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+$ENV{"env_test"} = "good_env";
+
+$tf->{CONFIGFILE} = 'var-include.conf';
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST}  = ( "GET /index.html HTTP/1.0\r\nHost: www.example.org\r\n" );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => "/redirect" } ];
+ok($tf->handle_http($t) == 0, 'basic test');
+
+my $myvar = "good";
+my $server_name = "test.example.org";
+my $mystr = "string";
+$mystr .= "_append";
+my $tests = {
+    "include"        => "/good_include",
+      "concat"         => "/good_" . "concat",
+      "servername1"    => "/good_" . $server_name,
+      "servername2"    => $server_name . "/good_",
+      "servername3"    => "/good_" . $server_name . "/",
+      "var.myvar"      => "/good_var_myvar" . $myvar,
+      "myvar"          => "/good_myvar" . $myvar,
+      "env"            => "/" . $ENV{"env_test"},
+
+    "number1"        => "/good_number" . "1",
+      "number2"        => "1" . "/good_number",
+      "array_append"   => "/good_array_append",
+      "string_append"  => "/good_" . $mystr,
+      "number_append"  => "/good_" . "2",
+
+    "include_shell"  => "/good_include_shell_" . "456"
+};
+
+foreach my $test (keys %{ $tests }) {
+	my $expect = $tests->{$test};
+	$t->{REQUEST}  = ( <<EOF
+GET /$test HTTP/1.0
+Host: $server_name
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => $expect } ];
+	ok($tf->handle_http($t) == 0, $test);
+}
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/core-var-include.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/core.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/core.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/core.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,166 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 21;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Valid HTTP/1.0 Request') or die();
+
+$t->{REQUEST}  = ( <<EOF
+GET /
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'missing Protocol');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/01.01
+Host: foo
+Connection: close
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'zeros in protocol version');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/.01
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'missing major version');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/01.
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'missing minor version');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/a.b
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'strings as version');
+
+$t->{REQUEST}  = ( <<EOF
+BC /
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'missing protocol + unknown method');
+
+$t->{REQUEST}  = ( <<EOF
+ABC
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'missing protocol + unknown method + missing URI');
+
+$t->{REQUEST}  = ( <<EOF
+ABC / HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 501 } ];
+ok($tf->handle_http($t) == 0, 'unknown method');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.3
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 505 } ];
+ok($tf->handle_http($t) == 0, 'unknown protocol');
+
+$t->{REQUEST}  = ( <<EOF
+GET http://www.example.org/ HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'absolute URI');
+
+print "\nLow-Level Request-Header Parsing\n";
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+ABC : foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'whitespace after key');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+ABC a: foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'whitespace with-in key');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+ABC:foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'no whitespace');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+ABC:foo
+  bc
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'line-folding');
+
+print "\nLow-Level Request-Header Parsing - URI\n";
+$t->{REQUEST}  = ( <<EOF
+GET /index%2ehtml HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'URL-encoding');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html%00 HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+ok($tf->handle_http($t) == 0, 'URL-encoding, %00');
+
+$t->{REQUEST}  = ( <<EOF
+OPTIONS * HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'OPTIONS');
+
+$t->{REQUEST}  = ( <<EOF
+OPTIONS / HTTP/1.1
+Host: www.example.org
+Connection: close
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'OPTIONS');
+
+
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/core.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/12345.html
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/12345.html	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/12345.html	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+12345

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/12345.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/12345.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/12345.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+12345

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+EXTRA_DIST=12345.html 12345.txt dummyfile.bla phpinfo.php

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,353 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests/docroot/123
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = 12345.html 12345.txt dummyfile.bla phpinfo.php
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  tests/docroot/123/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tests/docroot/123/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/dummyfile.bla
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/dummyfile.bla	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/dummyfile.bla	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+12345

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/phpinfo.php
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/phpinfo.php	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/123/phpinfo.php	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+<?php phpinfo(); ?>

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+SUBDIRS=123 www

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,512 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests/docroot
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = 123 www
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  tests/docroot/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tests/docroot/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+	install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.fcgi
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.fcgi	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.fcgi	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,27 @@
+#!/usr/bin/perl
+#use CGI qw/:standard/;
+use CGI::Fast qw(:standard);
+my $cgi = new CGI;
+while (new CGI::Fast) {
+    my $request_uri = $ENV{'REQUEST_URI'};
+    print (STDERR "REQUEST_URI: $request_uri\n");
+    if ($request_uri =~ m/^\/dynamic\/200\// ) {
+      print header ( -status => 200,
+                     -type   => 'text/plain' );
+      print ("found here\n");
+    }
+    elsif ($request_uri =~ m|^/dynamic/302/| ) {
+      print header( -status=>302,
+                    -location => 'http://www.example.org/');
+    }
+    elsif ($request_uri =~ m/^\/dynamic\/404\// ) {
+      print header ( -status => 404
+                     -type   => 'text/plain' );
+      print ("Not found here\n");
+    }
+    else {
+      print header ( -status => 500,
+                     -type   => 'text/plain');
+      print ("huh\n");
+    };
+};


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.fcgi
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.html
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.html	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.html	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+static not found

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+use CGI qw/:standard/;
+my $cgi = new CGI;
+my $request_uri = $ENV{'REQUEST_URI'};
+print (STDERR "REQUEST_URI: $request_uri\n");
+
+if ($request_uri =~ m/^\/dynamic\/200\// ) {
+  print header ( -status => 200,
+                 -type   => 'text/plain' );
+  print ("found here\n");
+}
+elsif ($request_uri =~ m|^/dynamic/302/| ) {
+  print header( -status=>302,
+                -location => 'http://www.example.org/');
+}
+elsif ($request_uri =~ m/^\/dynamic\/404\// ) {
+  print header ( -status => 404
+                 -type   => 'text/plain' );
+  print ("Not found here\n");
+}
+elsif ($request_uri =~ m/^\/send404\.pl/ ) {
+  print header ( -status => 404
+                 -type   => 'text/plain' );
+  print ("Not found here (send404)\n");
+}
+elsif ($request_uri =~ m/^\/dynamic\/nostatus\// ) {
+  print ("found here\n");
+}
+else {
+  print header ( -status => 500,
+                 -type   => 'text/plain');
+  print ("huh\n");
+};


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/404.pl
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,5 @@
+EXTRA_DIST=cgi.php cgi.pl dummydir index.html index.txt phpinfo.php \
+	   redirect.php cgi-pathinfo.pl get-env.php get-server-env.php \
+	   nph-status.pl prefix.fcgi get-header.pl ssi.shtml get-post-len.pl \
+	   exec-date.shtml index.html~ 404.fcgi 404.html 404.pl send404.pl crlfcrash.pl
+SUBDIRS=go indexfile expire

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,517 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests/docroot/www
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = cgi.php cgi.pl dummydir index.html index.txt phpinfo.php \
+	   redirect.php cgi-pathinfo.pl get-env.php get-server-env.php \
+	   nph-status.pl prefix.fcgi get-header.pl ssi.shtml get-post-len.pl \
+	   exec-date.shtml index.html~ 404.fcgi 404.html 404.pl send404.pl crlfcrash.pl
+
+SUBDIRS = go indexfile expire
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  tests/docroot/www/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tests/docroot/www/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '    { files[$$0] = 1; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+	install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am check check-am clean clean-generic clean-libtool \
+	ctags ctags-recursive distclean distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
+	uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi-pathinfo.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi-pathinfo.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi-pathinfo.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,7 @@
+#! /usr/bin/perl
+
+print "Content-Type: text/html\r\n\r\n";
+
+print $ENV{"PATH_INFO"};
+
+0;

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi.php
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi.php	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi.php	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,9 @@
+<?php
+
+#ob_start(/*"ob_gzhandler"*/);
+print "12345<br />\n";
+#phpinfo();
+#header("Content-Length: ".ob_get_length());
+#ob_end_flush();
+
+?>


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi.php
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/cgi.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,7 @@
+#! /usr/bin/perl
+
+print "Content-Type: text/html\r\n\r\n";
+
+print $ENV{"SCRIPT_NAME"};
+
+0;

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/crlfcrash.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/crlfcrash.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/crlfcrash.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,4 @@
+#!/usr/bin/env perl
+#
+print "Location: http://www.example.org/\r\n\n\n";
+exit;

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/exec-date.shtml
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/exec-date.shtml	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/exec-date.shtml	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+<!--#exec cmd="expr 1 + 1"-->

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+EXTRA_DIST=access.txt modification.txt

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,353 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests/docroot/www/expire
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = access.txt modification.txt
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  tests/docroot/www/expire/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tests/docroot/www/expire/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/access.txt
===================================================================
Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/expire/modification.txt
===================================================================
Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-env.php
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-env.php	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-env.php	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,3 @@
+<?php
+	print $_ENV[$_GET["env"]];
+?>

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-header.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-header.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-header.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,8 @@
+#!/usr/bin/perl
+
+my $s = $ENV{$ENV{"QUERY_STRING"}};
+
+printf("Content-Length: %d\r\n", length($s));
+print "Content-Type: text/plain\r\n\r\n";
+
+print $s;

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-post-len.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-post-len.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-post-len.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,15 @@
+#!/usr/bin/perl
+
+
+print "Content-Type: text/plain\r\n\r\n";
+
+if ($ENV{"REQUEST_METHOD"} eq "POST") {
+	my $l = 0;
+	while(<>) {
+		$l += length($_);
+	}
+	print $l;
+} else {
+	print "0";
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-server-env.php
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-server-env.php	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/get-server-env.php	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,3 @@
+<?php
+	print $_SERVER[$_GET["env"]];
+?>

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+EXTRA_DIST=cgi.php

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,353 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests/docroot/www/go
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = cgi.php
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  tests/docroot/www/go/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tests/docroot/www/go/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/cgi.php
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/cgi.php	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/cgi.php	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,9 @@
+<?php
+
+#ob_start(/*"ob_gzhandler"*/);
+print "12345<br />\n";
+#phpinfo();
+#header("Content-Length: ".ob_get_length());
+#ob_end_flush();
+
+?>


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/go/cgi.php
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/index.html
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/index.html	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/index.html	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+<TITLE>Webserver testpage</TITLE>
+<META content="iso-8859-1" http-equiv="charset">
+<META name="author" content="Christian Hofmann, SuSE Linux AG">
+</HEAD>
+<BODY BGCOLOR="#ffffff" LINK="#669900" ALINK="#669900" VLINK="#fb8000" text=black marginwidth="0" marginheight="0" leftmargin="0" topmargin="0">
+<TABLE border="0" width="760" cellpadding="0" cellspacing="0">
+  <TR>
+  <TD rowspan="4" bgcolor="#669900" width="50"> </TD>
+    <td valign=top height="70" width="29" bgcolor="#669900"> </td>
+    <td valign="middle" height="70" width="152" align="center" bgcolor="#669900"> </td>
+    <td valign=middle height="70" width="529" bgcolor="#669900">
+      <div align="center">
+      <font face="Courier New,Courier,mono" size="5" color="white"><B>+++ testinfo - webserver +++</b></font>
+      </div>
+    </td>
+  </tr>
+  <TR>
+    <td width="29"  height="100" valign="middle" bgcolor="#669900"> </td>
+    <td width="152" height="100" align="center" valign="bottom"><IMG src="gif/penguin.gif" width=90 height=76 hspace=0 vspace=0 border=0 alt=" "></td>
+    <td width="529" height="100" valign="middle">
+      <div align="center">
+      <font face="Courier New,Courier,mono" size="3"><I>This is only a test page for the webserver!</I></font><br>
+      <font face="Courier New,Courier,mono" size="-1">SuSE is not responsible for the contents of this domain!</font>
+      </div>
+    </td>
+  </tr>
+  <tr>
+    <td valign=top align=left colspan="4">
+      <table border="0" cellpadding="0" cellspacing="0" width="710" vspace="0" hspace="0">
+        <TR>
+          <TD bgcolor="#669900" width="29" height="20"> </TD>
+          <TD width="152" height="20"> </TD>
+          <TD width="558" height="20" colspan="2"> </TD>
+        </tr>
+        <TR>
+          <TD height="50" align=left width="181" colspan="2"><IMG src="gif/sysinfo_en.png" width="181" height="50" border="0" alt="system information"></TD>
+          <TD width="529" colspan="2" rowspan="2" valign=top>
+               <FONT face="helvetica, arial, sans-serif">
+               <B>Operating system:</B> [ SuSE Linux 8.0 (i386)
+ ]<BR>
+               <B>Host:</B> [ grisu.home.kneschke.de, Kernel: 2.4.18-4GB (i686)
+ ]
+               </FONT>
+          </TD>
+        </TR>
+        <TR>
+          <TD bgcolor="#669900" width="29" height="40"> </TD>
+          <TD width="181" height="40"> </TD>
+        </TR>
+
+        <TR>
+          <TD height="50" align=left width="181" colspan="2"><IMG src="gif/version_en.png" width="181" height="50" border="0" alt="webserver and modules"></TD>
+          <TD width="529" colspan="2" rowspan="2" valign=top>
+          <FONT face="helvetica,arial,sans-serif">
+          <B>Webserver version:</B><br>
+          [ lighttpd/0.1.0 (Unix) ]<br><br>
+
+          <B>Installed modules:</B><br>
+                <I>[ PHP module is not installed ]</I><br>
+    <I>[ Apache perl module (mod_perl) is not installed ]</I><br>
+    <I>[ Apache DAV module (mod_dav) is not installed ]</I><br>
+    <I>[ Apache Python module (mod_python) is not installed ]</I><br>
+
+          </FONT>
+          </TD>
+        </TR>
+        <TR>
+          <TD bgcolor="#669900" width="29" height="100"> </TD>
+          <TD width="181" height="100"> </TD>
+        </TR>
+        <TR>
+          <TD colspan="2" height="50" align=left width="181"><IMG src="gif/docu_en.png" width="181" height="50" border="0" alt="documentation"></TD>
+          <TD width="529" colspan="2" rowspan="2" valign=top>
+          <FONT face="helvetica,arial,sans-serif">
+<I>[ This host is not configured as server for the SuSE help system ]</I><br><br>
+<I>[ Apache manual is not installed ]</I><br>
+
+             <BR>
+             <A HREF="http://www.suse.de/">[ The SuSE website ]</A><BR>
+
+
+
+          </FONT>
+          </TD>
+
+        </TR>
+        <TR>
+          <TD bgcolor="#669900" width="29" height="90"> </TD>
+          <TD width="181" height="90"> </TD>
+      </Table>
+    </td>
+  </tr>
+  <tr>
+    <td width=29 bgcolor="#669900"> </td>
+    <td valign=bottom align=right width="681" colspan="3"><A HREF="http://www.suse.de/en/"><IMG src="gif/powered_by_suse.gif" alt="powered by SuSE" width=100 height=40 hspace=5 vspace=5 border=0></A></td>
+  </tr>
+
+</TABLE>
+</BODY>
+</HTML>
+
+
+
+
+
+
+
+
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/index.txt
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/index.txt	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/index.txt	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+<TITLE>Webserver testpage</TITLE>
+<META content="iso-8859-1" http-equiv="charset">
+<META name="author" content="Christian Hofmann, SuSE Linux AG">
+</HEAD>
+<BODY BGCOLOR="#ffffff" LINK="#669900" ALINK="#669900" VLINK="#fb8000" text=black marginwidth="0" marginheight="0" leftmargin="0" topmargin="0">
+<TABLE border="0" width="760" cellpadding="0" cellspacing="0">
+  <TR>
+  <TD rowspan="4" bgcolor="#669900" width="50"> </TD>
+    <td valign=top height="70" width="29" bgcolor="#669900"> </td>
+    <td valign="middle" height="70" width="152" align="center" bgcolor="#669900"> </td>
+    <td valign=middle height="70" width="529" bgcolor="#669900">
+      <div align="center">
+      <font face="Courier New,Courier,mono" size="5" color="white"><B>+++ testinfo - webserver +++</b></font>
+      </div>
+    </td>
+  </tr>
+  <TR>
+    <td width="29"  height="100" valign="middle" bgcolor="#669900"> </td>
+    <td width="152" height="100" align="center" valign="bottom"><IMG src="gif/penguin.gif" width=90 height=76 hspace=0 vspace=0 border=0 alt=" "></td>
+    <td width="529" height="100" valign="middle">
+      <div align="center">
+      <font face="Courier New,Courier,mono" size="3"><I>This is only a test page for the webserver!</I></font><br>
+      <font face="Courier New,Courier,mono" size="-1">SuSE is not responsible for the contents of this domain!</font>
+      </div>
+    </td>
+  </tr>
+  <tr>
+    <td valign=top align=left colspan="4">
+      <table border="0" cellpadding="0" cellspacing="0" width="710" vspace="0" hspace="0">
+        <TR>
+          <TD bgcolor="#669900" width="29" height="20"> </TD>
+          <TD width="152" height="20"> </TD>
+          <TD width="558" height="20" colspan="2"> </TD>
+        </tr>
+        <TR>
+          <TD height="50" align=left width="181" colspan="2"><IMG src="gif/sysinfo_en.png" width="181" height="50" border="0" alt="system information"></TD>
+          <TD width="529" colspan="2" rowspan="2" valign=top>
+               <FONT face="helvetica, arial, sans-serif">
+               <B>Operating system:</B> [ SuSE Linux 8.0 (i386)
+ ]<BR>
+               <B>Host:</B> [ grisu.home.kneschke.de, Kernel: 2.4.18-4GB (i686)
+ ]
+               </FONT>
+          </TD>
+        </TR>
+        <TR>
+          <TD bgcolor="#669900" width="29" height="40"> </TD>
+          <TD width="181" height="40"> </TD>
+        </TR>
+
+        <TR>
+          <TD height="50" align=left width="181" colspan="2"><IMG src="gif/version_en.png" width="181" height="50" border="0" alt="webserver and modules"></TD>
+          <TD width="529" colspan="2" rowspan="2" valign=top>
+          <FONT face="helvetica,arial,sans-serif">
+          <B>Webserver version:</B><br>
+          [ lighttpd/0.1.0 (Unix) ]<br><br>
+
+          <B>Installed modules:</B><br>
+                <I>[ PHP module is not installed ]</I><br>
+    <I>[ Apache perl module (mod_perl) is not installed ]</I><br>
+    <I>[ Apache DAV module (mod_dav) is not installed ]</I><br>
+    <I>[ Apache Python module (mod_python) is not installed ]</I><br>
+
+          </FONT>
+          </TD>
+        </TR>
+        <TR>
+          <TD bgcolor="#669900" width="29" height="100"> </TD>
+          <TD width="181" height="100"> </TD>
+        </TR>
+        <TR>
+          <TD colspan="2" height="50" align=left width="181"><IMG src="gif/docu_en.png" width="181" height="50" border="0" alt="documentation"></TD>
+          <TD width="529" colspan="2" rowspan="2" valign=top>
+          <FONT face="helvetica,arial,sans-serif">
+<I>[ This host is not configured as server for the SuSE help system ]</I><br><br>
+<I>[ Apache manual is not installed ]</I><br>
+
+             <BR>
+             <A HREF="http://www.suse.de/">[ The SuSE website ]</A><BR>
+
+
+
+          </FONT>
+          </TD>
+
+        </TR>
+        <TR>
+          <TD bgcolor="#669900" width="29" height="90"> </TD>
+          <TD width="181" height="90"> </TD>
+      </Table>
+    </td>
+  </tr>
+  <tr>
+    <td width=29 bgcolor="#669900"> </td>
+    <td valign=bottom align=right width="681" colspan="3"><A HREF="http://www.suse.de/en/"><IMG src="gif/powered_by_suse.gif" alt="powered by SuSE" width=100 height=40 hspace=5 vspace=5 border=0></A></td>
+  </tr>
+
+</TABLE>
+</BODY>
+</HTML>
+
+
+
+
+
+
+
+
+
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/Makefile.am
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/Makefile.am	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/Makefile.am	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+EXTRA_DIST=index.php return-404.php rewrite.php

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/Makefile.in
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/Makefile.in	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/Makefile.in	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,353 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests/docroot/www/indexfile
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+ATTR_LIB = @ATTR_LIB@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ_LIB = @BZ_LIB@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CRYPT_LIB = @CRYPT_LIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DL_LIB = @DL_LIB@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FAM_CFLAGS = @FAM_CFLAGS@
+FAM_LIBS = @FAM_LIBS@
+FFLAGS = @FFLAGS@
+GDBM_LIB = @GDBM_LIB@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LBER_LIB = @LBER_LIB@
+LDAP_LIB = @LDAP_LIB@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LUA_CFLAGS = @LUA_CFLAGS@
+LUA_LIBS = @LUA_LIBS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MEMCACHE_LIB = @MEMCACHE_LIB@
+MKDIR_P = @MKDIR_P@
+MYSQL_CONFIG = @MYSQL_CONFIG@
+MYSQL_INCLUDE = @MYSQL_INCLUDE@
+MYSQL_LIBS = @MYSQL_LIBS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRECONFIG = @PCRECONFIG@
+PCRE_LIB = @PCRE_LIB@
+PKG_CONFIG = @PKG_CONFIG@
+RANLIB = @RANLIB@
+SENDFILE_LIB = @SENDFILE_LIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE_CFLAGS = @SQLITE_CFLAGS@
+SQLITE_LIBS = @SQLITE_LIBS@
+SSL_LIB = @SSL_LIB@
+STRIP = @STRIP@
+U = @U@
+UUID_LIBS = @UUID_LIBS@
+VERSION = @VERSION@
+XML_CFLAGS = @XML_CFLAGS@
+XML_LIBS = @XML_LIBS@
+Z_LIB = @Z_LIB@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = index.php return-404.php rewrite.php
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  tests/docroot/www/indexfile/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  tests/docroot/www/indexfile/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	distclean distclean-generic distclean-libtool distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/index.php
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/index.php	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/index.php	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+<?php print $_SERVER["PHP_SELF"]; ?>

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/return-404.php
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/return-404.php	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/return-404.php	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,5 @@
+<?php
+	header("Status: 404");
+
+	print $_SERVER["PHP_SELF"];
+?>

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/rewrite.php
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/rewrite.php	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/indexfile/rewrite.php	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,3 @@
+<?php
+	print $_SERVER["QUERY_STRING"];
+?>

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/nph-status.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/nph-status.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/nph-status.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,10 @@
+#!/usr/bin/perl
+
+my $status = 200;
+
+if (defined $ENV{"QUERY_STRING"}) {
+	$status = $ENV{"QUERY_STRING"};
+}
+
+print "HTTP/1.0 ".$status." FooBar\r\n";
+print "\r\n";


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/nph-status.pl
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/phpinfo.php
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/phpinfo.php	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/phpinfo.php	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+<?php phpinfo(); ?>

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/prefix.fcgi
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/prefix.fcgi	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/prefix.fcgi	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,3 @@
+<?php
+echo $_SERVER[$_GET["var"]];
+?>

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/redirect.php
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/redirect.php	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/redirect.php	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,4 @@
+<?php
+
+	header('Location: http://www.example.org:2048/');
+?>

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/send404.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/send404.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/send404.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,5 @@
+#!/usr/bin/perl
+use CGI qw/:standard/;
+print header ( -status => 404
+               -type   => 'text/plain' );
+print ("send404\n");


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/send404.pl
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/ssi.shtml
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/ssi.shtml	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/docroot/www/ssi.shtml	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+<!--#echo var="SCRIPT_NAME" -->

Added: lighttpd/tags/1.4.19-5+lenny2/tests/env-variables.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/env-variables.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/env-variables.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+server.document-root = env.CWD

Added: lighttpd/tags/1.4.19-5+lenny2/tests/env-variables.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/env-variables.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/env-variables.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,21 @@
+#!/usr/bin/perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 2;
+use LightyTest;
+
+my $tf = LightyTest->new();
+$tf->{CONFIGFILE} = 'env-variables.conf';
+
+TODO: {
+    local $TODO = 'we still crash on undefined environment variables';
+    ok($tf->start_proc == 0, "Starting lighttpd");
+    ok($tf->stop_proc  == 0, "Stopping lighttpd");
+};

Added: lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-10.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-10.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-10.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,138 @@
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Apache 1.3.29"
+
+## 
+## Format: <errorfile-prefix><status>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix    = "/home/weigon/projects/lighttpd/doc/status-"
+
+server.dir-listing          = "enable"
+
+#server.event-handler        = "linux-sysepoll"
+#server.event-handler        = "linux-rtsig"
+
+#server.modules.path         = ""
+server.modules              = ( 
+				"mod_rewrite", 
+			        "mod_access", 
+				"mod_auth",
+#				"mod_httptls",
+				"mod_status", 
+				"mod_expire",
+#				"mod_simple_vhost",
+				"mod_redirect", 
+#				"mod_evhost",
+#				"mod_localizer",
+				"mod_fastcgi",
+				"mod_cgi",
+				"mod_compress",
+				"mod_accesslog" ) 
+
+server.indexfiles           = ( "index.php", "index.html", 
+                                "index.htm", "default.htm" )
+
+
+######################## MODULE CONFIG ############################
+
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".png"  => "image/png", 
+                                ".jpg"  => "image/jpeg",
+                                ".jpeg" => "image/jpeg",
+                                ".gif"  => "image/gif",
+                                ".html" => "text/html",
+                                ".htm"  => "text/html",
+                                ".pdf"  => "application/pdf",
+                                ".swf"  => "application/x-shockwave-flash",
+                                ".spl"  => "application/futuresplash",
+                                ".txt"  => "text/plain",
+                                ".tar.gz" =>   "application/x-tgz",
+                                ".tgz"  => "application/x-tgz",
+                                ".gz"   => "application/x-gzip",
+				".c"    => "text/plain",
+				".conf" => "text/plain" )
+
+compress.cache-dir          = env.SRCDIR + "/tmp/lighttpd/cache/compress/"
+compress.filetype           = ("text/plain", "text/html")
+
+fastcgi.debug               = 0
+fastcgi.server              = ( ".php" => ( 
+                                  "grisu" => ( 
+				    "host" => "127.0.0.1",
+				    "port" => 1026
+				  )
+				)
+			      )
+		
+
+cgi.assign                  = ( ".pl"  => "/usr/bin/perl",
+                                ".cgi" => "/usr/bin/perl",
+				".py"  => "/usr/bin/python" )
+			
+
+
+ssl.engine                  = "disable"
+ssl.pemfile                 = "server.pem"
+
+auth.backend                = "plain"
+auth.backend.plain.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.user"
+auth.backend.plain.groupfile = "lighttpd.group"
+
+auth.backend.ldap.hostname  = "localhost"
+auth.backend.ldap.base-dn   = "dc=my-domain,dc=com"
+auth.backend.ldap.filter    = "(uid=$)"
+
+auth.require                = ( "/server-status" => 
+                                ( 
+				  "method"  => "digest",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				),
+				"/auth.php" => 
+                                ( 
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "user=jan"
+				),
+				"/server-config" => 
+                                ( 
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "user=weigon", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				)
+                              )
+
+url.access-deny             = ( "~", ".inc")
+
+url.redirect                = ( "^/redirect/$" => "http://localhost:2048/" )
+
+expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#cache.cache-dir             = "/home/weigon/wwwroot/cache/"
+
+#### status module
+status.status-url           = "/server-status"
+status.config-url           = "/server-config"
+
+$HTTP["host"] == "vvv.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+}
+
+$HTTP["host"] == "zzz.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "zzz.example.org"
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-13.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-13.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-13.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,155 @@
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+debug.log-request-header   = "enable"
+debug.log-response-header  = "enable"
+debug.log-request-handling = "enable"
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Apache 1.3.29"
+
+## 
+## Format: <errorfile-prefix><status>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix    = "/home/weigon/projects/lighttpd/doc/status-"
+
+server.dir-listing          = "enable"
+
+#server.event-handler        = "linux-sysepoll"
+#server.event-handler        = "linux-rtsig"
+
+#server.modules.path         = ""
+server.modules              = ( 
+				"mod_rewrite", 
+			        "mod_access", 
+				"mod_auth",
+#				"mod_httptls",
+				"mod_status", 
+				"mod_expire",
+#				"mod_simple_vhost",
+				"mod_redirect", 
+#				"mod_evhost",
+#				"mod_localizer",
+				"mod_fastcgi",
+				"mod_cgi",
+				"mod_compress",
+				"mod_accesslog" ) 
+
+server.indexfiles           = ( "index.php", "index.html", 
+                                "index.htm", "default.htm" )
+
+#,-- only root can use these options
+#|
+#|# chroot() to directory (default: no chroot() )
+#| server.chroot  /
+#|# change uid to <uid> (default: don't care)
+#| server.userid wwwrun
+#|# change uid to <uid> (default: don't care)
+#| server.groupid wwwrun
+#|
+#`-- 
+
+
+######################## MODULE CONFIG ############################
+
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".png"  => "image/png", 
+                                ".jpg"  => "image/jpeg",
+                                ".jpeg" => "image/jpeg",
+                                ".gif"  => "image/gif",
+                                ".html" => "text/html",
+                                ".htm"  => "text/html",
+                                ".pdf"  => "application/pdf",
+                                ".swf"  => "application/x-shockwave-flash",
+                                ".spl"  => "application/futuresplash",
+                                ".txt"  => "text/plain",
+                                ".tar.gz" =>   "application/x-tgz",
+                                ".tgz"  => "application/x-tgz",
+                                ".gz"   => "application/x-gzip",
+				".c"    => "text/plain",
+				".conf" => "text/plain" )
+
+compress.cache-dir          = env.SRCDIR + "/tmp/lighttpd/cache/compress/"
+compress.filetype           = ("text/plain", "text/html")
+
+fastcgi.debug               = 0
+fastcgi.server              = ( ".php" => ( 
+                                  "grisu" => ( 
+				    "host" => "127.0.0.1",
+				    "port" => 1048,
+				    "bin-path" => "/usr/bin/php-cgi",
+				    "bin-copy-environment" => ( "PATH", "SHELL", "USER" ),
+				  )
+				)
+			      )
+		
+
+cgi.assign                  = ( ".pl"  => "/usr/bin/perl",
+                                ".cgi" => "/usr/bin/perl",
+				".py"  => "/usr/bin/python" )
+			
+
+
+ssl.engine                  = "disable"
+ssl.pemfile                 = "server.pem"
+
+auth.backend                = "plain"
+auth.backend.plain.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.user"
+auth.backend.plain.groupfile = "lighttpd.group"
+
+auth.backend.ldap.hostname  = "localhost"
+auth.backend.ldap.base-dn   = "dc=my-domain,dc=com"
+auth.backend.ldap.filter    = "(uid=$)"
+
+auth.require                = ( "/server-status" => 
+                                ( 
+				  "method"  => "digest",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				),
+				"/auth.php" => 
+                                ( 
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "user=jan"
+				),
+				"/server-config" => 
+                                ( 
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "user=weigon", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				)
+                              )
+
+url.access-deny             = ( "~", ".inc")
+
+url.redirect                = ( "^/redirect/$" => "http://localhost:2048/" )
+
+expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#cache.cache-dir             = "/home/weigon/wwwroot/cache/"
+
+#### status module
+status.status-url           = "/server-status"
+status.config-url           = "/server-config"
+
+$HTTP["host"] == "vvv.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+}
+
+$HTTP["host"] == "zzz.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "zzz.example.org"
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-auth.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-auth.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-auth.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,159 @@
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+debug.log-request-header   = "enable"
+debug.log-response-header  = "enable"
+debug.log-request-handling = "enable"
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+# server.license              = "00000001000000013feccb804014587f000000010000000105911c976a3d462c8eaa2d7ca850432c"
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Apache 1.3.29"
+
+##
+## Format: <errorfile-prefix><status>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix    = "/home/weigon/projects/lighttpd/doc/status-"
+
+server.dir-listing          = "enable"
+
+#server.event-handler        = "linux-sysepoll"
+#server.event-handler        = "linux-rtsig"
+
+#server.modules.path         = ""
+server.modules              = (
+				"mod_rewrite",
+			        "mod_access",
+				"mod_auth",
+#				"mod_httptls",
+				"mod_status",
+				"mod_expire",
+#				"mod_simple_vhost",
+				"mod_redirect",
+#				"mod_evhost",
+#				"mod_localizer",
+				"mod_fastcgi",
+				"mod_cgi",
+				"mod_compress",
+				"mod_accesslog" )
+
+server.indexfiles           = ( "index.php", "index.html",
+                                "index.htm", "default.htm" )
+
+#,-- only root can use these options
+#|
+#|# chroot() to directory (default: no chroot() )
+#| server.chroot  /
+#|# change uid to <uid> (default: don't care)
+#| server.userid wwwrun
+#|# change uid to <uid> (default: don't care)
+#| server.groupid wwwrun
+#|
+#`--
+
+
+######################## MODULE CONFIG ############################
+
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".png"  => "image/png",
+                                ".jpg"  => "image/jpeg",
+                                ".jpeg" => "image/jpeg",
+                                ".gif"  => "image/gif",
+                                ".html" => "text/html",
+                                ".htm"  => "text/html",
+                                ".pdf"  => "application/pdf",
+                                ".swf"  => "application/x-shockwave-flash",
+                                ".spl"  => "application/futuresplash",
+                                ".txt"  => "text/plain",
+                                ".tar.gz" =>   "application/x-tgz",
+                                ".tgz"  => "application/x-tgz",
+                                ".gz"   => "application/x-gzip",
+				".c"    => "text/plain",
+				".conf" => "text/plain" )
+
+compress.cache-dir          = env.SRCDIR + "/tmp/lighttpd/cache/compress/"
+compress.filetype           = ("text/plain", "text/html")
+
+fastcgi.debug               = 0
+fastcgi.server              = ( "/" => (
+                                  "grisu" => (
+				    "host" => "127.0.0.1",
+				    "port" => 20000,
+				    "bin-path" => env.SRCDIR + "/fcgi-auth",
+                                    "mode" => "authorizer",
+                                    "docroot" => env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/",
+
+				  )
+				)
+			      )
+
+
+cgi.assign                  = ( ".pl"  => "/usr/bin/perl",
+                                ".cgi" => "/usr/bin/perl",
+				".py"  => "/usr/bin/python" )
+
+
+
+ssl.engine                  = "disable"
+ssl.pemfile                 = "server.pem"
+
+auth.backend                = "plain"
+auth.backend.plain.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.user"
+auth.backend.plain.groupfile = "lighttpd.group"
+
+auth.backend.ldap.hostname  = "localhost"
+auth.backend.ldap.base-dn   = "dc=my-domain,dc=com"
+auth.backend.ldap.filter    = "(uid=$)"
+
+auth.require                = ( "/server-status" =>
+                                (
+				  "method"  => "digest",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				),
+				"/auth.php" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "user=jan"
+				),
+				"/server-config" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "user=weigon", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				)
+                              )
+
+url.access-deny             = ( "~", ".inc")
+
+url.redirect                = ( "^/redirect/$" => "http://localhost:2048/" )
+
+expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#cache.cache-dir             = "/home/weigon/wwwroot/cache/"
+
+#### status module
+status.status-url           = "/server-status"
+status.config-url           = "/server-config"
+
+$HTTP["host"] == "vvv.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+}
+
+$HTTP["host"] == "zzz.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "zzz.example.org"
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-responder.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-responder.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/fastcgi-responder.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,162 @@
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+#debug.log-request-header   = "enable"
+#debug.log-response-header  = "enable"
+#debug.log-request-handling = "enable"
+#debug.log-state-handling = "enable"
+
+#fastcgi.debug = 1
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+# server.license              = "00000001000000013feccb804014587f000000010000000105911c976a3d462c8eaa2d7ca850432c"
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Apache 1.3.29"
+
+##
+## Format: <errorfile-prefix><status>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix    = "/home/weigon/projects/lighttpd/doc/status-"
+
+server.dir-listing          = "enable"
+
+#server.event-handler        = "linux-sysepoll"
+#server.event-handler        = "linux-rtsig"
+
+#server.modules.path         = ""
+server.modules              = (
+				"mod_rewrite",
+			        "mod_access",
+				"mod_auth",
+#				"mod_httptls",
+				"mod_status",
+				"mod_expire",
+#				"mod_simple_vhost",
+				"mod_redirect",
+#				"mod_evhost",
+#				"mod_localizer",
+				"mod_fastcgi",
+				"mod_cgi",
+				"mod_compress",
+				"mod_accesslog" )
+
+server.indexfiles           = ( "index.php", "index.html",
+                                "index.htm", "default.htm" )
+
+#,-- only root can use these options
+#|
+#|# chroot() to directory (default: no chroot() )
+#| server.chroot  /
+#|# change uid to <uid> (default: don't care)
+#| server.userid wwwrun
+#|# change uid to <uid> (default: don't care)
+#| server.groupid wwwrun
+#|
+#`--
+
+
+######################## MODULE CONFIG ############################
+
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".png"  => "image/png",
+                                ".jpg"  => "image/jpeg",
+                                ".jpeg" => "image/jpeg",
+                                ".gif"  => "image/gif",
+                                ".html" => "text/html",
+                                ".htm"  => "text/html",
+                                ".pdf"  => "application/pdf",
+                                ".swf"  => "application/x-shockwave-flash",
+                                ".spl"  => "application/futuresplash",
+                                ".txt"  => "text/plain",
+                                ".tar.gz" =>   "application/x-tgz",
+                                ".tgz"  => "application/x-tgz",
+                                ".gz"   => "application/x-gzip",
+				".c"    => "text/plain",
+				".conf" => "text/plain" )
+
+compress.cache-dir          = env.SRCDIR + "/tmp/lighttpd/cache/compress/"
+compress.filetype           = ("text/plain", "text/html")
+
+fastcgi.debug               = 0
+fastcgi.server              = ( ".fcgi" => (
+                                  "grisu" => (
+				    "host" => "127.0.0.1",
+				    "port" => 10000,
+				    "bin-path" => env.SRCDIR + "/fcgi-responder",
+				    "check-local" => "disable",
+				    "max-procs" => 1,
+				    "min-procs" => 1
+				  )
+				)
+			      )
+
+
+cgi.assign                  = ( ".pl"  => "/usr/bin/perl",
+                                ".cgi" => "/usr/bin/perl",
+				".py"  => "/usr/bin/python" )
+
+
+
+ssl.engine                  = "disable"
+ssl.pemfile                 = "server.pem"
+
+auth.backend                = "plain"
+auth.backend.plain.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.user"
+auth.backend.plain.groupfile = "lighttpd.group"
+
+auth.backend.ldap.hostname  = "localhost"
+auth.backend.ldap.base-dn   = "dc=my-domain,dc=com"
+auth.backend.ldap.filter    = "(uid=$)"
+
+auth.require                = ( "/server-status" =>
+                                (
+				  "method"  => "digest",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				),
+				"/auth.php" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "user=jan"
+				),
+				"/server-config" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "user=weigon", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				)
+                              )
+
+url.access-deny             = ( "~", ".inc")
+
+url.redirect                = ( "^/redirect/$" => "http://localhost:2048/" )
+
+expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#cache.cache-dir             = "/home/weigon/wwwroot/cache/"
+
+#### status module
+status.status-url           = "/server-status"
+status.config-url           = "/server-config"
+
+$HTTP["host"] == "vvv.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+}
+
+$HTTP["host"] == "zzz.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "zzz.example.org"
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/fcgi-auth.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/fcgi-auth.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/fcgi-auth.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,33 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_FASTCGI_FASTCGI_H
+#include <fastcgi/fcgi_stdio.h>
+#else
+#include <fcgi_stdio.h>
+#endif
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+int main () {
+	char* p;
+
+	while (FCGI_Accept() >= 0) {
+		/* wait for fastcgi authorizer request */
+
+		printf("Content-type: text/html\r\n");
+
+		if (((p = getenv("QUERY_STRING")) == NULL) ||
+		    strcmp(p, "ok") != 0) {
+			printf("Status: 403 Forbidden\r\n\r\n");
+		} else {
+			printf("\r\n");
+			/* default Status is 200 - allow access */
+		}
+
+		printf("foobar\r\n");
+	}
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/tests/fcgi-responder.c
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/fcgi-responder.c	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/fcgi-responder.c	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,47 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#ifdef HAVE_FASTCGI_FASTCGI_H
+#include <fastcgi/fcgi_stdio.h>
+#else
+#include <fcgi_stdio.h>
+#endif
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+int main () {
+	int num_requests = 2;
+
+	while (num_requests > 0 &&
+	       FCGI_Accept() >= 0) {
+		char* p;
+
+		if (NULL != (p = getenv("QUERY_STRING"))) {
+			if (0 == strcmp(p, "lf")) {
+				printf("Status: 200 OK\n\n");
+			} else if (0 == strcmp(p, "crlf")) {
+				printf("Status: 200 OK\r\n\r\n");
+			} else if (0 == strcmp(p, "slow-lf")) {
+				printf("Status: 200 OK\n");
+				fflush(stdout);
+				printf("\n");
+			} else if (0 == strcmp(p,"slow-crlf")) {
+				printf("Status: 200 OK\r\n");
+				fflush(stdout);
+				printf("\r\n");
+			} else if (0 == strcmp(p, "die-at-end")) {
+				printf("Status: 200 OK\r\n\r\n");
+				num_requests--;
+			} else {
+				printf("Status: 200 OK\r\n\r\n");
+			}
+		} else {
+			printf("Status: 500 Internal Foo\r\n\r\n");
+		}
+
+		printf("test123");
+	}
+
+	return 0;
+}

Added: lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,221 @@
+debug.log-request-handling = "enable"
+debug.log-request-header = "enable"
+debug.log-response-header = "enable"
+debug.log-condition-handling = "enable"
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+## 64 Mbyte ... nice limit
+server.max-request-size = 65000
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Apache 1.3.29"
+
+server.dir-listing          = "enable"
+
+#server.event-handler        = "linux-sysepoll"
+#server.event-handler        = "linux-rtsig"
+
+#server.modules.path         = ""
+server.modules              = (
+				"mod_rewrite",
+				"mod_setenv",
+				"mod_secdownload",
+			        "mod_access",
+				"mod_auth",
+#				"mod_httptls",
+				"mod_status",
+				"mod_expire",
+				"mod_simple_vhost",
+				"mod_redirect",
+#				"mod_evhost",
+#				"mod_localizer",
+				"mod_fastcgi",
+				"mod_cgi",
+				"mod_compress",
+				"mod_userdir",
+				"mod_ssi",
+				"mod_accesslog" )
+
+server.indexfiles           = ( "index.php", "index.html",
+                                "index.htm", "default.htm" )
+
+
+######################## MODULE CONFIG ############################
+
+ssi.extension = ( ".shtml" )
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".png"  => "image/png",
+                                ".jpg"  => "image/jpeg",
+                                ".jpeg" => "image/jpeg",
+                                ".gif"  => "image/gif",
+                                ".html" => "text/html",
+                                ".htm"  => "text/html",
+                                ".pdf"  => "application/pdf",
+                                ".swf"  => "application/x-shockwave-flash",
+                                ".spl"  => "application/futuresplash",
+                                ".txt"  => "text/plain",
+                                ".tar.gz" =>   "application/x-tgz",
+                                ".tgz"  => "application/x-tgz",
+                                ".gz"   => "application/x-gzip",
+				".c"    => "text/plain",
+				".conf" => "text/plain" )
+
+$HTTP["host"] == "cache.example.org" {
+  compress.cache-dir          = env.SRCDIR + "/tmp/lighttpd/cache/compress/"
+}
+compress.filetype           = ("text/plain", "text/html")
+
+setenv.add-environment      = ( "TRAC_ENV" => "tracenv", "SETENV" => "setenv")
+setenv.add-request-header   = ( "FOO" => "foo")
+setenv.add-response-header  = ( "BAR" => "foo")
+
+$HTTP["url"] =~ "\.pdf$" {
+  server.range-requests = "disable"
+}
+
+fastcgi.debug               = 0
+fastcgi.server              = ( ".php" =>        ( ( "host" => "127.0.0.1", "port" => 1026, "broken-scriptfilename" => "enable" ) ),
+			        "/prefix.fcgi" => ( ( "host" => "127.0.0.1", "port" => 1026, "check-local" => "disable", "broken-scriptfilename" => "enable" ) )
+			      )
+
+
+cgi.assign                  = ( ".pl"  => "/usr/bin/perl",
+                                ".cgi" => "/usr/bin/perl",
+				".py"  => "/usr/bin/python" )
+
+userdir.include-user = ( "jan" )
+userdir.path = "/"
+
+ssl.engine                  = "disable"
+ssl.pemfile                 = "server.pem"
+
+$HTTP["host"] == "auth-htpasswd.example.org" {
+	auth.backend                = "htpasswd"
+}
+
+auth.backend                = "plain"
+auth.backend.plain.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.user"
+
+auth.backend.htpasswd.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.htpasswd"
+
+
+auth.require                = ( "/server-status" =>
+                                (
+				  "method"  => "digest",
+				  "realm"   => "download archiv",
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				),
+				"/server-config" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+				  "require" => "valid-user"
+				)
+                              )
+
+url.access-deny             = ( "~", ".inc")
+
+url.rewrite		    = ( "^/rewrite/foo($|\?.+)" => "/indexfile/rewrite.php$1",
+				"^/rewrite/bar(?:$|\?(.+))" => "/indexfile/rewrite.php?bar&$1" )
+
+expire.url                  = ( "/expire/access" => "access 2 hours",
+				"/expire/modification" => "access plus 1 seconds 2 minutes")
+
+#cache.cache-dir             = "/home/weigon/wwwroot/cache/"
+
+#### status module
+status.status-url           = "/server-status"
+status.config-url           = "/server-config"
+
+$HTTP["host"] == "vvv.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  secdownload.secret          = "verysecret"
+  secdownload.document-root   = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  secdownload.uri-prefix      = "/sec/"
+  secdownload.timeout         = 120
+}
+
+$HTTP["host"] == "zzz.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "zzz.example.org"
+}
+
+$HTTP["host"] == "symlink.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "symlink.example.org"
+  server.follow-symlink = "enable"
+}
+
+$HTTP["host"] == "nosymlink.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "symlink.example.org"
+  server.follow-symlink = "disable"
+}
+
+$HTTP["host"] == "no-simple.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/123.example.org/pages/"
+  server.name = "zzz.example.org"
+}
+
+$HTTP["host"] !~ "(no-simple\.example\.org)" {
+  simple-vhost.document-root  = "pages"
+  simple-vhost.server-root    = env.SRCDIR + "/tmp/lighttpd/servers/"
+  simple-vhost.default-host   = "www.example.org"
+}
+
+$HTTP["host"] =~ "(vvv).example.org" {
+  url.redirect = ( "^/redirect/$" => "http://localhost:2048/" )
+}
+
+$HTTP["host"] =~ "(zzz).example.org" {
+  url.redirect = ( "^/redirect/$" => "http://localhost:2048/%1" )
+}
+
+$HTTP["host"] =~ "(remoteip)\.example\.org" {
+  $HTTP["remoteip"] =~ "(127\.0\.0\.1)" {
+    url.redirect = ( "^/redirect/$" => "http://localhost:2048/%1" )
+  }
+}
+
+$HTTP["remoteip"] =~ "(127\.0\.0\.1)" {
+  $HTTP["host"] =~ "(remoteip2)\.example\.org" {
+    url.redirect = ( "^/redirect/$" => "http://localhost:2048/%1" )
+  }
+}
+
+$HTTP["host"] =~ "bug255\.example\.org$" {
+  $HTTP["remoteip"] == "127.0.0.1" {
+    url.access-deny = ( "" )
+  }
+}
+
+$HTTP["referer"] !~ "^($|http://referer\.example\.org)" {
+  url.access-deny = ( ".jpg" )
+}
+
+# deny access for all image stealers
+$HTTP["host"] == "referer.example.org" {
+  $HTTP["referer"] !~ "^($|http://referer\.example\.org)" {
+    url.access-deny = ( ".png" )
+  }
+}
+
+$HTTP["cookie"] =~ "empty-ref" {
+  $HTTP["referer"] == "" {
+    url.access-deny = ( "" )
+  }
+}
+
+
+$HTTP["host"] == "etag.example.org" {
+    static-file.etags = "disable"
+}

Added: lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.htpasswd
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.htpasswd	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.htpasswd	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,2 @@
+des:12tMnfw882VDQ
+md5:$1$md5$kIa7Juuiv8zja0ILQPR36/

Added: lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.user
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.user	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/lighttpd.user	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1 @@
+jan:jan

Added: lighttpd/tags/1.4.19-5+lenny2/tests/lowercase.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/lowercase.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/lowercase.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,80 @@
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+
+server.force-lowercase-filenames = "enable"
+
+server.dir-listing          = "enable"
+
+server.modules              = (
+				"mod_rewrite",
+				"mod_setenv",
+				"mod_secdownload",
+			        "mod_access",
+				"mod_auth",
+				"mod_status",
+				"mod_expire",
+				"mod_redirect",
+				"mod_fastcgi",
+				"mod_cgi" )
+
+server.indexfiles           = ( "index.php", "index.html",
+                                "index.htm", "default.htm" )
+
+
+######################## MODULE CONFIG ############################
+
+mimetype.assign             = ( ".png"  => "image/png",
+                                ".jpg"  => "image/jpeg",
+                                ".jpeg" => "image/jpeg",
+                                ".gif"  => "image/gif",
+                                ".html" => "text/html",
+                                ".htm"  => "text/html",
+                                ".pdf"  => "application/pdf",
+                                ".swf"  => "application/x-shockwave-flash",
+                                ".spl"  => "application/futuresplash",
+                                ".txt"  => "text/plain",
+                                ".tar.gz" =>   "application/x-tgz",
+                                ".tgz"  => "application/x-tgz",
+                                ".gz"   => "application/x-gzip",
+				".c"    => "text/plain",
+				".conf" => "text/plain" )
+
+fastcgi.debug               = 0
+fastcgi.server              = ( ".php" =>        ( ( "host" => "127.0.0.1", "port" => 1026, "broken-scriptfilename" => "enable" ) ),
+			        "/prefix.fcgi" => ( ( "host" => "127.0.0.1", "port" => 1026, "check-local" => "disable", "broken-scriptfilename" => "enable" ) )
+			      )
+
+
+cgi.assign                  = ( ".pl"  => "/usr/bin/perl",
+                                ".cgi" => "/usr/bin/perl",
+				".py"  => "/usr/bin/python" )
+
+auth.backend                = "plain"
+auth.backend.plain.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.user"
+
+auth.backend.htpasswd.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.htpasswd"
+
+$HTTP["host"] == "lowercase-auth" {
+  auth.require             = ( "/image.jpg" =>
+                                (
+				  "method"  => "digest",
+				  "realm"   => "download archiv",
+				  "require" => "valid-user"
+				)
+                              )
+}
+
+$HTTP["host"] == "lowercase-deny" {
+  url.access-deny             = ( ".jpg")
+}
+
+$HTTP["host"] == "lowercase-exclude" {
+  static-file.exclude-extensions = ( ".jpg" )
+}

Added: lighttpd/tags/1.4.19-5+lenny2/tests/lowercase.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/lowercase.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/lowercase.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,94 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 10;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+$tf->{CONFIGFILE} = 'lowercase.conf';
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+## check if lower-casing works
+
+$t->{REQUEST}  = ( <<EOF
+GET /image.JPG HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'uppercase access');
+
+$t->{REQUEST}  = ( <<EOF
+GET /image.jpg HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'lowercase access');
+
+## check that mod-auth works
+
+$t->{REQUEST}  = ( <<EOF
+GET /image.JPG HTTP/1.0
+Host: lowercase-auth
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 401 } ];
+ok($tf->handle_http($t) == 0, 'uppercase access');
+
+$t->{REQUEST}  = ( <<EOF
+GET /image.jpg HTTP/1.0
+Host: lowercase-auth
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 401 } ];
+ok($tf->handle_http($t) == 0, 'lowercase access');
+
+
+## check that mod-staticfile exclude works
+$t->{REQUEST}  = ( <<EOF
+GET /image.JPG HTTP/1.0
+Host: lowercase-exclude
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+ok($tf->handle_http($t) == 0, 'upper case access to staticfile.exclude-extension');
+
+$t->{REQUEST}  = ( <<EOF
+GET /image.jpg HTTP/1.0
+Host: lowercase-exclude
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+ok($tf->handle_http($t) == 0, 'lowercase access');
+
+
+## check that mod-access exclude works
+$t->{REQUEST}  = ( <<EOF
+GET /image.JPG HTTP/1.0
+Host: lowercase-deny
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+ok($tf->handle_http($t) == 0, 'uppercase access to url.access-deny protected location');
+
+$t->{REQUEST}  = ( <<EOF
+GET /image.jpg HTTP/1.0
+Host: lowercase-deny
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+ok($tf->handle_http($t) == 0, 'lowercase access');
+
+
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/lowercase.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-access.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-access.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-access.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,34 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 4;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html~ HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+ok($tf->handle_http($t) == 0, 'forbid access to ...~');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html~/ HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+ok($tf->handle_http($t) == 0, '#1230 - forbid access to ...~ - trailing slash');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-access.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-auth.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-auth.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-auth.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,146 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 14;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST}  = ( <<EOF
+GET /server-status HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 401 } ];
+ok($tf->handle_http($t) == 0, 'Missing Auth-token');
+
+$t->{REQUEST}  = ( <<EOF
+GET /server-status HTTP/1.0
+Authorization: Basic amFuOmphb
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 401 } ];
+ok($tf->handle_http($t) == 0, 'Basic-Auth: Wrong Auth-token');
+
+$t->{REQUEST}  = ( <<EOF
+GET /server-config HTTP/1.0
+Authorization: Basic amFuOmphbg==
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Basic-Auth: Valid Auth-token - plain');
+
+$t->{REQUEST}  = ( <<EOF
+GET /server-config HTTP/1.0
+Host: auth-htpasswd.example.org
+Authorization: Basic ZGVzOmRlcw==
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Basic-Auth: Valid Auth-token - htpasswd (des)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /server-config HTTP/1.0
+Host: auth-htpasswd.example.org
+Authorization: basic ZGVzOmRlcw==
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Basic-Auth: Valid Auth-token - htpasswd (des) (lowercase)');
+
+
+SKIP: {
+	skip "no md5 for crypt under cygwin", 1 if $^O eq 'cygwin';
+$t->{REQUEST}  = ( <<EOF
+GET /server-config HTTP/1.0
+Host: auth-htpasswd.example.org
+Authorization: Basic bWQ1Om1kNQ==
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'Basic-Auth: Valid Auth-token - htpasswd (md5)');
+}
+
+$t->{REQUEST}  = ( <<EOF
+GET /server-config HTTP/1.0
+Authorization: Basic bWQ1Om1kNA==
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 401 } ];
+ok($tf->handle_http($t) == 0, 'Basic-Auth: Valid Auth-token');
+
+## this should not crash
+$t->{REQUEST}  = ( <<EOF
+GET /server-status HTTP/1.0
+User-Agent: Wget/1.9.1
+Authorization: Digest username="jan", realm="jan", nonce="9a5428ccc05b086a08d918e73b01fc6f",
+                uri="/server-status", response="ea5f7d9a30b8b762f9610ccb87dea74f"
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 401 } ];
+ok($tf->handle_http($t) == 0, 'Digest-Auth: missing qop, no crash');
+
+## this should not crash
+$t->{REQUEST}  = ( <<EOF
+GET /server-status HTTP/1.0
+User-Agent: Wget/1.9.1
+Authorization: Digest username="jan", realm="jan",
+	nonce="b1d12348b4620437c43dd61c50ae4639",
+	uri="/MJ-BONG.xm.mpc", qop=auth, noncecount=00000001",
+	cnonce="036FCA5B86F7E7C4965C7F9B8FE714B7",
+	response="29B32C2953C763C6D033C8A49983B87E"
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'Digest-Auth: missing nc (noncecount instead), no crash');
+
+$t->{REQUEST}  = ( <<EOF
+GET /server-status HTTP/1.0
+Authorization: Basic =
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 401 } ];
+ok($tf->handle_http($t) == 0, 'Basic-Auth: Invalid Base64');
+
+
+$t->{REQUEST}  = ( <<EOF
+GET /server-status HTTP/1.0
+User-Agent: Wget/1.9.1
+Authorization: Digest username="jan", realm="jan",
+	nonce="b1d12348b4620437c43dd61c50ae4639", algorithm="md5-sess",
+	uri="/MJ-BONG.xm.mpc", qop=auth, noncecount=00000001",
+	cnonce="036FCA5B86F7E7C4965C7F9B8FE714B7",
+	nc="asd",
+	response="29B32C2953C763C6D033C8A49983B87E"
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 401 } ];
+ok($tf->handle_http($t) == 0, 'Digest-Auth: md5-sess + missing cnonce');
+
+$t->{REQUEST}  = ( <<EOF
+GET /server-status HTTP/1.0
+User-Agent: Wget/1.9.1
+Authorization: Digest username="jan", realm="jan",
+	nonce="b1d12348b4620437c43dd61c50ae4639", algorithm="md5-sess",
+	uri="/MJ-BONG.xm.mpc", qop=auth, noncecount=00000001",
+	cnonce="036FCA5B86F7E7C4965C7F9B8FE714B7",
+	nc="asd",
+	response="29B32C2953C763C6D033C8A49983B87E"     
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 401 } ];
+ok($tf->handle_http($t) == 0, 'Digest-Auth: trailing WS');
+
+
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-auth.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-cgi.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-cgi.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-cgi.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,142 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 18;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+# mod-cgi
+#
+$t->{REQUEST}  = ( <<EOF
+GET /cgi.pl HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'perl via cgi');
+
+$t->{REQUEST}  = ( <<EOF
+GET /cgi.pl/foo HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/cgi.pl' } ];
+ok($tf->handle_http($t) == 0, 'perl via cgi + pathinfo');
+
+$t->{REQUEST}  = ( <<EOF
+GET /cgi-pathinfo.pl/foo HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/foo' } ];
+ok($tf->handle_http($t) == 0, 'perl via cgi + pathinfo');
+
+$t->{REQUEST}  = ( <<EOF
+GET /nph-status.pl?30 HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'NPH + perl, invalid status-code (#14)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /nph-status.pl?304 HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304 } ];
+ok($tf->handle_http($t) == 0, 'NPH + perl, setting status-code (#1125)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /nph-status.pl?200 HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'NPH + perl, setting status-code');
+
+$t->{REQUEST} = ( <<EOF
+GET /get-header.pl?GATEWAY_INTERFACE HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'CGI/1.1' } ];
+ok($tf->handle_http($t) == 0, 'cgi-env: GATEWAY_INTERFACE');
+
+$t->{REQUEST} = ( <<EOF
+GET /get-header.pl?QUERY_STRING HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'QUERY_STRING' } ];
+ok($tf->handle_http($t) == 0, 'cgi-env: QUERY_STRING');
+
+$t->{REQUEST} = ( <<EOF
+GET /get-header.pl?GATEWAY_INTERFACE HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'CGI/1.1' } ];
+ok($tf->handle_http($t) == 0, 'cgi-env: GATEWAY_INTERFACE');
+
+$t->{REQUEST} = ( <<EOF
+GET /get-header.pl?HTTP_HOST HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
+ok($tf->handle_http($t) == 0, 'cgi-env: HTTP_HOST');
+
+$t->{REQUEST}  = ( <<EOF
+GET /get-header.pl?HTTP_XX_YY123 HTTP/1.0
+xx-yy123: foo
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'foo' } ];
+ok($tf->handle_http($t) == 0, 'cgi-env: quoting headers with numbers');
+
+$t->{REQUEST}  = ( <<EOF
+GET /get-header.pl?HTTP_HOST HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
+ok($tf->handle_http($t) == 0, 'cgi-env: HTTP_HOST');
+
+$t->{REQUEST}  = ( <<EOF
+GET /get-header.pl?HTTP_HOST HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
+ok($tf->handle_http($t) == 0, 'cgi-env: HTTP_HOST');
+
+$t->{REQUEST}  = ( <<EOF
+GET /get-header.pl?HTTP_HOST HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Content-Type' => 'text/plain' } ];
+ok($tf->handle_http($t) == 0, 'cgi-env: HTTP_HOST');
+
+$t->{REQUEST}  = ( <<EOF
+GET /get-header.pl?HTTP_HOST HTTP/1.1
+Host: www.example.org
+Connection: close
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 200, '+Content-Length' => '' } ];
+ok($tf->handle_http($t) == 0, 'cgi-env: HTTP_HOST');
+
+# broken header crash
+$t->{REQUEST}  = ( <<EOF
+GET /crlfcrash.pl HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 302, 'Location' => 'http://www.example.org/' } ];
+ok($tf->handle_http($t) == 0, 'broken header via perl cgi');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-cgi.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-compress.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-compress.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-compress.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,92 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 10;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Accept-Encoding: deflate
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+Vary' => '' } ];
+ok($tf->handle_http($t) == 0, 'Vary is set');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Accept-Encoding: deflate
+Host: no-cache.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+Vary' => '', 'Content-Length' => '1288', '+Content-Encoding' => '' } ];
+ok($tf->handle_http($t) == 0, 'deflate - Content-Length and Content-Encoding is set');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Accept-Encoding: deflate
+Host: cache.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+Vary' => '', 'Content-Length' => '1288', '+Content-Encoding' => '' } ];
+ok($tf->handle_http($t) == 0, 'deflate - Content-Length and Content-Encoding is set');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Accept-Encoding: gzip
+Host: no-cache.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+Vary' => '', 'Content-Length' => '1306', '+Content-Encoding' => '' } ];
+ok($tf->handle_http($t) == 0, 'gzip - Content-Length and Content-Encoding is set');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Accept-Encoding: gzip
+Host: cache.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+Vary' => '', 'Content-Length' => '1306', '+Content-Encoding' => '' } ];
+ok($tf->handle_http($t) == 0, 'gzip - Content-Length and Content-Encoding is set');
+
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.txt HTTP/1.0
+Accept-Encoding: gzip, deflate
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+Vary' => '', '+Content-Encoding' => '' } ];
+ok($tf->handle_http($t) == 0, 'gzip, deflate - Content-Length and Content-Encoding is set');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.txt HTTP/1.0
+Accept-Encoding: gzip, deflate
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+Vary' => '', '+Content-Encoding' => '', 'Content-Type' => "text/plain" } ];
+ok($tf->handle_http($t) == 0, 'Content-Type is from the original file');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.txt HTTP/1.0
+Accept-encoding:
+X-Accept-encoding: x-i2p-gzip;q=1.0, identity;q=0.5, deflate;q=0, gzip;q=0, *;q=0
+User-Agent: MYOB/6.66 (AN/ON)
+Connection: close
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '+Vary' => '', 'Content-Type' => "text/plain" } ];
+ok($tf->handle_http($t) == 0, 'Empty Accept-Encoding');
+
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-compress.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-fastcgi.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-fastcgi.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-fastcgi.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,327 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use Test::More tests => 47;
+use LightyTest;
+
+my $tf = LightyTest->new();
+
+my $t;
+
+SKIP: {
+	skip "no PHP running on port 1026", 29 unless $tf->listening_on(1026);
+
+	ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+	$t->{REQUEST} = ( <<EOF
+GET /phpinfo.php HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, 'valid request');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /phpinfofoobar.php HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+	ok($tf->handle_http($t) == 0, 'file not found');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /go/ HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, 'index-file handling');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /redirect.php HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 302, 'Location' => 'http://www.example.org:2048/' } ];
+	ok($tf->handle_http($t) == 0, 'Status + Location via FastCGI');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /get-server-env.php?env=PHP_SELF HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, '$_SERVER["PHP_SELF"]');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /get-server-env.php/foo?env=SCRIPT_NAME HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/get-server-env.php' } ];
+	ok($tf->handle_http($t) == 0, '$_SERVER["PHP_SELF"]');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /get-server-env.php/foo?env=PATH_INFO HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE}  = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/foo' } ];
+	ok($tf->handle_http($t) == 0, '$_SERVER["PATH_INFO"]');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /get-server-env.php?env=SERVER_NAME HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
+	ok($tf->handle_http($t) == 0, 'SERVER_NAME');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /get-server-env.php?env=SERVER_NAME HTTP/1.0
+Host: foo.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
+	ok($tf->handle_http($t) == 0, 'SERVER_NAME');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /get-server-env.php?env=SERVER_NAME HTTP/1.0
+Host: vvv.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
+	ok($tf->handle_http($t) == 0, 'SERVER_NAME');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /get-server-env.php?env=SERVER_NAME HTTP/1.0
+Host: zzz.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'www.example.org' } ];
+	ok($tf->handle_http($t) == 0, 'SERVER_NAME');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /cgi.php/abc HTTP/1.0
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, 'PATHINFO');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /cgi.php%20%20%20 HTTP/1.0
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+	ok($tf->handle_http($t) == 0, 'No source retrieval');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /www/abc/def HTTP/1.0
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+	ok($tf->handle_http($t) == 0, 'PATHINFO on a directory');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /indexfile/ HTTP/1.0
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/indexfile/index.php' } ];
+	ok($tf->handle_http($t) == 0, 'PHP_SELF + Indexfile, Bug #3');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /prefix.fcgi?var=SCRIPT_NAME HTTP/1.0
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/prefix.fcgi' } ];
+	ok($tf->handle_http($t) == 0, 'PATH_INFO, check-local off');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /prefix.fcgi/foo/bar?var=SCRIPT_NAME HTTP/1.0
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/prefix.fcgi' } ];
+	ok($tf->handle_http($t) == 0, 'PATH_INFO, check-local off');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /prefix.fcgi/foo/bar?var=PATH_INFO HTTP/1.0
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/foo/bar' } ];
+	ok($tf->handle_http($t) == 0, 'PATH_INFO, check-local off');
+
+	
+	ok($tf->stop_proc == 0, "Stopping lighttpd");
+
+
+	$tf->{CONFIGFILE} = 'fastcgi-10.conf';
+	ok($tf->start_proc == 0, "Starting lighttpd with $tf->{CONFIGFILE}") or die();
+	$t->{REQUEST}  = ( <<EOF
+GET /get-server-env.php?env=SERVER_NAME HTTP/1.0
+Host: zzz.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'zzz.example.org' } ];
+	ok($tf->handle_http($t) == 0, 'FastCGI + Host');
+
+	ok($tf->stop_proc == 0, "Stopping lighttpd");
+	
+	$tf->{CONFIGFILE} = 'bug-06.conf';
+	ok($tf->start_proc == 0, "Starting lighttpd with $tf->{CONFIGFILE}") or die();
+	$t->{REQUEST}  = ( <<EOF
+GET /indexfile/ HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '/indexfile/index.php' } ];
+	ok($tf->handle_http($t) == 0, 'Bug #6');
+
+	ok($tf->stop_proc == 0, "Stopping lighttpd");
+
+	$tf->{CONFIGFILE} = 'bug-12.conf';
+	ok($tf->start_proc == 0, "Starting lighttpd with bug-12.conf") or die();
+	$t->{REQUEST}  = ( <<EOF
+POST /indexfile/abc HTTP/1.0
+Host: www.example.org
+Content-Length: 0
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, 'HTTP-Content' => '/indexfile/return-404.php' } ];
+	ok($tf->handle_http($t) == 0, 'Bug #12');
+
+	ok($tf->stop_proc == 0, "Stopping lighttpd");
+}
+
+SKIP: {
+	skip "no fcgi-auth found", 4 unless -x $tf->{BASEDIR}."/tests/fcgi-auth" || -x $tf->{BASEDIR}."/tests/fcgi-auth.exe"; 
+
+	$tf->{CONFIGFILE} = 'fastcgi-auth.conf';
+	ok($tf->start_proc == 0, "Starting lighttpd with $tf->{CONFIGFILE}") or die();
+	$t->{REQUEST}  = ( <<EOF
+GET /index.html?ok HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, 'FastCGI - Auth');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /index.html?fail HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+	ok($tf->handle_http($t) == 0, 'FastCGI - Auth');
+
+	ok($tf->stop_proc == 0, "Stopping lighttpd");
+}
+
+SKIP: {
+	skip "no php found", 5 unless -x "/usr/bin/php-cgi"; 
+	$tf->{CONFIGFILE} = 'fastcgi-13.conf';
+	ok($tf->start_proc == 0, "Starting lighttpd with $tf->{CONFIGFILE}") or die();
+	$t->{REQUEST}  = ( <<EOF
+GET /indexfile/index.php HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, 'FastCGI + local spawning');
+
+	$t->{REQUEST} = ( <<EOF
+HEAD /indexfile/index.php HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '-Content-Length' => '0' } ];
+	# Of course a valid content-length != 0 would be ok, but we assume for now that such one is not generated.
+	ok($tf->handle_http($t) == 0, 'Check for buggy content length with HEAD');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /get-env.php?env=MAIL HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 , 'HTTP-Content' => '' } ];
+	ok($tf->handle_http($t) == 0, 'FastCGI + bin-copy-environment');
+
+
+
+	ok($tf->stop_proc == 0, "Stopping lighttpd");
+}
+
+
+SKIP: {
+	skip "no fcgi-responder found", 9 unless -x $tf->{BASEDIR}."/tests/fcgi-responder" || -x $tf->{BASEDIR}."/tests/fcgi-responder.exe"; 
+	
+	$tf->{CONFIGFILE} = 'fastcgi-responder.conf';
+	ok($tf->start_proc == 0, "Starting lighttpd with $tf->{CONFIGFILE}") or die();
+	$t->{REQUEST}  = ( <<EOF
+GET /index.fcgi?lf HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
+	ok($tf->handle_http($t) == 0, 'line-ending \n\n');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /index.fcgi?crlf HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
+	ok($tf->handle_http($t) == 0, 'line-ending \r\n\r\n');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /index.fcgi?slow-lf HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
+	ok($tf->handle_http($t) == 0, 'line-ending \n + \n');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /index.fcgi?slow-crlf HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
+	ok($tf->handle_http($t) == 0, 'line-ending \r\n + \r\n');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /index.fcgi?die-at-end HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
+	ok($tf->handle_http($t) == 0, 'killing fastcgi and wait for restart');
+
+	select(undef, undef, undef, 2);
+	$t->{REQUEST}  = ( <<EOF
+GET /index.fcgi?die-at-end HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
+	ok($tf->handle_http($t) == 0, 'killing fastcgi and wait for restart');
+
+
+	select(undef, undef, undef, 2);
+	$t->{REQUEST}  = ( <<EOF
+GET /index.fcgi?crlf HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'test123' } ];
+	ok($tf->handle_http($t) == 0, 'regular response of after restart');
+
+
+	ok($tf->stop_proc == 0, "Stopping lighttpd");
+}
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-fastcgi.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-proxy.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-proxy.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-proxy.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,53 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 6;
+use LightyTest;
+
+my $tf_real = LightyTest->new();
+my $tf_proxy = LightyTest->new();
+
+my $t;
+
+## we need two procs
+## 1. the real webserver
+## 2. the proxy server
+
+$tf_real->{PORT} = 2048;
+$tf_real->{CONFIGFILE} = 'lighttpd.conf';
+$tf_real->{LIGHTTPD_PIDFILE} = $tf_real->{TESTDIR}.'/tmp/lighttpd/lighttpd.pid';
+
+$tf_proxy->{PORT} = 2050;
+$tf_proxy->{CONFIGFILE} = 'proxy.conf';
+$tf_proxy->{LIGHTTPD_PIDFILE} = $tf_proxy->{TESTDIR}.'/tmp/lighttpd/lighttpd-proxy.pid';
+
+ok($tf_real->start_proc == 0, "Starting lighttpd") or die();
+
+ok($tf_proxy->start_proc == 0, "Starting lighttpd as proxy") or die();
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf_proxy->handle_http($t) == 0, 'valid request');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'Server' => 'Apache 1.3.29' } ];
+ok($tf_proxy->handle_http($t) == 0, 'drop Server from real server');
+
+ok($tf_proxy->stop_proc == 0, "Stopping lighttpd proxy");
+
+ok($tf_real->stop_proc == 0, "Stopping lighttpd");


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-proxy.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-redirect.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-redirect.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-redirect.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,59 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 7;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST}  = ( <<EOF
+GET /redirect/ HTTP/1.0
+Host: vvv.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://localhost:'.$tf->{PORT}.'/' } ];
+ok($tf->handle_http($t) == 0, 'external redirect');
+
+$t->{REQUEST}  = ( <<EOF
+GET /redirect/ HTTP/1.0
+Host: vvv.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://localhost:'.$tf->{PORT}.'/', 'Content-Length' => '0' } ];
+ok($tf->handle_http($t) == 0, 'external redirect should have a Content-Length: 0');
+
+$t->{REQUEST} = ( <<EOF
+GET /redirect/ HTTP/1.0
+Host: zzz.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://localhost:'.$tf->{PORT}.'/zzz' } ];
+ok($tf->handle_http($t) == 0, 'external redirect with cond regsub');
+
+$t->{REQUEST} = ( <<EOF
+GET /redirect/ HTTP/1.0
+Host: remoteip.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://localhost:'.$tf->{PORT}.'/127.0.0.1' } ];
+ok($tf->handle_http($t) == 0, 'external redirect with cond regsub on remoteip');
+
+$t->{REQUEST} = ( <<EOF
+GET /redirect/ HTTP/1.0
+Host: remoteip2.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://localhost:'.$tf->{PORT}.'/remoteip2' } ];
+ok($tf->handle_http($t) == 0, 'external redirect with cond regsub on remoteip2');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-redirect.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-rewrite.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-rewrite.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-rewrite.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,48 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 5;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+
+SKIP: {
+	skip "no PHP running on port 1026", 5 unless $tf->listening_on(1026);
+
+	ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+	$t->{REQUEST}  = ( <<EOF
+GET /rewrite/foo HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '' } ];
+	ok($tf->handle_http($t) == 0, 'valid request');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /rewrite/foo?a=b HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'a=b' } ];
+	ok($tf->handle_http($t) == 0, 'valid request');
+
+	$t->{REQUEST}  = ( <<EOF
+GET /rewrite/bar?a=b HTTP/1.0
+Host: www.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'bar&a=b' } ];
+	ok($tf->handle_http($t) == 0, 'valid request');
+
+	ok($tf->stop_proc == 0, "Stopping lighttpd");
+}


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-rewrite.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-secdownload.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-secdownload.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-secdownload.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,79 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 7;
+use LightyTest;
+use Digest::MD5 qw(md5_hex);
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+my $secret = "verysecret";
+my $f = "/index.html";
+my $thex = sprintf("%08x", time);
+my $m = md5_hex($secret.$f.$thex);
+
+$t->{REQUEST}  = ( <<EOF
+GET /sec/$m/$thex$f HTTP/1.0
+Host: vvv.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+
+ok($tf->handle_http($t) == 0, 'secdownload');
+
+$thex = sprintf("%08x", time - 1800);
+$m = md5_hex($secret.$f.$thex);
+
+$t->{REQUEST}  = ( <<EOF
+GET /sec/$m/$thex$f HTTP/1.0
+Host: vvv.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 410 } ];
+
+ok($tf->handle_http($t) == 0, 'secdownload - gone (timeout)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /sec$f HTTP/1.0
+Host: vvv.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+
+ok($tf->handle_http($t) == 0, 'secdownload - direct access');
+
+$t->{REQUEST}  = ( <<EOF
+GET $f HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+
+ok($tf->handle_http($t) == 0, 'secdownload - conditional access');
+
+
+$f = "/noexists";
+$thex = sprintf("%08x", time);
+$m = md5_hex($secret.$f.$thex);
+
+$t->{REQUEST}  = ( <<EOF
+GET /sec/$m/$thex$f HTTP/1.0
+Host: vvv.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+
+ok($tf->handle_http($t) == 0, 'secdownload - timeout');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-secdownload.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-setenv.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-setenv.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-setenv.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,52 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 6;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+$t->{REQUEST} = ( <<EOF
+GET /get-header.pl?TRAC_ENV HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE}  = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'tracenv' } ];
+ok($tf->handle_http($t) == 0, 'query first setenv');
+
+$t->{REQUEST}  = ( <<EOF
+GET /get-header.pl?SETENV HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE}  = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'setenv' } ];
+ok($tf->handle_http($t) == 0, 'query second setenv');
+
+$t->{REQUEST}  = ( <<EOF
+GET /get-header.pl?HTTP_FOO HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE}  = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => 'foo' } ];
+ok($tf->handle_http($t) == 0, 'query add-request-header');
+
+$t->{REQUEST} = ( <<EOF
+GET /index.html HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE}  = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'BAR' => 'foo' } ];
+ok($tf->handle_http($t) == 0, 'query add-response-header');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-setenv.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-ssi.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-ssi.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-ssi.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,39 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 4;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+# mod-cgi
+#
+$t->{REQUEST}  = ( <<EOF
+GET /ssi.shtml HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => "/ssi.shtml\n" } ];
+ok($tf->handle_http($t) == 0, 'ssi - echo ');
+
+
+## bug #280
+$t->{REQUEST}  = ( <<EOF
+GET /exec-date.shtml HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => "2\n\n" } ];
+ok($tf->handle_http($t) == 0, 'ssi - echo ');
+
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-ssi.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/mod-userdir.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/mod-userdir.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/mod-userdir.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,44 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 5;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+# get current user
+
+$t->{REQUEST}  = ( <<EOF
+GET /~foobar/ HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+ok($tf->handle_http($t) == 0, 'valid user');
+
+$t->{REQUEST}  = ( <<EOF
+GET /~jan HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://'.$tf->{HOSTNAME}.':'.$tf->{PORT}.'/~jan/' } ];
+ok($tf->handle_http($t) == 0, 'valid user + redirect');
+
+$t->{REQUEST}  = ( <<EOF
+GET /~jan HTTP/1.0
+Host: www.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 301, 'Location' => 'http://www.example.org/~jan/' } ];
+ok($tf->handle_http($t) == 0, 'valid user + redirect');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/mod-userdir.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/prepare.sh
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/prepare.sh	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/prepare.sh	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+if test x$srcdir = x; then
+	srcdir=.
+fi
+
+if test x$top_builddir = x; then
+	top_builddir=..
+fi
+
+tmpdir=$top_builddir/tests/tmp/lighttpd
+
+# create test-framework
+rm -rf $tmpdir
+mkdir -p $tmpdir/servers/www.example.org/pages/
+mkdir -p $tmpdir/servers/www.example.org/pages/dummydir/
+mkdir -p $tmpdir/servers/www.example.org/pages/go/
+mkdir -p $tmpdir/servers/www.example.org/pages/expire/
+mkdir -p $tmpdir/servers/www.example.org/pages/indexfile/
+mkdir -p $tmpdir/servers/123.example.org/pages/
+mkdir -p $tmpdir/logs/
+mkdir -p $tmpdir/cache/
+mkdir -p $tmpdir/cache/compress/
+
+# copy everything into the right places
+cp $srcdir/docroot/www/*.html \
+   $srcdir/docroot/www/*.php \
+   $srcdir/docroot/www/*.html~ \
+   $srcdir/docroot/www/*.pl \
+   $srcdir/docroot/www/*.fcgi \
+   $srcdir/docroot/www/*.shtml \
+   $srcdir/docroot/www/*.txt $tmpdir/servers/www.example.org/pages/
+cp $srcdir/docroot/www/go/*.php $tmpdir/servers/www.example.org/pages/go/
+cp $srcdir/docroot/www/expire/*.txt $tmpdir/servers/www.example.org/pages/expire/
+cp $srcdir/docroot/www/indexfile/*.php $tmpdir/servers/www.example.org/pages/indexfile/
+cp $srcdir/docroot/123/*.txt \
+   $srcdir/docroot/123/*.html \
+   $srcdir/docroot/123/*.php \
+   $srcdir/docroot/123/*.bla $tmpdir/servers/123.example.org/pages/
+cp $srcdir/lighttpd.user $tmpdir/
+cp $srcdir/lighttpd.htpasswd $tmpdir/
+cp $srcdir/var-include-sub.conf $tmpdir/../
+touch $tmpdir/servers/www.example.org/pages/image.jpg \
+      $tmpdir/servers/www.example.org/pages/image.JPG \
+      $tmpdir/servers/www.example.org/pages/Foo.txt \
+      $tmpdir/servers/www.example.org/pages/a
+echo "12345" > $tmpdir/servers/www.example.org/pages/range.pdf
+
+printf "%-40s" "preparing infrastructure"
+
+exit 0


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/prepare.sh
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/proxy.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/proxy.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/proxy.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,156 @@
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd-proxy.pid"
+
+## bind to port (default: 80)
+server.port                 = 2050
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Proxy"
+
+server.dir-listing          = "enable"
+
+#server.event-handler        = "linux-sysepoll"
+#server.event-handler        = "linux-rtsig"
+
+#server.modules.path         = ""
+server.modules              = (
+				"mod_rewrite",
+				"mod_setenv",
+			        "mod_access",
+				"mod_auth",
+#				"mod_httptls",
+				"mod_status",
+				"mod_expire",
+				"mod_simple_vhost",
+				"mod_redirect",
+#				"mod_evhost",
+#				"mod_localizer",
+				"mod_fastcgi",
+				"mod_proxy",
+				"mod_cgi",
+				"mod_compress",
+				"mod_userdir",
+				"mod_accesslog" )
+
+server.indexfiles           = ( "index.php", "index.html",
+                                "index.htm", "default.htm" )
+
+
+######################## MODULE CONFIG ############################
+
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".png"  => "image/png",
+                                ".jpg"  => "image/jpeg",
+                                ".jpeg" => "image/jpeg",
+                                ".gif"  => "image/gif",
+                                ".html" => "text/html",
+                                ".htm"  => "text/html",
+                                ".pdf"  => "application/pdf",
+                                ".swf"  => "application/x-shockwave-flash",
+                                ".spl"  => "application/futuresplash",
+                                ".txt"  => "text/plain",
+                                ".tar.gz" =>   "application/x-tgz",
+                                ".tgz"  => "application/x-tgz",
+                                ".gz"   => "application/x-gzip",
+				".c"    => "text/plain",
+				".conf" => "text/plain" )
+
+compress.cache-dir          = env.SRCDIR + "/tmp/lighttpd/cache/compress/"
+compress.filetype           = ("text/plain", "text/html")
+
+setenv.add-environment      = ( "TRAC_ENV" => "foo")
+setenv.add-request-header   = ( "FOO" => "foo")
+setenv.add-response-header  = ( "BAR" => "foo")
+
+proxy.debug = 1
+proxy.server              = ( "" => (
+                                  "grisu" => (
+				    "host" => "127.0.0.1",
+				    "port" => 2048,
+				  )
+				)
+			      )
+
+
+cgi.assign                  = ( ".pl"  => "/usr/bin/perl",
+                                ".cgi" => "/usr/bin/perl",
+				".py"  => "/usr/bin/python" )
+
+userdir.include-user = ( "jan" )
+userdir.path = "/"
+
+ssl.engine                  = "disable"
+ssl.pemfile                 = "server.pem"
+
+auth.backend                = "plain"
+auth.backend.plain.userfile = env.SRCDIR + "/tmp/lighttpd/lighttpd.user"
+auth.backend.plain.groupfile = "lighttpd.group"
+
+auth.backend.ldap.hostname  = "localhost"
+auth.backend.ldap.base-dn   = "dc=my-domain,dc=com"
+auth.backend.ldap.filter    = "(uid=$)"
+
+auth.require                = ( "/server-status" =>
+                                (
+				  "method"  => "digest",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				),
+				"/auth.php" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "host=192.168.2.10")
+				  "require" => "user=jan"
+				),
+				"/server-config" =>
+                                (
+				  "method"  => "basic",
+				  "realm"   => "download archiv",
+#				  "require" => ("group=www", "user=jan", "user=weigon", "host=192.168.2.10")
+				  "require" => "group=www|user=jan|host=192.168.2.10"
+				)
+                              )
+
+url.access-deny             = ( "~", ".inc")
+
+url.redirect                = ( "^/redirect/$" => "http://localhost:2048/" )
+
+url.rewrite		    = ( "^/rewrite/foo($|\?.+)" => "/indexfile/rewrite.php$1",
+				"^/rewrite/bar(?:$|\?(.+))" => "/indexfile/rewrite.php?bar&$1" )
+
+expire.url                  = ( "/expire/access" => "access 2 hours",
+				"/expire/modification" => "access plus 1 seconds 2 minutes")
+
+#cache.cache-dir             = "/home/weigon/wwwroot/cache/"
+
+#### status module
+status.status-url           = "/server-status"
+status.config-url           = "/server-config"
+
+$HTTP["host"] == "vvv.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+}
+
+$HTTP["host"] == "zzz.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "zzz.example.org"
+}
+
+$HTTP["host"] == "no-simple.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/123.example.org/pages/"
+  server.name = "zzz.example.org"
+}
+
+$HTTP["host"] !~ "(no-simple\.example\.org)" {
+  simple-vhost.document-root  = "pages"
+  simple-vhost.server-root    = env.SRCDIR + "/tmp/lighttpd/servers/"
+  simple-vhost.default-host   = "www.example.org"
+}
+

Added: lighttpd/tags/1.4.19-5+lenny2/tests/request.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/request.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/request.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,393 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 41;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+
+ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+## Basic Request-Handling
+
+$t->{REQUEST}  = ( <<EOF
+GET /foobar HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+ok($tf->handle_http($t) == 0, 'file not found');
+
+$t->{REQUEST}  = ( <<EOF
+GET /foobar?foobar HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404 } ];
+ok($tf->handle_http($t) == 0, 'file not found + querystring');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/plain' } ];
+ok($tf->handle_http($t) == 0, 'GET, content == 12345, mimetype text/plain');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.html HTTP/1.0
+Host: 123.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'text/html' } ];
+ok($tf->handle_http($t) == 0, 'GET, content == 12345, mimetype text/html');
+
+$t->{REQUEST}  = ( <<EOF
+GET /dummyfile.bla HTTP/1.0
+Host: 123.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, 'HTTP-Content' => '12345'."\n", 'Content-Type' => 'application/octet-stream' } ];
+ok($tf->handle_http($t) == 0, 'GET, content == 12345, mimetype application/octet-stream');
+
+$t->{REQUEST}  = ( <<EOF
+POST / HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 411 } ];
+ok($tf->handle_http($t) == 0, 'POST request, no Content-Length');
+
+
+$t->{REQUEST}  = ( <<EOF
+POST / HTTP/1.0
+Content-type: application/x-www-form-urlencoded
+Content-length: 0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'POST request, empty request-body');
+
+$t->{REQUEST}  = ( <<EOF
+HEAD / HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '-HTTP-Content' => ''} ];
+ok($tf->handle_http($t) == 0, 'HEAD request, no content');
+
+$t->{REQUEST}  = ( <<EOF
+HEAD /12345.html HTTP/1.0
+Host: 123.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200, '-HTTP-Content' => '', 'Content-Type' => 'text/html', 'Content-Length' => '6'} ];
+ok($tf->handle_http($t) == 0, 'HEAD request, mimetype text/html, content-length');
+
+$t->{REQUEST}  = ( <<EOF
+HEAD /foobar?foobar HTTP/1.0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 404, '-HTTP-Content' => '' } ];
+ok($tf->handle_http($t) == 0, 'HEAD request, file-not-found, query-string');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.1
+Connection: close
+Expect: 100-continue
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.1', 'HTTP-Status' => 417, '-HTTP-Content' => ''} ];
+ok($tf->handle_http($t) == 0, 'Continue, Expect');
+
+## ranges
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+Range: bytes=0-3
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => '1234' } ];
+ok($tf->handle_http($t) == 0, 'GET, Range 0-3');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+Range: bytes=-3
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => '45'."\n" } ];
+ok($tf->handle_http($t) == 0, 'GET, Range -3');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+Range: bytes=3-
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => '45'."\n" } ];
+ok($tf->handle_http($t) == 0, 'GET, Range 3-');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+Range: bytes=0-1,3-4
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 206, 'HTTP-Content' => <<EOF
+\r
+--fkj49sn38dcn3\r
+Content-Range: bytes 0-1/6\r
+Content-Type: text/plain\r
+\r
+12\r
+--fkj49sn38dcn3\r
+Content-Range: bytes 3-4/6\r
+Content-Type: text/plain\r
+\r
+45\r
+--fkj49sn38dcn3--\r
+EOF
+ } ];
+ok($tf->handle_http($t) == 0, 'GET, Range 0-1,3-4');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+Range: bytes=0--
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'GET, Range 0--');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+Range: bytes=-2-3
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'GET, Range -2-3');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+Range: bytes=-0
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 416, 'HTTP-Content' => <<EOF
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+  <title>416 - Requested Range Not Satisfiable</title>
+ </head>
+ <body>
+  <h1>416 - Requested Range Not Satisfiable</h1>
+ </body>
+</html>
+EOF
+ } ];
+ok($tf->handle_http($t) == 0, 'GET, Range -0');
+
+$t->{REQUEST}  = ( <<EOF
+GET /12345.txt HTTP/1.0
+Host: 123.example.org
+Range: bytes=25-
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 416, 'HTTP-Content' => <<EOF
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+  <title>416 - Requested Range Not Satisfiable</title>
+ </head>
+ <body>
+  <h1>416 - Requested Range Not Satisfiable</h1>
+ </body>
+</html>
+EOF
+ } ];
+
+ok($tf->handle_http($t) == 0, 'GET, Range start out of range');
+
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Hsgfsdjf: asdfhdf
+hdhd: shdfhfdasd
+hfhr: jfghsdfg
+jfuuehdmn: sfdgjfdg
+jvcbzufdg: sgfdfg
+hrnvcnd: jfjdfg
+jfusfdngmd: gfjgfdusdfg
+nfj: jgfdjdfg
+jfue: jfdfdg
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'larger headers');
+
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Host: www.example.org
+Host: 123.example.org
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'Duplicate Host headers, Bug #25');
+
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Content-Length: 5
+Content-Length: 4
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'Duplicate Content-Length headers');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Content-Type: 5
+Content-Type: 4
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'Duplicate Content-Type headers');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Range: bytes=5-6
+Range: bytes=5-9
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'Duplicate Range headers');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-None-Match: 5
+If-None-Match: 4
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'Duplicate If-None-Match headers');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+If-Modified-Since: 5
+If-Modified-Since: 4
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'Duplicate If-Modified-Since headers');
+
+$t->{REQUEST}  = ( <<EOF
+GET /range.pdf HTTP/1.0
+Range: bytes=0-
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'GET, Range with range-requests-disabled');
+
+$t->{REQUEST}  = ( <<EOF
+GET / HTTP/1.0
+Content-Length: 4
+
+1234
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'GET with Content-Length');
+
+$t->{REQUEST}  = ( <<EOF
+OPTIONS / HTTP/1.0
+Content-Length: 4
+
+1234
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'OPTIONS with Content-Length');
+
+$t->{REQUEST}  = ( <<EOF
+OPTIONS rtsp://221.192.134.146:80 RTSP/1.1
+Host: 221.192.134.146:80
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'OPTIONS for RTSP');
+
+$t->{REQUEST}  = ( <<EOF
+HEAD / HTTP/1.0
+Content-Length: 4
+
+1234
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'HEAD with Content-Length');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+If-Modified-Since: Sun, 01 Jan 2036 00:00:02 GMT
+If-Modified-Since: Sun, 01 Jan 2036 00:00:02 GMT
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304 } ];
+ok($tf->handle_http($t) == 0, 'Duplicate If-Mod-Since, with equal timestamps');
+
+$t->{REQUEST}  = ( "GET / HTTP/1.0\r\nIf-Modified-Since: \0\r\n\r\n" );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 400 } ];
+ok($tf->handle_http($t) == 0, 'invalid chars in Header values (bug #1286)');
+
+$t->{REQUEST}  = ( "GET / HTTP/1.0\r\nIf-Modified-Since: \r\n\r\n" );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'empty If-Modified-Since');
+
+$t->{REQUEST}  = ( "GET / HTTP/1.0\r\nIf-Modified-Since: foobar\r\n\r\n" );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'broken If-Modified-Since');
+
+$t->{REQUEST}  = ( "GET / HTTP/1.0\r\nIf-Modified-Since: this string is too long to be a valid timestamp\r\n\r\n" );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+ok($tf->handle_http($t) == 0, 'broken If-Modified-Since');
+
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+If-Modified-Since2: Sun, 01 Jan 2036 00:00:03 GMT
+If-Modified-Since: Sun, 01 Jan 2036 00:00:02 GMT
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304 } ];
+ok($tf->handle_http($t) == 0, 'Similar Headers (bug #1287)');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+If-Modified-Since: Sun, 01 Jan 2036 00:00:02 GMT
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304, 'Content-Type' => 'text/html' } ];
+ok($tf->handle_http($t) == 0, 'If-Modified-Since');
+
+$t->{REQUEST}  = ( <<EOF
+GET /index.html HTTP/1.0
+If-Modified-Since: Sun, 01 Jan 2036 00:00:02 GMT
+EOF
+ );
+$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 304, '-Content-Length' => '' } ];
+ok($tf->handle_http($t) == 0, 'Status 304 has no Content-Length (#1002)');
+
+ok($tf->stop_proc == 0, "Stopping lighttpd");
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/request.t
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/run-tests.pl
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/run-tests.pl	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/run-tests.pl	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,19 @@
+#! /usr/bin/env perl
+
+use strict;
+
+use Test::Harness qw(&runtests $verbose);
+$verbose = (defined $ENV{'VERBOSE'} ? $ENV{'VERBOSE'} : 0);;
+
+my $srcdir = (defined $ENV{'srcdir'} ? $ENV{'srcdir'} : '.');
+
+opendir DIR, $srcdir;
+my (@fs, $f);
+while ($f = readdir(DIR)) {
+	if ($f =~ /\.t$/) {
+		push @fs, $srcdir.'/'.$f;
+	}
+}
+closedir DIR;
+runtests @fs;
+


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/run-tests.pl
___________________________________________________________________
Added: svn:executable
   + *

Added: lighttpd/tags/1.4.19-5+lenny2/tests/symlink.t
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/symlink.t	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/symlink.t	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,115 @@
+#!/usr/bin/env perl
+BEGIN {
+	# add current source dir to the include-path
+	# we need this for make distcheck
+	(my $srcdir = $0) =~ s,/[^/]+$,/,;
+	unshift @INC, $srcdir;
+}
+
+use strict;
+use IO::Socket;
+use Test::More tests => 10;
+use LightyTest;
+
+my $tf = LightyTest->new();
+my $t;
+my $docroot = $tf->{'TESTDIR'}."/tmp/lighttpd/servers/www.example.org/pages";
+
+sub init_testbed {
+    return 0 unless eval { symlink("",""); 1 };
+    my $f = "$docroot/index.html";
+    my $l = "$docroot/index.xhtml";
+    my $rc = undef;
+    unless (-l $l) {
+        return 0 unless symlink($f,$l);
+    };
+    $f = "$docroot/expire";
+    $l = "$docroot/symlinked";
+    $rc = undef;
+    unless (-l $l) {
+        return 0 unless symlink($f,$l);
+    }
+    return 1;
+};
+
+SKIP: {
+    skip "perl does not support symlinking or setting up the symlinks failed.", 10 unless init_testbed;
+    ok($tf->start_proc == 0, "Starting lighttpd") or die();
+
+# allow case
+# simple file
+	$t->{REQUEST} = ( <<EOF
+GET /index.html HTTP/1.0
+Host: symlink.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, 'allow: simple file');
+
+# symlinked file
+	$t->{REQUEST} = ( <<EOF
+GET /index.xhtml HTTP/1.0
+Host: symlink.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, 'allow: symlinked file');
+
+# directly symlinked dir
+	$t->{REQUEST} = ( <<EOF
+GET /symlinked/ HTTP/1.0
+Host: symlink.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, 'allow: directly symlinked dir');
+
+# symlinked dir in path
+	$t->{REQUEST} = ( <<EOF
+GET /symlinked/access.txt HTTP/1.0
+Host: symlink.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, 'allow: symlinked dir in path');
+
+# deny case
+# simple file
+	$t->{REQUEST} = ( <<EOF
+GET /index.html HTTP/1.0
+Host: nosymlink.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 200 } ];
+	ok($tf->handle_http($t) == 0, 'deny: simple file');
+
+# symlinked file
+	$t->{REQUEST} = ( <<EOF
+GET /index.xhtml HTTP/1.0
+Host: nosymlink.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+	ok($tf->handle_http($t) == 0, 'deny: symlinked file');
+
+# directly symlinked dir
+	$t->{REQUEST} = ( <<EOF
+GET /symlinked/ HTTP/1.0
+Host: nosymlink.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+	ok($tf->handle_http($t) == 0, 'deny: directly symlinked dir');
+
+# symlinked dir in path
+	$t->{REQUEST} = ( <<EOF
+GET /symlinked/access.txt HTTP/1.0
+Host: nosymlink.example.org
+EOF
+ );
+	$t->{RESPONSE} = [ { 'HTTP-Protocol' => 'HTTP/1.0', 'HTTP-Status' => 403 } ];
+	ok($tf->handle_http($t) == 0, 'deny: symlinked dir in path');
+
+# cleanup
+    ok($tf->stop_proc == 0, "Stopping lighttpd");
+};

Added: lighttpd/tags/1.4.19-5+lenny2/tests/var-include-sub.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/var-include-sub.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/var-include-sub.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,34 @@
+# file to be included
+$HTTP["host"] =~ "^" + server.name + "$" {
+	url.redirect = (
+			"^/include$"       => "/good_include",
+			"^/concat$"        => "/good_" + "concat",
+			"^/servername1$"   => "/good_" + server.name,
+			"^/servername2$"   => server.name + "/good_",
+			"^/servername3$"   => "/good_" + server.name + "/",
+			"^/var.myvar$"     => "/good_var_myvar" + var.myvar,
+			"^/myvar$"         => "/good_myvar" + myvar,
+			"^/number1$"       => "/good_number" + one,
+			"^/number2$"       => one + "/good_number",
+			"^/env$"           => "/" + env.env_test,
+			)
+	num = 1
+	num2 = 2
+	num2 += 1
+	# without var prefix
+	mystr = "string"
+	mystr += "_append"
+	# from parent
+	one += 1
+	url.redirect += (
+			"^/array_append$"  => "/good_array_append",
+			"^/string_append$" => "/good_" + mystr,
+			"^/number_append$" => "/good_" + one,
+			)
+
+	cmd = "echo cmd_ok=456"
+	include_shell cmd
+	url.redirect += (
+			"^/include_shell$" => "/good_include_shell_" + cmd_ok,
+			)
+}

Added: lighttpd/tags/1.4.19-5+lenny2/tests/var-include.conf
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/var-include.conf	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/var-include.conf	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,41 @@
+
+debug.log-request-handling = "enable"
+debug.log-condition-handling = "enable"
+
+server.document-root         = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+server.pid-file              = env.SRCDIR + "/tmp/lighttpd/lighttpd.pid"
+
+## bind to port (default: 80)
+server.port                 = 2048
+
+## bind to localhost (default: all interfaces)
+server.bind                = "localhost"
+server.errorlog            = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.error.log"
+server.name                = "www.example.org"
+server.tag                 = "Apache 1.3.29"
+
+
+server.modules              = ( "mod_redirect",
+				"mod_accesslog" )
+
+######################## MODULE CONFIG ############################
+
+
+accesslog.filename          = env.SRCDIR + "/tmp/lighttpd/logs/lighttpd.access.log"
+
+mimetype.assign             = ( ".html" => "text/html" )
+
+url.redirect = ("^" => "/default")
+
+$HTTP["host"] == "www.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "www.example.org"
+  url.redirect = ("^" => "/redirect")
+}
+$HTTP["host"] == "test.example.org" {
+  server.document-root = env.SRCDIR + "/tmp/lighttpd/servers/www.example.org/pages/"
+  server.name = "test.example.org"
+  var.myvar = "good"
+  var.one = 1
+  include "var-include-sub.conf"
+}

Added: lighttpd/tags/1.4.19-5+lenny2/tests/wrapper.sh
===================================================================
--- lighttpd/tags/1.4.19-5+lenny2/tests/wrapper.sh	                        (rev 0)
+++ lighttpd/tags/1.4.19-5+lenny2/tests/wrapper.sh	2011-12-18 22:14:21 UTC (rev 565)
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+## get some parameters from the makefile
+
+srcdir=$1
+top_builddir=$2
+export SHELL srcdir top_builddir
+
+$3


Property changes on: lighttpd/tags/1.4.19-5+lenny2/tests/wrapper.sh
___________________________________________________________________
Added: svn:executable
   + *




More information about the pkg-lighttpd-maintainers mailing list