From 54df2afaa61c6a03cbb4a33c9b90fa572b6d07b8 Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Sat, 17 Dec 2016 21:28:53 -0800 Subject: Berkeley DB 4.8 with rust build script for linux. --- db-4.8.30/mod_db4/ABOUT | 48 + db-4.8.30/mod_db4/BSD | 10 + db-4.8.30/mod_db4/INSTALL | 13 + db-4.8.30/mod_db4/Makefile.in | 26 + db-4.8.30/mod_db4/config.h.in | 22 + db-4.8.30/mod_db4/configure | 3219 ++++++++++++++++++++++++++++++++++++ db-4.8.30/mod_db4/configure.in | 114 ++ db-4.8.30/mod_db4/mm_hash.c | 145 ++ db-4.8.30/mod_db4/mm_hash.h | 48 + db-4.8.30/mod_db4/mod_db4.c | 130 ++ db-4.8.30/mod_db4/mod_db4_export.h | 27 + db-4.8.30/mod_db4/sem_utils.c | 115 ++ db-4.8.30/mod_db4/sem_utils.h | 21 + db-4.8.30/mod_db4/skiplist.c | 534 ++++++ db-4.8.30/mod_db4/skiplist.h | 88 + db-4.8.30/mod_db4/utils.c | 620 +++++++ db-4.8.30/mod_db4/utils.h | 32 + 17 files changed, 5212 insertions(+) create mode 100644 db-4.8.30/mod_db4/ABOUT create mode 100644 db-4.8.30/mod_db4/BSD create mode 100644 db-4.8.30/mod_db4/INSTALL create mode 100644 db-4.8.30/mod_db4/Makefile.in create mode 100644 db-4.8.30/mod_db4/config.h.in create mode 100755 db-4.8.30/mod_db4/configure create mode 100644 db-4.8.30/mod_db4/configure.in create mode 100644 db-4.8.30/mod_db4/mm_hash.c create mode 100644 db-4.8.30/mod_db4/mm_hash.h create mode 100644 db-4.8.30/mod_db4/mod_db4.c create mode 100644 db-4.8.30/mod_db4/mod_db4_export.h create mode 100644 db-4.8.30/mod_db4/sem_utils.c create mode 100644 db-4.8.30/mod_db4/sem_utils.h create mode 100644 db-4.8.30/mod_db4/skiplist.c create mode 100644 db-4.8.30/mod_db4/skiplist.h create mode 100644 db-4.8.30/mod_db4/utils.c create mode 100644 db-4.8.30/mod_db4/utils.h (limited to 'db-4.8.30/mod_db4') diff --git a/db-4.8.30/mod_db4/ABOUT b/db-4.8.30/mod_db4/ABOUT new file mode 100644 index 0000000..5c7a73d --- /dev/null +++ b/db-4.8.30/mod_db4/ABOUT @@ -0,0 +1,48 @@ + + +This is the mod_db4 apache module, providing a safe framework +for running db4 applications in the Apache 1.3 environment. In +general, it is dangerous to run db4 in a multi-process system +without some facility to coordinate recovery between +participating processes. Apache natively provides no +interface for commuication between processes, so the mod_db4 +module exists to provide this communication. + +Specifically, mod_db4 provides the following facilities: + +o New constructors for DB and DB_ENV structures, which install +replacement open/close methods. +o Transparent caching of open DB and DB_ENV structures +o Reference counting on all structures, allowing the module to +detect the initial opening of any managed database +and automatically perform recovery. +o Automatic detection of unexpected failures (segfaults, or a +module actually calling exit() and avoiding shutdown phases, +and automatic termination of all child processes with open +database resources to attempt consistency. + +mod_db4 is designed to be used as an alternative interface to db4. +To have another Apache module (for example, mod_foo) use mod_db4, +do not link mod_foo against libdb-4.2. In your mod_foo makefile, +you should + +#include "mod_db4_export.h" + +and add your Apache include directory to your CPPFLAGS. + +In mod_foo, to create a mod_db4 managed DB_ENV, use the following: + +int mod_db4_db_env_create(DB_ENV **dbenvp, u_int32_t flags); + +which takes identical arguments to db_env_create(). + +To create a mod_db4 managed DB, use + +int mod_db4_db_create(DB **dbp, DB_ENV *dbenv, u_int32_t flags); + +which takes identical arguments to db_create(). + +Otherwise the API is completely consistent with the standard Berkeley +DB API. + +For installation instructions, see the INSTALL file. diff --git a/db-4.8.30/mod_db4/BSD b/db-4.8.30/mod_db4/BSD new file mode 100644 index 0000000..86de554 --- /dev/null +++ b/db-4.8.30/mod_db4/BSD @@ -0,0 +1,10 @@ +Copyright (c) 2005, 2006, Theo Schlossnagle +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 OmniTI 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. diff --git a/db-4.8.30/mod_db4/INSTALL b/db-4.8.30/mod_db4/INSTALL new file mode 100644 index 0000000..fee62de --- /dev/null +++ b/db-4.8.30/mod_db4/INSTALL @@ -0,0 +1,13 @@ +This apache module requires db-4.3 compiled with c++ extensions +and libmm (a shared memory manager). + +To build this apache module, perform the following steps: + +> ./configure --with-apxs=/path/to/apxs +--with-db4=/usr/local/BerkeleyDb-4.3 --with-mm=/usr/local +> make +> su - +# make install + +Post-installation, modules can use this extension via the functions +documented in $APACHE_INCLUDEDIR/mod_db4_export.h diff --git a/db-4.8.30/mod_db4/Makefile.in b/db-4.8.30/mod_db4/Makefile.in new file mode 100644 index 0000000..37e1c03 --- /dev/null +++ b/db-4.8.30/mod_db4/Makefile.in @@ -0,0 +1,26 @@ +# +# Copyright (c) 2004-2009 Oracle. All rights reserved. +# +# http://www.apache.org/licenses/LICENSE-2.0.txt +# + +APXS=@APXS@ +CXXFLAGS=@CXXFLAGS@ +CPPFLAGS=@CPPFLAGS@ +LDFLAGS=@LDFLAGS@ +LIBS=@LIBS@ + +SOURCES=mod_db4.c sem_utils.c skiplist.c utils.c mm_hash.c + +all: mod_db4.so + +mod_db4.so: $(SOURCES) + $(APXS) -c -S CC=$(CXX) $(LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(SOURCES) $(LIBS) + +install: mod_db4.so + $(APXS) -i mod_db4.so + cp mod_db4_export.h `$(APXS) -q INCLUDEDIR`/ + chmod a+r `$(APXS) -q INCLUDEDIR`/mod_db4_export.h + +clean: + rm -f *.o *.a *.so *.lo *.tlo *.to config.cache config.log *.out core diff --git a/db-4.8.30/mod_db4/config.h.in b/db-4.8.30/mod_db4/config.h.in new file mode 100644 index 0000000..a7ac66c --- /dev/null +++ b/db-4.8.30/mod_db4/config.h.in @@ -0,0 +1,22 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the `mm' library (-lmm). */ +#undef HAVE_LIBMM + +/* */ +#undef HAVE_SEMUN + +/* 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 diff --git a/db-4.8.30/mod_db4/configure b/db-4.8.30/mod_db4/configure new file mode 100755 index 0000000..7bf7585 --- /dev/null +++ b/db-4.8.30/mod_db4/configure @@ -0,0 +1,3219 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59. +# +# Copyright (C) 2003 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 Bourne compatible +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+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +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 + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; 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'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# 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 + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + 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 + + ;; + 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_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + 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=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # 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 before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, 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 + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\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 sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +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$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# 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'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# 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` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="mod_db4.c" +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 datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT APXS HAVE_SEMUN LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# 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. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +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 + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -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 | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$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" ;; + + -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'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + 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 ;; + + -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 ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + 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 ;; + + -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'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + 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; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + 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 paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +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 + + +# 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 its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$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 + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CXX_set=${CXX+set} +ac_env_CXX_value=$CXX +ac_cv_env_CXX_set=${CXX+set} +ac_cv_env_CXX_value=$CXX +ac_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_env_CXXFLAGS_value=$CXXFLAGS +ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} +ac_cv_env_CXXFLAGS_value=$CXXFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS + +# +# 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 this package 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 \`..'] + +_ACEOF + + cat <<_ACEOF +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] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --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] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-cxxflags Specify additional flags to pass to compiler + --with-ldflags Specify additional flags to pass to linker + --with-libs Specify additional libraries + --with-mm Specify additional libraries + --with-db4 Specify additional libraries + --with-apxs=FILE Build shared Apache module. FILE is optional + pathname to the Apache apxs tool; defaults to + "apxs". + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style 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 + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd "$ac_popdir" + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright (C) 2003 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 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +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` +hostinfo = `(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 + +} >&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_sep= +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_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + 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: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +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, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf 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 -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >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 -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; 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 `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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_config_headers="$ac_config_headers config.h" + +ac_ext=cc +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 -n "$ac_tool_prefix"; then + for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl 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 $as_executable_p "$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 + +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 $CCC g++ c++ gpp aCC CC cxx cc++ cl 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 $as_executable_p "$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 + +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 +test -n "$ac_ct_CXX" || ac_ct_CXX="g++" + + CXX=$ac_ct_CXX +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` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&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[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + 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 +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check 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' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 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 { (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); }; 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 | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + 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 { (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 + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) 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_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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; 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 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 +CXXFLAGS="-g" +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 + 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cxx_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cxx_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +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 +for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +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_ext=cc +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 "$cross_compiling" = no; then + echo "$as_me:$LINENO: checking that C++ compiler can compile simple program" >&5 +echo $ECHO_N "checking that C++ compiler can compile simple program... $ECHO_C" >&6 +fi + +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. */ +int main() { return 0; } +_ACEOF +rm -f conftest$ac_exeext +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); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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;{ { echo "$as_me:$LINENO: error: a working C++ compiler is required" >&5 +echo "$as_me: error: a working C++ compiler is required" >&2;} + { (exit 1); exit 1; }; } +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + +# Allow user to specify flags + +# Check whether --with-cxxflags or --without-cxxflags was given. +if test "${with_cxxflags+set}" = set; then + withval="$with_cxxflags" + + if test "x$withval" != "xno" ; then + CXXFLAGS="$withval $CXXFLAGS" + fi + + +fi; +CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-O2//g;' | sed -e 's/-g//g;'` + +# Check whether --with-ldflags or --without-ldflags was given. +if test "${with_ldflags+set}" = set; then + withval="$with_ldflags" + + if test "x$withval" != "xno" ; then + LDFLAGS="$withval $LDFLAGS" + fi + + +fi; + + +# Check whether --with-libs or --without-libs was given. +if test "${with_libs+set}" = set; then + withval="$with_libs" + + if test "x$withval" != "xno" ; then + LIBS="$withval $LIBS" + fi + + +fi; + + +# Check whether --with-mm or --without-mm was given. +if test "${with_mm+set}" = set; then + withval="$with_mm" + + if test "x$withval" != "xno" ; then + LIBS="-L$withval/lib $LIBS" + CPPFLAGS="-I$withval/include $CPPFLAGS" + fi + + + +fi; + + +# Check whether --with-db4 or --without-db4 was given. +if test "${with_db4+set}" = set; then + withval="$with_db4" + + if test "x$withval" != "xno" ; then + LIBS="-L$withval/lib $LIBS" + CPPFLAGS="-I$withval/include $CPPFLAGS" + fi + + + +fi; + + +# Check whether --with-apxs or --without-apxs was given. +if test "${with_apxs+set}" = set; then + withval="$with_apxs" + + if test "$withval" = "yes"; then + withval="apxs" + fi + APXS="$withval" + + +else + + { { echo "$as_me:$LINENO: error: apxs is required" >&5 +echo "$as_me: error: apxs is required" >&2;} + { (exit 1); exit 1; }; } + +fi; + +LIBS="$LIBS -ldb_cxx" + +echo "$as_me:$LINENO: checking for union semun" >&5 +echo $ECHO_N "checking for union semun... $ECHO_C" >&6 +if test "${cv_semun+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 +#include +#include + +int +main () +{ +union semun x; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + + cv_semun=yes + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + + cv_semun=no + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $cv_semun" >&5 +echo "${ECHO_T}$cv_semun" >&6 +if test "$cv_semun" = "yes"; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SEMUN 1 +_ACEOF + +else + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SEMUN 0 +_ACEOF + +fi + + + + + + + +echo "$as_me:$LINENO: checking for mm_core_create in -lmm" >&5 +echo $ECHO_N "checking for mm_core_create in -lmm... $ECHO_C" >&6 +if test "${ac_cv_lib_mm_mm_core_create+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmm $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char mm_core_create (); +int +main () +{ +mm_core_create (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_mm_mm_core_create=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_mm_mm_core_create=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_mm_mm_core_create" >&5 +echo "${ECHO_T}$ac_cv_lib_mm_mm_core_create" >&6 +if test $ac_cv_lib_mm_mm_core_create = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBMM 1 +_ACEOF + + LIBS="-lmm $LIBS" + +else + { { echo "$as_me:$LINENO: error: libmm required" >&5 +echo "$as_me: error: libmm required" >&2;} + { (exit 1); exit 1; }; } +fi + + + + ac_config_files="$ac_config_files Makefile" +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, don't put newlines in cache variables' values. +# 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. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *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 \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!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 "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + 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}' + +# 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 + +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_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${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 Bourne compatible +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+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +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 + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; 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'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# 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 + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + 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 + + ;; + 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_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + 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=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # 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 before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, 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 + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +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 sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +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$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# 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'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +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, 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 + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +_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 + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +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 0 ;; + --debug | --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;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +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" ;; + + 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 $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + + + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + *) { { 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 +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $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 -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# 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 + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@CXX@,$CXX,;t t +s,@CXXFLAGS@,$CXXFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CXX@,$ac_ct_CXX,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@APXS@,$APXS,;t t +s,@HAVE_SEMUN@,$HAVE_SEMUN,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$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'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$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'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + + # 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. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi +_ACEOF +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,@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,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #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. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # 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. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + 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 + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$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'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$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'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (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 + + diff --git a/db-4.8.30/mod_db4/configure.in b/db-4.8.30/mod_db4/configure.in new file mode 100644 index 0000000..5561869 --- /dev/null +++ b/db-4.8.30/mod_db4/configure.in @@ -0,0 +1,114 @@ +# +# Copyright (c) 2004-2009 Oracle. All rights reserved. +# +# http://www.apache.org/licenses/LICENSE-2.0.txt +# + +AC_INIT(mod_db4.c) +AC_CONFIG_HEADER(config.h) +AC_PROG_CXX + +AC_LANG_PUSH(C++) +if test "$cross_compiling" = no; then + AC_MSG_CHECKING([that C++ compiler can compile simple program]) +fi +AC_TRY_RUN([int main() { return 0; }], + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no);AC_MSG_ERROR([a working C++ compiler is required])) + +# Allow user to specify flags +AC_ARG_WITH(cxxflags, + [ --with-cxxflags Specify additional flags to pass to compiler], + [ + if test "x$withval" != "xno" ; then + CXXFLAGS="$withval $CXXFLAGS" + fi + ] +) +CXXFLAGS=`echo $CXXFLAGS | sed -e 's/-O2//g;' | sed -e 's/-g//g;'` +AC_ARG_WITH(ldflags, + [ --with-ldflags Specify additional flags to pass to linker], + [ + if test "x$withval" != "xno" ; then + LDFLAGS="$withval $LDFLAGS" + fi + ] +) + +AC_ARG_WITH(libs, + [ --with-libs Specify additional libraries], + [ + if test "x$withval" != "xno" ; then + LIBS="$withval $LIBS" + fi + ] +) + +AC_ARG_WITH(mm, + [ --with-mm Specify additional libraries], + [ + if test "x$withval" != "xno" ; then + LIBS="-L$withval/lib $LIBS" + CPPFLAGS="-I$withval/include $CPPFLAGS" + fi + ] + +) + +AC_ARG_WITH(db4, + [ --with-db4 Specify additional libraries], + [ + if test "x$withval" != "xno" ; then + LIBS="-L$withval/lib $LIBS" + CPPFLAGS="-I$withval/include $CPPFLAGS" + fi + ] + +) + +AC_ARG_WITH(apxs, +[ --with-apxs[=FILE] Build shared Apache module. FILE is optional + pathname to the Apache apxs tool; defaults to + "apxs".], +[ + if test "$withval" = "yes"; then + withval="apxs" + fi + APXS="$withval" + AC_SUBST(APXS) +], +[ + AC_MSG_ERROR([apxs is required]) +]) + +LIBS="$LIBS -ldb_cxx" + +AC_CACHE_CHECK(for union semun,cv_semun, + AC_TRY_COMPILE([ +#include +#include +#include + ], + [union semun x;], + [ + cv_semun=yes + ],[ + cv_semun=no + ]) +) +if test "$cv_semun" = "yes"; then + AC_DEFINE(HAVE_SEMUN, 1, [ ]) +else + AC_DEFINE(HAVE_SEMUN, 0, [ ]) +fi + +AC_SUBST(LDFLAGS) +AC_SUBST(LIBS) +AC_SUBST(CPPFLAGS) +AC_SUBST(CXXFLAGS) + +AC_CHECK_LIB(mm, mm_core_create, , [ AC_MSG_ERROR([libmm required]) ]) + +AC_SUBST(HAVE_SEMUN) +AC_OUTPUT(Makefile) + diff --git a/db-4.8.30/mod_db4/mm_hash.c b/db-4.8.30/mod_db4/mm_hash.c new file mode 100644 index 0000000..5d6e056 --- /dev/null +++ b/db-4.8.30/mod_db4/mm_hash.c @@ -0,0 +1,145 @@ +/*- + * Copyright (c) 2004-2009 Oracle. All rights reserved. + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * authors: Thies C. Arntzen + * Sterling Hughes + * George Schlossnagle + */ +extern "C" +{ +#include +#include +#include "mm_hash.h" +} + +MM_Hash *mm_hash_new(MM *mm, MM_HashDtor dtor) +{ + MM_Hash *table; + + if ((table = (MM_Hash *) mm_calloc(mm, 1, sizeof(MM_Hash))) == NULL) + return NULL; + table->mm = mm; + table->dtor = dtor; + + return table; +} + +void mm_hash_free(MM_Hash *table) +{ + MM_Bucket *cur; + MM_Bucket *next; + int i; + + for (i = 0; i < MM_HASH_SIZE; i++) { + cur = table->buckets[i]; + while (cur) { + next = cur->next; + + if (table->dtor) table->dtor(cur->data); + mm_free(table->mm, cur->key); + mm_free(table->mm, cur); + + cur = next; + } + } + mm_free(table->mm, table); +} + +static unsigned int hash_hash(const char *key, int length) +{ + unsigned int hash = 0; + + while (--length) + hash = hash * 65599 + *key++; + + return hash; +} + +void *mm_hash_find(MM_Hash *table, const void *key, int length) +{ + MM_Bucket *b; + unsigned int hash = hash_hash((const char *)key, length) % MM_HASH_SIZE; + + for (b = table->buckets[ hash ]; b; b = b->next) { + if (hash != b->hash) continue; + if (length != b->length) continue; + if (memcmp(key, b->key, length)) continue; + + return b->data; + } + + return NULL; +} + +void mm_hash_update(MM_Hash *table, char *key, int length, void *data) +{ + MM_Bucket *b, p; + unsigned int hash; + + hash = hash_hash(key, length) % MM_HASH_SIZE; + + for(b = table->buckets[ hash ]; b; b = b->next) { + if (hash != b->hash) continue; + if (length != b->length) continue; + if (memcmp(key, b->key, length)) continue; + if (table->dtor) table->dtor(b->data); + b->data = data; + } + if(!b) { + if ((b = (MM_Bucket *) mm_malloc( + table->mm, sizeof(MM_Bucket))) == NULL) + return; + if ((b->key = (char *) mm_malloc( + table->mm, length + 1)) == NULL) { + free(b); + return; + } + memcpy(b->key, key, length); + b->key[length] = 0; + b->length = length; + b->hash = hash; + b->data = data; + b->next = table->buckets[ hash ]; + table->buckets[ hash ] = b; + } + table->nElements++; +} + +void mm_hash_delete(MM_Hash *table, char *key, int length) +{ + MM_Bucket *b; + MM_Bucket *prev = NULL; + unsigned int hash; + + hash = hash_hash(key, length) % MM_HASH_SIZE; + for (b = table->buckets[ hash ]; b; b = b->next) { + if (hash != b->hash || length != b->length || memcmp(key, b->key, length)) { + prev = b; + continue; + } + + /* unlink */ + if (prev) { + prev->next = b->next; + } else { + table->buckets[hash] = b->next; + } + + if (table->dtor) table->dtor(b->data); + mm_free(table->mm, b->key); + mm_free(table->mm, b); + + break; + } +} + +/* +Local variables: +tab-width: 4 +c-basic-offset: 4 +End: +vim600: noet sw=4 ts=4 fdm=marker +vim<600: noet sw=4 ts=4 +*/ diff --git a/db-4.8.30/mod_db4/mm_hash.h b/db-4.8.30/mod_db4/mm_hash.h new file mode 100644 index 0000000..4a1a5c2 --- /dev/null +++ b/db-4.8.30/mod_db4/mm_hash.h @@ -0,0 +1,48 @@ +/*- + * Copyright (c) 2004-2009 Oracle. All rights reserved. + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * authors: Thies C. Arntzen + * Sterling Hughes + * George Schlossnagle + */ + +#ifndef _MM_HASH_H +#define _MM_HASH_H +#include "mm.h" + +typedef void (*MM_HashDtor)(void *); + +typedef struct _MM_Bucket { + struct _MM_Bucket *next; + char *key; + int length; + unsigned int hash; + void *data; +} MM_Bucket; + +#define MM_HASH_SIZE 1009 +typedef struct _Hash { + MM_Bucket *buckets[ MM_HASH_SIZE ]; + MM *mm; + MM_HashDtor dtor; + int nElements; +} MM_Hash; + +MM_Hash *mm_hash_new(MM *, MM_HashDtor); +void mm_hash_free(MM_Hash *table); +void *mm_hash_find(MM_Hash *table, const void *key, int length); +void mm_hash_add(MM_Hash *table, char *key, int length, void *data); +void mm_hash_delete(MM_Hash *table, char *key, int length); +void mm_hash_update(MM_Hash *table, char *key, int length, void *data); +#endif + +/* +Local variables: +tab-width: 4 +c-basic-offset: 4 +End: +vim600: noet sw=4 ts=4 fdm=marker +vim<600: noet sw=4 ts=4 +*/ diff --git a/db-4.8.30/mod_db4/mod_db4.c b/db-4.8.30/mod_db4/mod_db4.c new file mode 100644 index 0000000..b035bd8 --- /dev/null +++ b/db-4.8.30/mod_db4/mod_db4.c @@ -0,0 +1,130 @@ +/*- + * Copyright (c) 2004-2009 Oracle. All rights reserved. + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * authors: George Schlossnagle + */ + +extern "C" +{ +#include "httpd.h" +#include "http_config.h" +#include "http_core.h" +#include "http_log.h" +#include "http_main.h" +#include "http_protocol.h" +#include "scoreboard.h" +#include "util_script.h" + +#include "sem_utils.h" +} +#include "mod_db4_export.h" +#include "utils.h" + +extern scoreboard *ap_scoreboard_image; + +/* + * Declare ourselves so the configuration routines can find and know us. + * We'll fill it in at the end of the module. + */ + +extern module MODULE_VAR_EXPORT db4_module; + +void kill_all_children() +{ + int i, ret = 1; + ap_sync_scoreboard_image(); + for(;ret != 0;) { + ret = 0; + for (i = 0; i < HARD_SERVER_LIMIT; ++i) { + ret += kill(ap_scoreboard_image->parent[i].pid, SIGTERM); + } + } +} + +int moderator_main(void * ptr, child_info *ci) +{ + for(;;) { + env_wait_for_child_crash(); + kill_all_children(); + env_global_rw_lock(); + global_ref_count_clean(); + env_ok_to_proceed(); + env_global_unlock(); + } +} + +static void sig_unrecoverable(int sig) +{ + env_child_crash(); + /* reinstall default apache handler */ + signal(sig, SIG_DFL); + kill(getpid(), sig); +} + +static void db4_init(server_rec *s, pool *p) +{ + int mpid; + env_locks_init(); + mpid=ap_spawn_child(p, moderator_main, NULL, kill_always, NULL, NULL, NULL); +} + +/* + * Worker process init + */ + +static void db4_child_init(server_rec *s, pool *p) +{ + /* install our private signal handlers */ + signal(SIGSEGV, sig_unrecoverable); + signal(SIGBUS, sig_unrecoverable); + signal(SIGABRT, sig_unrecoverable); + signal(SIGILL, sig_unrecoverable); + env_rsrc_list_init(); +} + +/* + * Worker process exit + */ +static void db4_child_exit(server_rec *s, pool *p) +{ + mod_db4_child_clean_process_shutdown(); +} + +static const command_rec db4_cmds[] = +{ + {NULL} +}; + +module MODULE_VAR_EXPORT db4_module = +{ + STANDARD_MODULE_STUFF, + db4_init, /* module initializer */ + NULL, /* per-directory config creator */ + NULL, /* dir config merger */ + NULL, /* server config creator */ + NULL, /* server config merger */ + db4_cmds, /* command table */ + NULL, /* [9] list of handlers */ + NULL, /* [2] filename-to-URI translation */ + NULL, /* [5] check/validate user_id */ + NULL, /* [6] check user_id is valid *here* */ + NULL, /* [4] check access by host address */ + NULL, /* [7] MIME type checker/setter */ + NULL, /* [8] fixups */ + NULL, /* [10] logger */ +#if MODULE_MAGIC_NUMBER >= 19970103 + NULL, /* [3] header parser */ +#endif +#if MODULE_MAGIC_NUMBER >= 19970719 + db4_child_init, /* process initializer */ +#endif +#if MODULE_MAGIC_NUMBER >= 19970728 + db4_child_exit, /* process exit/cleanup */ +#endif +#if MODULE_MAGIC_NUMBER >= 19970902 + NULL /* [1] post read_request handling */ +#endif +}; +/* vim: set ts=4 sts=4 bs=2 ai expandtab : */ diff --git a/db-4.8.30/mod_db4/mod_db4_export.h b/db-4.8.30/mod_db4/mod_db4_export.h new file mode 100644 index 0000000..c7f838c --- /dev/null +++ b/db-4.8.30/mod_db4/mod_db4_export.h @@ -0,0 +1,27 @@ +/*- + * Copyright (c) 2004-2009 Oracle. All rights reserved. + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * authors: George Schlossnagle + */ + +#ifndef MOD_DB4_EXPORT_H +#define MOD_DB4_EXPORT_H + +#include "db_cxx.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +int mod_db4_db_env_create(DB_ENV **dbenvp, u_int32_t flags); +int mod_db4_db_create(DB **dbp, DB_ENV *dbenv, u_int32_t flags); +void mod_db4_child_clean_request_shutdown(); +void mod_db4_child_clean_process_shutdown(); + +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/db-4.8.30/mod_db4/sem_utils.c b/db-4.8.30/mod_db4/sem_utils.c new file mode 100644 index 0000000..8de7b1f --- /dev/null +++ b/db-4.8.30/mod_db4/sem_utils.c @@ -0,0 +1,115 @@ +/*- + * Copyright (c) 2004-2009 Oracle. All rights reserved. + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * authors: George Schlossnagle + */ +extern "C" +{ +#include +#include +#include +#include +#include + +#include "config.h" +#include "sem_utils.h" + + +#include +} +extern int errno; + +#if HAVE_SEMUN +/* we have semun, no need to define */ +#else +union semun { + int val; /* value for SETVAL */ + struct semid_ds *buf; /* buffer for IPC_STAT, IPC_SET */ + unsigned short *array; /* array for GETALL, SETALL */ + /* Linux specific part: */ + struct seminfo *__buf; /* buffer for IPC_INFO */ +}; +#endif + +#ifndef SEM_R +# define SEM_R 0444 +#endif +#ifndef SEM_A +# define SEM_A 0222 +#endif + +int md4_sem_create(int semnum, unsigned short *start) +{ + int semid; + int perms = 0777; + union semun arg; + key_t key = 12345; + int count = 0; + while((semid = semget(key, semnum, IPC_CREAT | IPC_EXCL | perms)) == -1) { + if(count++ > 2) { + return -1; + } + if (errno == EEXIST) { + semid = semget(key, 1, perms); + md4_sem_destroy(semid); + } + } + arg.array = start; + if(semctl(semid, 0, SETALL, arg) < 0) { + /* destroy (FIXME) and return */ + md4_sem_destroy(semid); + return -1; + } + return semid; +} + +void md4_sem_destroy(int semid) +{ + union semun dummy; + /* semid should always be 0, this clobbers the whole set */ + semctl(semid, 0, IPC_RMID, dummy); +} + +void md4_sem_lock(int semid, int semnum) +{ + struct sembuf sops; + sops.sem_num = semnum; + sops.sem_op = -1; + sops.sem_flg = SEM_UNDO; + semop(semid, &sops, 1); +} + +void md4_sem_unlock(int semid, int semnum) +{ + struct sembuf sops; + sops.sem_num = semnum; + sops.sem_op = 1; + sops.sem_flg = SEM_UNDO; + semop(semid, &sops, 1); +} + +void md4_sem_wait_for_zero(int semid, int semnum) +{ + struct sembuf sops; + sops.sem_num = semnum; + sops.sem_op = 0; + sops.sem_flg = SEM_UNDO; + semop(semid, &sops, 1); +} + +void md4_sem_set(int semid, int semnum, int value) +{ + union semun arg; + arg.val = value; + semctl(semid, semnum, SETALL, arg); +} + +int md4_sem_get(int semid, int semnum) +{ + union semun arg; + return semctl(semid, 0, GETVAL, arg); +} + +/* vim: set ts=4 sts=4 expandtab bs=2 ai : */ diff --git a/db-4.8.30/mod_db4/sem_utils.h b/db-4.8.30/mod_db4/sem_utils.h new file mode 100644 index 0000000..e98613c --- /dev/null +++ b/db-4.8.30/mod_db4/sem_utils.h @@ -0,0 +1,21 @@ +/*- + * Copyright (c) 2004-2009 Oracle. All rights reserved. + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * authors: George Schlossnagle + */ + +#ifndef MOD_DB4_SEM_UTILS_H +#define MOD_DB4_SEM_UTILS_H + +extern int md4_sem_create(int semnum, unsigned short *start); +extern void md4_sem_destroy(int semid); +extern void md4_sem_lock(int semid, int semnum); +extern void md4_sem_unlock(int semid, int semnum); +extern void md4_sem_wait_for_zero(int semid, int semnum); +extern void md4_sem_set(int semid, int semnum, int value); +extern int md4_sem_get(int semid, int semnum); + +/* vim: set ts=4 sts=4 expandtab bs=2 ai : */ +#endif diff --git a/db-4.8.30/mod_db4/skiplist.c b/db-4.8.30/mod_db4/skiplist.c new file mode 100644 index 0000000..c806c9f --- /dev/null +++ b/db-4.8.30/mod_db4/skiplist.c @@ -0,0 +1,534 @@ +/* ====================================================================== + * Copyright (c) 2000,2006 Theo Schlossnagle + * All rights reserved. + * The following code was written by Theo Schlossnagle for use in the + * Backhand project at The Center for Networking and Distributed Systems + * at The Johns Hopkins University. + * + * This is a skiplist implementation to be used for abstract structures + * and is release under the LGPL license version 2.1 or later. A copy + * of this license can be found file LGPL. + * + * Alternatively, this file may be licensed under the new BSD license. + * A copy of this license can be found file BSD. + * + * ====================================================================== +*/ + +extern "C" +{ +#include +#include +#include + +#include "skiplist.h" +} + +#ifdef USE_DMALLOC +# include +#endif + +#ifndef MIN +#define MIN(a,b) ((a= 0); \ + tmptr = malloc(sizeof(struct type) * num); \ + if (tmptr == NULL){ \ + fprintf(stderr, \ + "In file %s on line %d: malloc failed to allocate memory, exiting...", \ + __FILE__, __LINE__); \ + assert(0); \ + } \ + ptr = (struct type*)tmptr; \ +} while (0) + +static int get_b_rand(void) { + static int ph=32; /* More bits than we will ever use */ + static unsigned long randseq; + if(ph > 31) { /* Num bits in return of lrand48() */ + ph=0; + randseq = lrand48(); + } + ph++; + return ((randseq & (1 << (ph-1))) >> (ph-1)); +} + +void skiplisti_init(Skiplist *sl) { + sl->compare = (SkiplistComparator)NULL; + sl->comparek = (SkiplistComparator)NULL; + sl->height=0; + sl->preheight=0; + sl->size=0; + sl->top = NULL; + sl->bottom = NULL; + sl->index = NULL; +} + +static int indexing_comp(void *a, void *b) { + assert(a); + assert(b); + return (void *)(((Skiplist *)a)->compare)>(void *)(((Skiplist *)b)->compare); +} +static int indexing_compk(void *a, void *b) { + assert(b); + return a>(void *)(((Skiplist *)b)->compare); +} + +void skiplist_init(Skiplist *sl) { + skiplisti_init(sl); + MALLOC(_iskiplist, sl->index); + skiplisti_init(sl->index); + skiplist_set_compare(sl->index, indexing_comp, indexing_compk); +} + +void skiplist_set_compare(Skiplist *sl, + SkiplistComparator comp, + SkiplistComparator compk) { + if(sl->compare && sl->comparek) { + skiplist_add_index(sl, comp, compk); + } else { + sl->compare = comp; + sl->comparek = compk; + } +} + +void skiplist_add_index(Skiplist *sl, + SkiplistComparator comp, + SkiplistComparator compk) { + struct skiplistnode *m; + Skiplist *ni; + int icount=0; +#ifdef SLDEBUG + fprintf(stderr, "Adding index to %p\n", sl); +#endif + skiplist_find(sl->index, (void *)comp, &m); + if(m) return; /* Index already there! */ + MALLOC(_iskiplist, ni); + skiplisti_init(ni); + skiplist_set_compare(ni, comp, compk); + /* Build the new index... This can be expensive! */ + m = skiplist_insert(sl->index, ni); + while(m->prev) m=m->prev, icount++; + for(m=skiplist_getlist(sl); m; skiplist_next(sl, &m)) { + int j=icount-1; + struct skiplistnode *nsln; + nsln = skiplist_insert(ni, m->data); + /* skip from main index down list */ + while(j>0) m=m->nextindex, j--; + /* insert this node in the indexlist after m */ + nsln->nextindex = m->nextindex; + if(m->nextindex) m->nextindex->previndex = nsln; + nsln->previndex = m; + m->nextindex = nsln; + } +} + +struct skiplistnode *skiplist_getlist(Skiplist *sl) { + if(!sl->bottom) return NULL; + return sl->bottom->next; +} + +void *skiplist_find(Skiplist *sl, + void *data, + struct skiplistnode **iter) { + void *ret; + struct skiplistnode *aiter; + if(!sl->compare) return 0; + if(iter) + ret = skiplist_find_compare(sl, data, iter, sl->compare); + else + ret = skiplist_find_compare(sl, data, &aiter, sl->compare); + return ret; +} +void *skiplist_find_compare(Skiplist *sli, + void *data, + struct skiplistnode **iter, + SkiplistComparator comp) { + struct skiplistnode *m = NULL; + Skiplist *sl; + if(comp==sli->compare || !sli->index) { + sl = sli; + } else { + skiplist_find(sli->index, (void *)comp, &m); + assert(m); + sl= (Skiplist *) m->data; + } + skiplisti_find_compare(sl, data, iter, sl->comparek); + return (*iter)?((*iter)->data):(*iter); +} +int skiplisti_find_compare(Skiplist *sl, + void *data, + struct skiplistnode **ret, + SkiplistComparator comp) { + struct skiplistnode *m = NULL; + int count=0; + m = sl->top; + while(m) { + int compared; + if(m->next) compared=comp(data, m->next->data); + if(compared == 0) { +#ifdef SL_DEBUG + printf("Looking -- found in %d steps\n", count); +#endif + m=m->next; + while(m->down) m=m->down; + *ret = m; + return count; + } + if((m->next == NULL) || (compared<0)) + m = m->down, count++; + else + m = m->next, count++; + } +#ifdef SL_DEBUG + printf("Looking -- not found in %d steps\n", count); +#endif + *ret = NULL; + return count; +} +void *skiplist_next(Skiplist *sl, struct skiplistnode **iter) { + if(!*iter) return NULL; + *iter = (*iter)->next; + return (*iter)?((*iter)->data):NULL; +} +void *skiplist_previous(Skiplist *sl, struct skiplistnode **iter) { + if(!*iter) return NULL; + *iter = (*iter)->prev; + return (*iter)?((*iter)->data):NULL; +} +struct skiplistnode *skiplist_insert(Skiplist *sl, + void *data) { + if(!sl->compare) return 0; + return skiplist_insert_compare(sl, data, sl->compare); +} + +struct skiplistnode *skiplist_insert_compare(Skiplist *sl, + void *data, + SkiplistComparator comp) { + struct skiplistnode *m, *p, *tmp, *ret, **stack; + int nh=1, ch, stacki; +#ifdef SLDEBUG + skiplist_print_struct(sl, "BI: "); +#endif + if(!sl->top) { + sl->height = 1; + MALLOC(skiplistnode, sl->bottom); + sl->topend = sl->bottomend = sl->top = sl->bottom; + assert(sl->top); + sl->top->next = (struct skiplistnode *) NULL; + sl->top->data = (struct skiplistnode *) NULL; + sl->top->prev =(struct skiplistnode *) NULL; + sl->top->up = (struct skiplistnode *) NULL; + sl->top->down = (struct skiplistnode *) NULL; + sl->top->nextindex= (struct skiplistnode *) NULL; + sl->top->previndex = (struct skiplistnode *) NULL; + sl->top->sl = sl; + } + if(sl->preheight) { + while(nh < sl->preheight && get_b_rand()) nh++; + } else { + while(nh <= sl->height && get_b_rand()) nh++; + } + /* Now we have the new height at which we wish to insert our new node */ + /* Let us make sure that our tree is a least that tall (grow if necessary)*/ + for(;sl->heightheight++) { + MALLOC(skiplistnode, sl->top->up); + sl->top->up->down = sl->top; + sl->top = sl->topend = sl->top->up; + sl->top->prev = sl->top->next = sl->top->nextindex = + sl->top->previndex = sl->top->up = NULL; + sl->top->data = NULL; + sl->top->sl = sl; + } + ch = sl->height; + /* Find the node (or node after which we would insert) */ + /* Keep a stack to pop back through for insertion */ + m = sl->top; + MALLOC_N(skiplistnode*, nh, stack); + stacki=0; + while(m) { + int compared=-1; + if(m->next) compared=comp(data, m->next->data); + if(compared == 0) { + free(stack); + return 0; + } + if((m->next == NULL) || (compared<0)) { + if(ch<=nh) { + /* push on stack */ + stack[stacki++] = m; + } + m = m->down; + ch--; + } else { + m = m->next; + } + } + /* Pop the stack and insert nodes */ + p = NULL; + for(;stacki>0;stacki--) { + m = stack[stacki-1]; + MALLOC(skiplistnode, tmp); + tmp->next = m->next; + if(m->next) m->next->prev=tmp; + tmp->prev = m; + tmp->up = NULL; + tmp->nextindex = tmp->previndex = NULL; + tmp->down = p; + if(p) p->up=tmp; + tmp->data = data; + tmp->sl = sl; + m->next = tmp; + /* This sets ret to the bottom-most node we are inserting */ + if(!p) ret=tmp; + p = tmp; + } + free(stack); + if(sl->index != NULL) { + /* this is a external insertion, we must insert into each index as well */ + struct skiplistnode *p, *ni, *li; + li=ret; + for(p = skiplist_getlist(sl->index); p; skiplist_next(sl->index, &p)) { + ni = skiplist_insert((Skiplist *)p->data, ret->data); + assert(ni); +#ifdef SLDEBUG + fprintf(stderr, "Adding %p to index %p\n", ret->data, p->data); +#endif + li->nextindex = ni; + ni->previndex = li; + li = ni; + } + } else { + sl->size++; + } +#ifdef SLDEBUG + skiplist_print_struct(sl, "AI: "); +#endif + return ret; +} +struct skiplistnode *skiplist_append(Skiplist *sl, void *data) { + int nh=1, ch, compared; + struct skiplistnode *lastnode, *nodeago; + if(sl->bottomend != sl->bottom) { + compared=sl->compare(data, sl->bottomend->prev->data); + /* If it doesn't belong at the end, then fail */ + if(compared<=0) return NULL; + } + if(sl->preheight) { + while(nh < sl->preheight && get_b_rand()) nh++; + } else { + while(nh <= sl->height && get_b_rand()) nh++; + } + /* Now we have the new height at which we wish to insert our new node */ + /* Let us make sure that our tree is a least that tall (grow if necessary)*/ + lastnode = sl->bottomend; + nodeago = NULL; + + if(!lastnode) return skiplist_insert(sl, data); + + for(;sl->heightheight++) { + MALLOC(skiplistnode, sl->top->up); + assert(sl->top); + sl->top->up->down = sl->top; + sl->top = sl->top->up; + sl->top->prev = sl->top->next = sl->top->nextindex = + sl->top->previndex = NULL; + sl->top->data = NULL; + sl->top->sl = sl; + } + ch = sl->height; + while(nh) { + struct skiplistnode *anode; + MALLOC(skiplistnode, anode); + anode->next = lastnode; + anode->prev = lastnode->prev; + anode->up = NULL; + anode->down = nodeago; + if(lastnode->prev) { + if(lastnode == sl->bottom) + sl->bottom = anode; + else if (lastnode == sl->top) + sl->top = anode; + } + nodeago = anode; + lastnode = lastnode->up; + nh--; + } + sl->size++; + return sl->bottomend; +} +Skiplist *skiplist_concat(Skiplist *sl1, Skiplist *sl2) { + /* Check integrity! */ + int compared, eheight; + Skiplist temp; + struct skiplistnode *lbottom, *lbottomend, *b1, *e1, *b2, *e2; + if(sl1->bottomend == NULL || sl1->bottomend->prev == NULL) { + skiplist_remove_all(sl1, free); + temp = *sl1; + *sl1 = *sl2; + *sl2 = temp; + /* swap them so that sl2 can be freed normally upon return. */ + return sl1; + } + if(sl2->bottom == NULL || sl2->bottom->next == NULL) { + skiplist_remove_all(sl2, free); + return sl1; + } + compared = sl1->compare(sl1->bottomend->prev->data, sl2->bottom->data); + /* If it doesn't belong at the end, then fail */ + if(compared<=0) return NULL; + + /* OK now append sl2 onto sl1 */ + lbottom = lbottomend = NULL; + eheight = MIN(sl1->height, sl2->height); + b1 = sl1->bottom; e1 = sl1->bottomend; + b2 = sl2->bottom; e2 = sl2->bottomend; + while(eheight) { + e1->prev->next = b2; + b2->prev = e1->prev->next; + e2->prev->next = e1; + e1->prev = e2->prev; + e2->prev = NULL; + b2 = e2; + b1->down = lbottom; + e1->down = lbottomend; + if(lbottom) lbottom->up = b1; + if(lbottomend) lbottomend->up = e1; + + lbottom = b1; + lbottomend = e1; + } + /* Take the top of the longer one (if it is sl2) and make it sl1's */ + if(sl2->height > sl1->height) { + b1->up = b2->up; + e1->up = e2->up; + b1->up->down = b1; + e1->up->down = e1; + sl1->height = sl2->height; + sl1->top = sl2->top; + sl1->topend = sl2->topend; + } + + /* move the top pointer to here if it isn't there already */ + sl2->top = sl2->topend = b2; + sl2->top->up = NULL; /* If it isn't already */ + sl1->size += sl2->size; + skiplist_remove_all(sl2, free); + return sl1; +} +int skiplist_remove(Skiplist *sl, + void *data, FreeFunc myfree) { + if(!sl->compare) return 0; + return skiplist_remove_compare(sl, data, myfree, sl->comparek); +} +void skiplist_print_struct(Skiplist *sl, char *prefix) { + struct skiplistnode *p, *q; + fprintf(stderr, "Skiplist Structure (height: %d)\n", sl->height); + p = sl->bottom; + while(p) { + q = p; + fprintf(stderr, "%s", prefix); + while(q) { + fprintf(stderr, "%p ", q->data); + q=q->up; + } + fprintf(stderr, "\n"); + p=p->next; + } +} +int skiplisti_remove(Skiplist *sl, struct skiplistnode *m, FreeFunc myfree) { + struct skiplistnode *p; + if(!m) return 0; + if(m->nextindex) skiplisti_remove(m->nextindex->sl, m->nextindex, NULL); + else sl->size--; +#ifdef SLDEBUG + skiplist_print_struct(sl, "BR:"); +#endif + while(m->up) m=m->up; + while(m) { + p=m; + p->prev->next = p->next; /* take me out of the list */ + if(p->next) p->next->prev = p->prev; /* take me out of the list */ + m=m->down; + /* This only frees the actual data in the bottom one */ + if(!m && myfree && p->data) myfree(p->data); + free(p); + } + while(sl->top && sl->top->next == NULL) { + /* While the row is empty and we are not on the bottom row */ + p = sl->top; + sl->top = sl->top->down; /* Move top down one */ + if(sl->top) sl->top->up = NULL; /* Make it think its the top */ + free(p); + sl->height--; + } + if(!sl->top) sl->bottom = NULL; + assert(sl->height>=0); +#ifdef SLDEBUG + skiplist_print_struct(sl, "AR: "); +#endif + return sl->height; +} +int skiplist_remove_compare(Skiplist *sli, + void *data, + FreeFunc myfree, SkiplistComparator comp) { + struct skiplistnode *m; + Skiplist *sl; + if(comp==sli->comparek || !sli->index) { + sl = sli; + } else { + skiplist_find(sli->index, (void *)comp, &m); + assert(m); + sl= (Skiplist *) m->data; + } + skiplisti_find_compare(sl, data, &m, comp); + if(!m) return 0; + while(m->previndex) m=m->previndex; + return skiplisti_remove(sl, m, myfree); +} +void skiplist_remove_all(Skiplist *sl, FreeFunc myfree) { + /* This must remove even the place holder nodes (bottom though top) + because we specify in the API that one can free the Skiplist after + making this call without memory leaks */ + struct skiplistnode *m, *p, *u; + m=sl->bottom; + while(m) { + p = m->next; + if(myfree && p->data) myfree(p->data); + while(m) { + u = m->up; + free(m); + m=u; + } + m = p; + } + sl->top = sl->bottom = NULL; + sl->height = 0; + sl->size = 0; +} + +void *skiplist_pop(Skiplist * a, FreeFunc myfree) +{ + struct skiplistnode *sln; + void *data = NULL; + sln = skiplist_getlist(a); + if (sln) { + data = sln->data; + skiplisti_remove(a, sln, myfree); + } + return data; +} diff --git a/db-4.8.30/mod_db4/skiplist.h b/db-4.8.30/mod_db4/skiplist.h new file mode 100644 index 0000000..8d6ee6b --- /dev/null +++ b/db-4.8.30/mod_db4/skiplist.h @@ -0,0 +1,88 @@ +/* ====================================================================== + * Copyright (c) 2000,2006 Theo Schlossnagle + * All rights reserved. + * The following code was written by Theo Schlossnagle for use in the + * Backhand project at The Center for Networking and Distributed Systems + * at The Johns Hopkins University. + * + * This is a skiplist implementation to be used for abstract structures + * and is release under the LGPL license version 2.1 or later. A copy + * of this license can be found file LGPL. + * + * Alternatively, this file may be licensed under the new BSD license. + * A copy of this license can be found file BSD. + * + * ====================================================================== +*/ + +#ifndef _SKIPLIST_P_H +#define _SKIPLIST_P_H + +/* This is a skiplist implementation to be used for abstract structures + within the Spread multicast and group communication toolkit + + This portion written by -- Theo Schlossnagle +*/ + +/* This is the function type that must be implemented per object type + that is used in a skiplist for comparisons to maintain order */ +typedef int (*SkiplistComparator)(void *, void *); +typedef void (*FreeFunc)(void *); + +struct skiplistnode; + +typedef struct _iskiplist { + SkiplistComparator compare; + SkiplistComparator comparek; + int height; + int preheight; + int size; + struct skiplistnode *top; + struct skiplistnode *bottom; + /* These two are needed for appending */ + struct skiplistnode *topend; + struct skiplistnode *bottomend; + struct _iskiplist *index; +} Skiplist; + +struct skiplistnode { + void *data; + struct skiplistnode *next; + struct skiplistnode *prev; + struct skiplistnode *down; + struct skiplistnode *up; + struct skiplistnode *previndex; + struct skiplistnode *nextindex; + Skiplist *sl; +}; + + +void skiplist_init(Skiplist *sl); +void skiplist_set_compare(Skiplist *sl, SkiplistComparator, + SkiplistComparator); +void skiplist_add_index(Skiplist *sl, SkiplistComparator, + SkiplistComparator); +struct skiplistnode *skiplist_getlist(Skiplist *sl); +void *skiplist_find_compare(Skiplist *sl, void *data, struct skiplistnode **iter, + SkiplistComparator func); +void *skiplist_find(Skiplist *sl, void *data, struct skiplistnode **iter); +void *skiplist_next(Skiplist *sl, struct skiplistnode **); +void *skiplist_previous(Skiplist *sl, struct skiplistnode **); + +struct skiplistnode *skiplist_insert_compare(Skiplist *sl, + void *data, SkiplistComparator comp); +struct skiplistnode *skiplist_insert(Skiplist *sl, void *data); +int skiplist_remove_compare(Skiplist *sl, void *data, + FreeFunc myfree, SkiplistComparator comp); +int skiplist_remove(Skiplist *sl, void *data, FreeFunc myfree); +int skiplisti_remove(Skiplist *sl, struct skiplistnode *m, FreeFunc myfree); +void skiplist_remove_all(Skiplist *sl, FreeFunc myfree); + +int skiplisti_find_compare(Skiplist *sl, + void *data, + struct skiplistnode **ret, + SkiplistComparator comp); + +void *skiplist_pop(Skiplist * a, FreeFunc myfree); + +#endif diff --git a/db-4.8.30/mod_db4/utils.c b/db-4.8.30/mod_db4/utils.c new file mode 100644 index 0000000..b7d704c --- /dev/null +++ b/db-4.8.30/mod_db4/utils.c @@ -0,0 +1,620 @@ +/*- + * Copyright (c) 2004-2009 Oracle. All rights reserved. + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * authors: George Schlossnagle + */ + +extern "C" +{ +#include "httpd.h" +#include "http_config.h" +#include "http_core.h" /* For REMOTE_NAME */ +#include "http_log.h" + +#include "sem_utils.h" +#include "skiplist.h" +#include "mm_hash.h" +} + +#include "utils.h" +#include "db_cxx.h" + +/* the semaphore set for the application */ +static int semset; + +/* process-local handle for global ref count management */ +/* individual semaphores */ +#define OK_TO_PROCEED 0 +#define GLOBAL_LOCK 1 +#define NUM_SEMS 2 + +/* mm helpers */ +static MM *mm; +static MM_Hash *ref_counts; + +/* locks */ +int env_locks_init() +{ + char shmpath[32]; + unsigned short start[2] = { 1, 1 }; + + snprintf(shmpath, 32, "/tmp/.mod_db4.%d", getpid()); + mm = mm_create(0, shmpath); + if(NULL == mm) { + return -1; + } + mm_lock(mm, MM_LOCK_RW); + ref_counts = mm_hash_new(mm, NULL); + mm_unlock(mm); + if (!ref_counts) { + return -1; + } + if((semset = md4_sem_create(NUM_SEMS, start)) < 0) { + return -1; + } + return 0; +} + +void env_global_rw_lock() +{ + mm_lock(mm, MM_LOCK_RW); +} + +void env_global_rd_lock() +{ + mm_lock(mm, MM_LOCK_RD); +} + +void env_global_unlock() +{ + mm_unlock(mm); +} + +void env_wait_for_child_crash() +{ + md4_sem_wait_for_zero(semset, OK_TO_PROCEED); +} + +void env_child_crash() +{ + md4_sem_set(semset, OK_TO_PROCEED, 0); +} + +void env_ok_to_proceed() +{ + md4_sem_set(semset, OK_TO_PROCEED, 1); +} + +/* process resource globals */ +static Skiplist open_transactions; +static Skiplist open_cursors; +static Skiplist open_log_cursors; +static Skiplist open_dbs; +static Skiplist open_dbenvs; + +/* named pointers for db_env and bd skiplists */ +struct named_resource { + char *name; + void *ptr; +}; + +/* skiplist comparitors for void pointers */ + +static int VP_COMPARE(void *a, void *b) +{ + return (a < b) ? (-1) : ((a == b) ? (0) : (1)); +} + +/* key for comparing DB *'s in skiplist */ + +struct db_key { + const char *fname; + const char *dname; +}; + +static int DB_COMPARE(void *a, void *b) +{ + int ret; + DB *ae = (DB *) a; + DB *be = (DB *) b; + if(ae->fname == NULL) { + if(be->fname == NULL) { + return (ae < be) ? (-1) : ((ae == be) ? (0) : (1)); + } + return 1; + } + else if(be->fname == NULL) { + /* ae->fname != NULL, from above */ + return -1; + } + ret = strcmp(ae->fname, be->fname); + if(ret == 0) { + if(ae->dname == NULL) { + if(be->dname == NULL) { + return 0; + } + return 1; + } + else if(be->dname == NULL) { + return -1; + } + ret = strcmp(ae->dname, be->dname); + } + return ret; +} + +static int DB_COMPARE_K(void *a, void *b) +{ + struct db_key *akey = (struct db_key *) a; + DB *be = (DB *) b; + int ret; + if(akey->fname == NULL) { + if(be->fname == NULL) { + /* should never match here */ + return (a < b) ? (-1) : ((a == b) ? (0) : (1)); + } + return 1; + } + else if(be->fname == NULL) { + /* akey->fname != NULL, from above */ + return -1; + } + ret = strcmp(akey->fname, be->fname); + if(ret == 0) { + if(akey->dname == NULL) { + if(be->dname == NULL) { + return 0; + } + return 1; + } + else if(be->dname == NULL) { + return -1; + } + ret = strcmp(akey->dname, be->dname); + } + return ret; +} + +static int DBENV_COMPARE(void *a, void *b) +{ + DB_ENV *ae = (DB_ENV *) a; + DB_ENV *be = (DB_ENV *) b; + return strcmp(ae->db_home, be->db_home); +} + +static int DBENV_COMPARE_K(void *a, void *b) +{ + const char *aname = (const char *) a; + DB_ENV *be = (DB_ENV *) b; + return strcmp(aname, be->db_home); +} + +void env_rsrc_list_init() +{ + skiplist_init(&open_transactions); + skiplist_set_compare(&open_transactions, VP_COMPARE, VP_COMPARE); + + skiplist_init(&open_cursors); + skiplist_set_compare(&open_cursors, VP_COMPARE, VP_COMPARE); + + skiplist_init(&open_log_cursors); + skiplist_set_compare(&open_log_cursors, VP_COMPARE, VP_COMPARE); + + skiplist_init(&open_dbs); + skiplist_set_compare(&open_dbs, DB_COMPARE, DB_COMPARE_K); + + skiplist_init(&open_dbenvs); + skiplist_set_compare(&open_dbenvs, DBENV_COMPARE, DBENV_COMPARE_K); +} + +static void register_cursor(DBC *dbc) +{ + skiplist_insert(&open_cursors, dbc); +} + +static void unregister_cursor(DBC *dbc) +{ + skiplist_remove(&open_cursors, dbc, NULL); +} + +static void register_log_cursor(DB_LOGC *cursor) +{ + skiplist_insert(&open_log_cursors, cursor); +} + +static void unregister_log_cursor(DB_LOGC *cursor) +{ + skiplist_remove(&open_log_cursors, cursor, NULL); +} + +static void register_transaction(DB_TXN *txn) +{ + skiplist_insert(&open_transactions, txn); +} + +static void unregister_transaction(DB_TXN *txn) +{ + skiplist_remove(&open_transactions, txn, NULL); +} + +static DB *retrieve_db(const char *fname, const char *dname) +{ + DB *rv; + struct db_key key; + if(fname == NULL) { + return NULL; + } + key.fname = fname; + key.dname = dname; + rv = (DB *) skiplist_find(&open_dbs, (void *) &key, NULL); + return rv; +} + +static void register_db(DB *db) +{ + skiplist_insert(&open_dbs, db); +} + +static void unregister_db(DB *db) +{ + struct db_key key; + key.fname = db->fname; + key.dname = db->dname; + skiplist_remove(&open_dbs, &key, NULL); +} + +static DB_ENV *retrieve_db_env(const char *db_home) +{ + return (DB_ENV *) skiplist_find(&open_dbenvs, (void *) db_home, NULL); +} + +static void register_db_env(DB_ENV *dbenv) +{ + global_ref_count_increase(dbenv->db_home); + skiplist_insert(&open_dbenvs, dbenv); +} + +static void unregister_db_env(DB_ENV *dbenv) +{ + global_ref_count_decrease(dbenv->db_home); + skiplist_remove(&open_dbenvs, dbenv->db_home, NULL); +} + +int global_ref_count_increase(char *path) +{ + int refcount = 0; + int pathlen = 0; + pathlen = strlen(path); + + env_global_rw_lock(); + refcount = (int) mm_hash_find(ref_counts, path, pathlen); + refcount++; + mm_hash_update(ref_counts, path, pathlen, (void *)refcount); + env_global_unlock(); + return refcount; +} + +int global_ref_count_decrease(char *path) +{ + int refcount = 0; + int pathlen = 0; + pathlen = strlen(path); + + env_global_rw_lock(); + refcount = (int) mm_hash_find(ref_counts, path, pathlen); + if(refcount > 0) refcount--; + mm_hash_update(ref_counts, path, pathlen, (void *)refcount); + env_global_unlock(); + return refcount; +} + +int global_ref_count_get(const char *path) +{ + int refcount = 0; + int pathlen = 0; + pathlen = strlen(path); + + env_global_rd_lock(); + refcount = (int) mm_hash_find(ref_counts, path, pathlen); + env_global_unlock(); + return refcount; +} + +void global_ref_count_clean() +{ + env_global_rd_lock(); + mm_hash_free(ref_counts); + ref_counts = mm_hash_new(mm, NULL); + env_global_unlock(); +} + +/* wrapper methods {{{ */ + +static int (*old_log_cursor_close)(DB_LOGC *, u_int32_t) = NULL; +static int new_log_cursor_close(DB_LOGC *cursor, u_int32_t flags) +{ + unregister_log_cursor(cursor); + return old_log_cursor_close(cursor, flags); +} + +static int (*old_db_txn_abort)(DB_TXN *) = NULL; +static int new_db_txn_abort(DB_TXN *tid) +{ + unregister_transaction(tid); + return old_db_txn_abort(tid); +} + +static int (*old_db_txn_commit)(DB_TXN *, u_int32_t) = NULL; +static int new_db_txn_commit(DB_TXN *tid, u_int32_t flags) +{ + unregister_transaction(tid); + return old_db_txn_commit(tid, flags); +} + +static int (*old_db_txn_discard)(DB_TXN *, u_int32_t) = NULL; +static int new_db_txn_discard(DB_TXN *tid, u_int32_t flags) +{ + unregister_transaction(tid); + return old_db_txn_discard(tid, flags); +} + +static int (*old_db_env_txn_begin)(DB_ENV *, DB_TXN *, DB_TXN **, u_int32_t); +static int new_db_env_txn_begin(DB_ENV *env, DB_TXN *parent, DB_TXN **tid, u_int32_t flags) +{ + int ret; + if((ret = old_db_env_txn_begin(env, parent, tid, flags)) == 0) { + register_transaction(*tid); + /* overload DB_TXN->abort */ + if(old_db_txn_abort == NULL) { + old_db_txn_abort = (*tid)->abort; + } + (*tid)->abort = new_db_txn_abort; + + /* overload DB_TXN->commit */ + if(old_db_txn_commit == NULL) { + old_db_txn_commit = (*tid)->commit; + } + (*tid)->commit = new_db_txn_commit; + + /* overload DB_TXN->discard */ + if(old_db_txn_discard == NULL) { + old_db_txn_discard = (*tid)->discard; + } + (*tid)->discard = new_db_txn_discard; + } + return ret; +} + +static int (*old_db_env_open)(DB_ENV *, const char *, u_int32_t, int) = NULL; +static int new_db_env_open(DB_ENV *dbenv, const char *db_home, u_int32_t flags, int mode) +{ + int ret =666; + DB_ENV *cached_dbenv; + flags |= DB_INIT_MPOOL; + /* if global ref count is 0, open for recovery */ + if(global_ref_count_get(db_home) == 0) { + flags |= DB_RECOVER; + flags |= DB_INIT_TXN; + flags |= DB_CREATE; + } + if((cached_dbenv = retrieve_db_env(db_home)) != NULL) { + memcpy(dbenv, cached_dbenv, sizeof(DB_ENV)); + ret = 0; + } + else if((ret = old_db_env_open(dbenv, db_home, flags, mode)) == 0) { + register_db_env(dbenv); + } + return ret; +} + +static int(*old_db_env_close)(DB_ENV *, u_int32_t) = NULL; +static int new_db_env_close(DB_ENV *dbenv, u_int32_t flags) +{ + int ret; + /* we're already locked */ + unregister_db_env(dbenv); + ret = old_db_env_close(dbenv, flags); +} + +static int (*old_db_env_log_cursor)(DB_ENV *, DB_LOGC **, u_int32_t) = NULL; +static int new_db_env_log_cursor(DB_ENV *dbenv, DB_LOGC **cursop, u_int32_t flags) +{ + int ret; + if((ret = old_db_env_log_cursor(dbenv, cursop, flags)) == 0) { + register_log_cursor(*cursop); + if(old_log_cursor_close == NULL) { + old_log_cursor_close = (*cursop)->close; + } + (*cursop)->close = new_log_cursor_close; + } + return ret; +} + +static int (*old_db_open)(DB *, DB_TXN *, const char *, const char *, DBTYPE, u_int32_t, int) = NULL; +static int new_db_open(DB *db, DB_TXN *txnid, const char *file, + const char *database, DBTYPE type, u_int32_t flags, int mode) +{ + int ret; + DB *cached_db; + + cached_db = retrieve_db(file, database); + if(cached_db) { + memcpy(db, cached_db, sizeof(DB)); + ret = 0; + } + else if((ret = old_db_open(db, txnid, file, database, type, flags, mode)) == 0) { + register_db(db); + } + return ret; +} + +static int (*old_db_close)(DB *, u_int32_t) = NULL; +static int new_db_close(DB *db, u_int32_t flags) +{ + unregister_db(db); + return old_db_close(db, flags); +} + + +static int (*old_dbc_close)(DBC *); +static int new_dbc_close(DBC *cursor) +{ + unregister_cursor(cursor); + return old_dbc_close(cursor); +} + +static int (*old_dbc_dup)(DBC *, DBC **, u_int32_t) = NULL; +static int new_dbc_dup(DBC *oldcursor, DBC **newcursor, u_int32_t flags) +{ + int ret; + if((ret = old_dbc_dup(oldcursor, newcursor, flags)) == 0) { + register_cursor(*newcursor); + + /* overload DBC->close */ + (*newcursor)->close = oldcursor->close; + + /* overload DBC->dup */ + (*newcursor)->dup = oldcursor->dup; + } + return ret; +} + +static int (*old_db_cursor)(DB *, DB_TXN *, DBC **, u_int32_t) = NULL; +static int new_db_cursor(DB *db, DB_TXN *txnid, DBC **cursop, u_int32_t flags) +{ + int ret; + if((ret = old_db_cursor(db, txnid, cursop, flags)) == 0) { + register_cursor(*cursop); + + /* overload DBC->close */ + if(old_dbc_close == NULL) { + old_dbc_close = (*cursop)->close; + } + (*cursop)->close = new_dbc_close; + + /* overload DBC->dup */ + if(old_dbc_dup == NULL) { + old_dbc_dup = (*cursop)->dup; + } + (*cursop)->dup = new_dbc_dup; + } + return ret; +} + +/* }}} */ + +/* {{{ new DB_ENV constructor + */ + +int mod_db4_db_env_create(DB_ENV **dbenvp, u_int32_t flags) +{ + int cachesize = 0; + int ret; + DB_ENV *dbenv; + + if ((ret = db_env_create(dbenvp, 0)) != 0) { + /* FIXME report error */ + + return ret; + } + dbenv = *dbenvp; + DbEnv::wrap_DB_ENV(dbenv); + /* Here we set defaults settings for the db_env */ + /* grab context info from httpd.conf for error file */ + /* grab context info for cachesize */ + if (0 && cachesize) { + if ((ret = dbenv->set_cachesize(dbenv, 0, cachesize, 0)) != 0) { + dbenv->err(dbenv, ret, "set_cachesize"); + dbenv->close(dbenv, 0); + } + } + /* overload DB_ENV->open */ + if(old_db_env_open == NULL) { + old_db_env_open = dbenv->open; + } + dbenv->open = new_db_env_open; + + /* overload DB_ENV->close */ + if(old_db_env_close == NULL) { + old_db_env_close = dbenv->close; + } + dbenv->close = new_db_env_close; + + /* overload DB_ENV->log_cursor */ + if(old_db_env_log_cursor == NULL) { + old_db_env_log_cursor = dbenv->log_cursor; + } + dbenv->log_cursor = new_db_env_log_cursor; + + /* overload DB_ENV->txn_begin */ + if(old_db_env_txn_begin == NULL) { + old_db_env_txn_begin = dbenv->txn_begin; + } + dbenv->txn_begin = new_db_env_txn_begin; + return 0; +} +/* }}} */ + +/* {{{ new DB constructor + */ +int mod_db4_db_create(DB **dbp, DB_ENV *dbenv, u_int32_t flags) +{ + int ret; + +flags = 0; + + if((ret = db_create(dbp, dbenv, flags)) == 0) { + /* FIXME this should be removed I think register_db(*dbp); */ + /* overload DB->open */ + if(old_db_open == NULL) { + old_db_open = (*dbp)->open; + } + (*dbp)->open = new_db_open; + + /* overload DB->close */ + if(old_db_close == NULL) { + old_db_close = (*dbp)->close; + } + (*dbp)->close = new_db_close; + + /* overload DB->cursor */ + if(old_db_cursor == NULL) { + old_db_cursor = (*dbp)->cursor; + } + (*dbp)->cursor = new_db_cursor; + } + return ret; +} + +/* }}} */ + +void mod_db4_child_clean_request_shutdown() +{ + DBC *cursor; + DB_TXN *transaction; + while(cursor = (DBC *)skiplist_pop(&open_cursors, NULL)) { + cursor->close(cursor); + } + while(transaction = (DB_TXN *)skiplist_pop(&open_transactions, NULL)) { + transaction->abort(transaction); + } +} + +void mod_db4_child_clean_process_shutdown() +{ + DB *db; + DB_ENV *dbenv; + mod_db4_child_clean_request_shutdown(); + while(db = (DB *)skiplist_pop(&open_dbs, NULL)) { + db->close(db, 0); + } + while(dbenv = (DB_ENV *)skiplist_pop(&open_dbenvs, NULL)) { + DbEnv *dbe = DbEnv::get_DbEnv(dbenv); + global_ref_count_decrease(dbenv->db_home); + dbe->close(0); + delete dbe; + } +} +/* vim: set ts=4 sts=4 expandtab bs=2 ai fdm=marker: */ diff --git a/db-4.8.30/mod_db4/utils.h b/db-4.8.30/mod_db4/utils.h new file mode 100644 index 0000000..9a2dd3c --- /dev/null +++ b/db-4.8.30/mod_db4/utils.h @@ -0,0 +1,32 @@ +/*- + * Copyright (c) 2004-2009 Oracle. All rights reserved. + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * authors: George Schlossnagle + */ + +#ifndef DB4_UTILS_H +#define DB4_UTILS_H + +#include "db_cxx.h" +#include "mod_db4_export.h" + +/* locks */ +int env_locks_init(); +void env_global_rw_lock(); +void env_global_rd_lock(); +void env_global_unlock(); +void env_wait_for_child_crash(); +void env_child_crash(); +void env_ok_to_proceed(); + +void env_rsrc_list_init(); + +int global_ref_count_increase(char *path); +int global_ref_count_decrease(char *path); +int global_ref_count_get(const char *path); +void global_ref_count_clean(); + +#endif +/* vim: set ts=4 sts=4 expandtab bs=2 ai fdm=marker: */ -- cgit v1.2.3