[Sheepdog] [PATCH] removed unused codes
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Sun Dec 13 19:22:24 CET 2009
sheep and dog codes are no longer used
Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
configure | 5845 --------------------
configure.in | 1 -
dog/Makefile.in | 17 -
dog/build.xml | 70 -
dog/conf/log4j.xml | 21 -
dog/conf/manifest.in | 3 -
dog/conf/sd.xml | 37 -
dog/dog.in | 37 -
dog/src/net/osrg/sheepdog/ClusterInformation.java | 173 -
dog/src/net/osrg/sheepdog/Connection.java | 202 -
dog/src/net/osrg/sheepdog/ConnectionCallback.java | 22 -
dog/src/net/osrg/sheepdog/DirEntry.java | 123 -
dog/src/net/osrg/sheepdog/Inode.java | 145 -
dog/src/net/osrg/sheepdog/Log.java | 80 -
dog/src/net/osrg/sheepdog/Master.java | 325 --
dog/src/net/osrg/sheepdog/MasterGroup.java | 160 -
dog/src/net/osrg/sheepdog/Node.java | 183 -
dog/src/net/osrg/sheepdog/NodeList.java | 174 -
dog/src/net/osrg/sheepdog/NodeLogOperator.java | 161 -
dog/src/net/osrg/sheepdog/ObjectOperator.java | 237 -
dog/src/net/osrg/sheepdog/OpCode.java | 71 -
dog/src/net/osrg/sheepdog/Sheepdog.java | 762 ---
dog/src/net/osrg/sheepdog/SheepdogException.java | 73 -
dog/src/net/osrg/sheepdog/SuperObject.java | 198 -
dog/src/net/osrg/sheepdog/VdiOperator.java | 249 -
dog/src/net/osrg/sheepdog/headers/NodeRequest.java | 47 -
.../net/osrg/sheepdog/headers/NodeResponse.java | 65 -
.../net/osrg/sheepdog/headers/ObjectRequest.java | 119 -
.../net/osrg/sheepdog/headers/ObjectResponse.java | 50 -
dog/src/net/osrg/sheepdog/headers/Request.java | 170 -
dog/src/net/osrg/sheepdog/headers/Response.java | 165 -
dog/src/net/osrg/sheepdog/headers/VdiRequest.java | 68 -
dog/src/net/osrg/sheepdog/headers/VdiResponse.java | 75 -
.../net/osrg/sheepdog/messages/DelVdiMessage.java | 41 -
.../osrg/sheepdog/messages/GetVdiInfoMessage.java | 99 -
.../osrg/sheepdog/messages/GetVmListMessage.java | 50 -
.../net/osrg/sheepdog/messages/JoinMessage.java | 113 -
.../net/osrg/sheepdog/messages/LeaveMessage.java | 69 -
.../net/osrg/sheepdog/messages/MakeFsMessage.java | 64 -
.../sheepdog/messages/MasterChangedMessage.java | 42 -
.../net/osrg/sheepdog/messages/NewVdiMessage.java | 79 -
.../osrg/sheepdog/messages/ReleaseVdiMessage.java | 65 -
.../messages/RequestClusterInfoMessage.java | 63 -
.../osrg/sheepdog/messages/SheepdogMessage.java | 67 -
.../osrg/sheepdog/messages/ShutdownMessage.java | 37 -
.../osrg/sheepdog/messages/UpdateEpochMessage.java | 62 -
install-sh | 323 --
sheep/Makefile.in | 31 -
sheep/net.c | 292 -
sheep/sheep.c | 225 -
sheep/sheep.h | 66 -
sheep/store.c | 460 --
sheep/work.c | 234 -
sheep/work.h | 20 -
54 files changed, 0 insertions(+), 12630 deletions(-)
delete mode 100755 configure
delete mode 100644 dog/Makefile.in
delete mode 100644 dog/build.xml
delete mode 100644 dog/conf/log4j.xml
delete mode 100644 dog/conf/manifest.in
delete mode 100644 dog/conf/sd.xml
delete mode 100644 dog/dog.in
delete mode 100644 dog/src/net/osrg/sheepdog/ClusterInformation.java
delete mode 100644 dog/src/net/osrg/sheepdog/Connection.java
delete mode 100644 dog/src/net/osrg/sheepdog/ConnectionCallback.java
delete mode 100644 dog/src/net/osrg/sheepdog/DirEntry.java
delete mode 100644 dog/src/net/osrg/sheepdog/Inode.java
delete mode 100644 dog/src/net/osrg/sheepdog/Log.java
delete mode 100644 dog/src/net/osrg/sheepdog/Master.java
delete mode 100644 dog/src/net/osrg/sheepdog/MasterGroup.java
delete mode 100644 dog/src/net/osrg/sheepdog/Node.java
delete mode 100644 dog/src/net/osrg/sheepdog/NodeList.java
delete mode 100644 dog/src/net/osrg/sheepdog/NodeLogOperator.java
delete mode 100644 dog/src/net/osrg/sheepdog/ObjectOperator.java
delete mode 100644 dog/src/net/osrg/sheepdog/OpCode.java
delete mode 100644 dog/src/net/osrg/sheepdog/Sheepdog.java
delete mode 100644 dog/src/net/osrg/sheepdog/SheepdogException.java
delete mode 100644 dog/src/net/osrg/sheepdog/SuperObject.java
delete mode 100644 dog/src/net/osrg/sheepdog/VdiOperator.java
delete mode 100644 dog/src/net/osrg/sheepdog/headers/NodeRequest.java
delete mode 100644 dog/src/net/osrg/sheepdog/headers/NodeResponse.java
delete mode 100644 dog/src/net/osrg/sheepdog/headers/ObjectRequest.java
delete mode 100644 dog/src/net/osrg/sheepdog/headers/ObjectResponse.java
delete mode 100644 dog/src/net/osrg/sheepdog/headers/Request.java
delete mode 100644 dog/src/net/osrg/sheepdog/headers/Response.java
delete mode 100644 dog/src/net/osrg/sheepdog/headers/VdiRequest.java
delete mode 100644 dog/src/net/osrg/sheepdog/headers/VdiResponse.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/DelVdiMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/GetVdiInfoMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/GetVmListMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/JoinMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/LeaveMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/MakeFsMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/MasterChangedMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/NewVdiMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/ReleaseVdiMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/RequestClusterInfoMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/SheepdogMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/ShutdownMessage.java
delete mode 100644 dog/src/net/osrg/sheepdog/messages/UpdateEpochMessage.java
delete mode 100755 install-sh
delete mode 100644 sheep/Makefile.in
delete mode 100644 sheep/net.c
delete mode 100644 sheep/sheep.c
delete mode 100644 sheep/sheep.h
delete mode 100644 sheep/store.c
delete mode 100644 sheep/work.c
delete mode 100644 sheep/work.h
diff --git a/configure b/configure
deleted file mode 100755
index 69d7e8c..0000000
--- a/configure
+++ /dev/null
@@ -1,5845 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.64.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
-# Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- # We cannot yet assume a decent shell, so we have to provide a
- # neutralization value for shells without unset; and this also
- # works around shells that cannot unset nonexistent variables.
- BASH_ENV=/dev/null
- ENV=/dev/null
- (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf at gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$?; test $as_status -eq 0 && as_status=1
- if test "$3"; then
- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
- fi
- $as_echo "$as_me: error: $1" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in #(
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 7<&0 </dev/null 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="lib/net.c"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='LTLIBOBJS
-LIBOBJS
-EGREP
-GREP
-CPP
-JSVC
-ANT
-JAVA_LIB
-JAVA_HOME
-SET_MAKE
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=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 ;;
-
- -*) as_fn_error "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information."
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_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'`
- as_fn_error "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
-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
- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures 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 \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.64
-
-Copyright (C) 2009 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
- return $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
- return $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
- return $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
- # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_header_compiler=yes
-else
- ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- ac_header_preproc=yes
-else
- ac_header_preproc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
- yes:no: )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
- no:yes:* )
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
- ;;
-esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
- return $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_find_intX_t LINENO BITS VAR
-# -----------------------------------
-# Finds a signed integer type with width BITS, setting cache variable VAR
-# accordingly.
-ac_fn_c_find_intX_t ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5
-$as_echo_n "checking for int$2_t... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=no"
- for ac_type in int$2_t 'int' 'long int' \
- 'long long int' 'short int' 'signed char'; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(0 < ($ac_type) (((($ac_type) 1 << ($2 - 2)) - 1) * 2 + 1))];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(($ac_type) (((($ac_type) 1 << ($2 - 2)) - 1) * 2 + 1)
- < ($ac_type) (((($ac_type) 1 << ($2 - 2)) - 1) * 2 + 2))];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- case $ac_type in #(
- int$2_t) :
- eval "$3=yes" ;; #(
- *) :
- eval "$3=\$ac_type" ;;
-esac
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- eval as_val=\$$3
- if test "x$as_val" = x""no; then :
-
-else
- break
-fi
- done
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_find_intX_t
-
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=no"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof ($2))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_type
-
-# ac_fn_c_find_uintX_t LINENO BITS VAR
-# ------------------------------------
-# Finds an unsigned integer type with width BITS, setting cache variable VAR
-# accordingly.
-ac_fn_c_find_uintX_t ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
-$as_echo_n "checking for uint$2_t... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=no"
- for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \
- 'unsigned long long int' 'unsigned short int' 'unsigned char'; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(($ac_type) -1 >> ($2 - 1) == 1)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- case $ac_type in #(
- uint$2_t) :
- eval "$3=yes" ;; #(
- *) :
- eval "$3=\$ac_type" ;;
-esac
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- eval as_val=\$$3
- if test "x$as_val" = x""no; then :
-
-else
- break
-fi
- done
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_find_uintX_t
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_func
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.64. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append 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
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > 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
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- ac_site_file1=$CONFIG_SITE
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_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
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_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
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_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.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-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
-
-
-
-
-# Checks for programs.
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- rm -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.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.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then :
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
-fi
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." "$LINENO" 5; }
-fi
-rm -f conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
- for ac_t in install-sh install.sh shtool; do
- if test -f "$ac_dir/$ac_t"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/$ac_t -c"
- break 2
- fi
- done
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
- done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
- @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
- *@@@%%%=?*=@@@%%%*)
- eval ac_cv_prog_make_${ac_make}_set=yes;;
- *)
- eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- SET_MAKE=
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-if test "$JAVA_HOME" = ""; then
- JAVA_HOME=/usr/lib/jvm/java-6-sun
-fi
-JAVA_HOME=$JAVA_HOME
-
-as_ac_File=`$as_echo "ac_cv_file_$JAVA_HOME/bin/java" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $JAVA_HOME/bin/java" >&5
-$as_echo_n "checking for $JAVA_HOME/bin/java... " >&6; }
-if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- test "$cross_compiling" = yes &&
- as_fn_error "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$JAVA_HOME/bin/java"; then
- eval "$as_ac_File=yes"
-else
- eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_File
- if test "x$as_val" = x""yes; then :
-
-else
- as_fn_error "\"install sun-java6-sdk and define JAVA_HOME to be the root of your Java installation\"" "$LINENO" 5
-fi
-
-as_ac_File=`$as_echo "ac_cv_file_$JAVA_HOME/bin/javac" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $JAVA_HOME/bin/javac" >&5
-$as_echo_n "checking for $JAVA_HOME/bin/javac... " >&6; }
-if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- test "$cross_compiling" = yes &&
- as_fn_error "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$JAVA_HOME/bin/javac"; then
- eval "$as_ac_File=yes"
-else
- eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_File
- if test "x$as_val" = x""yes; then :
-
-else
- as_fn_error "\"install sun-java6-sdk and define JAVA_HOME to be the root of your Java installation\"" "$LINENO" 5
-fi
-
-as_ac_File=`$as_echo "ac_cv_file_$JAVA_HOME/bin/jar" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $JAVA_HOME/bin/jar" >&5
-$as_echo_n "checking for $JAVA_HOME/bin/jar... " >&6; }
-if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- test "$cross_compiling" = yes &&
- as_fn_error "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$JAVA_HOME/bin/jar"; then
- eval "$as_ac_File=yes"
-else
- eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_File
- if test "x$as_val" = x""yes; then :
-
-else
- as_fn_error "\"install sun-java6-sdk and define JAVA_HOME to be the root of your Java installation\"" "$LINENO" 5
-fi
-
-if test "$JAVA_LIB" = ""; then
- JAVA_LIB=/usr/share/java
-fi
-JAVA_LIB=$JAVA_LIB
-
-as_ac_File=`$as_echo "ac_cv_file_$JAVA_LIB/jgroups-all.jar" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $JAVA_LIB/jgroups-all.jar" >&5
-$as_echo_n "checking for $JAVA_LIB/jgroups-all.jar... " >&6; }
-if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- test "$cross_compiling" = yes &&
- as_fn_error "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$JAVA_LIB/jgroups-all.jar"; then
- eval "$as_ac_File=yes"
-else
- eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_File
- if test "x$as_val" = x""yes; then :
-
-else
- as_fn_error "\"install libjgroups-java and define JAVA_LIB to be the root of the installation\"" "$LINENO" 5
-fi
-
-as_ac_File=`$as_echo "ac_cv_file_$JAVA_LIB/commons-daemon.jar" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $JAVA_LIB/commons-daemon.jar" >&5
-$as_echo_n "checking for $JAVA_LIB/commons-daemon.jar... " >&6; }
-if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- test "$cross_compiling" = yes &&
- as_fn_error "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$JAVA_LIB/commons-daemon.jar"; then
- eval "$as_ac_File=yes"
-else
- eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_File
- if test "x$as_val" = x""yes; then :
-
-else
- as_fn_error "\"install libcommons-daemon-java and define JAVA_LIB to be the root of the installation\"" "$LINENO" 5
-fi
-
-as_ac_File=`$as_echo "ac_cv_file_$JAVA_LIB/commons-cli.jar" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $JAVA_LIB/commons-cli.jar" >&5
-$as_echo_n "checking for $JAVA_LIB/commons-cli.jar... " >&6; }
-if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- test "$cross_compiling" = yes &&
- as_fn_error "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$JAVA_LIB/commons-cli.jar"; then
- eval "$as_ac_File=yes"
-else
- eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_File
- if test "x$as_val" = x""yes; then :
-
-else
- as_fn_error "\"install libcommons-cli-java and define JAVA_LIB to be the root of the installation\"" "$LINENO" 5
-fi
-
-as_ac_File=`$as_echo "ac_cv_file_$JAVA_LIB/commons-logging.jar" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $JAVA_LIB/commons-logging.jar" >&5
-$as_echo_n "checking for $JAVA_LIB/commons-logging.jar... " >&6; }
-if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- test "$cross_compiling" = yes &&
- as_fn_error "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$JAVA_LIB/commons-logging.jar"; then
- eval "$as_ac_File=yes"
-else
- eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_File
- if test "x$as_val" = x""yes; then :
-
-else
- as_fn_error "\"install libcommons-logging-java and define JAVA_LIB to be the root of the installation\"" "$LINENO" 5
-fi
-
-as_ac_File=`$as_echo "ac_cv_file_$JAVA_LIB/log4j-1.2.jar" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $JAVA_LIB/log4j-1.2.jar" >&5
-$as_echo_n "checking for $JAVA_LIB/log4j-1.2.jar... " >&6; }
-if { as_var=$as_ac_File; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- test "$cross_compiling" = yes &&
- as_fn_error "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r "$JAVA_LIB/log4j-1.2.jar"; then
- eval "$as_ac_File=yes"
-else
- eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-eval as_val=\$$as_ac_File
- if test "x$as_val" = x""yes; then :
-
-else
- as_fn_error "\"install liblog4j1.2-java and define JAVA_LIB to be the root of the installation\"" "$LINENO" 5
-fi
-
-# Extract the first word of "ant", so it can be a program name with args.
-set dummy ant; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ANT+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ANT"; then
- ac_cv_prog_ANT="$ANT" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ANT="ant"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_ANT" && ac_cv_prog_ANT="no"
-fi
-fi
-ANT=$ac_cv_prog_ANT
-if test -n "$ANT"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ANT" >&5
-$as_echo "$ANT" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "$ANT" = no ; then
- as_fn_error "could not find ant" "$LINENO" 5
-fi
-# Extract the first word of "jsvc", so it can be a program name with args.
-set dummy jsvc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_JSVC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$JSVC"; then
- ac_cv_prog_JSVC="$JSVC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_JSVC="jsvc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_JSVC" && ac_cv_prog_JSVC="no"
-fi
-fi
-JSVC=$ac_cv_prog_JSVC
-if test -n "$JSVC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JSVC" >&5
-$as_echo "$JSVC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "$JSVC" = no ; then
- as_fn_error "could not find jsvc" "$LINENO" 5
-fi
-
-# Checks for libraries.
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lcrypto" >&5
-$as_echo_n "checking for main in -lcrypto... " >&6; }
-if test "${ac_cv_lib_crypto_main+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcrypto $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-return main ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_crypto_main=yes
-else
- ac_cv_lib_crypto_main=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_main" >&5
-$as_echo "$ac_cv_lib_crypto_main" >&6; }
-if test "x$ac_cv_lib_crypto_main" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBCRYPTO 1
-_ACEOF
-
- LIBS="-lcrypto $LIBS"
-
-else
- as_fn_error "\"could not find SSL development libraries\"" "$LINENO" 5
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lncurses" >&5
-$as_echo_n "checking for main in -lncurses... " >&6; }
-if test "${ac_cv_lib_ncurses_main+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lncurses $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-return main ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_ncurses_main=yes
-else
- ac_cv_lib_ncurses_main=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_main" >&5
-$as_echo "$ac_cv_lib_ncurses_main" >&6; }
-if test "x$ac_cv_lib_ncurses_main" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBNCURSES 1
-_ACEOF
-
- LIBS="-lncurses $LIBS"
-
-else
- as_fn_error "\"could not find ncurses libraries\"" "$LINENO" 5
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpthread" >&5
-$as_echo_n "checking for main in -lpthread... " >&6; }
-if test "${ac_cv_lib_pthread_main+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lpthread $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-
-int
-main ()
-{
-return main ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_pthread_main=yes
-else
- ac_cv_lib_pthread_main=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_main" >&5
-$as_echo "$ac_cv_lib_pthread_main" >&6; }
-if test "x$ac_cv_lib_pthread_main" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBPTHREAD 1
-_ACEOF
-
- LIBS="-lpthread $LIBS"
-
-else
- as_fn_error "\"could not find pthread libraries\"" "$LINENO" 5
-fi
-
-
-# Checks for header files.
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
-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
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-eval as_val=\$$as_ac_Header
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_header in arpa/inet.h fcntl.h inttypes.h mntent.h netdb.h netinet/in.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/statvfs.h sys/time.h syslog.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-eval as_val=\$$as_ac_Header
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-# Checks for archtecture.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if test "${ac_cv_c_bigendian+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_bigendian=unknown
- # See if we're dealing with a universal compiler.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __APPLE_CC__
- not a universal capable compiler
- #endif
- typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
- # Check for potential -arch flags. It is not universal unless
- # there are at least two -arch flags with different values.
- ac_arch=
- ac_prev=
- for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
- if test -n "$ac_prev"; then
- case $ac_word in
- i?86 | x86_64 | ppc | ppc64)
- if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
- ac_arch=$ac_word
- else
- ac_cv_c_bigendian=universal
- break
- fi
- ;;
- esac
- ac_prev=
- elif test "x$ac_word" = "x-arch"; then
- ac_prev=arch
- fi
- done
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test $ac_cv_c_bigendian = unknown; then
- # See if sys/param.h defines the BYTE_ORDER macro.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-
-int
-main ()
-{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
- && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
- && LITTLE_ENDIAN)
- bogus endian macros
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
- not big endian
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
-else
- ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
-
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
- bogus endian macros
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to _BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
-
-int
-main ()
-{
-#ifndef _BIG_ENDIAN
- not big endian
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
-else
- ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # Compile a test program.
- if test "$cross_compiling" = yes; then :
- # Try to guess by grepping values from an object file.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-short int ascii_mm[] =
- { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
- short int ascii_ii[] =
- { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
- int use_ascii (int i) {
- return ascii_mm[i] + ascii_ii[i];
- }
- short int ebcdic_ii[] =
- { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
- short int ebcdic_mm[] =
- { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
- int use_ebcdic (int i) {
- return ebcdic_mm[i] + ebcdic_ii[i];
- }
- extern int foo;
-
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
- ac_cv_c_bigendian=yes
- fi
- if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
- if test "$ac_cv_c_bigendian" = unknown; then
- ac_cv_c_bigendian=no
- else
- # finding both strings is unlikely to happen, but who knows?
- ac_cv_c_bigendian=unknown
- fi
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-
- /* Are we little or big endian? From Harbison&Steele. */
- union
- {
- long int l;
- char c[sizeof (long int)];
- } u;
- u.l = 1;
- return u.c[sizeof (long int) - 1] == 1;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_c_bigendian=no
-else
- ac_cv_c_bigendian=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
- yes)
- as_fn_error "\"big endian architecture is not supported\"" "$LINENO" 5;; #(
- no)
- ;; #(
- universal)
-
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
-
- ;; #(
- *)
- as_fn_error "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
-
-
-# Checks for typedefs, structures, and compiler characteristics.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
-$as_echo_n "checking for inline... " >&6; }
-if test "${ac_cv_c_inline+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
-#endif
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_inline=$ac_kw
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test "$ac_cv_c_inline" != no && break
-done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
-$as_echo "$ac_cv_c_inline" >&6; }
-
-case $ac_cv_c_inline in
- inline | yes) ;;
- *)
- case $ac_cv_c_inline in
- no) ac_val=;;
- *) ac_val=$ac_cv_c_inline;;
- esac
- cat >>confdefs.h <<_ACEOF
-#ifndef __cplusplus
-#define inline $ac_val
-#endif
-_ACEOF
- ;;
-esac
-
-ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t"
-case $ac_cv_c_int32_t in #(
- no|yes) ;; #(
- *)
-
-cat >>confdefs.h <<_ACEOF
-#define int32_t $ac_cv_c_int32_t
-_ACEOF
-;;
-esac
-
-ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t"
-case $ac_cv_c_int64_t in #(
- no|yes) ;; #(
- *)
-
-cat >>confdefs.h <<_ACEOF
-#define int64_t $ac_cv_c_int64_t
-_ACEOF
-;;
-esac
-
-ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
-if test "x$ac_cv_type_pid_t" = x""yes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define pid_t int
-_ACEOF
-
-fi
-
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = x""yes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
-
-fi
-
-ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t"
-case $ac_cv_c_uint16_t in #(
- no|yes) ;; #(
- *)
-
-
-cat >>confdefs.h <<_ACEOF
-#define uint16_t $ac_cv_c_uint16_t
-_ACEOF
-;;
- esac
-
-ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t"
-case $ac_cv_c_uint32_t in #(
- no|yes) ;; #(
- *)
-
-$as_echo "#define _UINT32_T 1" >>confdefs.h
-
-
-cat >>confdefs.h <<_ACEOF
-#define uint32_t $ac_cv_c_uint32_t
-_ACEOF
-;;
- esac
-
-ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t"
-case $ac_cv_c_uint64_t in #(
- no|yes) ;; #(
- *)
-
-$as_echo "#define _UINT64_T 1" >>confdefs.h
-
-
-cat >>confdefs.h <<_ACEOF
-#define uint64_t $ac_cv_c_uint64_t
-_ACEOF
-;;
- esac
-
-ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t"
-case $ac_cv_c_uint8_t in #(
- no|yes) ;; #(
- *)
-
-$as_echo "#define _UINT8_T 1" >>confdefs.h
-
-
-cat >>confdefs.h <<_ACEOF
-#define uint8_t $ac_cv_c_uint8_t
-_ACEOF
-;;
- esac
-
-
-# Checks for library functions.
-for ac_header in vfork.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
-if test "x$ac_cv_header_vfork_h" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_VFORK_H 1
-_ACEOF
-
-fi
-
-done
-
-for ac_func in fork vfork
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test "x$ac_cv_func_fork" = xyes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
-$as_echo_n "checking for working fork... " >&6; }
-if test "${ac_cv_func_fork_works+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_fork_works=cross
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-
- /* By Ruediger Kuhlmann. */
- return fork () < 0;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_fork_works=yes
-else
- ac_cv_func_fork_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
-$as_echo "$ac_cv_func_fork_works" >&6; }
-
-else
- ac_cv_func_fork_works=$ac_cv_func_fork
-fi
-if test "x$ac_cv_func_fork_works" = xcross; then
- case $host in
- *-*-amigaos* | *-*-msdosdjgpp*)
- # Override, as these systems have only a dummy fork() stub
- ac_cv_func_fork_works=no
- ;;
- *)
- ac_cv_func_fork_works=yes
- ;;
- esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
-fi
-ac_cv_func_vfork_works=$ac_cv_func_vfork
-if test "x$ac_cv_func_vfork" = xyes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
-$as_echo_n "checking for working vfork... " >&6; }
-if test "${ac_cv_func_vfork_works+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_vfork_works=cross
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Thanks to Paul Eggert for this test. */
-$ac_includes_default
-#include <sys/wait.h>
-#ifdef HAVE_VFORK_H
-# include <vfork.h>
-#endif
-/* On some sparc systems, changes by the child to local and incoming
- argument registers are propagated back to the parent. The compiler
- is told about this with #include <vfork.h>, but some compilers
- (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a
- static variable whose address is put into a register that is
- clobbered by the vfork. */
-static void
-#ifdef __cplusplus
-sparc_address_test (int arg)
-# else
-sparc_address_test (arg) int arg;
-#endif
-{
- static pid_t child;
- if (!child) {
- child = vfork ();
- if (child < 0) {
- perror ("vfork");
- _exit(2);
- }
- if (!child) {
- arg = getpid();
- write(-1, "", 0);
- _exit (arg);
- }
- }
-}
-
-int
-main ()
-{
- pid_t parent = getpid ();
- pid_t child;
-
- sparc_address_test (0);
-
- child = vfork ();
-
- if (child == 0) {
- /* Here is another test for sparc vfork register problems. This
- test uses lots of local variables, at least as many local
- variables as main has allocated so far including compiler
- temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris
- 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should
- reuse the register of parent for one of the local variables,
- since it will think that parent can't possibly be used any more
- in this routine. Assigning to the local variable will thus
- munge parent in the parent process. */
- pid_t
- p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
- p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
- /* Convince the compiler that p..p7 are live; otherwise, it might
- use the same hardware register for all 8 local variables. */
- if (p != p1 || p != p2 || p != p3 || p != p4
- || p != p5 || p != p6 || p != p7)
- _exit(1);
-
- /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
- from child file descriptors. If the child closes a descriptor
- before it execs or exits, this munges the parent's descriptor
- as well. Test for this by closing stdout in the child. */
- _exit(close(fileno(stdout)) != 0);
- } else {
- int status;
- struct stat st;
-
- while (wait(&status) != child)
- ;
- return (
- /* Was there some problem with vforking? */
- child < 0
-
- /* Did the child fail? (This shouldn't happen.) */
- || status
-
- /* Did the vfork/compiler bug occur? */
- || parent != getpid()
-
- /* Did the file descriptor bug occur? */
- || fstat(fileno(stdout), &st) != 0
- );
- }
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_vfork_works=yes
-else
- ac_cv_func_vfork_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
-$as_echo "$ac_cv_func_vfork_works" >&6; }
-
-fi;
-if test "x$ac_cv_func_fork_works" = xcross; then
- ac_cv_func_vfork_works=$ac_cv_func_vfork
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
-fi
-
-if test "x$ac_cv_func_vfork_works" = xyes; then
-
-$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
-
-else
-
-$as_echo "#define vfork fork" >>confdefs.h
-
-fi
-if test "x$ac_cv_func_fork_works" = xyes; then
-
-$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
-
-fi
-
-# getmntent is in the standard C library on UNICOS, in -lsun on Irix 4,
-# -lseq on Dynix/PTX, -lgen on Unixware.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getmntent" >&5
-$as_echo_n "checking for library containing getmntent... " >&6; }
-if test "${ac_cv_search_getmntent+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char getmntent ();
-int
-main ()
-{
-return getmntent ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' sun seq gen; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_getmntent=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if test "${ac_cv_search_getmntent+set}" = set; then :
- break
-fi
-done
-if test "${ac_cv_search_getmntent+set}" = set; then :
-
-else
- ac_cv_search_getmntent=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getmntent" >&5
-$as_echo "$ac_cv_search_getmntent" >&6; }
-ac_res=$ac_cv_search_getmntent
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
- ac_cv_func_getmntent=yes
-
-$as_echo "#define HAVE_GETMNTENT 1" >>confdefs.h
-
-else
- ac_cv_func_getmntent=no
-fi
-
-
-for ac_header in stdlib.h
-do :
- ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdlib_h" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_STDLIB_H 1
-_ACEOF
-
-fi
-
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
-$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
-if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_malloc_0_nonnull=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *malloc ();
-#endif
-
-int
-main ()
-{
-return ! malloc (0);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_malloc_0_nonnull=yes
-else
- ac_cv_func_malloc_0_nonnull=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
-$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
-if test $ac_cv_func_malloc_0_nonnull = yes; then :
-
-$as_echo "#define HAVE_MALLOC 1" >>confdefs.h
-
-else
- $as_echo "#define HAVE_MALLOC 0" >>confdefs.h
-
- case " $LIBOBJS " in
- *" malloc.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS malloc.$ac_objext"
- ;;
-esac
-
-
-$as_echo "#define malloc rpl_malloc" >>confdefs.h
-
-fi
-
-
-for ac_func in dup2 ftruncate getmntent localtime_r memset mkdir socket strcasecmp strchr strdup strerror strtoul
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-ac_config_files="$ac_config_files Makefile dog/Makefile lib/Makefile sheep/Makefile shepherd/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, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes: double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \.
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- cat confcache >$cache_file
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-:mline
-/\\$/{
- N
- s,\\\n,,
- b mline
-}
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $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}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$?; test $as_status -eq 0 && as_status=1
- if test "$3"; then
- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
- fi
- $as_echo "$as_me: error: $1" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# 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
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in #(
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.64. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet, --silent
- 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
-
-Configuration files:
-$config_files
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.64,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2009 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "dog/Makefile") CONFIG_FILES="$CONFIG_FILES dog/Makefile" ;;
- "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
- "sheep/Makefile") CONFIG_FILES="$CONFIG_FILES sheep/Makefile" ;;
- "shepherd/Makefile") CONFIG_FILES="$CONFIG_FILES shepherd/Makefile" ;;
-
- *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- 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
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp=
- trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
-_ACEOF
-
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\).*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\).*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
-
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
-
- print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
- || as_fn_error "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-
-eval set X " :F $CONFIG_FILES "
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin" \
- || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
- || as_fn_error "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
- case $ac_file in
- -) cat "$tmp/out" && rm -f "$tmp/out";;
- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
- esac \
- || as_fn_error "could not create $ac_file" "$LINENO" 5
- ;;
-
-
-
- esac
-
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# 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 || as_fn_exit $?
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/configure.in b/configure.in
index 47de86d..bfc8d70 100644
--- a/configure.in
+++ b/configure.in
@@ -7,7 +7,6 @@ AC_CONFIG_SRCDIR([lib/net.c])
# Checks for programs.
AC_PROG_CC
-AC_PROG_INSTALL
AC_PROG_MAKE_SET
# Checks for libraries.
diff --git a/dog/Makefile.in b/dog/Makefile.in
deleted file mode 100644
index ab28783..0000000
--- a/dog/Makefile.in
+++ /dev/null
@@ -1,17 +0,0 @@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-
-ANT = env JAVA_HOME=@JAVA_HOME@ JAVA_LIB=@JAVA_LIB@ ant
-
-.PHONY:all
-all:
- @$(ANT)
-
-.PHONY:clean
-clean:
- @$(ANT) clean
-
-.PHONY:install
-install:
- @$(ANT) -Dinstall.dir=$(bindir) install
diff --git a/dog/build.xml b/dog/build.xml
deleted file mode 100644
index bd500db..0000000
--- a/dog/build.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0"?>
-
-<project name="dog" default="jar" basedir=".">
- <property environment="env" />
- <property name="src.dir" location="src"/>
- <property name="conf.dir" location="conf"/>
- <property name="build.dir" location="build"/>
- <property name="install.dir" location="/usr/local/bin"/>
- <property name="jar.file" location="dog.jar"/>
- <property name="bin.file" location="dog"/>
- <property name="doc.dir" location="doc"/>
-
- <path id="dog.classpath">
- <pathelement location="."/>
- <pathelement location="${env.JAVA_LIB}/commons-daemon.jar"/>
- <pathelement location="${env.JAVA_LIB}/commons-cli.jar"/>
- <pathelement location="${env.JAVA_LIB}/commons-logging.jar"/>
- <pathelement location="${env.JAVA_LIB}/jgroups-all.jar"/>
- <pathelement location="${env.JAVA_LIB}/log4j-1.2.jar"/>
- </path>
-
- <target name="init">
- <tstamp/>
- <mkdir dir="${build.dir}"/>
- </target>
-
- <target name="compile" depends="init" description="compile the source">
- <copy todir="${build.dir}">
- <fileset dir="${conf.dir}" includes="*.xml"/>
- </copy>
- <copy file="${conf.dir}/manifest.in" tofile="${conf.dir}/manifest.mf" />
- <replace file="${conf.dir}/manifest.mf" token="@JAVA_LIB@" value="${env.JAVA_LIB}" />
- <copy file="${bin.file}.in" tofile="${bin.file}" />
- <replace file="${bin.file}" token="@JAVA_HOME@" value="${env.JAVA_HOME}" />
- <chmod file="${bin.file}" perm="755" />
- <javac srcdir="${src.dir}" destdir="${build.dir}" debug="true" source="6"
- classpathref="dog.classpath">
- <compilerarg value="-Xlint"/>
- </javac>
- </target>
-
- <target name="jar" depends="compile" description="generate the jar file">
- <jar jarfile="${jar.file}" basedir="${build.dir}"
- manifest="${conf.dir}/manifest.mf"/>
- </target>
-
- <target name="javadoc">
- <delete dir="${doc.dir}" />
- <mkdir dir="${doc.dir}" />
- <javadoc sourcepath="${src.dir}" packagenames="net.osrg.sheepdog.*" destdir="${doc.dir}"
- classpathref="dog.classpath" />
- </target>
-
- <target name="clean" description="clean up">
- <delete dir="${build.dir}"/>
- <delete dir="${doc.dir}"/>
- <delete file="${conf.dir}/manifest.mf"/>
- <delete file="${bin.file}"/>
- <delete file="${jar.file}"/>
- </target>
-
- <target name="install" depends="jar" description="install the program">
- <echo message="install ${bin.file} ${install.dir}" />
- <exec executable="install">
- <arg value="${bin.file}" />
- <arg value="${install.dir}" />
- </exec>
- <copy file="${jar.file}" todir="${install.dir}" preservelastmodified="true" overwrite="true" />
- </target>
-</project>
diff --git a/dog/conf/log4j.xml b/dog/conf/log4j.xml
deleted file mode 100644
index 933932f..0000000
--- a/dog/conf/log4j.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
-
- <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
- <layout class="org.apache.log4j.SimpleLayout" />
- </appender>
-
- <appender name="syslog" class="org.apache.log4j.net.SyslogAppender">
- <param name="SyslogHost" value="localhost" />
- <param name="Header" value="true" />
- <layout class="org.apache.log4j.SimpleLayout" />
- </appender>
-
- <category name="sheepdog" >
- <priority value ="info" />
- <appender-ref ref="stdout" />
- <appender-ref ref="syslog" />
- </category>
-
-</log4j:configuration>
diff --git a/dog/conf/manifest.in b/dog/conf/manifest.in
deleted file mode 100644
index ffc1e09..0000000
--- a/dog/conf/manifest.in
+++ /dev/null
@@ -1,3 +0,0 @@
-Manifest-Version: 1.0
-Main-Class: net.osrg.sheepdog.Sheepdog
-Class-Path: @JAVA_LIB@/jgroups-all.jar @JAVA_LIB@/commons-logging.jar @JAVA_LIB@/log4j-1.2.jar @JAVA_LIB@/commons-cli.jar @JAVA_LIB@/commons-daemon.jar
diff --git a/dog/conf/sd.xml b/dog/conf/sd.xml
deleted file mode 100644
index e69559a..0000000
--- a/dog/conf/sd.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<config>
- <UDP
- mcast_port="45566"
- mcast_addr="228.10.10.10"
- tos="16"
- loopback="false"
- discard_incompatible_packets="true"
- max_bundle_size="64000"
- max_bundle_timeout="30"
- use_incoming_packet_handler="true"
- ip_ttl="2"
- enable_bundling="true"/>
- <PING timeout="2000"
- num_initial_members="3"/>
- <MERGE2 max_interval="10000"
- min_interval="5000"/>
- <FD_SOCK/>
- <FD timeout="10000" max_tries="5" shun="true"/>
- <VERIFY_SUSPECT timeout="1500" />
- <BARRIER />
- <pbcast.NAKACK
- use_mcast_xmit="false" gc_lag="0"
- retransmit_timeout="300,600,1200,2400,4800"
- discard_delivered_msgs="true"/>
- <UNICAST timeout="300,600,1200,2400,3600"/>
- <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
- max_bytes="400000"/>
- <VIEW_SYNC avg_send_interval="60000" />
- <pbcast.GMS print_local_addr="true" join_timeout="30000"
- shun="false"
- view_bundling="true"/>
- <SEQUENCER/>
- <FC max_credits="2000000"
- min_threshold="0.10"/>
- <FRAG2 frag_size="60000"/>
- <pbcast.STATE_TRANSFER />
-</config>
diff --git a/dog/dog.in b/dog/dog.in
deleted file mode 100644
index 1b8c74f..0000000
--- a/dog/dog.in
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-
-JAVA_HOME=@JAVA_HOME@
-
-dog=`readlink -mn $0`
-jarfile=`dirname $dog`/dog.jar
-port=7000
-foreground=0
-
-arg=$*
-
-while [ "$1" != "" ]
-do
- if [ $1 = "-f" -o $1 = "--foreground" ]
- then
- foreground=1
- fi
- if [ $1 = "-p" -o $1 = "--dport" ]
- then
- shift
- port=$1
- fi
- shift
-done
-
-if [ $foreground -gt 0 ]
-then
- java -jar $jarfile $arg
-else
- logfile=/tmp/sheepdog-$port
- jsvc -home $JAVA_HOME -wait 10000 -outfile $logfile.out -errfile $logfile.err -pidfile $logfile.pid -user `whoami` -cp $jarfile net.osrg.sheepdog.Sheepdog $arg
- if [ $? != 0 ]
- then
- # show error messages
- java -jar $jarfile $arg
- fi
-fi
diff --git a/dog/src/net/osrg/sheepdog/ClusterInformation.java b/dog/src/net/osrg/sheepdog/ClusterInformation.java
deleted file mode 100644
index d81d78b..0000000
--- a/dog/src/net/osrg/sheepdog/ClusterInformation.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.io.Serializable;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.TreeSet;
-import java.util.Map.Entry;
-
-public class ClusterInformation implements Serializable {
-
- /**
- *
- */
- private static final long serialVersionUID = -5465560224627172616L;
- public NodeList nodeList;
- private Map<String, Node> locktbl;
- private boolean complete;
- private Node thisNode;
- private boolean initialized;
- private boolean shutdown;
-
- public boolean isComplete() {
- return complete;
- }
-
- public void setComplete(boolean complete) {
- Log.debug("set complete");
- this.complete = complete;
- }
-
- public ClusterInformation(Node thisNode, boolean logging) {
- nodeList = new NodeList();
- locktbl = new HashMap<String, Node>();
- complete = false;
- setInitialized(false);
- startupNodeList = null;
- this.thisNode = thisNode;
- this.shutdown = false;
- }
-
- public int lock(String vdiname, Node node) throws Exception {
- if (locktbl.containsKey(vdiname) && locktbl.get(vdiname) != null) {
- // TODO throw Exception when locking is failed
- return -1;
- }
- locktbl.put(vdiname, node);
- return 0;
- }
-
- public int unlock(String vdiname) throws Exception {
- if (!locktbl.containsKey(vdiname) || locktbl.get(vdiname) == null) {
- // TODO throw Exception when locking is failed
- return -1;
- }
- locktbl.put(vdiname, null);
- return 0;
- }
-
- public void join(Node node) {
- nodeList.add(node);
- }
-
- public void leave(Node node) {
- nodeList.remove(node);
- }
-
- public void merge(ClusterInformation ci) {
- if (!ci.isComplete()) {
- Log.error("unexpected error");
- return;
- }
-
- setInitialized(ci.isInitialized());
- locktbl = ci.getLockTable();
- nodeList = ci.nodeList;
- complete = true;
- }
-
-
- public Map<String, Node> getLockTable() {
- return locktbl;
- }
-
- public NodeList getNodeList() {
- if (isInitialized()) {
- return nodeList;
- } else {
- TreeSet<Node> set = new TreeSet<Node>();
- set.add(thisNode);
- NodeList nl = new NodeList(0, set);
- return nl;
- }
- }
-
- public ByteBuffer encodeLockTbl() {
- ByteBuffer buf = ByteBuffer.allocate(lockTblSize());
- buf.order(ByteOrder.LITTLE_ENDIAN);
-
- for (Entry<String, Node> ent : locktbl.entrySet()) {
- String name = ent.getKey();
- Node node = ent.getValue();
- if (node == null) {
- continue;
- }
- for (int i = 0; i < 32; i++) {
- if (i < name.length()) {
- buf.put((byte) name.charAt(i));
- } else {
- buf.put((byte) 0);
- }
- }
- buf.put(node.toBuffer());
- for (int i = 0; i < 4; i++) {
- buf.put((byte) 0); // padding
- }
- }
- buf.flip();
- return buf;
- }
-
- public int lockTblSize() {
- return 56 * locktbl.size();
- }
-
- public boolean isInitialized() {
- return initialized;
- }
-
- public void addStartupNodeList(NodeList nl, long ctime) {
- startupNodeList = nl;
- this.ctime = ctime;
- }
-
- private NodeList startupNodeList;
- private long ctime;
-
- public NodeList getStartupNodeList() {
- return startupNodeList;
- }
-
- public void setInitialized(boolean initialized) {
- this.initialized = initialized;
- }
-
- public void setShutdown(boolean shutdown) {
- this.shutdown = shutdown;
- }
-
- public boolean isShutdown() {
- return shutdown;
- }
-
- public void setCtime(long ctime) {
- this.ctime = ctime;
- }
-
- public long getCtime() {
- return ctime;
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/Connection.java b/dog/src/net/osrg/sheepdog/Connection.java
deleted file mode 100644
index 6d44a40..0000000
--- a/dog/src/net/osrg/sheepdog/Connection.java
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.SocketChannel;
-
-import net.osrg.sheepdog.headers.Request;
-import net.osrg.sheepdog.headers.Response;
-
-public class Connection {
-
- private SelectionKey key;
- private STATE rxState;
- private Request request;
- private ByteBuffer rxHeader;
- private ByteBuffer rxData;
- private STATE txState;
- private Response response;
- private ByteBuffer txHeader;
- private ByteBuffer txData;
- private ConnectionCallback callback;
-
- private int uid;
-
- enum STATE {
- IO_HEADER, IO_DATA, IO_END, IO_CLOSE
- }
-
- public Connection(SelectionKey k, int u, ConnectionCallback f) {
- key = k;
- uid = u;
- callback = f;
- request = null;
- response = null;
- rxState = STATE.IO_HEADER;
- rxHeader = ByteBuffer.allocate(Request.HEADER_SIZE);
- rxHeader.order(ByteOrder.LITTLE_ENDIAN);
- rxData = null;
- txState = STATE.IO_HEADER;
- response = null;
- txHeader = null;
- txData = null;
- }
-
- public void setRxOff() {
- int ops = key.interestOps();
- key.interestOps(ops & ~SelectionKey.OP_READ);
- }
-
- public void setRxOn() {
- rxState = STATE.IO_HEADER;
- rxHeader = ByteBuffer.allocate(Request.HEADER_SIZE);
- rxHeader.order(ByteOrder.LITTLE_ENDIAN);
- rxData = null;
-
- int ops = key.interestOps();
- key.interestOps(ops | SelectionKey.OP_READ);
- }
-
- public void setTxOff() {
- int ops = key.interestOps();
- key.interestOps(ops & ~SelectionKey.OP_WRITE);
- }
-
- public void setTxOn(ByteBuffer data) {
- setTxOn(OpCode.OP_UNKNOWN, data);
- }
-
- public void setTxOn(OpCode opcode, ByteBuffer data) {
- setTxOn(new Response(request, opcode.getValue(), data, 0));
- }
-
- public void setTxOn(Response resp) {
- txState = STATE.IO_HEADER;
- this.response = resp;
- txHeader = resp.getHeader();
- txData = resp.getData();
-
- int ops = key.interestOps();
- key.interestOps(ops | SelectionKey.OP_WRITE);
- }
-
- public boolean isConnDead() {
- return rxState == STATE.IO_CLOSE || txState == STATE.IO_CLOSE;
- }
-
- private void rx(ByteBuffer buf, STATE nextState) throws IOException {
- ReadableByteChannel sc = (ReadableByteChannel) key.channel();
- if (sc.read(buf) == -1) {
- Log.debug("The channel has reached end-of-stream. ");
- // TODO remove from HashMap
- throw new IOException("The channel has reached end-of-stream. ");
- }
- if (!buf.hasRemaining()) {
- rxState = nextState;
- }
- }
-
- private void tx(ByteBuffer buf, STATE nextState) throws IOException {
- SocketChannel sc = (SocketChannel) key.channel();
- sc.write(buf);
- if (!buf.hasRemaining()) {
- txState = nextState;
- }
- }
-
- public void rxHandler() {
- try {
- switch (rxState) {
- case IO_HEADER:
- rx(rxHeader, STATE.IO_DATA);
- if (rxHeader.hasRemaining()) {
- break;
- }
- rxHeader.position(0);
- request = new Request(rxHeader);
- if (request.getDataLength() == 0 || request.getFlags() != 1) {
- rxState = STATE.IO_END;
- break;
- }
- rxData = ByteBuffer.allocate(request.getDataLength());
- rxData.order(ByteOrder.LITTLE_ENDIAN);
- break;
- case IO_DATA:
- rx(rxData, STATE.IO_END);
- break;
- default:
- Log.error("BUG: unknown state " + rxState);
- break;
- }
- } catch (IOException e) {
- rxState = STATE.IO_CLOSE;
- }
-
- try {
- if (rxState == STATE.IO_END) {
- if (request.getDataLength() != 0 && request.getFlags() == 1) {
- rxData.position(0);
- request.setData(rxData);
- }
- setRxOff();
- callback.rxDone(key, request.getOpcode(), request, uid);
- } else if (rxState == STATE.IO_CLOSE) {
- key.channel().close();
- key.cancel();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- public void txHandler() {
- try {
- switch (txState) {
- case IO_HEADER:
- tx(txHeader, STATE.IO_DATA);
- if (txHeader.hasRemaining()) {
- break;
- }
- txHeader.position(0);
- if (response.getDataLength() == 0) {
- txState = STATE.IO_END;
- break;
- }
- break;
- case IO_DATA:
- tx(txData, STATE.IO_END);
- break;
- default:
- Log.error("BUG: unknown state " + txState);
- break;
- }
- } catch (IOException e) {
- txState = STATE.IO_CLOSE;
- }
- try {
- if (txState == STATE.IO_END) {
- setTxOff();
- setRxOn();
- } else if (txState == STATE.IO_CLOSE) {
- key.channel().close();
- key.cancel();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/ConnectionCallback.java b/dog/src/net/osrg/sheepdog/ConnectionCallback.java
deleted file mode 100644
index f9116d0..0000000
--- a/dog/src/net/osrg/sheepdog/ConnectionCallback.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.io.IOException;
-import java.nio.channels.SelectionKey;
-
-import net.osrg.sheepdog.headers.Request;
-
-public interface ConnectionCallback {
- void rxDone(SelectionKey key, OpCode op, Request req, int uid)
- throws IOException;
-}
diff --git a/dog/src/net/osrg/sheepdog/DirEntry.java b/dog/src/net/osrg/sheepdog/DirEntry.java
deleted file mode 100644
index 5ccf3de..0000000
--- a/dog/src/net/osrg/sheepdog/DirEntry.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-public class DirEntry {
-
- private static final int DIR_ALIGN = 8;
-
- public DirEntry(long oid, int tag, byte flags, String name
- , int epoch) {
- this.oid = oid;
- this.tag = tag;
- this.flags = flags;
- this.epoch = epoch;
- this.padding = 0;
- this.name = name;
- this.nameLen = (short) name.length();
- }
-
- public DirEntry(ByteBuffer buf) {
- oid = buf.getLong();
- tag = buf.getInt();
- nameLen = buf.getShort();
- type = buf.get();
- flags = buf.get();
- epoch = buf.getInt();
- padding = buf.getInt();
- int len = roundup(nameLen, DIR_ALIGN);
- byte[] bs = new byte[nameLen];
- for (int i = 0; i < len; i++) {
- if (i < bs.length) {
- bs[i] = buf.get();
- } else {
- buf.get();
- }
- }
- name = new String(bs);
- }
-
- public ByteBuffer toBuffer() {
- ByteBuffer buf = ByteBuffer.allocate(1024 * 1024); // TODO support larger size
- buf.order(ByteOrder.LITTLE_ENDIAN);
- buf.putLong(oid);
- buf.putInt(tag);
- buf.putShort(nameLen);
- buf.put(type);
- buf.put(flags);
- buf.putInt(epoch);
- buf.putInt(padding);
- int len = roundup(nameLen, DIR_ALIGN);
- byte[] bs = name.getBytes();
- for (int i = 0; i < len; i++) {
- if (i < bs.length) {
- buf.put(bs[i]);
- } else {
- buf.put((byte) 0);
- }
- }
- buf.flip();
- return buf;
- }
-
- private static int roundup(int x, int y) {
- return ((((x) + ((y) - 1)) / (y)) * (y));
- }
-
- public long getOid() {
- return oid;
- }
-
- public int getTag() {
- return tag;
- }
-
- public short getNameLen() {
- return nameLen;
- }
-
- public byte getType() {
- return type;
- }
-
- public byte getFlags() {
- return flags;
- }
-
- public void setFlags(byte flags) {
- this.flags = flags;
- }
-
- public void setEpoch(int epoch) {
- this.epoch = epoch;
- }
-
- public int getEpoch() {
- return epoch;
- }
-
- public String getName() {
- return name;
- }
-
- private long oid;
- private int tag;
- private short nameLen;
- private byte type;
- private byte flags;
- private int epoch;
- private int padding;
- private String name;
-}
diff --git a/dog/src/net/osrg/sheepdog/Inode.java b/dog/src/net/osrg/sheepdog/Inode.java
deleted file mode 100644
index 9ff4946..0000000
--- a/dog/src/net/osrg/sheepdog/Inode.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-public class Inode {
-
- static final int MAX_CHILDREN = 1024;
- static final int MAX_DATA_OBJS = (1 << 18);
- static final int DATA_OBJ_SIZE = (1 << 22);
- static final int SIZE = 48 + 8 * MAX_CHILDREN + 8 * MAX_DATA_OBJS + 4
- * MAX_DATA_OBJS;
-
- public Inode(int copies, long oid, long size, long baseOid) {
- this.oid = oid;
- this.vdiSize = size;
- this.blockSize = DATA_OBJ_SIZE;
- long tm = System.currentTimeMillis();
- this.ctime = ((tm / 1000) << 32) | ((tm % 1000) * 1000000);
- this.nrCopies = copies;
- this.parentOid = baseOid;
- childOid = new long[MAX_CHILDREN];
- dataOid = new long[MAX_DATA_OBJS];
- epoch = new int[MAX_DATA_OBJS];
- }
-
- public Inode(ByteBuffer buf) {
- oid = buf.getLong();
- ctime = buf.getLong();
- vdiSize = buf.getLong();
- blockSize = buf.getLong();
- copyPolicy = buf.getInt();
- nrCopies = buf.getInt();
- parentOid = buf.getLong();
- childOid = new long[MAX_CHILDREN];
- for (int i = 0; i < childOid.length; i++) {
- childOid[i] = buf.getLong();
- }
- dataOid = new long[MAX_DATA_OBJS];
- for (int i = 0; i < dataOid.length; i++) {
- dataOid[i] = buf.getLong();
- }
- epoch = new int[MAX_DATA_OBJS];
- for (int i = 0; i < epoch.length; i++) {
- epoch[i] = buf.getInt();
- }
- }
-
- public ByteBuffer toBuffer() {
- ByteBuffer buf = ByteBuffer.allocate(SIZE);
- buf.order(ByteOrder.LITTLE_ENDIAN);
- buf.putLong(oid);
- buf.putLong(ctime);
- buf.putLong(vdiSize);
- buf.putLong(blockSize);
- buf.putInt(copyPolicy);
- buf.putInt(nrCopies);
- buf.putLong(parentOid);
- for (int i = 0; i < childOid.length; i++) {
- buf.putLong(childOid[i]);
- }
- for (int i = 0; i < dataOid.length; i++) {
- buf.putLong(dataOid[i]);
- }
- for (int i = 0; i < epoch.length; i++) {
- buf.putInt(epoch[i]);
- }
- buf.flip();
- return buf;
- }
-
- public static int getMaxChildren() {
- return MAX_CHILDREN;
- }
-
- public static int getMaxDataObjs() {
- return MAX_DATA_OBJS;
- }
-
- public long getOid() {
- return oid;
- }
-
- public long getCtime() {
- return ctime;
- }
-
- public long getVdiSize() {
- return vdiSize;
- }
-
- public long getBlockSize() {
- return blockSize;
- }
-
- public int getCopyPolicy() {
- return copyPolicy;
- }
-
- public int getNrCopies() {
- return nrCopies;
- }
-
- public long getParentOid() {
- return parentOid;
- }
-
- public long[] getChildOid() {
- return childOid;
- }
-
- public long[] getDataOid() {
- return dataOid;
- }
-
- public void setEpoch(int[] epoch) {
- this.epoch = epoch;
- }
-
- public int[] getEpoch() {
- return epoch;
- }
-
- private long oid;
- private long ctime;
- private long vdiSize;
- private long blockSize;
- private int copyPolicy;
- private int nrCopies;
- private long parentOid;
- private long[] childOid;
- private long[] dataOid;
- private int[] epoch;
-}
diff --git a/dog/src/net/osrg/sheepdog/Log.java b/dog/src/net/osrg/sheepdog/Log.java
deleted file mode 100644
index f52996a..0000000
--- a/dog/src/net/osrg/sheepdog/Log.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.net.SyslogAppender;
-
-public final class Log {
- private static Logger logger = Logger.getLogger("sheepdog");
-
- private Log() {
- }
-
- public static Logger getLogger() {
- return logger;
- }
-
- public static void setLevel(Level level) {
- logger.setLevel(Level.DEBUG);
- }
-
- private static String format(Object obj) {
- if (obj == null) {
- obj = "null";
- }
- StackTraceElement[] stack = (new Throwable()).getStackTrace();
- String str = obj.toString();
- String thisFile = stack[0].getFileName();
- for (int i = 0; i < stack.length; i++) {
- StackTraceElement frame = stack[i];
- if (!frame.getFileName().equals(thisFile)) {
- return "(" + frame.getFileName() + ":" + frame.getLineNumber()
- + ") " + str;
- }
- }
- return str;
- }
-
- public static void debug(Object obj) {
- if (!logger.isDebugEnabled()) {
- return;
- }
- logger.debug(format(obj));
- }
-
- public static void debug(Object obj, java.lang.Throwable t) {
- if (!logger.isDebugEnabled()) {
- return;
- }
- logger.debug(format(obj), t);
- }
-
- public static void error(Object obj) {
- logger.error(format(obj));
- }
-
- public static void error(Object obj, java.lang.Throwable t) {
- logger.error(format(obj), t);
- }
-
- public static void useSyslog(String syslogHost) {
- SyslogAppender appender = (SyslogAppender) logger.getAppender("syslog");
- appender.setSyslogHost(syslogHost);
- logger.removeAppender("stdout");
- }
-
- public static void useStdout() {
- logger.removeAppender("syslog");
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/Master.java b/dog/src/net/osrg/sheepdog/Master.java
deleted file mode 100644
index c03f46b..0000000
--- a/dog/src/net/osrg/sheepdog/Master.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.nio.channels.Channel;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.Selector;
-import java.nio.channels.SocketChannel;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import net.osrg.sheepdog.headers.Request;
-import net.osrg.sheepdog.headers.Response;
-import net.osrg.sheepdog.messages.SheepdogMessage;
-import net.osrg.sheepdog.messages.LeaveMessage;
-
-public class Master implements Runnable, ConnectionCallback {
-
- private Node thisNode;
- private Selector selector;
- private boolean isMaster;
- private NodeList nodeList;
- // TODO too many HashMap
- private Map<Node, SelectionKey> connectedMap;
- private Map<Node, Integer> keepAliveMap;
- private Map<SelectionKey, Node> rconnectedMap;
- private Set<SelectionKey> ackedMap;
- private Map<SelectionKey, Connection> connMap;
- private int epoch;
- private boolean epochUpdated;
- private Sheepdog sd;
- private Lock lock;
- private Condition notMaster;
- private int nrSubmasters;
- private boolean shutdown;
-
- public static final int KEEPCNT = 15;
- public static final int KEEPIDLE = 1000;
-
- public void start(NodeList nl, int nrSubmasters, boolean shutdown) {
- this.nrSubmasters = nrSubmasters;
- this.shutdown = shutdown;
- lock.lock();
- try {
- Log.debug(nl);
- nodeList = nl;
- if (!isMaster) {
- isMaster = true;
- try {
- selector = Selector.open();
- } catch (IOException e) {
- e.printStackTrace();
- }
- notMaster.signal();
- }
- } finally {
- lock.unlock();
- }
- }
-
- public void stop() {
- lock.lock();
- try {
- isMaster = false;
- } finally {
- lock.unlock();
- }
- }
-
- public Master(Node thisNode, Sheepdog s) {
- this.thisNode = thisNode;
- sd = s;
- epoch = -1;
- epochUpdated = false;
- nodeList = new NodeList();
- connectedMap = new HashMap<Node, SelectionKey>();
- keepAliveMap = new HashMap<Node, Integer>();
- rconnectedMap = new HashMap<SelectionKey, Node>();
- connMap = new HashMap<SelectionKey, Connection>();
- ackedMap = new HashSet<SelectionKey>();
- isMaster = false;
- selector = null;
- lock = new ReentrantLock();
- notMaster = lock.newCondition();
- this.nrSubmasters = 0;
- this.shutdown = false;
- }
-
- private void leave(Node host) {
- Log.debug(host);
-
- SheepdogMessage sm = new LeaveMessage(thisNode, 0, host);
- sd.addMessage(sm);
- }
-
- private void timeout() {
- // timeout
- nodeList.setMasterNode(thisNode);
- if (epoch < nodeList.getEpoch()) {
- epoch = nodeList.getEpoch();
- epochUpdated = true;
- Log.debug("epoch is updated. new epoch is " + epoch);
- } else {
- epochUpdated = false;
- }
- Set<Node> nodeSet = nodeList.getNodeSet();
- for (Node node : nodeSet) {
- try {
- if (connectedMap.get(node) != null) {
- SelectionKey key = connectedMap.get(node);
- if (connMap.get(key).isConnDead()) {
- connectedMap.remove(node);
- keepAliveMap.remove(node);
- rconnectedMap.remove(key);
- connMap.remove(key);
- ackedMap.remove(key);
- } else {
- continue;
- }
- }
- InetSocketAddress address;
- address = new InetSocketAddress(node.getInetAddress(), node
- .getDogPort());
- SocketChannel ch = SocketChannel.open();
- ch.configureBlocking(false);
- ch.connect(address);
-
- SelectionKey key = ch.register(selector,
- SelectionKey.OP_CONNECT);
- connMap.put(key, new Connection(key, node.hashCode(), this));
- rconnectedMap.put(key, node);
- } catch (Exception e) {
- Log.error("Exception caught: " + e);
- SelectionKey key = connectedMap.get(node);
- connectedMap.remove(node);
- keepAliveMap.remove(node);
- rconnectedMap.remove(key);
- connMap.remove(key);
- ackedMap.remove(key);
- continue;
- }
- }
-
- Iterator<Node> itr = connectedMap.keySet().iterator();
- while (itr.hasNext()) {
- Node node = itr.next();
- SelectionKey key = connectedMap.get(node);
- if (node != null && ackedMap.contains(key)) {
- ackedMap.remove(key); // reset
- Connection conn = connMap.get(key);
-
- Log.debug("send probe to " + rconnectedMap.get(key));
-
- // TODO implement KeepAlive header class
- if (epochUpdated) {
- Response rsp = new Response(null, OpCode.OP_UPDATE_NODELIST
- .getValue(), nodeList.toLogData(), 0);
- rsp.setId(nrSubmasters);
- conn.setTxOn(rsp);
- } else {
- Response rsp = new Response(null, OpCode.OP_NOP.getValue(), null, 0);
- if (shutdown) {
- rsp.setId(1);
- } else {
- rsp.setId(0);
- }
- conn.setTxOn(rsp);
- }
- keepAliveMap.put(node, 0);
- continue;
- }
-
- keepAliveMap.put(node, keepAliveMap.get(node) + 1);
- if (keepAliveMap.get(node) < KEEPCNT) {
- Log.debug(node + " may down: " + keepAliveMap.get(node));
- continue;
- }
- Channel c = key.channel();
- try {
- c.close();
- } catch (IOException e) {
- Log.error("failed to close: ", e);
- }
- Log.debug("remove node");
- if (nodeSet.contains(node)) {
- leave(node);
- }
- rconnectedMap.remove(key);
- itr.remove();
- keepAliveMap.remove(node);
- connMap.remove(key);
- ackedMap.remove(key);
- }
- }
-
- private void stopMaster() {
- try {
- if (selector != null) {
- Iterator<SelectionKey> itr = selector.keys().iterator();
- while (itr.hasNext()) {
- SelectionKey key = itr.next();
- Channel c = key.channel();
- Log.debug("Closing " + c.toString());
- try {
- c.close();
- } catch (IOException e) {
- Log.error("failed to close: ", e);
- }
- Node node = rconnectedMap.remove(key);
- Set<Node> nodeSet = nodeList.getNodeSet();
- if (nodeSet != null && nodeSet.contains(node)) {
- leave(node);
- }
- connectedMap.remove(node);
- keepAliveMap.remove(node);
- connMap.remove(key);
- ackedMap.remove(key);
- }
- selector.close();
- selector = null;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void run() {
- for (;;) {
- try {
- lock.lock();
- try {
- while (!isMaster) {
- stopMaster();
- notMaster.await();
- }
- } finally {
- lock.unlock();
- }
-
- while (selector.select(KEEPIDLE) > 0) {
- // Get "selected" objects
- Iterator<SelectionKey> itr = selector.selectedKeys()
- .iterator();
- while (itr.hasNext()) {
- SelectionKey key = itr.next();
- itr.remove();
-
- if (!key.isValid()) {
- continue;
- }
-
- try {
- if (key.isConnectable()) {
- SocketChannel ch = (SocketChannel) key
- .channel();
- ch.finishConnect();
- connectedMap.put(rconnectedMap.get(key), key);
- keepAliveMap.put(rconnectedMap.get(key), 0);
- ackedMap.add(key);
- Log.debug("connected: " + rconnectedMap.get(key));
-
- Connection conn = connMap.get(key);
-
- key.interestOps(0); // remove OP_CONNECT
- Response rsp = new Response(null, OpCode.OP_UPDATE_NODELIST.getValue(),
- nodeList.toLogData(), 0);
- rsp.setId(nrSubmasters);
- conn.setTxOn(rsp);
-
- Log.debug("send probe to " + rconnectedMap.get(key));
- } else if (key.isWritable()) {
- connMap.get(key).txHandler();
- } else if (key.isReadable()) {
- Log.debug("ack from "
- + rconnectedMap.get(key));
- connMap.get(key).rxHandler();
- }
- } catch (IOException e) {
- Log.debug("remove node: " + e + " " + rconnectedMap.get(key));
- Node node = rconnectedMap.remove(key);
- if (nodeList.getNodeSet().contains(node)) {
- leave(node);
- }
- SocketChannel ch = (SocketChannel) key.channel();
- ch.close();
- connectedMap.remove(node);
- keepAliveMap.remove(node);
- rconnectedMap.remove(key);
- connMap.remove(key);
- ackedMap.remove(key);
- }
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- timeout();
- }
- }
-
- @Override
- public void rxDone(SelectionKey key, OpCode op, Request req, int uid)
- throws IOException {
- ackedMap.add(key);
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/MasterGroup.java b/dog/src/net/osrg/sheepdog/MasterGroup.java
deleted file mode 100644
index 5a109a0..0000000
--- a/dog/src/net/osrg/sheepdog/MasterGroup.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-import java.util.Vector;
-
-import net.osrg.sheepdog.headers.Response;
-import net.osrg.sheepdog.messages.MasterChangedMessage;
-import net.osrg.sheepdog.messages.SheepdogMessage;
-
-import org.jgroups.Address;
-import org.jgroups.JChannel;
-import org.jgroups.Message;
-import org.jgroups.ReceiverAdapter;
-import org.jgroups.View;
-
-public class MasterGroup extends ReceiverAdapter {
- private Node thisNode;
- private Sheepdog sd;
- private JChannel jchannel;
- private ClusterInformation ci;
- private int nrSubmasters;
- private Queue<SheepdogMessage> pendingMessages;
- private Master master;
-
- public enum ROLE {
- MASTER, SUBMASTER, SLAVE
- };
-
- private ROLE role = ROLE.SLAVE;
-
- public MasterGroup(Node thisNode, Master master, Sheepdog sd, JChannel jch) {
- this.thisNode = thisNode;
- pendingMessages = new LinkedList<SheepdogMessage>();
- this.sd = sd;
- this.master = master;
- jchannel = jch;
- initialize();
- this.nrSubmasters = 0;
- }
-
- public void initialize() {
- role = ROLE.SLAVE;
- ci = new ClusterInformation(thisNode, true);
- }
-
- @Override
- public synchronized void receive(Message msg) {
- try {
- SheepdogMessage sm = (SheepdogMessage) msg.getObject();
- Log.debug("receive start: class = " + sm.getClass().toString()
- + ", isFlushed = " + sm.isFlushed());
- if (sm.isFlushed()) {
- if (pendingMessages.peek() != null) {
- if (pendingMessages.peek().getMessageId() == sm.getMessageId()) {
- pendingMessages.remove();
- }
- }
- if (!ci.isShutdown()) {
- sm.updateClusterInfo(ci);
- }
- if (role == ROLE.MASTER) {
- master.start(ci.getNodeList(), nrSubmasters, ci.isShutdown());
- }
- if (thisNode.equals(sm.getFrom())) {
- Response rsp = sm.reply(ci);
- if (rsp != null) {
- sd.setResult(sm.getMessageId(), rsp);
- }
- sd.disconnectDone(role);
- }
- } else {
- pendingMessages.add(sm);
- if (role == ROLE.MASTER) {
- if (!ci.isShutdown()) {
- sm.updateSuperObject(ci);
- }
- sm.setFlushed(true);
- sd.addMessage(sm);
- } else if (thisNode.equals(sm.getFrom()) && sm instanceof MasterChangedMessage) {
- role = ROLE.MASTER;
- while (pendingMessages.peek() != null) {
- SheepdogMessage pendingMsg = pendingMessages.poll();
- if (!ci.isShutdown()) {
- pendingMsg.updateSuperObject(ci);
- }
- pendingMsg.setFlushed(true);
- sd.addMessage(pendingMsg);
- }
- }
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
-
- @Override
- public void suspect(Address address) {
- Log.debug("suspect: " + address);
- }
-
- @Override
- public void block() {
- Log.debug("blocked");
- }
-
- @Override
- public synchronized void viewAccepted(View view) {
- Log.debug("new master groups: " + view.getMembers());
- Log.debug("local address: " + jchannel.getLocalAddress());
-
- try {
- Log.debug("viewAccepted: " + view);
- Log.debug("mbrs: " + view.size());
- Address localAddr = jchannel.getLocalAddress();
- if (view.containsMember(localAddr)) {
- Vector<Address> mbrs = view.getMembers();
- if (mbrs.get(0).equals(localAddr)) {
- MasterChangedMessage msg = new MasterChangedMessage(thisNode, 0);
- sd.addMessage(msg);
- ci.setComplete(true);
- Log.debug("role = MASTER. ");
- nrSubmasters = view.size();
- master.start(ci.getNodeList(), nrSubmasters, ci.isShutdown());
- return;
- }
- List<Address> submasters = mbrs.subList(1, Math.min(
- mbrs.size(), sd.getLimitMbrs()));
- Log.debug("new submasters: " + submasters);
- for (Address addr : submasters) {
- if (addr.equals(localAddr)) {
- role = ROLE.SUBMASTER;
- Log.debug("role = SUBMASTER. ");
- master.stop();
- return;
- }
- }
- role = ROLE.SLAVE;
- Log.debug("role = SLAVE. ");
- master.stop();
- }
- } catch (Exception e) {
- // TODO define more suitable Exception (i.e. SheepdogException)
- e.printStackTrace();
- }
- }
-
-}
diff --git a/dog/src/net/osrg/sheepdog/Node.java b/dog/src/net/osrg/sheepdog/Node.java
deleted file mode 100644
index 261dced..0000000
--- a/dog/src/net/osrg/sheepdog/Node.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.io.Serializable;
-import java.util.Arrays;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-
-public class Node implements Serializable, Comparable<Node> {
-
- /**
- *
- */
- public static final int NODE_SIZE = 20;
-
- private static final long serialVersionUID = 346960641984069648L;
- private byte[] id;
- private InetAddress address;
- private int sheepPort;
- private int dogPort;
-
- public Node(long oid) {
- MessageDigest md;
- try {
- md = MessageDigest.getInstance("SHA1");
- ByteBuffer buf = ByteBuffer.allocate(8);
- buf.order(ByteOrder.LITTLE_ENDIAN);
- buf.putLong(oid);
- buf.flip();
- md.update(buf.array());
- this.id = md.digest();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- this.id = null;
- }
- }
-
- public Node(String h, int dPort, int sPort) throws UnknownHostException {
- this(InetAddress.getByName(h), dPort, sPort);
- }
-
- public Node(InetAddress address, int dPort, int sPort) {
- this.address = address;
- this.dogPort = dPort;
- this.sheepPort = sPort;
- try {
- MessageDigest md = MessageDigest.getInstance("SHA1");
- md.update(address.getAddress());
- md.update((byte) dPort);
- md.update((byte) (dPort >> 8));
- id = md.digest();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- id = null;
- }
- }
-
- public byte[] getId() {
- return id;
- }
-
- public InetAddress getInetAddress() {
- return address;
- }
-
- public int getDogPort() {
- return dogPort;
- }
-
- public int getSheepPort() {
- return sheepPort;
- }
-
- public ByteBuffer toBuffer() {
- ByteBuffer buf = ByteBuffer.allocate(NODE_SIZE);
- buf.order(ByteOrder.LITTLE_ENDIAN);
-
- byte[] addr = address.getAddress();
- if (addr.length == 4) { // IPv4
- for (int i = 0; i < 12; i++) {
- buf.put((byte) 0);
- }
- buf.put(addr);
- } else if (addr.length == 16) { // IPv6
- buf.put(addr);
- } else {
- Log.error("Unknown protocol");
- for (int i = 0; i < 16; i++) {
- buf.put((byte) 0);
- }
- }
-
- buf.putShort((short) sheepPort);
- buf.putShort((short) dogPort);
- buf.flip();
- return buf;
- }
-
- public static Node fromBuffer(ByteBuffer buf) {
- try {
- byte [] addr = new byte[16];
- buf.get(addr, 0, 12);
- if (Arrays.equals(addr, new byte[16])) {
- // IPv4
- addr = new byte[4];
- buf.get(addr);
- } else {
- // IPv6
- buf.get(addr, 12, 4);
- }
- InetAddress address = InetAddress.getByAddress(addr);
- int sheepPort = buf.getShort();
- int dogPort = buf.getShort();
- return new Node(address, dogPort, sheepPort);
- } catch (UnknownHostException e) {
- e.printStackTrace();
- return null;
- }
- }
-
- @Override
- public String toString() {
- String hostname = address.getHostAddress();
- return hostname + ":" + dogPort + ":" + sheepPort;
- }
-
- @Override
- public boolean equals(Object o) {
- if (!(o instanceof Node)) {
- return false;
- }
- Node node = (Node) o;
- if (node == null) {
- return false;
- }
- return (compareTo(node) == 0);
- }
-
- @Override
- public int hashCode() {
- if (id == null) {
- return 0;
- }
- return id.hashCode();
- }
-
- @Override
- public int compareTo(Node arg0) {
- byte[] as = this.id;
- byte[] bs = arg0.id;
-
- for (int i = 0; i < 20; i++) {
- int a = as[i];
- int b = bs[i];
- if (a < 0) {
- a += 256;
- }
- if (b < 0) {
- b += 256;
- }
- if (a > b) {
- return 1;
- } else if (a < b) {
- return -1;
- }
- }
- return 0;
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/NodeList.java b/dog/src/net/osrg/sheepdog/NodeList.java
deleted file mode 100644
index f96e8fb..0000000
--- a/dog/src/net/osrg/sheepdog/NodeList.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.io.Serializable;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.Arrays;
-import java.util.Set;
-import java.util.TreeSet;
-
-public class NodeList implements Serializable {
-
- /**
- *
- */
- private static final long serialVersionUID = -4381317706988377585L;
- public static final int NODE_LIST_ENTRY_SIZE = 40;
-
- public void setMasterNode(Node node) {
- masterIndex = getIndex(node);
- }
-
- public void setMasterIndex(int masterIndex) {
- this.masterIndex = masterIndex;
- }
-
- private int masterIndex;
-
- public NodeList() {
- this(0, new TreeSet<Node>());
- }
-
- @SuppressWarnings("unchecked")
- public NodeList(int v, TreeSet<Node> set) {
- masterIndex = -1;
- epoch = v;
- nodeSet = (TreeSet<Node>) set.clone();
- }
-
- public int countNode() {
- return nodeSet.size();
- }
-
- public int getEpoch() {
- return epoch;
- }
-
- public void setEpoch(int epoch) {
- this.epoch = epoch;
- }
-
- public Set<Node> getNodeSet() {
- return nodeSet;
- }
-
- public int getMasterIndex() {
- return masterIndex;
- }
-
- public int getIndex(Node node) {
- return Arrays.binarySearch(nodeSet.toArray(), node);
- }
-
- public ByteBuffer toRspData() {
- ByteBuffer buf = ByteBuffer
- .allocate(NODE_LIST_ENTRY_SIZE * countNode());
- buf.order(ByteOrder.LITTLE_ENDIAN);
- for (Node node : nodeSet) {
- buf.put(Arrays.copyOf(node.getId(), 20));
- buf.put(node.toBuffer());
- }
- buf.flip();
- return buf;
- }
-
- public ByteBuffer toLogData() {
- int nrNodes = nodeSet.size();
- ByteBuffer buf = ByteBuffer.allocate(16 + nrNodes * Node.NODE_SIZE);
- buf.order(ByteOrder.LITTLE_ENDIAN);
-
- buf.putInt(epoch);
- buf.putInt(nrNodes);
- buf.putInt(masterIndex);
- buf.putInt(0);
- for (Node node : nodeSet) {
- buf.put(node.toBuffer());
- }
- buf.flip();
- return buf;
- }
-
- public static NodeList fromLogData(ByteBuffer buf) {
- int epoch = buf.getInt();
- int nrNodes = buf.getInt();
- int masterIndex = buf.getInt();
- buf.getInt();
- TreeSet<Node> nodeSet = new TreeSet<Node>();
- for (int i = 0; i < nrNodes; i++) {
- ByteBuffer nodeBuf = ByteBuffer.allocate(Node.NODE_SIZE);
- nodeBuf.order(ByteOrder.LITTLE_ENDIAN);
- buf.get(nodeBuf.array());
- nodeSet.add(Node.fromBuffer(nodeBuf));
- }
- NodeList nodeList = new NodeList(epoch, nodeSet);
- nodeList.setMasterIndex(masterIndex);
- return nodeList;
- }
-
- @Override
- public String toString() {
- return "[epoch: " + epoch + ", map: " + nodeSet + "]";
- }
-
- @Override
- public boolean equals(Object o) {
- if (!(o instanceof NodeList)) {
- return false;
- }
- NodeList nl = (NodeList) o;
- if (nl == null) {
- return false;
- }
- if (this.epoch != nl.epoch) {
- return false;
- }
- return this.nodeSet.equals(nl.nodeSet);
- }
-
- @Override
- public int hashCode() {
- return nodeSet.hashCode() + epoch;
- }
-
- public boolean containsAll(NodeList nl) {
- if (nl == null) {
- return false;
- }
- for (Node node : nl.getNodeSet()) {
- if (!this.nodeSet.contains(node)) {
- return false;
- }
- }
- return true;
- }
-
- public boolean add(Node node) {
- boolean ret = nodeSet.add(node);
- if (ret) {
- epoch++;
- }
- return ret;
- }
-
- public boolean remove(Node node) {
- boolean ret = nodeSet.remove(node);
- if (ret) {
- epoch++;
- }
- return ret;
- }
-
- private int epoch;
- private TreeSet<Node> nodeSet;
-}
diff --git a/dog/src/net/osrg/sheepdog/NodeLogOperator.java b/dog/src/net/osrg/sheepdog/NodeLogOperator.java
deleted file mode 100644
index d9c0a04..0000000
--- a/dog/src/net/osrg/sheepdog/NodeLogOperator.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.nio.ByteBuffer;
-import java.util.TreeSet;
-
-import net.osrg.sheepdog.headers.NodeResponse;
-import net.osrg.sheepdog.headers.Request;
-
-public class NodeLogOperator {
-
- public NodeLogOperator() {
- }
-
- public int updateNodeLog(int oldEpoch, int newEpoch, TreeSet<Node> oldSet, TreeSet<Node> newSet) {
- NodeList nl;
- ObjectOperator objectOperator = new ObjectOperator();
- ByteBuffer object;
- SuperObject superObject;
-
- try {
- // TODO use defaultNrCopies in the super block
- Log.debug("read the super object");
- nl = new NodeList(oldEpoch, oldSet);
- object = objectOperator.readObject(nl,
- ObjectOperator.DIRECTORY_OID, -1,
- SuperObject.SUPER_OBJ_SIZE + SuperObject.NODE_LOG_SIZE
- + 1024 * 1024);
- superObject = new SuperObject(object);
- nl = new NodeList(newEpoch, newSet);
- superObject.addNodeList(nl);
- nl = new NodeList(oldEpoch, oldSet);
- objectOperator.createObject(nl, ObjectOperator.DIRECTORY_OID,
- superObject.getDefaultNrCopies(), superObject.toBuffer());
- } catch (SheepdogException oe) {
- OpCode opcode = oe.getOpcode();
- if (opcode == OpCode.OP_READ_OBJ) {
- Log.error("failed to read the old log");
- return SheepdogException.DIR_READ;
- } else {
- Log.error("failed to write the new log");
- return SheepdogException.DIR_WRITE;
- }
- }
- return SheepdogException.SUCCESS;
- }
-
- public int updateEpoch(int epoch, TreeSet<Node> set, long vdiOid, int vdiEpoch) {
- NodeList nl;
- ObjectOperator objectOperator = new ObjectOperator();
- ByteBuffer object;
- SuperObject superObject;
-
- try {
- // TODO use defaultNrCopies in the super block
- Log.debug("read the super object");
- nl = new NodeList(epoch, set);
- object = objectOperator.readObject(nl,
- ObjectOperator.DIRECTORY_OID, -1,
- SuperObject.SUPER_OBJ_SIZE + SuperObject.NODE_LOG_SIZE
- + 1024 * 1024);
- superObject = new SuperObject(object);
- int res = superObject.setEpoch(vdiOid, vdiEpoch);
- if (res != SheepdogException.SUCCESS) {
- return res;
- }
- nl = new NodeList(epoch, set);
- objectOperator.createObject(nl, ObjectOperator.DIRECTORY_OID,
- superObject.getDefaultNrCopies(), superObject.toBuffer());
- } catch (SheepdogException oe) {
- OpCode opcode = oe.getOpcode();
- if (opcode == OpCode.OP_READ_OBJ) {
- Log.error("failed to read the old log");
- return SheepdogException.DIR_READ;
- } else {
- Log.error("failed to write the new log");
- return SheepdogException.DIR_WRITE;
- }
- }
- return SheepdogException.SUCCESS;
- }
-
- public NodeResponse readPastNodeList(OpCode op, int epoch, TreeSet<Node> set,
- int reqEpoch, Request req) {
- NodeList nl;
- ObjectOperator objectOperator = new ObjectOperator();
- ByteBuffer object;
- SuperObject superObject;
-
- try {
- // TODO use defaultNrCopies in the super block
- Log.debug("read the super object");
- nl = new NodeList(epoch, set);
- object = objectOperator.readObject(nl,
- ObjectOperator.DIRECTORY_OID, -1,
- SuperObject.SUPER_OBJ_SIZE + SuperObject.NODE_LOG_SIZE
- + 1024 * 1024);
- superObject = new SuperObject(object);
- NodeList nodeList = superObject.getNodeList(reqEpoch);
- ByteBuffer data;
- int nrNodes = 0;
- if (nodeList == null) {
- data = null;
- } else {
- data = nodeList.toRspData();
- nrNodes = nodeList.countNode();
- }
- NodeResponse rsp = new NodeResponse(req, op.getValue(), data, 0);
- rsp.setNrNodes(nrNodes);
- rsp.setLocalIdx(-1);
- rsp.setMasterIdx(-1);
- if (nodeList == null) {
- rsp.setResult(SheepdogException.NO_EPOCH);
- } else {
- rsp.setResult(SheepdogException.SUCCESS);
- }
- return rsp;
- } catch (SheepdogException oe) {
- int result = oe.getErrorCode();
- Log.error("failed to read the old log");
- NodeResponse rsp = new NodeResponse(req, op.getValue(), null, 0);
- if (result == SheepdogException.NO_OBJ) {
- rsp.setResult(SheepdogException.NO_SUPER_OBJ);
- } else {
- rsp.setResult(SheepdogException.DIR_READ);
- }
- return rsp;
- }
- }
-
- public int mkfs(int epoch, TreeSet<Node> set, int nrCopies) {
- NodeList nl;
- SuperObject superObject;
- ObjectOperator objectOperator = new ObjectOperator();
-
- try {
- Log.debug("create the super object (mkfs)");
- superObject = new SuperObject(nrCopies);
- nl = new NodeList(epoch + 1, set);
- superObject.addNodeList(nl);
- nl = new NodeList(epoch, set);
- objectOperator.createObject(nl, ObjectOperator.DIRECTORY_OID, nrCopies,
- superObject.toBuffer());
- return SheepdogException.SUCCESS;
- } catch (SheepdogException e) {
- e.printStackTrace();
- Log.error("failed to make fs");
- return SheepdogException.DIR_WRITE;
- }
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/ObjectOperator.java b/dog/src/net/osrg/sheepdog/ObjectOperator.java
deleted file mode 100644
index 46f34b6..0000000
--- a/dog/src/net/osrg/sheepdog/ObjectOperator.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.net.InetSocketAddress;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.channels.SocketChannel;
-import java.nio.channels.WritableByteChannel;
-import java.util.Arrays;
-import java.util.List;
-import java.util.LinkedList;
-import java.io.IOException;
-
-import net.osrg.sheepdog.headers.ObjectRequest;
-import net.osrg.sheepdog.headers.ObjectResponse;
-import net.osrg.sheepdog.headers.Request;
-import net.osrg.sheepdog.headers.Response;
-import static net.osrg.sheepdog.OpCode.OP_REMOVE_OBJ;
-import static net.osrg.sheepdog.OpCode.OP_READ_OBJ;
-import static net.osrg.sheepdog.OpCode.OP_WRITE_OBJ;
-import static net.osrg.sheepdog.OpCode.OP_CREATE_AND_WRITE_OBJ;
-
-public class ObjectOperator {
-
- public static final long DIRECTORY_OID = 0;
-
- public ObjectOperator() {
- }
-
- public ByteBuffer readObject(NodeList nl, long oid, int copies, int size) throws SheepdogException {
- ObjectRequest req = new ObjectRequest();
- req.setOid(oid);
- req.setNodeList(nl);
- req.setOpcode(OP_READ_OBJ);
- req.setCopies(copies);
- req.setDataLength(size);
- if (nl != null) {
- req.setEpoch(nl.getEpoch());
- } else {
- Log.error("cannot get node list");
- req.setEpoch(0);
- }
- return doOperation(req);
- }
-
- public ByteBuffer createObject(NodeList nl, long oid, int copies,
- ByteBuffer buf) throws SheepdogException {
- return writeObject(nl, OP_CREATE_AND_WRITE_OBJ, oid, copies, buf);
- }
-
- public ByteBuffer writeObject(NodeList nl, long oid, int copies,
- ByteBuffer buf) throws SheepdogException {
- return writeObject(nl, OP_WRITE_OBJ, oid, copies, buf);
- }
-
- private ByteBuffer writeObject(NodeList nl, OpCode opcode, long oid,
- int copies, ByteBuffer buf) throws SheepdogException {
- ObjectRequest req = new ObjectRequest();
- req.setOid(oid);
- req.setNodeList(nl);
- req.setOpcode(opcode);
- req.setCopies(copies);
- req.setDataLength(buf.remaining());
- req.setData(buf);
- req.setFlags(Request.FLAG_CMD_WRITE);
- if (nl != null) {
- req.setEpoch(nl.getEpoch());
- } else {
- Log.error("cannot get node list");
- req.setEpoch(0);
- }
- return doOperation(req);
- }
-
- public ByteBuffer removeObject(NodeList nl, NodeList maskNodeList,
- long oid, int copies) throws SheepdogException {
- ObjectRequest req = new ObjectRequest();
- req.setOid(oid);
- req.setNodeList(nl);
- req.setMaskNodeList(maskNodeList);
- req.setOpcode(OP_REMOVE_OBJ);
- req.setCopies(copies);
- if (nl != null) {
- req.setEpoch(nl.getEpoch());
- } else {
- Log.error("cannot get node list");
- req.setEpoch(0);
- }
- return doOperation(req);
- }
-
- private Node objToSheep(NodeList nodeList, long oid, int idx) {
- Node[] nodeArray = nodeList.getNodeSet().toArray(new Node[0]);
- Node dummyNode = new Node(oid);
- int index = Arrays.binarySearch(nodeArray, dummyNode);
- if (index < 0) {
- index = -index - 1;
- }
- return nodeArray[(index + idx) % nodeList.countNode()];
- }
-
- private List<Node> objToSheeps(NodeList nodeList, long oid, int nrCopies) {
- return objToSheeps(nodeList, oid, nrCopies, null);
- }
-
- private List<Node> objToSheeps(NodeList nodeList, long oid, int nrCopies, List<Node> masks) {
- List<Node> list = new LinkedList<Node>();
- if (nodeList == null) {
- return list;
- }
- for (int i = 0; i < nrCopies; i++) {
- Node node = objToSheep(nodeList, oid, i);
- if (masks == null || !masks.contains(node)) {
- list.add(node);
- }
- }
- return list;
- }
-
- private void doRead(ReadableByteChannel ch, ByteBuffer buf)
- throws IOException {
- while (buf.hasRemaining()) {
- ch.read(buf);
- }
- }
-
- private void doWrite(WritableByteChannel ch, ByteBuffer buf)
- throws IOException {
- while (buf.hasRemaining()) {
- ch.write(buf);
- }
- }
-
- private synchronized ByteBuffer doOperation(ObjectRequest req) throws SheepdogException {
- NodeList nodeList = req.getNodeList();
- NodeList maskNodeList = req.getMaskNodeList();
- int nrCopies;
- long oid = req.getOid();
- OpCode opcode = req.getOpcode();
- if (req.getData() != null) {
- req.getData().mark();
- }
- Log.debug("req.getCopies() = " + req.getCopies());
- nrCopies = req.getCopies();
- if (nrCopies < 0 || nrCopies > nodeList.countNode()) {
- nrCopies = nodeList.countNode();
- }
-
- ByteBuffer rspData = null;
-
- List<Node> targetNodes;
- if (maskNodeList != null) {
- List<Node> maskNodes = objToSheeps(maskNodeList, oid, nrCopies);
- targetNodes = objToSheeps(nodeList, oid, nrCopies, maskNodes);
- } else {
- targetNodes = objToSheeps(nodeList, oid, nrCopies);
- }
- int result = SheepdogException.SUCCESS;
- String errMsg = null;
- Log.debug("targetNodes = " + targetNodes);
- for (Node node : targetNodes) {
- try {
- InetSocketAddress address;
- address = new InetSocketAddress(node.getInetAddress(), node
- .getSheepPort());
- SocketChannel ch = SocketChannel.open();
- ch.connect(address);
- if (req.getData() != null) {
- req.getData().reset();
- }
- doWrite(ch, req.toBuffer());
- ByteBuffer buf;
- if ((req.getFlags() & Request.FLAG_CMD_WRITE) == Request.FLAG_CMD_WRITE) {
- buf = ByteBuffer.allocate(Response.HEADER_SIZE);
- } else {
- buf = ByteBuffer.allocate(Response.HEADER_SIZE
- + req.getDataLength());
- }
- buf.order(ByteOrder.LITTLE_ENDIAN);
- buf.limit(Response.HEADER_SIZE);
- doRead(ch, buf);
- buf.flip();
- ObjectResponse rsp = new ObjectResponse(buf);
- if ((req.getFlags() & Response.FLAG_CMD_WRITE) != Response.FLAG_CMD_WRITE) {
- buf.mark();
- buf.limit(Response.HEADER_SIZE + rsp.getDataLength());
- doRead(ch, buf);
- buf.reset();
- rsp.setData(buf);
- }
- if (opcode == OpCode.OP_READ_OBJ || result == SheepdogException.SUCCESS) {
- result = rsp.getResult();
- }
- if (rsp.getResult() != SheepdogException.SUCCESS) {
- errMsg = "Error: nodeList = " + nodeList
- + ", maskNodeList = " + maskNodeList
- + ", target = " + node
- + ", op = " + opcode
- + ", oid = " + oid
- + ", code = " + rsp.getResult();
- Log.error(errMsg);
- continue;
- }
-
- rspData = ByteBuffer.allocate(rsp.getDataLength());
- rspData.order(ByteOrder.LITTLE_ENDIAN);
- rspData.put(rsp.getData());
- rspData.flip();
-
- ch.close();
- if (opcode == OpCode.OP_READ_OBJ) {
- break;
- }
- } catch (IOException e) {
- errMsg = "cannot access to object " + oid
- + ": " + e.getLocalizedMessage();
- Log.error(errMsg);
- result = SheepdogException.EIO;
- }
- }
- if (result != SheepdogException.SUCCESS) {
- throw new SheepdogException(result, oid, opcode, errMsg);
- }
- return rspData;
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/OpCode.java b/dog/src/net/osrg/sheepdog/OpCode.java
deleted file mode 100644
index cbf7cc5..0000000
--- a/dog/src/net/osrg/sheepdog/OpCode.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.io.Serializable;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-public enum OpCode implements Serializable {
- OP_UNKNOWN((byte) 0x00),
-
- OP_CREATE_AND_WRITE_OBJ((byte) 0x01),
- OP_REMOVE_OBJ((byte) 0x02),
- OP_READ_OBJ((byte) 0x03),
- OP_WRITE_OBJ((byte) 0x04),
- OP_SYNC_OBJ((byte) 0x05),
- OP_APPEND_OBJ((byte) 0x06),
-
- OP_NEW_VDI((byte) 0x11),
- OP_DEL_VDI((byte) 0x12),
- OP_GET_NODE_NAME((byte) 0x13),
- OP_GET_MASTER_TID((byte) 0x14),
- OP_LOCK_VDI((byte) 0x16),
- OP_RELEASE_VDI((byte) 0x17),
- OP_GET_VDI_INFO((byte) 0x18),
- OP_GET_NODE_LIST((byte) 0x19),
- OP_GET_VM_LIST((byte) 0x20),
- OP_MAKE_FS((byte) 0x21),
- OP_UPDATE_EPOCH((byte) 0x22),
- OP_GET_EPOCH((byte) 0x23),
- OP_SHUTDOWN((byte) 0x24),
-
- OP_JOIN((byte) 0x81),
- OP_LEAVE((byte) 0x82),
- OP_NOP((byte) 0x86),
- OP_REMOVE_NODE((byte) 0x87),
- OP_UPDATE_NODELIST((byte) 0x88);
-
- private OpCode(byte v) {
- value = v;
- }
-
- private byte value;
-
- private static final Map<Byte, OpCode> REVERSE_DICTIONARY;
- static {
- Map<Byte, OpCode> map = new HashMap<Byte, OpCode>();
- for (OpCode elem : OpCode.values()) {
- map.put(elem.value, elem);
- }
- REVERSE_DICTIONARY = Collections.unmodifiableMap(map);
- }
-
- public byte getValue() {
- return value;
- }
-
- public static OpCode fromValue(byte v) {
- return REVERSE_DICTIONARY.get(v);
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/Sheepdog.java b/dog/src/net/osrg/sheepdog/Sheepdog.java
deleted file mode 100644
index 9716b08..0000000
--- a/dog/src/net/osrg/sheepdog/Sheepdog.java
+++ /dev/null
@@ -1,762 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.UnknownHostException;
-import java.nio.ByteBuffer;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.Selector;
-import java.nio.channels.ServerSocketChannel;
-import java.nio.channels.SocketChannel;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.TreeSet;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.Executor;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-import net.osrg.sheepdog.MasterGroup.ROLE;
-import net.osrg.sheepdog.headers.NodeRequest;
-import net.osrg.sheepdog.headers.NodeResponse;
-import net.osrg.sheepdog.headers.ObjectRequest;
-import net.osrg.sheepdog.headers.Request;
-import net.osrg.sheepdog.headers.Response;
-import net.osrg.sheepdog.headers.VdiRequest;
-import net.osrg.sheepdog.messages.DelVdiMessage;
-import net.osrg.sheepdog.messages.GetVdiInfoMessage;
-import net.osrg.sheepdog.messages.GetVmListMessage;
-import net.osrg.sheepdog.messages.JoinMessage;
-import net.osrg.sheepdog.messages.LeaveMessage;
-import net.osrg.sheepdog.messages.MakeFsMessage;
-import net.osrg.sheepdog.messages.ReleaseVdiMessage;
-import net.osrg.sheepdog.messages.RequestClusterInfoMessage;
-import net.osrg.sheepdog.messages.SheepdogMessage;
-import net.osrg.sheepdog.messages.NewVdiMessage;
-import net.osrg.sheepdog.messages.ShutdownMessage;
-import net.osrg.sheepdog.messages.UpdateEpochMessage;
-
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.GnuParser;
-import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
-import org.apache.commons.daemon.Daemon;
-import org.apache.commons.daemon.DaemonContext;
-import org.apache.log4j.Level;
-import org.jgroups.Channel;
-import org.jgroups.ChannelClosedException;
-import org.jgroups.ChannelException;
-import org.jgroups.ChannelNotConnectedException;
-import org.jgroups.JChannel;
-import org.jgroups.Message;
-import org.jgroups.ReceiverAdapter;
-import org.jgroups.conf.ConfiguratorFactory;
-import org.jgroups.conf.ProtocolData;
-import org.jgroups.conf.ProtocolParameter;
-import org.jgroups.conf.ProtocolStackConfigurator;
-import org.jgroups.conf.XmlConfigurator;
-
-class JGroupsConnector implements Runnable {
- private JChannel jch;
- private Sheepdog sd;
- private MasterGroup mg;
- private Lock lock;
- private Condition connected;
-
- public JGroupsConnector(Sheepdog sd, MasterGroup mg, JChannel channel) {
- this.sd = sd;
- this.mg = mg;
- jch = channel;
- lock = new ReentrantLock();
- connected = lock.newCondition();
- }
-
- public void connect() {
- lock.lock();
- try {
- connected.signal();
- } finally {
- lock.unlock();
- }
- }
-
- public void disconnect() {
- lock.lock();
- try {
- jch.disconnect();
- } finally {
- lock.unlock();
- }
- }
-
- @Override
- public void run() {
- try {
- for (;;) {
- lock.lock();
- try {
- while (jch.isConnected()) {
- connected.await();
- }
- } finally {
- lock.unlock();
- }
- mg.initialize();
- jch.connect("Sheepdog cluster");
- // TODO if I am SLAVE and there are too many
- // members, disconnect and sleep
- sd.connectDone();
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
-}
-
-public class Sheepdog implements ConnectionCallback, Daemon, Runnable {
-
- public static final int DEFAULT_LIMIT_MBRS = 6;
- private int limitMbrs;
-
- public int getLimitMbrs() {
- return limitMbrs;
- }
-
- public void setLimitMbrs(int limitMbrs) {
- this.limitMbrs = limitMbrs;
- }
-
- private Node thisNode;
- private JChannel channel;
-
- private HashMap<Integer, SelectionKey> keyMap;
- private NodeList currentNodeList;
-
- public NodeList getNodeList() {
- return currentNodeList;
- }
-
- private Selector selector;
- private JGroupsConnector connector;
-
- public static final int DEFAULT_DOG_PORT = 7000;
- public static final int DEFAULT_SHEEP_PORT = 10095;
- public static final int DEFAULT_MCAST_PORT = 45566;
- public static final String DEFAULT_CONF_FILE = "sd.xml";
- private boolean shutdown;
-
- private BlockingQueue<SheepdogMessage> msgQueue;
- private boolean connected;
-
- public void connectDone() {
- try {
- SheepdogMessage sm;
- sm = new RequestClusterInfoMessage(thisNode, thisNode.hashCode(), channel.getLocalAddress());
- groupMsgCount++;
- channel.send(new Message(null, null, sm));
- // ms_key.interestOps(SelectionKey.OP_READ);
- lock.lock();
- try {
- connected = true;
- notConnected.signalAll();
- doneSignal.countDown();
- } finally {
- lock.unlock();
- }
- } catch (ChannelNotConnectedException e) {
- e.printStackTrace();
- } catch (ChannelClosedException e) {
- e.printStackTrace();
- }
- }
-
- public void disconnectDone(ROLE role) {
- lock.lock();
- try {
- groupMsgCount--;
- if (role == ROLE.SLAVE && groupMsgCount <= 0) {
- connector.disconnect();
- Log.debug("disconnect");
- // ms_key.interestOps(0);
- connected = false;
- }
- } finally {
- lock.unlock();
- }
- }
-
- private void accept(SelectionKey key) throws IOException {
- ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
- SocketChannel sc = ssc.accept();
- sc.configureBlocking(false);
- // register new socket to the selector
- SelectionKey sk = sc.register(selector, SelectionKey.OP_READ);
- int uid = sk.hashCode();
- sk.attach(new Connection(sk, uid, this));
- keyMap.put(uid, sk);
- }
-
- public static void main(String[] argv) {
- Sheepdog sd = new Sheepdog();
- try {
- sd.init(argv);
- sd.start();
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- Log.debug("exit");
- }
-
- private int groupMsgCount = 0;
-
- public void addMessage(SheepdogMessage sm) {
- try {
- msgQueue.put(sm);
- connector.connect();
- } catch (InterruptedException e) {
- // TODO auto generated
- e.printStackTrace();
- }
- }
-
- public void setResult(int uid, Response rsp) {
- SelectionKey sk = keyMap.get(uid);
-
- sk = keyMap.get(uid);
- if (sk == null) {
- return; // TODO
- }
- Connection conn = (Connection) sk.attachment();
- if (currentNodeList != null) {
- rsp.setEpoch(currentNodeList.getEpoch());
- } else {
- rsp.setEpoch(0);
- }
- conn.setTxOn(rsp);
- selector.wakeup();
- }
-
- private NodeResponse readNodeList(NodeRequest req, int uid) {
- NodeResponse response = null;
- int requestEpoch = req.getRequestEpoch();
- NodeList nodeList = currentNodeList;
-
- if (nodeList.getEpoch() == 0 || doneSignal.getCount() > 0) {
- // start up
- TreeSet<Node> set = new TreeSet<Node>();
- set.add(thisNode);
- nodeList = new NodeList(0, set);
- }
-
- if (requestEpoch != 0) {
- int epoch = nodeList.getEpoch();
- if (epoch != 0) {
- TreeSet<Node> set = (TreeSet<Node>) nodeList.getNodeSet();
- NodeLogOperator operator = new NodeLogOperator();
- return operator.readPastNodeList(OpCode.OP_GET_NODE_LIST, epoch,
- set, requestEpoch, req);
- }
- response = new NodeResponse(req, OpCode.OP_GET_NODE_LIST.getValue(), null, 0);
- response.setResult(SheepdogException.STARTUP);
- } else {
- response = new NodeResponse(req, OpCode.OP_GET_NODE_LIST.getValue(), nodeList.toRspData(), 0);
- response.setResult(SheepdogException.SUCCESS);
- }
- response.setNrNodes(nodeList.countNode());
- response.setLocalIdx(nodeList.getIndex(thisNode));
- response.setMasterIdx(nodeList.getMasterIndex());
- return response;
- }
-
- @Override
- public void rxDone(SelectionKey key, OpCode op, Request req, int uid)
- throws IOException {
- Connection conn = (Connection) key.attachment();
- Log.debug("ioDone: uid = " + uid + ", cmd = " + op);
-
- SheepdogMessage sm;
- String vdiName;
- VdiRequest vdiReq;
-
- switch (op) {
- case OP_NEW_VDI:
- case OP_DEL_VDI:
- case OP_LEAVE:
- case OP_LOCK_VDI:
- case OP_RELEASE_VDI:
- case OP_GET_VDI_INFO:
- case OP_GET_VM_LIST:
- case OP_MAKE_FS:
- case OP_UPDATE_EPOCH:
- int currentEpoch = currentNodeList.getEpoch();
- if (shutdown) {
- Response rsp = new Response();
- rsp.setResult(SheepdogException.SHUTDOWN);
- rsp.setEpoch(0);
- conn.setTxOn(rsp);
- return;
- }
- if (doneSignal.getCount() > 0 || currentEpoch == 0
- && (op != OpCode.OP_MAKE_FS)) {
- Response rsp = new Response();
- rsp.setResult(SheepdogException.STARTUP);
- rsp.setEpoch(0);
- conn.setTxOn(rsp);
- return;
- }
- if (req.getEpoch() < currentEpoch) {
- Response rsp = new Response();
- rsp.setResult(SheepdogException.OLD_NODE_VER);
- rsp.setEpoch(currentEpoch);
- conn.setTxOn(rsp);
- return;
- } else if (req.getEpoch() > currentEpoch) {
- Response rsp = new Response();
- rsp.setResult(SheepdogException.NEW_NODE_VER);
- rsp.setEpoch(currentEpoch);
- conn.setTxOn(rsp);
- return;
- }
- break;
- default:
- break;
- }
-
- try {
- switch (op) {
- case OP_NEW_VDI:
- vdiReq = new VdiRequest(req);
- vdiName = new String(vdiReq.getData().array());
- vdiName = vdiName.trim(); // remove NULL characters
- sm = new NewVdiMessage(thisNode, vdiName, vdiReq.getBaseOid(),
- vdiReq.getTag(), vdiReq.getVdiSize(),
- vdiReq.getFlags(), uid);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_DEL_VDI:
- sm = new DelVdiMessage(thisNode, uid);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_LEAVE:
- sm = new LeaveMessage(thisNode, uid, thisNode);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_LOCK_VDI:
- vdiReq = new VdiRequest(req);
- vdiName = new String(vdiReq.getData().array());
- vdiName = vdiName.trim(); // remove NULL characters
- sm = new GetVdiInfoMessage(thisNode, vdiName, vdiReq
- .getBaseOid(), vdiReq.getTag(), vdiReq.getVdiSize(),
- vdiReq.getFlags(), uid, true);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_RELEASE_VDI:
- vdiName = new String(req.getData().array());
- vdiName = vdiName.trim(); // remove NULL characters
- sm = new ReleaseVdiMessage(thisNode, uid, vdiName);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_GET_VDI_INFO:
- vdiReq = new VdiRequest(req);
- vdiName = new String(vdiReq.getData().array());
- vdiName = vdiName.trim(); // remove NULL characters
- sm = new GetVdiInfoMessage(thisNode, vdiName, vdiReq
- .getBaseOid(), vdiReq.getTag(), vdiReq.getVdiSize(),
- vdiReq.getFlags(), uid, false);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_GET_EPOCH:
- vdiReq = new VdiRequest(req);
- sm = new GetVdiInfoMessage(thisNode, null, vdiReq
- .getBaseOid(), vdiReq.getTag(), vdiReq.getVdiSize(),
- vdiReq.getFlags(), uid, false);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_GET_VM_LIST:
- sm = new GetVmListMessage(thisNode, uid);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_MAKE_FS:
- // TODO do not use ObjectRequest here
- ObjectRequest objReq = new ObjectRequest(req);
- sm = new MakeFsMessage(thisNode, objReq.getCopies(), uid);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_UPDATE_EPOCH:
- vdiReq = new VdiRequest(req);
- sm = new UpdateEpochMessage(thisNode, vdiReq.getBaseOid(),
- vdiReq.getEpoch(), uid);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_SHUTDOWN:
- sm = new ShutdownMessage(thisNode, uid);
- msgQueue.put(sm);
- connector.connect();
- break;
- case OP_NOP:
- shutdown = (req.getId() > 0);
- conn.setTxOn(ByteBuffer.allocate(0));
- break;
- case OP_UPDATE_NODELIST:
- currentNodeList = NodeList.fromLogData(req.getData());
- Log.debug(currentNodeList);
- conn.setTxOn(ByteBuffer.allocate(0));
- int nrSubmasters = req.getId(); // TODO
- if (nrSubmasters < this.limitMbrs) {
- connector.connect();
- }
- break;
- case OP_GET_NODE_LIST:
- NodeResponse nodeResp = readNodeList(new NodeRequest(req), uid);
- if (currentNodeList != null) {
- if (doneSignal.getCount() > 0) {
- nodeResp.setEpoch(0);
- } else {
- nodeResp.setEpoch(currentNodeList
- .getEpoch());
- }
- } else {
- nodeResp.setEpoch(0);
- }
- conn.setTxOn(nodeResp);
- break;
- default:
- Log.error("Unknown command: " + op);
- break;
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void destroy() {
- // TODO Auto-generated method stub
- }
-
- private boolean checkJgroups(ProtocolStackConfigurator conf) {
- final Lock lock = new ReentrantLock();
- final Condition notConnected = lock.newCondition();
- try {
- JChannel channel = new JChannel(conf);
- channel.setReceiver(new ReceiverAdapter() {
- public void receive(Message msg) {
- try {
- lock.lock();
- notConnected.signal();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- lock.unlock();
- }
- }
- });
- lock.lock();
- channel.connect("jgroups test " + thisNode.toString());
- channel.send(new Message(null, null, null));
- long nanosTimeout = notConnected.awaitNanos(3000000000L);
- channel.close();
- return (nanosTimeout > 0);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- lock.unlock();
- }
- return false;
- }
-
- private void init(String[] argv) {
- Options options = new Options();
- options.addOption("f", "foreground", false, "run in the foreground");
- options.addOption("c", "conf", true, "config file");
- options.addOption("n", true, "number of master group");
- options.addOption("p", "dport", true, "dog port");
- options.addOption("s", "sport", true, "sheep port");
- options.addOption("m", "mport", true, "multicast port");
- options.addOption("a", true, "bind_addr");
- options.addOption("d", "debug", false, "debug option");
- options.addOption("h", "help", false, "help");
- options.addOption("4", "ipv4", false, "force IPv4");
- options.addOption("6", "ipv6", false, "force IPv6");
- options.addOption("r", "syslog", true, "send logs to the syslog server");
-
- CommandLineParser parser = new GnuParser();
- CommandLine cl = null;
- int dPort = DEFAULT_DOG_PORT;
- int sPort = DEFAULT_SHEEP_PORT;
- int mPort = DEFAULT_MCAST_PORT;
- int limitMbrs = DEFAULT_LIMIT_MBRS;
- String confFile = DEFAULT_CONF_FILE;
-
- lock = new ReentrantLock();
- notConnected = lock.newCondition();
-
- try {
- cl = parser.parse(options, argv);
- if (cl.hasOption("h")) {
- HelpFormatter formatter = new HelpFormatter();
- formatter.printHelp("dog", options, true);
- System.exit(1);
- }
- if (cl.hasOption("c")) {
- confFile = cl.getOptionValue("c");
- }
- if (cl.hasOption("n")) {
- limitMbrs = Integer.parseInt(cl.getOptionValue("n"));
- }
- if (cl.hasOption("p")) {
- dPort = Integer.parseInt(cl.getOptionValue("p"));
- }
- if (cl.hasOption("s")) {
- sPort = Integer.parseInt(cl.getOptionValue("s"));
- }
- if (cl.hasOption("m")) {
- mPort = Integer.parseInt(cl.getOptionValue("m"));
- }
- if (cl.hasOption("a")) {
- System.setProperty("jgroups.bind_addr", cl.getOptionValue("a"));
- }
- if (cl.hasOption("4")) {
- System.setProperty("java.net.preferIPv4Stack", "true");
- }
- if (cl.hasOption("6")) {
- System.setProperty("java.net.preferIPv6Stack", "true");
- }
- if (cl.hasOption("r")) {
- Log.useSyslog(cl.getOptionValue("r"));
- } else {
- Log.useStdout();
- }
- if (cl.hasOption("d")) {
- Log.setLevel(Level.DEBUG);
- }
- } catch (ParseException e) {
- HelpFormatter formatter = new HelpFormatter();
- System.err.println(e.getLocalizedMessage());
- formatter.printHelp("dog", options, true);
- System.exit(1);
- } catch (NumberFormatException e) {
- HelpFormatter formatter = new HelpFormatter();
- System.err.println(e.getLocalizedMessage() + ": must be a number");
- formatter.printHelp("dog", options, true);
- System.exit(1);
- }
-
- try {
- thisNode = new Node(InetAddress.getLocalHost(), dPort, sPort);
- } catch (UnknownHostException e1) {
- // TODO auto generated
- e1.printStackTrace();
- }
-
- try {
- ProtocolStackConfigurator conf;
- conf = ConfiguratorFactory.getStackConfigurator(confFile);
- if (!(conf instanceof XmlConfigurator)) {
- HelpFormatter formatter = new HelpFormatter();
- System.err.println("cannot find " + confFile);
- formatter.printHelp("dog", options, true);
- System.exit(1);
- }
- ProtocolParameter[] params = new ProtocolParameter[1];
- params[0] = new ProtocolParameter("mcast_port", Integer
- .toString(mPort));
- ProtocolData data = new ProtocolData("UDP", params);
- ((XmlConfigurator) conf).override(data);
- if (!checkJgroups(conf)) {
- System.err.println("failed to set up JGroups");
- System.err.println("check the network configuration");
- System.exit(1);
- }
- channel = new JChannel(conf);
- // TODO deal with AUTO_RECONNECT and AUTO_GENSTATE
- channel.setOpt(Channel.BLOCK, true);
- channel.setOpt(Channel.LOCAL, true);
- Master master = new Master(thisNode, this);
-
- msgQueue = new LinkedBlockingQueue<SheepdogMessage>();
- connected = false;
- keyMap = new HashMap<Integer, SelectionKey>();
- currentNodeList = new NodeList();
- this.limitMbrs = limitMbrs;
- this.shutdown = false;
-
- InetSocketAddress address;
- ServerSocketChannel ssc = ServerSocketChannel.open();
- ssc.configureBlocking(false);
- address = new InetSocketAddress(dPort);
- ssc.socket().bind(address);
-
- selector = Selector.open();
- ssc.register(selector, SelectionKey.OP_ACCEPT);
-
- MasterGroup mg = new MasterGroup(thisNode, master, this, channel);
- connector = new JGroupsConnector(this, mg, channel);
-
- channel.setReceiver(mg);
-
- Executor ex = Executors.newCachedThreadPool();
- ex.execute(master);
- ex.execute(connector);
- ex.execute(new MessageDispatcher());
- } catch (IOException ex) {
- ex.printStackTrace();
- } catch (ChannelException ex) {
- ex.printStackTrace();
- }
- }
-
- @Override
- public void init(DaemonContext dc) throws Exception {
- String[] argv = dc.getArguments();
- init(argv);
- }
-
- private CountDownLatch doneSignal;
-
- private SheepdogMessage createJoinMessage() {
- try {
- // TODO use defaultNrCopies in the super block
- ObjectOperator objectOperator = new ObjectOperator();
- TreeSet<Node> set = new TreeSet<Node>();
- set.add(thisNode);
- NodeList nl = new NodeList(0, set);
- ByteBuffer object = objectOperator.readObject(nl, ObjectOperator.DIRECTORY_OID, 1,
- SuperObject.SUPER_OBJ_SIZE + SuperObject.NODE_LOG_SIZE + 1024 * 1024);
- SuperObject superObject = new SuperObject(object);
-
- return new JoinMessage(thisNode, 0,
- superObject.getLastNodeList(), superObject.getCtime(), false);
- } catch (SheepdogException oe) {
- int result = oe.getErrorCode();
- if (result == SheepdogException.NO_OBJ) {
- return new JoinMessage(thisNode, 0, null, 0, false);
- } else {
- Log.error("failed to read the log");
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- // TODO auto-generated
- e.printStackTrace();
- }
- return createJoinMessage();
- }
- }
- }
-
- @Override
- public void start() throws Exception {
- doneSignal = new CountDownLatch(1);
-
- Thread thread = new Thread(this);
- thread.start();
-
- SheepdogMessage sm = createJoinMessage();
- addMessage(sm);
-
- doneSignal.await();
- }
-
- @Override
- public void stop() throws Exception {
- // TODO Auto-generated method stub
- }
-
- private Lock lock;
- private Condition notConnected;
-
- private class MessageDispatcher implements Runnable {
-
- @Override
- public void run() {
- for (;;) {
- try {
- SheepdogMessage sm = msgQueue.take();
- lock.lock();
- try {
- while (!connected) {
- notConnected.await();
- }
- groupMsgCount++; // TODO decrement when cmd is unknown
- } finally {
- lock.unlock();
- }
- channel.send(new Message(null, null, sm));
- } catch (ChannelNotConnectedException e) {
- // TODO auto generated
- e.printStackTrace();
- } catch (ChannelClosedException e) {
- // TODO auto generated
- e.printStackTrace();
- } catch (InterruptedException e) {
- // TODO auto generated
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
-
- @Override
- public void run() {
- try {
- while (selector.select() >= 0) {
- // Get "selected" objects
- Iterator<SelectionKey> itr = selector.selectedKeys().iterator();
- while (itr.hasNext()) {
- SelectionKey key = itr.next();
- itr.remove();
-
- if (!key.isValid()) {
- Log.error("key is invalid");
- continue;
- }
-
- if (key.isAcceptable()) {
- accept(key);
- } else if (key.isReadable()) {
- Connection conn = (Connection) key.attachment();
- conn.rxHandler();
- } else if (key.isWritable()) {
- Connection conn = (Connection) key.attachment();
- conn.txHandler();
- }
- }
- }
- Log.error("ERROR: select returns unexpectedly");
- channel.close();
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/SheepdogException.java b/dog/src/net/osrg/sheepdog/SheepdogException.java
deleted file mode 100644
index 374ede6..0000000
--- a/dog/src/net/osrg/sheepdog/SheepdogException.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-public class SheepdogException extends Exception {
-
- public static final int SUCCESS = 0x00;
- public static final int UNKNOWN = 0x01;
- public static final int NO_OBJ = 0x02;
- public static final int EIO = 0x03;
- public static final int OLD_NODE_VER = 0x04;
- public static final int NEW_NODE_VER = 0x05;
- public static final int VDI_EXIST = 0x06;
- public static final int INVALID_PARMS = 0x07;
- public static final int SYSTEM_ERROR = 0x08;
- public static final int VDI_LOCKED = 0x09;
- public static final int NO_SUPER_OBJ = 0x0A;
- public static final int NO_VDI = 0x0B;
- public static final int NO_BASE_VDI = 0x0C;
- public static final int DIFFERENT_EPOCH = 0x0D;
- public static final int DIR_READ = 0x0E;
- public static final int DIR_WRITE = 0x0F;
- public static final int VDI_READ = 0x10;
- public static final int VDI_WRITE = 0x11;
- public static final int BASE_VDI_READ = 0x12;
- public static final int BASE_VDI_WRITE = 0x13;
- public static final int NO_TAG = 0x14;
- public static final int STARTUP = 0x15;
- public static final int NO_EPOCH = 0x16;
- public static final int VDI_NOT_LOCKED = 0x17;
- public static final int SHUTDOWN = 0x18;
-
- private int errorCode;
- private OpCode opcode;
- private long oid;
-
- private static final long serialVersionUID = -4356595263599187642L;
-
- public SheepdogException(int errorCode, String message) {
- super(message);
- this.errorCode = errorCode;
- this.oid = 0;
- this.opcode = OpCode.OP_UNKNOWN;
- }
-
- public SheepdogException(int errorCode, long oid, OpCode opcode, String message) {
- super(message);
- this.errorCode = errorCode;
- this.oid = oid;
- this.opcode = opcode;
- }
-
- public int getErrorCode() {
- return errorCode;
- }
-
- public OpCode getOpcode() {
- return opcode;
- }
-
- public long getOid() {
- return oid;
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/SuperObject.java b/dog/src/net/osrg/sheepdog/SuperObject.java
deleted file mode 100644
index 5d081df..0000000
--- a/dog/src/net/osrg/sheepdog/SuperObject.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.ArrayList;
-
-import net.osrg.sheepdog.headers.Request;
-
-public class SuperObject {
-
- public static final int SUPER_OBJ_SIZE = 1 << 12;
- // TODO these sizes are temporary values
- public static final int NODE_LOG_SIZE = 1 << 24;
- public static final int DIRECTORY_SIZE = 1 << 24;
-
- public SuperObject(int defaultNrCopies) {
- long tm = System.currentTimeMillis();
- this.ctime = ((tm / 1000) << 32) | ((tm % 1000) * 1000000);
- this.defaultNrCopies = (byte) defaultNrCopies;
- this.nodeHistory = new ArrayList<NodeList>();
- this.directory = new ArrayList<DirEntry>();
- }
-
- public SuperObject(ByteBuffer buf) {
- buf.mark();
- ctime = buf.getLong();
- defaultNrCopies = buf.get();
- buf.reset();
- buf.position(buf.position() + SUPER_OBJ_SIZE);
- buf.mark();
- nodeHistory = new ArrayList<NodeList>();
- NodeList nodeList = null;
- long nrNodeList = buf.getLong();
- for (int i = 0; i < nrNodeList; i++) {
- nodeList = NodeList.fromLogData(buf);
- if (nodeList != null) {
- nodeHistory.add(nodeList);
- } else {
- break;
- }
- }
- buf.reset();
- buf.position(buf.position() + NODE_LOG_SIZE);
- directory = new ArrayList<DirEntry>();
- while (buf.hasRemaining()) {
- directory.add(new DirEntry(buf));
- }
- }
-
- public ByteBuffer toBuffer() {
- ByteBuffer buf = ByteBuffer.allocate(SUPER_OBJ_SIZE
- + NODE_LOG_SIZE
- + DIRECTORY_SIZE);
- buf.mark();
- buf.order(ByteOrder.LITTLE_ENDIAN);
- buf.putLong(ctime);
- buf.put(defaultNrCopies);
- buf.reset();
- buf.position(buf.position() + SUPER_OBJ_SIZE);
- buf.mark();
- buf.putLong(nodeHistory.size());
- for (NodeList nodeList : nodeHistory) {
- buf.put(nodeList.toLogData());
- }
- buf.reset();
- buf.position(buf.position() + NODE_LOG_SIZE);
- for (DirEntry ent : directory) {
- buf.put(ent.toBuffer());
- }
- buf.flip();
- return buf;
- }
-
- public long getCtime() {
- return ctime;
- }
-
- public byte getDefaultNrCopies() {
- return defaultNrCopies;
- }
-
- public ArrayList<DirEntry> getDirectory() {
- return this.directory;
- }
-
- public void addDirEntry(DirEntry dirEntry) {
- for (DirEntry ent : directory) {
- if (ent.getName().equals(dirEntry.getName())) {
- ent.setFlags((byte) (ent.getFlags() & ~Request.FLAG_CMD_WRITE));
- }
- }
- directory.add(dirEntry);
- }
-
- public void addNodeList(NodeList nodeList) {
- nodeHistory.add(nodeList);
- }
-
- public NodeList getNodeList(int epoch) {
- // TODO use Comparable and binarySearch
- for (NodeList nodeList : nodeHistory) {
- if (nodeList.getEpoch() == epoch) {
- return nodeList;
- }
- }
- return null;
- }
-
- public NodeList getLastNodeList() {
- return nodeHistory.get(nodeHistory.size() - 1);
- }
-
- public int getEpoch(long oid, int epoch) {
- for (DirEntry ent : directory) {
- if (ent.getOid() == oid) {
- return ent.getEpoch();
- }
- }
- return -1;
- }
-
- public int setEpoch(long oid, int epoch) {
- for (DirEntry ent : directory) {
- if (ent.getOid() == oid) {
- ent.setEpoch(epoch);
- return SheepdogException.SUCCESS;
- }
- }
- return SheepdogException.NO_VDI;
- }
-
- public DirEntry findVdi(String vdiName, long tag, long oid) throws SheepdogException {
- int result = SheepdogException.NO_VDI;
- DirEntry dirEntry = null;
-
- for (DirEntry ent : directory) {
- if (vdiName != null) { // request by name
- if (!ent.getName().equals(vdiName)) {
- continue;
- }
- if (ent.getTag() == tag) {
- result = SheepdogException.SUCCESS;
- dirEntry = ent;
- break;
- }
- if (tag == -1) {
- if (ent.getFlags() == Request.FLAG_CMD_WRITE) {
- result = SheepdogException.SUCCESS;
- dirEntry = ent;
- break;
- } else {
- // current vdi must exist
- result = SheepdogException.SYSTEM_ERROR;
- }
- } else {
- result = SheepdogException.NO_TAG;
- }
- } else { // request by oid
- if (ent.getOid() == oid) {
- result = SheepdogException.SUCCESS;
- dirEntry = ent;
- break;
- }
- }
- }
-
- if (dirEntry == null) {
- if (result == SheepdogException.NO_VDI) {
- throw new SheepdogException(result, "vdi ("
- + vdiName + ") is not found");
- } else if (result == SheepdogException.NO_TAG) {
- throw new SheepdogException(result, "vdi tag ("
- + tag + ") is not found");
- } else if (result == SheepdogException.SYSTEM_ERROR) {
- throw new SheepdogException(result, "there is no current vdi");
- } else {
- throw new SheepdogException(SheepdogException.UNKNOWN, "there is no current vdi");
- }
- }
- return dirEntry;
- }
-
- private long ctime;
- private byte defaultNrCopies;
- private ArrayList<NodeList> nodeHistory;
- private ArrayList<DirEntry> directory;
-}
diff --git a/dog/src/net/osrg/sheepdog/VdiOperator.java b/dog/src/net/osrg/sheepdog/VdiOperator.java
deleted file mode 100644
index 3649f46..0000000
--- a/dog/src/net/osrg/sheepdog/VdiOperator.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.TreeSet;
-
-import net.osrg.sheepdog.headers.Request;
-import net.osrg.sheepdog.messages.GetVdiInfoMessage;
-import net.osrg.sheepdog.messages.ReleaseVdiMessage;
-import net.osrg.sheepdog.messages.NewVdiMessage;
-import net.osrg.sheepdog.messages.SheepdogMessage;
-
-public class VdiOperator {
-
- private ObjectOperator objectOperator;
- private SuperObject superObject;
- private Inode inode;
- private ArrayList<DirEntry> directory;
- private DirEntry dirEntry = null;
- private String vdiName;
- private long newOid;
- private NodeList nl;
- private long baseOid;
- private long tag;
- private long vdiSize;
- private short flags;
- private OpCode op;
- private SheepdogMessage sm;
-
- public VdiOperator(long baseOid,
- long tag, long vdiSize, short flags, String vdiName,
- NodeList nl, OpCode op, SheepdogMessage sm) {
- this.objectOperator = new ObjectOperator();
- this.nl = nl;
- this.baseOid = baseOid;
- this.tag = tag;
- this.vdiSize = vdiSize;
- this.flags = flags;
- this.vdiName = vdiName;
- this.op = op;
- this.sm = sm;
- }
-
- private void lookupVdi(boolean doLock)
- throws SheepdogException {
- DirEntry dirEntry = null;
- try {
- // TODO handle larger buffer
- ByteBuffer object = objectOperator.readObject(nl, ObjectOperator.DIRECTORY_OID, -1,
- SuperObject.SUPER_OBJ_SIZE + SuperObject.NODE_LOG_SIZE + 1024 * 1024);
- superObject = new SuperObject(object);
-
- dirEntry = superObject.findVdi(vdiName, tag, baseOid);
-
- // TODO use common interface
- if (sm instanceof GetVdiInfoMessage) {
- GetVdiInfoMessage msg = (GetVdiInfoMessage) sm;
- msg.setFlags(dirEntry.getFlags());
- msg.setResult(SheepdogException.SUCCESS);
- msg.setOid(dirEntry.getOid());
- msg.setVdiEpoch(dirEntry.getEpoch());
- } else {
- ReleaseVdiMessage msg = (ReleaseVdiMessage) sm;
- msg.setResult(SheepdogException.SUCCESS);
- }
- } catch (SheepdogException oe) {
- int result = oe.getErrorCode();
- if (result == SheepdogException.NO_OBJ) {
- throw new SheepdogException(SheepdogException.NO_SUPER_OBJ,
- "directory is not found");
- } else if (result == SheepdogException.OLD_NODE_VER
- || result == SheepdogException.NEW_NODE_VER) {
- throw new SheepdogException(SheepdogException.DIFFERENT_EPOCH,
- "epochs are different between nodes");
- } else {
- // unknown error
- throw new SheepdogException(SheepdogException.DIR_READ,
- "cannot read directory");
- }
- }
- }
-
- private void addVdi() throws SheepdogException {
- try {
- // TODO handle larger buffer
- ByteBuffer object = objectOperator.readObject(nl, ObjectOperator.DIRECTORY_OID, -1,
- SuperObject.SUPER_OBJ_SIZE + SuperObject.NODE_LOG_SIZE + 1024 * 1024);
- superObject = new SuperObject(object);
- directory = superObject.getDirectory();
- for (DirEntry ent : directory) {
- if (tag == 0 && ent.getName().equals(vdiName)) {
- throw new SheepdogException(SheepdogException.VDI_EXIST, vdiName
- + " already exists");
- }
- }
- long oldOid = 0;
- if (directory.size() > 0) {
- dirEntry = directory.get(directory.size() - 1);
- oldOid = dirEntry.getOid();
- }
- newOid = oldOid + (1 << 18);
- if (baseOid > 0) {
- DirEntry baseEntry = superObject.findVdi(null, 0, baseOid);
- NodeList pastNodeList = superObject.getNodeList(baseEntry.getEpoch());
- object = objectOperator.readObject(new NodeList(nl.getEpoch(),
- (TreeSet<Node>) pastNodeList.getNodeSet()), baseOid,
- superObject.getDefaultNrCopies(), Inode.SIZE);
- Inode base = new Inode(object);
- inode = new Inode(superObject.getDefaultNrCopies(), newOid,
- vdiSize, baseOid);
- for (int i = 0; i < inode.getDataOid().length; i++) {
- inode.getDataOid()[i] = base.getDataOid()[i];
- }
- for (int i = 0; i < Inode.MAX_CHILDREN; i++) {
- if (base.getChildOid()[i] == 0) {
- base.getChildOid()[i] = newOid;
- break;
- }
- }
- object = objectOperator.createObject(nl, baseOid, base
- .getNrCopies(), base.toBuffer());
- } else {
- inode = new Inode(superObject.getDefaultNrCopies(), newOid,
- vdiSize, baseOid);
- }
- object = objectOperator.createObject(nl, newOid, inode.getNrCopies(),
- inode.toBuffer());
- dirEntry = new DirEntry(inode.getOid(), (int) tag,
- (byte) flags, vdiName,
- nl.getEpoch());
- superObject.addDirEntry(dirEntry);
- object = objectOperator.createObject(nl, ObjectOperator.DIRECTORY_OID,
- superObject.getDefaultNrCopies(), superObject.toBuffer());
- NewVdiMessage msg = (NewVdiMessage) sm;
- msg.setFlags(Request.FLAG_CMD_WRITE);
- msg.setResult(SheepdogException.SUCCESS);
- msg.setOid(inode.getOid());
- msg.setVdiEpoch(dirEntry.getEpoch());
- } catch (SheepdogException oe) {
- int result = oe.getErrorCode();
- long oid = oe.getOid();
- OpCode opcode = oe.getOpcode();
- if (result == SheepdogException.NO_OBJ) {
- if (oid == 0) {
- throw new SheepdogException(SheepdogException.NO_SUPER_OBJ,
- "directory is not found");
- } else if (oid == newOid) {
- throw new SheepdogException(SheepdogException.NO_VDI,
- "vdi is not found");
- } else if (oid == baseOid) {
- throw new SheepdogException(SheepdogException.NO_BASE_VDI,
- "base vdi is not found");
- } else {
- throw new SheepdogException(SheepdogException.NO_VDI,
- "object is not found");
- }
- } else if (result == SheepdogException.OLD_NODE_VER
- || result == SheepdogException.NEW_NODE_VER) {
- throw new SheepdogException(SheepdogException.DIFFERENT_EPOCH,
- "epochs are different between nodes");
- } else if (opcode == OpCode.OP_READ_OBJ) {
- if (oid == 0) {
- throw new SheepdogException(SheepdogException.DIR_READ,
- "cannot read directory");
- } else if (oid == newOid) {
- throw new SheepdogException(SheepdogException.VDI_READ,
- "cannot read vdi");
- } else if (oid == baseOid) {
- throw new SheepdogException(SheepdogException.BASE_VDI_READ,
- "cannot read base vdi");
- } else {
- throw new SheepdogException(SheepdogException.EIO,
- "failed to read object");
- }
- } else {
- if (oid == 0) {
- throw new SheepdogException(SheepdogException.DIR_WRITE,
- "failed to update directory");
- } else if (oid == newOid) {
- throw new SheepdogException(SheepdogException.VDI_WRITE,
- "failed to create new vdi");
- } else if (oid == baseOid) {
- throw new SheepdogException(SheepdogException.BASE_VDI_WRITE,
- "failed to update base vdi");
- } else {
- throw new SheepdogException(SheepdogException.EIO,
- "failed to write object");
- }
- }
- }
- }
-
- public int doOperation() {
- try {
- switch (op) {
- case OP_NEW_VDI:
- addVdi();
- break;
- case OP_LOCK_VDI:
- lookupVdi(true);
- break;
- case OP_GET_VDI_INFO:
- lookupVdi(false);
- break;
- default:
- Log.error("Unknown opcode: " + op);
- break;
- }
- } catch (SheepdogException ve) {
- Log.error(ve);
-
- // TODO use common interface
- switch (op) {
- case OP_NEW_VDI:
- NewVdiMessage newMsg = (NewVdiMessage) sm;
- newMsg.setFlags((short) 0);
- newMsg.setResult(ve.getErrorCode());
- newMsg.setVdiEpoch(0);
- break;
- case OP_LOCK_VDI:
- case OP_GET_VDI_INFO:
- if (sm instanceof GetVdiInfoMessage) {
- GetVdiInfoMessage lockMsg = (GetVdiInfoMessage) sm;
- lockMsg.setFlags((short) 0);
- lockMsg.setResult(ve.getErrorCode());
- lockMsg.setVdiEpoch(0);
- } else {
- ReleaseVdiMessage msg = (ReleaseVdiMessage) sm;
- msg.setResult(ve.getErrorCode());
- }
- break;
- default:
- break;
- }
- }
- return sm.getResult();
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/headers/NodeRequest.java b/dog/src/net/osrg/sheepdog/headers/NodeRequest.java
deleted file mode 100644
index 16d7fff..0000000
--- a/dog/src/net/osrg/sheepdog/headers/NodeRequest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.headers;
-
-import java.nio.ByteBuffer;
-
-public class NodeRequest extends Request {
-
- private static final long serialVersionUID = -5744819084363637266L;
-
- public NodeRequest(ByteBuffer buf) {
- super(buf);
- requestEpoch = buf.getInt();
- }
-
- public NodeRequest(Request req) {
- setProtoVersion(req.getProtoVersion());
- setOpcode(req.getOpcode());
- setFlags(req.getFlags());
- setEpoch(req.getEpoch());
- setId(req.getId());
- setDataLength(req.getDataLength());
- setRemaining(req.getRemaining());
- ByteBuffer buf = req.getRemaining();
- requestEpoch = buf.getInt();
- setData(req.getData());
- }
-
- public int getRequestEpoch() {
- return requestEpoch;
- }
-
- public void setRequestEpoch(int requestEpoch) {
- this.requestEpoch = requestEpoch;
- }
-
- private int requestEpoch;
-}
diff --git a/dog/src/net/osrg/sheepdog/headers/NodeResponse.java b/dog/src/net/osrg/sheepdog/headers/NodeResponse.java
deleted file mode 100644
index 1547e60..0000000
--- a/dog/src/net/osrg/sheepdog/headers/NodeResponse.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.headers;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-public class NodeResponse extends Response {
-
- public NodeResponse(Request req, byte op, ByteBuffer data, int res) {
- super(req, op, data, res);
- }
-
- @Override
- public ByteBuffer getHeader() {
- ByteBuffer buf = ByteBuffer.allocate(HEADER_SIZE);
- buf.order(ByteOrder.LITTLE_ENDIAN);
- super.fillHeader(buf);
- buf.putInt(nrNodes);
- buf.putInt(localIdx);
- buf.putInt(masterIdx);
- for (int i = 0; i < 4; i++) {
- buf.putInt(0);
- }
- buf.flip();
- return buf;
- }
-
- public int getNrNodes() {
- return nrNodes;
- }
-
- public void setNrNodes(int nrNodes) {
- this.nrNodes = nrNodes;
- }
-
- public int getLocalIdx() {
- return localIdx;
- }
-
- public void setLocalIdx(int localIdx) {
- this.localIdx = localIdx;
- }
-
- public int getMasterIdx() {
- return masterIdx;
- }
-
- public void setMasterIdx(int masterIdx) {
- this.masterIdx = masterIdx;
- }
-
- private int nrNodes;
- private int localIdx;
- private int masterIdx;
-}
diff --git a/dog/src/net/osrg/sheepdog/headers/ObjectRequest.java b/dog/src/net/osrg/sheepdog/headers/ObjectRequest.java
deleted file mode 100644
index a9baa1c..0000000
--- a/dog/src/net/osrg/sheepdog/headers/ObjectRequest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.headers;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-import net.osrg.sheepdog.NodeList;
-
-public class ObjectRequest extends Request {
-
- static final long serialVersionUID = 8293249265237308968L;
- public ObjectRequest() {
- super();
- }
-
- public ObjectRequest(Request req) {
- setProtoVersion(req.getProtoVersion());
- setOpcode(req.getOpcode());
- setFlags(req.getFlags());
- setEpoch(req.getEpoch());
- setId(req.getId());
- setDataLength(req.getDataLength());
- ByteBuffer buf = req.getRemaining();
- oid = buf.getLong();
- cowOid = buf.getLong();
- copies = buf.getInt();
- objVer = buf.getInt();
- offset = buf.getLong();
- }
-
- @Override
- public ByteBuffer toBuffer() {
- ByteBuffer buf;
- if ((getFlags() & 1) == 1) {
- buf = ByteBuffer.allocate(HEADER_SIZE + getDataLength());
- } else {
- buf = ByteBuffer.allocate(HEADER_SIZE);
- }
- buf.order(ByteOrder.LITTLE_ENDIAN);
- buf.put(getProtoVersion());
- buf.put(getOpcode().getValue());
- buf.putShort(getFlags());
- buf.putInt(getEpoch());
- buf.putInt(getId());
- buf.putInt(getDataLength());
-
- buf.putLong(oid);
- buf.putLong(cowOid);
- buf.putInt(copies);
- buf.putInt(objVer);
- buf.putLong(offset);
- if ((getFlags() & 1) == 1) {
- buf.put(getData());
- }
- buf.flip();
- return buf;
- }
-
- public long getOid() {
- return oid;
- }
- public long getCowOid() {
- return cowOid;
- }
- public int getCopies() {
- return copies;
- }
- public int getObjVer() {
- return objVer;
- }
- public long getOffset() {
- return offset;
- }
-
- private NodeList nodeList;
- private NodeList maskNodeList;
-
- public NodeList getNodeList() {
- return nodeList;
- }
-
- public void setNodeList(NodeList nodeList) {
- this.nodeList = nodeList;
- }
-
- public NodeList getMaskNodeList() {
- return maskNodeList;
- }
-
- public void setMaskNodeList(NodeList maskNodeList) {
- this.maskNodeList = maskNodeList;
- }
-
- private long oid;
-
- public void setOid(long oid) {
- this.oid = oid;
- }
-
- private long cowOid;
- private int copies;
-
- public void setCopies(int copies) {
- this.copies = copies;
- }
-
- private int objVer;
- private long offset;
-}
diff --git a/dog/src/net/osrg/sheepdog/headers/ObjectResponse.java b/dog/src/net/osrg/sheepdog/headers/ObjectResponse.java
deleted file mode 100644
index 2e7f3a2..0000000
--- a/dog/src/net/osrg/sheepdog/headers/ObjectResponse.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.headers;
-
-import java.nio.ByteBuffer;
-
-import net.osrg.sheepdog.OpCode;
-
-public class ObjectResponse extends Response {
-
- public ObjectResponse(ByteBuffer buf) {
- setProtoVersion(buf.get());
- setOpcode(OpCode.fromValue(buf.get()));
- setFlags(buf.getShort());
- setEpoch(buf.getInt());
- setId(buf.getInt());
- setDataLength(buf.getInt());
- setResult(buf.getInt());
- objVer = buf.getInt();
- copies = buf.getInt();
- for (int i = 0; i < 5; i++) {
- buf.getInt();
- }
- setData(buf.slice());
- }
-
- public ObjectResponse(Request req, byte op, ByteBuffer data, int res) {
- super(req, op, data, res);
- }
-
- public int getObjVer() {
- return objVer;
- }
-
- public int getCopies() {
- return copies;
- }
-
- private int objVer;
- private int copies;
-}
diff --git a/dog/src/net/osrg/sheepdog/headers/Request.java b/dog/src/net/osrg/sheepdog/headers/Request.java
deleted file mode 100644
index e62fefa..0000000
--- a/dog/src/net/osrg/sheepdog/headers/Request.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.headers;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-import net.osrg.sheepdog.OpCode;
-
-public class Request implements Externalizable {
- /**
- *
- */
- private static final long serialVersionUID = -2749643747232097287L;
- public static final int HEADER_SIZE = 48;
- public static final short FLAG_CMD_WRITE = 1;
-
- public Request() { }
-
- public Request(ByteBuffer buf) {
- protoVersion = buf.get();
- opcode = OpCode.fromValue(buf.get());
- flags = buf.getShort();
- epoch = buf.getInt();
- id = buf.getInt();
- dataLength = buf.getInt();
- remaining = ByteBuffer.allocate(32);
- remaining.order(ByteOrder.LITTLE_ENDIAN);
- buf.get(remaining.array());
- data = buf;
- }
-
- public ByteBuffer toBuffer() {
- ByteBuffer buf = ByteBuffer.allocate(HEADER_SIZE + dataLength);
- buf.order(ByteOrder.LITTLE_ENDIAN);
- buf.put(protoVersion);
- buf.put(opcode.getValue());
- buf.putShort(flags);
- buf.putInt(epoch);
- buf.putInt(id);
- buf.putInt(dataLength);
- buf.put(remaining);
- buf.put(data);
- buf.flip();
- return buf;
- }
-
- public byte getProtoVersion() {
- return protoVersion;
- }
-
- public void setProtoVersion(byte protoVersion) {
- this.protoVersion = protoVersion;
- }
-
- public OpCode getOpcode() {
- return opcode;
- }
-
- public void setOpcode(OpCode opcode) {
- this.opcode = opcode;
- }
-
- public short getFlags() {
- return flags;
- }
-
- public void setFlags(short flags) {
- this.flags = flags;
- }
-
- public int getEpoch() {
- return epoch;
- }
-
- public void setEpoch(int epoch) {
- this.epoch = epoch;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public int getDataLength() {
- return dataLength;
- }
-
- public void setDataLength(int dataLength) {
- this.dataLength = dataLength;
- }
-
- public void setData(ByteBuffer data) {
- this.data = data;
- }
-
- public ByteBuffer getData() {
- return data;
- }
-
- private byte protoVersion;
- private OpCode opcode;
- private short flags;
- private int epoch;
- private int id;
- private int dataLength;
- private ByteBuffer remaining;
- public ByteBuffer getRemaining() {
- return remaining;
- }
-
- public void setRemaining(ByteBuffer remaining) {
- this.remaining = remaining;
- }
-
- private ByteBuffer data;
-
- @Override
- public void readExternal(ObjectInput in) throws IOException,
- ClassNotFoundException {
- ByteBuffer header = ByteBuffer.allocate(HEADER_SIZE);
- header.order(ByteOrder.LITTLE_ENDIAN);
- int offset = 0;
- int length = HEADER_SIZE;
- while (offset < length) {
- int ret = in.read(header.array(), offset, length - offset);
- offset += ret;
- }
- // TODO redundant codes
- protoVersion = header.get();
- opcode = OpCode.fromValue(header.get());
- flags = header.getShort();
- epoch = header.getInt();
- id = header.getInt();
- dataLength = header.getInt();
- remaining = ByteBuffer.allocate(32);
- remaining.order(ByteOrder.LITTLE_ENDIAN);
- header.get(remaining.array());
-
- this.data = ByteBuffer.allocate(dataLength);
- this.data.order(ByteOrder.LITTLE_ENDIAN);
- offset = 0;
- length = dataLength;
- while (offset < length) {
- int ret = in.read(this.data.array(), offset, length - offset);
- offset += ret;
- }
- }
-
- @Override
- public void writeExternal(ObjectOutput out) throws IOException {
- out.write(toBuffer().array());
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/headers/Response.java b/dog/src/net/osrg/sheepdog/headers/Response.java
deleted file mode 100644
index bec9dc1..0000000
--- a/dog/src/net/osrg/sheepdog/headers/Response.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.headers;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-import net.osrg.sheepdog.OpCode;
-
-public class Response {
- public static final int HEADER_SIZE = 48;
- public static final short FLAG_CMD_WRITE = 1;
-
- public Response(ByteBuffer buf) {
- protoVersion = buf.get();
- setOpcode(OpCode.fromValue(buf.get()));
- flags = buf.getShort();
- epoch = buf.getInt();
- id = buf.getInt();
- dataLength = buf.getInt();
- result = buf.getInt();
- for (int i = 0; i < 7; i++) {
- buf.getInt();
- }
- setData(buf.slice());
- }
-
- public Response(Request req, byte op, ByteBuffer data, int res) {
- if (data == null) {
- data = ByteBuffer.allocate(0);
- }
- if (req == null) {
- ByteBuffer buf = ByteBuffer.allocate(Request.HEADER_SIZE);
- buf.order(ByteOrder.LITTLE_ENDIAN);
- req = new Request(buf);
- }
- protoVersion = req.getProtoVersion();
- opcode = OpCode.fromValue(op);
- flags = req.getFlags();
- epoch = req.getEpoch();
- id = req.getId();
- dataLength = data.limit();
- result = res;
- this.data = data;
- if (data.remaining() > 0) {
- flags = FLAG_CMD_WRITE;
- }
- }
-
- public Response() {
- opcode = OpCode.OP_UNKNOWN;
- data = ByteBuffer.allocate(0);
- data.order(ByteOrder.LITTLE_ENDIAN);
- }
-
- public void fillHeader(ByteBuffer buf) {
- buf.put(protoVersion);
- buf.put(opcode.getValue());
- buf.putShort(flags);
- buf.putInt(epoch);
- buf.putInt(id);
- buf.putInt(dataLength);
- buf.putInt(result);
- }
-
- public ByteBuffer getHeader() {
- ByteBuffer buf = ByteBuffer.allocate(HEADER_SIZE + data.limit());
- buf.order(ByteOrder.LITTLE_ENDIAN);
- buf.put(protoVersion);
- buf.put(opcode.getValue());
- buf.putShort(flags);
- buf.putInt(epoch);
- buf.putInt(id);
- buf.putInt(dataLength);
- buf.putInt(result);
- for (int i = 0; i < 7; i++) {
- buf.putInt(0);
- }
- buf.flip();
- return buf;
- }
-
- public byte getProtoVersion() {
- return protoVersion;
- }
-
- public OpCode getOpcode() {
- return opcode;
- }
-
- public short getFlags() {
- return flags;
- }
-
- public int getEpoch() {
- return epoch;
- }
-
- public int getId() {
- return id;
- }
-
- public int getDataLength() {
- return dataLength;
- }
-
- public int getResult() {
- return result;
- }
-
- public void setResult(int result) {
- this.result = result;
- }
-
- public void setData(ByteBuffer data) {
- this.data = data;
- }
-
- public ByteBuffer getData() {
- return data;
- }
-
- private byte protoVersion;
- private OpCode opcode;
- private short flags;
-
- public void setProtoVersion(byte protoVersion) {
- this.protoVersion = protoVersion;
- }
-
- public void setOpcode(OpCode opcode) {
- this.opcode = opcode;
- }
-
- public void setFlags(short flags) {
- this.flags = flags;
- }
-
- public void setEpoch(int epoch) {
- this.epoch = epoch;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public void setDataLength(int dataLength) {
- this.dataLength = dataLength;
- }
-
- private int epoch;
- private int id;
- private int dataLength;
- private int result;
- private ByteBuffer data;
-}
diff --git a/dog/src/net/osrg/sheepdog/headers/VdiRequest.java b/dog/src/net/osrg/sheepdog/headers/VdiRequest.java
deleted file mode 100644
index 60d775f..0000000
--- a/dog/src/net/osrg/sheepdog/headers/VdiRequest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.headers;
-
-import java.nio.ByteBuffer;
-
-public class VdiRequest extends Request {
-
- static final long serialVersionUID = 6790105034454796955L;
- public VdiRequest(ByteBuffer buf) {
- super(buf);
- baseOid = buf.getLong();
- tag = buf.getLong();
- vdiSize = buf.getLong();
- }
-
- public VdiRequest(Request req) {
- setProtoVersion(req.getProtoVersion());
- setOpcode(req.getOpcode());
- setFlags(req.getFlags());
- setEpoch(req.getEpoch());
- setId(req.getId());
- setDataLength(req.getDataLength());
- ByteBuffer buf = req.getRemaining();
- baseOid = buf.getLong();
- tag = buf.getLong();
- vdiSize = buf.getLong();
- setData(req.getData());
- }
-
- public long getBaseOid() {
- return baseOid;
- }
-
- public void setBaseOid(long baseOid) {
- this.baseOid = baseOid;
- }
-
- public long getTag() {
- return tag;
- }
-
- public void setTag(long tag) {
- this.tag = tag;
- }
-
- public long getVdiSize() {
- return vdiSize;
- }
-
- public void setVdiSize(long vdiSize) {
- this.vdiSize = vdiSize;
- }
-
- private long baseOid;
- private long tag;
- private long vdiSize;
-
-}
diff --git a/dog/src/net/osrg/sheepdog/headers/VdiResponse.java b/dog/src/net/osrg/sheepdog/headers/VdiResponse.java
deleted file mode 100644
index f92bd6a..0000000
--- a/dog/src/net/osrg/sheepdog/headers/VdiResponse.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.headers;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-
-public class VdiResponse extends Response {
-
- public VdiResponse(Request req, byte op, ByteBuffer data, int res) {
- super(req, op, data, res);
- }
-
- public VdiResponse() {
- super();
- }
-
- public int getRsvd() {
- return rsvd;
- }
-
- public void setRsvd(int rsvd) {
- this.rsvd = rsvd;
- }
-
- public long getOid() {
- return oid;
- }
-
- public void setOid(long oid) {
- this.oid = oid;
- }
-
- public void setVdiEpoch(int vdiEpoch) {
- this.vdiEpoch = vdiEpoch;
- }
-
- public int getVdiEpoch() {
- return vdiEpoch;
- }
-
- @Override
- public ByteBuffer getHeader() {
- ByteBuffer buf = ByteBuffer.allocate(HEADER_SIZE + getData().limit());
- buf.order(ByteOrder.LITTLE_ENDIAN);
- buf.put(getProtoVersion());
- buf.put(getOpcode().getValue());
- buf.putShort(getFlags());
- buf.putInt(getEpoch());
- buf.putInt(getId());
- buf.putInt(getDataLength());
- buf.putInt(getResult());
- buf.putInt(rsvd);
- buf.putLong(oid);
- buf.putInt(vdiEpoch);
- for (int i = 0; i < 3; i++) {
- buf.putInt(0);
- }
- buf.flip();
- return buf;
- }
-
- private int rsvd;
- private long oid;
- private int vdiEpoch;
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/DelVdiMessage.java b/dog/src/net/osrg/sheepdog/messages/DelVdiMessage.java
deleted file mode 100644
index 06f0115..0000000
--- a/dog/src/net/osrg/sheepdog/messages/DelVdiMessage.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.headers.Response;
-
-public class DelVdiMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = 4712886975118264261L;
-
- public DelVdiMessage(Node from, int connectionId) {
- super(from, connectionId);
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- return null;
- }
-
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/GetVdiInfoMessage.java b/dog/src/net/osrg/sheepdog/messages/GetVdiInfoMessage.java
deleted file mode 100644
index fd21a62..0000000
--- a/dog/src/net/osrg/sheepdog/messages/GetVdiInfoMessage.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.OpCode;
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.SheepdogException;
-import net.osrg.sheepdog.VdiOperator;
-import net.osrg.sheepdog.headers.Response;
-import net.osrg.sheepdog.headers.VdiResponse;
-
-public class GetVdiInfoMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = -385617943560301236L;
- private boolean lock;
- private String vdiName;
- private long baseOid;
- private long tag;
- private long vdiSize;
- private short flags;
- private long oid;
- private int vdiEpoch;
-
- public void setFlags(short flags) {
- this.flags = flags;
- }
-
- public void setOid(long oid) {
- this.oid = oid;
- }
-
- public void setVdiEpoch(int vdiEpoch) {
- this.vdiEpoch = vdiEpoch;
- }
-
- public GetVdiInfoMessage(Node from, String vdiName, long baseOid,
- long tag, long vdiSize, short flags, int connectionId,
- boolean lock) {
- super(from, connectionId);
- this.vdiName = vdiName;
- this.baseOid = baseOid;
- this.tag = tag;
- this.vdiSize = vdiSize;
- this.flags = flags;
- this.lock = lock;
- setResult(SheepdogException.SUCCESS);
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- VdiResponse vdiRsp = new VdiResponse();
- vdiRsp.setOid(oid);
- vdiRsp.setFlags(flags);
- vdiRsp.setVdiEpoch(vdiEpoch);
- vdiRsp.setResult(getResult());
- return vdiRsp;
- }
-
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- OpCode op; // TODO remove this
- if (lock) {
- op = OpCode.OP_LOCK_VDI;
- } else {
- op = OpCode.OP_GET_VDI_INFO;
- }
- VdiOperator vdiOp = new VdiOperator(baseOid, tag, vdiSize, flags, vdiName, ci.getNodeList(), op, this);
- vdiOp.doOperation();
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- if (lock && getResult() == SheepdogException.SUCCESS) {
- int ret = -1;
- try {
- ret = ci.lock(vdiName, getFrom());
- } catch (Exception e) {
- e.printStackTrace();
- }
- // TODO merge to Exception
- if (ret < 0) {
- setResult(SheepdogException.VDI_LOCKED);
- }
- }
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/GetVmListMessage.java b/dog/src/net/osrg/sheepdog/messages/GetVmListMessage.java
deleted file mode 100644
index d9b67a2..0000000
--- a/dog/src/net/osrg/sheepdog/messages/GetVmListMessage.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import java.nio.ByteBuffer;
-
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.headers.Response;
-
-public class GetVmListMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = 8659440019009075416L;
-
- public GetVmListMessage(Node from, int connectionId) {
- super(from, connectionId);
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- Response rsp = new Response();
- ByteBuffer buf = ci.encodeLockTbl();
- rsp.setData(buf);
- rsp.setDataLength(buf.remaining());
- if (buf.remaining() > 0) {
- rsp.setFlags((short) 1);
- }
- return rsp;
- }
-
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/JoinMessage.java b/dog/src/net/osrg/sheepdog/messages/JoinMessage.java
deleted file mode 100644
index e6f379d..0000000
--- a/dog/src/net/osrg/sheepdog/messages/JoinMessage.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import java.util.TreeSet;
-
-import net.osrg.sheepdog.Log;
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.NodeList;
-import net.osrg.sheepdog.NodeLogOperator;
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.SheepdogException;
-import net.osrg.sheepdog.headers.Response;
-
-public class JoinMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = 6864895435522827559L;
- private NodeList startupNodeList;
- private boolean startSheepdog;
- private long ctime;
-
- public JoinMessage(Node from, int connectionId, NodeList startupNodeList, long ctime, boolean startSheepdog) {
- super(from, connectionId);
- this.startupNodeList = startupNodeList;
- this.ctime = ctime;
- this.startSheepdog = startSheepdog;
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- // TODO implement me
- return null;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- NodeList latestStartupList = startupNodeList;
- if (startupNodeList == null
- || ci.getStartupNodeList() != null
- && ci.getStartupNodeList().getEpoch() < startupNodeList.getEpoch()) {
- latestStartupList = ci.getStartupNodeList();
- }
-
- NodeList nodeList = ci.nodeList;
- int epoch = nodeList.getEpoch();
- // TODO implement NodeList.clone
- NodeList nextNodeList = NodeList.fromLogData(nodeList
- .toLogData());
- nextNodeList.getNodeSet().add(getFrom());
- if (!ci.isInitialized()
- && nextNodeList.containsAll(latestStartupList)) {
- NodeList oldNodeList = latestStartupList;
- NodeList newNodeList = nextNodeList;
- TreeSet<Node> oldSet, newSet;
- oldSet = (TreeSet<Node>) oldNodeList.getNodeSet();
- newSet = (TreeSet<Node>) newNodeList.getNodeSet();
- if (!newSet.equals(oldSet)) {
- epoch = oldNodeList.getEpoch();
- NodeLogOperator operator = new NodeLogOperator();
- int result = operator.updateNodeLog(0, epoch + 1, oldSet, newSet);
- setResult(result);
- }
- startSheepdog = true;
- } else {
- TreeSet<Node> oldSet, newSet;
- oldSet = (TreeSet<Node>) nodeList.getNodeSet();
- newSet = (TreeSet<Node>) oldSet.clone();
- newSet.add(getFrom());
- if (ci.isInitialized()) {
- NodeLogOperator operator = new NodeLogOperator();
- int result = operator.updateNodeLog(epoch, epoch + 1, oldSet, newSet);
- setResult(result);
- }
- startSheepdog = false;
- }
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- Log.debug(getFrom().toString());
- if (startupNodeList != null) {
- if (ci.getStartupNodeList() == null || ci.getCtime() < ctime
- || ci.getCtime() == ctime && ci.getStartupNodeList().getEpoch() < startupNodeList
- .getEpoch()) {
- ci.addStartupNodeList(startupNodeList, ctime);
- }
- }
- if (getResult() == SheepdogException.SUCCESS) {
- ci.join(getFrom());
- }
- if (startSheepdog) {
- if (ci.nodeList.getNodeSet().equals(startupNodeList.getNodeSet())) {
- ci.nodeList.setEpoch(startupNodeList.getEpoch());
- } else {
- ci.nodeList.setEpoch(startupNodeList.getEpoch() + 1);
- }
- ci.setInitialized(true);
- }
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/LeaveMessage.java b/dog/src/net/osrg/sheepdog/messages/LeaveMessage.java
deleted file mode 100644
index b629566..0000000
--- a/dog/src/net/osrg/sheepdog/messages/LeaveMessage.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import java.util.TreeSet;
-
-import net.osrg.sheepdog.Log;
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.NodeList;
-import net.osrg.sheepdog.NodeLogOperator;
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.headers.Response;
-
-public class LeaveMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = -9205012528477623953L;
- private Node targetNode;
-
- public LeaveMessage(Node from, int connectionId, Node targetNode) {
- super(from, connectionId);
- this.targetNode = targetNode;
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- // TODO implement me
- return null;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- NodeList nodeList = ci.nodeList;
- int epoch = nodeList.getEpoch();
- TreeSet<Node> oldSet, newSet;
- oldSet = (TreeSet<Node>) nodeList.getNodeSet();
- newSet = (TreeSet<Node>) oldSet.clone();
- newSet.remove(targetNode);
- NodeLogOperator operator = new NodeLogOperator();
- int result = operator.updateNodeLog(epoch, epoch + 1, oldSet, newSet);
- setResult(result);
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- Log.debug("remove node " + targetNode + " from mgroups");
- try {
- ci.leave(targetNode);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public Node getTargetNode() {
- return targetNode;
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/MakeFsMessage.java b/dog/src/net/osrg/sheepdog/messages/MakeFsMessage.java
deleted file mode 100644
index caa8532..0000000
--- a/dog/src/net/osrg/sheepdog/messages/MakeFsMessage.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import java.util.TreeSet;
-
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.NodeLogOperator;
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.headers.Response;
-
-public class MakeFsMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = 8251849116343377179L;
- private int copies;
-
- public MakeFsMessage(Node from, int copies, int connectionId) {
- super(from, connectionId);
- this.copies = copies;
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- Response rsp = new Response();
- rsp.setResult(getResult());
- return rsp;
- }
-
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- int epoch = ci.nodeList.getEpoch();
- if (!ci.isInitialized()) {
- epoch = 0;
- }
- TreeSet<Node> set;
- set = (TreeSet<Node>) ci.nodeList.getNodeSet();
-
- NodeLogOperator operator = new NodeLogOperator();
- int result = operator.mkfs(epoch, set, copies);
- setResult(result);
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- if (!ci.isInitialized()) {
- ci.setInitialized(true);
- ci.nodeList.setEpoch(1);
- } else {
- ci.nodeList.setEpoch(ci.nodeList.getEpoch() + 1);
- }
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/MasterChangedMessage.java b/dog/src/net/osrg/sheepdog/messages/MasterChangedMessage.java
deleted file mode 100644
index ee6c99b..0000000
--- a/dog/src/net/osrg/sheepdog/messages/MasterChangedMessage.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.headers.Response;
-
-public class MasterChangedMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = 1290772313197590688L;
-
- public MasterChangedMessage(Node from, int messageId) {
- super(from, messageId);
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- return null;
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- }
-
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- }
-
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/NewVdiMessage.java b/dog/src/net/osrg/sheepdog/messages/NewVdiMessage.java
deleted file mode 100644
index 8caba13..0000000
--- a/dog/src/net/osrg/sheepdog/messages/NewVdiMessage.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.OpCode;
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.SheepdogException;
-import net.osrg.sheepdog.VdiOperator;
-import net.osrg.sheepdog.headers.Response;
-import net.osrg.sheepdog.headers.VdiResponse;
-
-public class NewVdiMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = 1135149371238643248L;
- private String vdiName;
- private long baseOid;
- private long tag;
- private long vdiSize;
- private short flags;
- private long oid;
- private int vdiEpoch;
-
- public void setFlags(short flags) {
- this.flags = flags;
- }
-
- public void setOid(long oid) {
- this.oid = oid;
- }
-
- public void setVdiEpoch(int vdiEpoch) {
- this.vdiEpoch = vdiEpoch;
- }
-
- public NewVdiMessage(Node from, String vdiName, long baseOid,
- long tag, long vdiSize, short flags, int connectionId) {
- super(from, connectionId);
- this.vdiName = vdiName;
- this.baseOid = baseOid;
- this.tag = tag;
- this.vdiSize = vdiSize;
- this.flags = flags;
- setResult(SheepdogException.SUCCESS);
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- VdiResponse vdiRsp = new VdiResponse();
- vdiRsp.setOid(oid);
- vdiRsp.setFlags(flags);
- vdiRsp.setVdiEpoch(vdiEpoch);
- vdiRsp.setResult(getResult());
- return vdiRsp;
- }
-
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- VdiOperator vdiOp = new VdiOperator(baseOid, tag, vdiSize, flags, vdiName, ci.getNodeList(),
- OpCode.OP_NEW_VDI, this);
- vdiOp.doOperation();
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/ReleaseVdiMessage.java b/dog/src/net/osrg/sheepdog/messages/ReleaseVdiMessage.java
deleted file mode 100644
index 3d6cb9b..0000000
--- a/dog/src/net/osrg/sheepdog/messages/ReleaseVdiMessage.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.OpCode;
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.SheepdogException;
-import net.osrg.sheepdog.VdiOperator;
-import net.osrg.sheepdog.headers.Response;
-
-public class ReleaseVdiMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = 4693006050073828817L;
- private String vdiName;
-
- public ReleaseVdiMessage(Node from, int connectionId, String vdiName) {
- super(from, connectionId);
- this.vdiName = vdiName;
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- Response rsp = new Response();
- rsp.setResult(getResult());
- return rsp;
- }
-
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- OpCode op; // TODO remove this
- op = OpCode.OP_GET_VDI_INFO;
- VdiOperator vdiOp = new VdiOperator((long) 0, (long) -1, (long) 0, (short) 0, vdiName, ci.getNodeList(), op, this);
- vdiOp.doOperation();
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- int ret = -1;
- if (getResult() == SheepdogException.SUCCESS) {
- try {
- ret = ci.unlock(vdiName);
- } catch (Exception e) {
- e.printStackTrace();
- }
- // TODO merge to Exception
- if (ret < 0) {
- setResult(SheepdogException.VDI_NOT_LOCKED);
- }
- }
- }
-
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/RequestClusterInfoMessage.java b/dog/src/net/osrg/sheepdog/messages/RequestClusterInfoMessage.java
deleted file mode 100644
index 4fb3e7d..0000000
--- a/dog/src/net/osrg/sheepdog/messages/RequestClusterInfoMessage.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import org.jgroups.Address;
-
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.headers.Response;
-
-public class RequestClusterInfoMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = -3798212834994474954L;
- private ClusterInformation clusterInfo;
- private Address addr;
-
- public RequestClusterInfoMessage(Node from, int connectionId, Address localAddress) {
- super(from, connectionId);
- this.addr = localAddress;
- }
-
- public RequestClusterInfoMessage(Node from, int connectionId,
- Address addr, ClusterInformation clusterInfo) {
- super(from, connectionId);
- this.addr = addr;
- this.clusterInfo = clusterInfo;
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- return null;
- }
-
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- clusterInfo = ci;
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- ci.merge(clusterInfo);
- }
-
- public ClusterInformation getClusterInfo() {
- return clusterInfo;
- }
-
- public Address getAddr() {
- return addr;
- }
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/SheepdogMessage.java b/dog/src/net/osrg/sheepdog/messages/SheepdogMessage.java
deleted file mode 100644
index b231345..0000000
--- a/dog/src/net/osrg/sheepdog/messages/SheepdogMessage.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import java.io.Serializable;
-
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.headers.Response;
-
-public abstract class SheepdogMessage implements Serializable {
-
- /**
- *
- */
- private static final long serialVersionUID = -8802080283453471007L;
-
- private final Node from;
- private final int messageId;
- private boolean flushed;
- private int result;
-
- public SheepdogMessage(Node from, int messageId) {
- this.from = from;
- this.messageId = messageId;
- this.flushed = false;
- }
-
- public Node getFrom() {
- return from;
- }
-
- public int getMessageId() {
- return messageId;
- }
-
- public void setResult(int result) {
- this.result = result;
- }
-
- public int getResult() {
- return result;
- }
-
- public void setFlushed(boolean flushed) {
- this.flushed = flushed;
- }
-
- public boolean isFlushed() {
- return flushed;
- }
-
- public abstract void updateSuperObject(ClusterInformation ci);
-
- public abstract void updateClusterInfo(ClusterInformation ci);
-
- public abstract Response reply(ClusterInformation ci);
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/ShutdownMessage.java b/dog/src/net/osrg/sheepdog/messages/ShutdownMessage.java
deleted file mode 100644
index 8ed6218..0000000
--- a/dog/src/net/osrg/sheepdog/messages/ShutdownMessage.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package net.osrg.sheepdog.messages;
-
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.SheepdogException;
-import net.osrg.sheepdog.headers.Response;
-
-public class ShutdownMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = -4309229228671192242L;
-
- public ShutdownMessage(Node from, int messageId) {
- super(from, messageId);
- setResult(SheepdogException.SUCCESS);
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- Response rsp = new Response();
- rsp.setResult(getResult());
- return rsp;
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- ci.setShutdown(true);
- }
-
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- ci.setShutdown(true);
- }
-
-}
diff --git a/dog/src/net/osrg/sheepdog/messages/UpdateEpochMessage.java b/dog/src/net/osrg/sheepdog/messages/UpdateEpochMessage.java
deleted file mode 100644
index ef4ef94..0000000
--- a/dog/src/net/osrg/sheepdog/messages/UpdateEpochMessage.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package net.osrg.sheepdog.messages;
-
-import java.util.TreeSet;
-
-import net.osrg.sheepdog.Node;
-import net.osrg.sheepdog.NodeList;
-import net.osrg.sheepdog.NodeLogOperator;
-import net.osrg.sheepdog.ClusterInformation;
-import net.osrg.sheepdog.SheepdogException;
-import net.osrg.sheepdog.headers.Response;
-
-public class UpdateEpochMessage extends SheepdogMessage {
-
- /**
- *
- */
- private static final long serialVersionUID = 8873948460930455590L;
- private long oid;
- private int vdiEpoch;
-
- public UpdateEpochMessage(Node from, long oid, int vdiEpoch,
- int connectionId) {
- super(from, connectionId);
- this.oid = oid;
- this.vdiEpoch = vdiEpoch;
- setResult(SheepdogException.SUCCESS);
- }
-
- @Override
- public Response reply(ClusterInformation ci) {
- Response rsp = new Response();
- rsp.setResult(getResult());
- return rsp;
- }
-
- @Override
- public void updateSuperObject(ClusterInformation ci) {
- NodeList nodeList = ci.getNodeList();
- int epoch = nodeList.getEpoch();
- TreeSet<Node> nodeSet = (TreeSet<Node>) nodeList.getNodeSet();
- NodeLogOperator operator =
- new NodeLogOperator();
- int result = operator.updateEpoch(epoch, nodeSet, oid, vdiEpoch);
- setResult(result);
- }
-
- @Override
- public void updateClusterInfo(ClusterInformation ci) {
- }
-
-}
diff --git a/install-sh b/install-sh
deleted file mode 100755
index 4d4a951..0000000
--- a/install-sh
+++ /dev/null
@@ -1,323 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2005-05-14.22
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-chmodcmd="$chmodprog 0755"
-chowncmd=
-chgrpcmd=
-stripcmd=
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=
-dst=
-dir_arg=
-dstarg=
-no_target_directory=
-
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
- or: $0 [OPTION]... SRCFILES... DIRECTORY
- or: $0 [OPTION]... -t DIRECTORY SRCFILES...
- or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
--c (ignored)
--d create directories instead of installing files.
--g GROUP $chgrpprog installed files to GROUP.
--m MODE $chmodprog installed files to MODE.
--o USER $chownprog installed files to USER.
--s $stripprog installed files.
--t DIRECTORY install into DIRECTORY.
--T report an error if DSTFILE is a directory.
---help display this help and exit.
---version display version info and exit.
-
-Environment variables override the default commands:
- CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
-"
-
-while test -n "$1"; do
- case $1 in
- -c) shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- --help) echo "$usage"; exit $?;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd=$stripprog
- shift
- continue;;
-
- -t) dstarg=$2
- shift
- shift
- continue;;
-
- -T) no_target_directory=true
- shift
- continue;;
-
- --version) echo "$0 $scriptversion"; exit $?;;
-
- *) # When -d is used, all remaining arguments are directories to create.
- # When -t is used, the destination is already specified.
- test -n "$dir_arg$dstarg" && break
- # Otherwise, the last argument is the destination. Remove it from $@.
- for arg
- do
- if test -n "$dstarg"; then
- # $@ is not empty: it contains at least $arg.
- set fnord "$@" "$dstarg"
- shift # fnord
- fi
- shift # arg
- dstarg=$arg
- done
- break;;
- esac
-done
-
-if test -z "$1"; then
- if test -z "$dir_arg"; then
- echo "$0: no input file specified." >&2
- exit 1
- fi
- # It's OK to call `install-sh -d' without argument.
- # This can happen when creating conditional directories.
- exit 0
-fi
-
-for src
-do
- # Protect names starting with `-'.
- case $src in
- -*) src=./$src ;;
- esac
-
- if test -n "$dir_arg"; then
- dst=$src
- src=
-
- if test -d "$dst"; then
- mkdircmd=:
- chmodcmd=
- else
- mkdircmd=$mkdirprog
- fi
- else
- # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
- # might cause directories to be created, which would be especially bad
- # if $src (and thus $dsttmp) contains '*'.
- if test ! -f "$src" && test ! -d "$src"; then
- echo "$0: $src does not exist." >&2
- exit 1
- fi
-
- if test -z "$dstarg"; then
- echo "$0: no destination specified." >&2
- exit 1
- fi
-
- dst=$dstarg
- # Protect names starting with `-'.
- case $dst in
- -*) dst=./$dst ;;
- esac
-
- # If destination is a directory, append the input filename; won't work
- # if double slashes aren't ignored.
- if test -d "$dst"; then
- if test -n "$no_target_directory"; then
- echo "$0: $dstarg: Is a directory" >&2
- exit 1
- fi
- dst=$dst/`basename "$src"`
- fi
- fi
-
- # This sed command emulates the dirname command.
- dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
-
- # Make sure that the destination directory exists.
-
- # Skip lots of stat calls in the usual case.
- if test ! -d "$dstdir"; then
- defaultIFS='
- '
- IFS="${IFS-$defaultIFS}"
-
- oIFS=$IFS
- # Some sh's can't handle IFS=/ for some reason.
- IFS='%'
- set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
- shift
- IFS=$oIFS
-
- pathcomp=
-
- while test $# -ne 0 ; do
- pathcomp=$pathcomp$1
- shift
- if test ! -d "$pathcomp"; then
- $mkdirprog "$pathcomp"
- # mkdir can fail with a `File exist' error in case several
- # install-sh are creating the directory concurrently. This
- # is OK.
- test -d "$pathcomp" || exit
- fi
- pathcomp=$pathcomp/
- done
- fi
-
- if test -n "$dir_arg"; then
- $doit $mkdircmd "$dst" \
- && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
- && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
- else
- dstfile=`basename "$dst"`
-
- # Make a couple of temp file names in the proper directory.
- dsttmp=$dstdir/_inst.$$_
- rmtmp=$dstdir/_rm.$$_
-
- # Trap to clean up those temp files at exit.
- trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
- trap '(exit $?); exit' 1 2 13 15
-
- # Copy the file name to the temp name.
- $doit $cpprog "$src" "$dsttmp" &&
-
- # and set any options; do chmod last to preserve setuid bits.
- #
- # If any of these fail, we abort the whole thing. If we want to
- # ignore errors from any of these, just make sure not to ignore
- # errors from the above "$doit $cpprog $src $dsttmp" command.
- #
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
- && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
-
- # Now rename the file to the real destination.
- { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
- || {
- # The rename failed, perhaps because mv can't rename something else
- # to itself, or perhaps because mv is so ancient that it does not
- # support -f.
-
- # Now remove or move aside any old file at destination location.
- # We try this two ways since rm can't unlink itself on some
- # systems and the destination file might be busy for other
- # reasons. In this case, the final cleanup might fail but the new
- # file should still install successfully.
- {
- if test -f "$dstdir/$dstfile"; then
- $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
- || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
- || {
- echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
- (exit 1); exit 1
- }
- else
- :
- fi
- } &&
-
- # Now rename the file to the real destination.
- $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
- }
- }
- fi || { (exit 1); exit 1; }
-done
-
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
- (exit 0); exit 0
-}
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/sheep/Makefile.in b/sheep/Makefile.in
deleted file mode 100644
index e0ab204..0000000
--- a/sheep/Makefile.in
+++ /dev/null
@@ -1,31 +0,0 @@
-CFLAGS += -g -O2 -Wall -Wstrict-prototypes -I../include
-CFLAGS += -D_GNU_SOURCE
-LIBS += -lpthread -lcrypto
-
-PROGRAMS = sheep
-SHEEP_OBJS = sheep.o store.o net.o work.o ../lib/event.o ../lib/net.o ../lib/logger.o
-SHEEP_DEP = $(SHEEP_OBJS:.o=.d)
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-
-.PHONY:all
-all: $(PROGRAMS)
-
-sheep: $(SHEEP_OBJS)
- $(CC) $^ -o $@ $(LIBS)
-
--include $(SHEEP_DEP)
-
-%.o: %.c
- $(CC) -c $(CFLAGS) $*.c -o $*.o
- @$(CC) -MM $(CFLAGS) -MF $*.d -MT $*.o $*.c
-
-.PHONY:clean
-clean:
- rm -f *.[od] $(PROGRAMS)
-
-.PHONY:install
-install: $(PROGRAMS)
- install $< $(bindir)
diff --git a/sheep/net.c b/sheep/net.c
deleted file mode 100644
index bcc1f17..0000000
--- a/sheep/net.c
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include <errno.h>
-#include <fcntl.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <sys/epoll.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include "sheep.h"
-#include "util.h"
-
-static struct request *alloc_request(struct client_info *ci, int data_length)
-{
- struct request *req;
-
- req = zalloc(sizeof(struct request) + data_length);
- if (!req)
- return NULL;
-
- req->ci = ci;
- if (data_length)
- req->data = (char *)req + sizeof(*req);
-
- list_add(&req->r_siblings, &ci->reqs);
- INIT_LIST_HEAD(&req->r_wlist);
-
- return req;
-}
-
-static void free_request(struct request *req)
-{
- list_del(&req->r_siblings);
- free(req);
-}
-
-static void req_done(struct request *req)
-{
- list_add(&req->r_wlist, &req->ci->done_reqs);
- conn_tx_on(&req->ci->conn);
-}
-
-static void init_rx_hdr(struct client_info *ci)
-{
- ci->conn.c_rx_state = C_IO_HEADER;
- ci->rx_req = NULL;
- ci->conn.rx_length = sizeof(struct sd_req);
- ci->conn.rx_buf = &ci->conn.rx_hdr;
-}
-
-static void client_rx_handler(struct client_info *ci)
-{
- int ret;
- uint64_t data_len;
- struct connection *conn = &ci->conn;
- struct sd_req *hdr = &conn->rx_hdr;
- struct request *req;
-
- switch (conn->c_rx_state) {
- case C_IO_HEADER:
- ret = rx(conn, C_IO_DATA_INIT);
- if (!ret || conn->c_rx_state != C_IO_DATA_INIT)
- break;
- case C_IO_DATA_INIT:
- data_len = hdr->data_length;
-
- req = alloc_request(ci, data_len);
- if (!req) {
- conn->c_rx_state = C_IO_CLOSED;
- break;
- }
- ci->rx_req = req;
-
- /* use le_to_cpu */
- memcpy(&req->rq, hdr, sizeof(req->rq));
-
- if (data_len && hdr->flags & SD_FLAG_CMD_WRITE) {
- conn->c_rx_state = C_IO_DATA;
- conn->rx_length = data_len;
- conn->rx_buf = req->data;
- } else {
- conn->c_rx_state = C_IO_END;
- break;
- }
- case C_IO_DATA:
- ret = rx(conn, C_IO_END);
- break;
- default:
- eprintf("BUG: unknown state %d\n", conn->c_rx_state);
- }
-
- if (is_conn_dead(conn) || conn->c_rx_state != C_IO_END)
- return;
-
- /* now we have a complete command */
-
- req = ci->rx_req;
-
- init_rx_hdr(ci);
-
- if (hdr->flags & SD_FLAG_CMD_WRITE)
- req->rp.data_length = 0;
- else
- req->rp.data_length = hdr->data_length;
-
- req->done = req_done;
-
- queue_request(req);
-}
-
-static void init_tx_hdr(struct client_info *ci)
-{
- struct sd_rsp *rsp = (struct sd_rsp *)&ci->conn.tx_hdr;
- struct request *req;
-
- if (ci->tx_req || list_empty(&ci->done_reqs))
- return;
-
- memset(rsp, 0, sizeof(*rsp));
-
- req = list_first_entry(&ci->done_reqs, struct request, r_wlist);
- list_del(&req->r_wlist);
-
- ci->tx_req = req;
- ci->conn.tx_length = sizeof(*rsp);
- ci->conn.c_tx_state = C_IO_HEADER;
- ci->conn.tx_buf = rsp;
-
- /* use cpu_to_le */
- memcpy(rsp, &req->rp, sizeof(*rsp));
-
- rsp->epoch = node_list_version;
- rsp->opcode = req->rq.opcode;
- rsp->id = req->rq.id;
-}
-
-static void client_tx_handler(struct client_info *ci)
-{
- int ret, opt;
- struct sd_rsp *rsp = (struct sd_rsp *)&ci->conn.tx_hdr;
-
-again:
- init_tx_hdr(ci);
- if (!ci->tx_req) {
- conn_tx_off(&ci->conn);
- return;
- }
-
- opt = 1;
- setsockopt(ci->conn.fd, SOL_TCP, TCP_CORK, &opt, sizeof(opt));
-
- switch (ci->conn.c_tx_state) {
- case C_IO_HEADER:
- if (rsp->data_length)
- ret = tx(&ci->conn, C_IO_DATA_INIT, MSG_MORE);
- else
- ret = tx(&ci->conn, C_IO_DATA_INIT, 0);
-
- if (!ret)
- break;
-
- if (rsp->data_length) {
- ci->conn.tx_length = rsp->data_length;
- ci->conn.tx_buf = ci->tx_req->data;
- ci->conn.c_tx_state = C_IO_DATA;
- } else {
- ci->conn.c_tx_state = C_IO_END;
- break;
- }
- case C_IO_DATA:
- ret = tx(&ci->conn, C_IO_END, 0);
- if (!ret)
- break;
- default:
- break;
- }
-
- opt = 0;
- setsockopt(ci->conn.fd, SOL_TCP, TCP_CORK, &opt, sizeof(opt));
-
- if (is_conn_dead(&ci->conn) || ci->conn.c_tx_state != C_IO_END)
- return;
-
- if (ci->conn.c_tx_state == C_IO_END) {
- free_request(ci->tx_req);
- ci->tx_req = NULL;
- goto again;
- }
-}
-
-static void destroy_client(struct client_info *ci)
-{
- close(ci->conn.fd);
- free(ci);
-}
-
-static struct client_info *create_client(int fd)
-{
- struct client_info *ci;
-
- ci = zalloc(sizeof(*ci));
- if (!ci)
- return NULL;
-
- ci->conn.fd = fd;
-
- INIT_LIST_HEAD(&ci->reqs);
- INIT_LIST_HEAD(&ci->done_reqs);
-
- init_rx_hdr(ci);
-
- return ci;
-}
-
-static void client_handler(int fd, int events, void *data)
-{
- struct client_info *ci = (struct client_info *)data;
-
- if (events & EPOLLIN)
- client_rx_handler(ci);
-
- if (!is_conn_dead(&ci->conn) && events & EPOLLOUT)
- client_tx_handler(ci);
-
- if (is_conn_dead(&ci->conn)) {
- dprintf("closed a connection, %d\n", fd);
- unregister_event(fd);
- destroy_client(ci);
- }
-}
-
-static void listen_handler(int listen_fd, int events, void *data)
-{
- struct sockaddr_storage from;
- socklen_t namesize;
- int fd, ret, opt;
- struct client_info *ci;
-
- namesize = sizeof(from);
- fd = accept(listen_fd, (struct sockaddr *)&from, &namesize);
- if (fd < 0) {
- eprintf("can't accept a new connection, %m\n");
- return;
- }
-
- opt = 1;
- ret = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &opt, sizeof(opt));
- if (ret) {
- close(fd);
- return;
- }
-
- ci = create_client(fd);
- if (!ci) {
- close(fd);
- return;
- }
-
- ret = register_event(fd, client_handler, ci);
- if (ret) {
- destroy_client(ci);
- return;
- }
-
- dprintf("accepted a new connection, %d\n", fd);
-}
-
-static int create_listen_port_fn(int fd, void *data)
-{
- return register_event(fd, listen_handler, NULL);
-}
-
-int create_listen_port(int port)
-{
- return create_listen_ports(port, create_listen_port_fn, NULL);
-}
diff --git a/sheep/sheep.c b/sheep/sheep.c
deleted file mode 100644
index df8c3e5..0000000
--- a/sheep/sheep.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include <errno.h>
-#include <getopt.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/epoll.h>
-
-#include "sheep.h"
-#include "list.h"
-#include "util.h"
-#include "event.h"
-
-#define EPOLL_SIZE 4096
-#define DEFAULT_OBJECT_DIR "/tmp"
-
-static char program_name[] = "sheep";
-
-static struct option const long_options[] =
-{
- {"dport", required_argument, 0, 'D'},
- {"sport", required_argument, 0, 's'},
- {"foreground", no_argument, 0, 'f'},
- {"debug", no_argument, 0, 'd'},
- {"help", no_argument, 0, 'h'},
- {0, 0, 0, 0},
-};
-
-static char *short_options = "D:s:fdh";
-
-int nr_nodes;
-struct sheepdog_node_list_entry *node_list_entries;
-
-static void usage(int status)
-{
- if (status)
- fprintf(stderr, "Try `%s --help' for more information.\n", program_name);
- else {
- printf("Usage: %s [OPTION] [PATH]\n", program_name);
- printf("\
-Virtual Machine Distributed File System Object Store Target\n\
- -D, --dport specify the dog listen port number\n\
- -s, --sport specify the sheep (our) listen port number\n\
- -f, --foreground make the program run in the foreground\n\
- -d, --debug print debug messages\n\
- -h, --help display this help and exit\n\
-");
- }
- exit(status);
-}
-
-uint32_t node_list_version;
-
-#define NODE_LIST_UPDATE_INTERVAL 2
-
-static struct timer node_list_timer;
-
-static int node_idx;
-int dogport = DOG_LISTEN_PORT;
-
-int get_node_list(void *buf, unsigned int size, unsigned int *epoch, int *idx,
- int set_timer)
-{
- int fd, ret = 1;
- unsigned int wlen;
- struct sheepdog_node_list_entry *ent;
- struct sd_node_req hdr;
- struct sd_node_rsp *rsp = (struct sd_node_rsp *)&hdr;
-
- fd = connect_to("localhost", dogport);
- if (fd < 0) {
- eprintf("can't connect to dog!\n");
- goto out;
- }
-
- memset(&hdr, 0, sizeof(hdr));
- hdr.opcode = SD_OP_GET_NODE_LIST;
- hdr.data_length = size;
- hdr.epoch = *epoch;
-
- wlen = 0;
-
- ret = exec_req(fd, (struct sd_req *)&hdr, buf, &wlen, &size);
-
- close(fd);
-
- if (ret) {
- eprintf("can't connect to dog!\n");
- ret = -1;
- goto out;
- }
-
- if (size <= 0)
- goto out;
-
- ret = size / sizeof(*ent);
- *epoch = rsp->epoch;
- *idx = rsp->local_idx;
-out:
- if (set_timer)
- add_timer(&node_list_timer, NODE_LIST_UPDATE_INTERVAL);
-
- return ret;
-}
-
-static void update_node_list(void *data)
-{
- int ret, size, idx = 0;
- unsigned epoch = 0;
- char *buf;
-
- size = SD_MAX_NODES * sizeof(struct sheepdog_node_list_entry);
-
- buf = zalloc(size);
- if (!buf)
- return;
-
- ret = get_node_list(buf, size, &epoch, &idx, 1);
-
- if (ret > 0 && epoch != node_list_version) {
- memcpy(node_list_entries, buf, size);
- node_list_version = epoch;
- nr_nodes = ret;
- node_idx = idx;
- }
-
- free(buf);
-}
-
-static int init_node_list(void)
-{
- int ret, size, idx = 0;
- unsigned epoch = 0;
-
- size = SD_MAX_NODES * sizeof(struct sheepdog_node_list_entry);
-
- node_list_entries = zalloc(size);
-
- ret = get_node_list(node_list_entries, size, &epoch, &idx, 0);
- if (ret > 0) {
- node_list_version = epoch;
- node_idx = idx;
- nr_nodes = ret;
- }
-
- node_list_timer.callback = update_node_list;
-
- add_timer(&node_list_timer, NODE_LIST_UPDATE_INTERVAL);
-
- return 0;
-}
-
-int main(int argc, char **argv)
-{
- int ch, longindex;
- int ret, port = SHEEP_LISTEN_PORT;
- char *dir = DEFAULT_OBJECT_DIR;
- int is_daemon = 1;
- int is_debug = 0;
-
- while ((ch = getopt_long(argc, argv, short_options, long_options,
- &longindex)) >= 0) {
- switch (ch) {
- case 'D':
- dogport = atoi(optarg);
- break;
- case 's':
- port = atoi(optarg);
- break;
- case 'f':
- is_daemon = 0;
- break;
- case 'd':
- is_debug = 1;
- break;
- case 'h':
- usage(0);
- break;
- default:
- usage(1);
- break;
- }
- }
-
- if (optind != argc)
- dir = argv[optind];
-
- ret = log_init(program_name, LOG_SPACE_SIZE, is_daemon, is_debug);
- if (ret)
- exit(1);
-
- if (is_daemon && daemon(0, 0))
- exit(1);
-
- ret = init_event(EPOLL_SIZE);
- if (ret)
- exit(1);
-
- ret = init_node_list();
-
- ret = create_listen_port(port);
- if (ret)
- exit(1);
-
- ret = init_store(dir);
- if (ret)
- exit(1);
-
- init_worker();
-
- event_loop(-1);
-
- return 0;
-}
diff --git a/sheep/sheep.h b/sheep/sheep.h
deleted file mode 100644
index 57c2069..0000000
--- a/sheep/sheep.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __VOST_H__
-#define __VOST_H__
-
-#include <inttypes.h>
-
-#include "sheepdog_proto.h"
-#include "list.h"
-#include "event.h"
-#include "logger.h"
-#include "work.h"
-#include "net.h"
-
-struct client_info {
- struct connection conn;
-
- struct request *rx_req;
-
- struct request *tx_req;
-
- struct list_head reqs;
- struct list_head done_reqs;
-};
-
-struct request;
-
-typedef void (*req_end_t)(struct request *);
-
-struct request {
- struct sd_req rq;
- struct sd_rsp rp;
-
- void *data;
-
- struct client_info *ci;
- struct list_head r_siblings;
- struct list_head r_wlist;
-
- req_end_t done;
- struct work work;
-};
-
-extern uint32_t node_list_version;
-
-extern int nr_nodes;
-extern int dogport;
-extern struct sheepdog_node_list_entry *node_list_entries;
-
-int create_listen_port(int port);
-
-int init_store(char *dir);
-
-void queue_request(struct request *req);
-
-int get_node_list(void *buf, unsigned int size, unsigned int *epoch, int *idx,
- int set_timer);
-#endif
diff --git a/sheep/store.c b/sheep/store.c
deleted file mode 100644
index 9a65d1d..0000000
--- a/sheep/store.c
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * Copyright (C) 2009 Nippon Telegraph and Telephone Corporation.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License version
- * 2 as published by the Free Software Foundation.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <mntent.h>
-#include <poll.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <openssl/sha.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/xattr.h>
-#include <sys/sendfile.h>
-#include <sys/statvfs.h>
-
-#include "sheep.h"
-#include "meta.h"
-#include "util.h"
-
-static char *obj_dir;
-static char *mnt_dir;
-static char *zero_block;
-
-static int stat_sheep(uint64_t *store_size, uint64_t *store_free)
-{
- struct statvfs vs;
- int ret;
- DIR *dir;
- struct dirent *d;
- uint64_t used = 0;
- struct stat s;
- char path[1024];
-
- ret = statvfs(mnt_dir, &vs);
- if (ret)
- return SD_RES_EIO;
-
- dir = opendir(obj_dir);
- if (!dir)
- return SD_RES_EIO;
-
- while ((d = readdir(dir))) {
- if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
- continue;
-
- snprintf(path, sizeof(path), "%s/%s", obj_dir, d->d_name);
-
- ret = stat(path, &s);
- if (ret)
- continue;
-
- used += s.st_size;
- }
-
- *store_size = vs.f_frsize * vs.f_bfree;
- *store_free = vs.f_frsize * vs.f_bfree - used;
-
- return SD_RES_SUCCESS;
-}
-
-static int get_vdi_epoch(uint64_t oid, unsigned int *epoch)
-{
- struct sd_vdi_req hdr;
- struct sd_vdi_rsp *rsp = (struct sd_vdi_rsp *)&hdr;
- int fd, ret;
- unsigned int rlen, wlen;
-
- memset(&hdr, 0, sizeof(hdr));
-
- hdr.opcode = SD_OP_GET_EPOCH;
- hdr.base_oid = oid;
- hdr.epoch = node_list_version;
-
- fd = connect_to("localhost", dogport);
- if (fd < 0) {
- eprintf("can't connect to dog!\n");
- return -1;
- }
-
- wlen = 0;
- rlen = 0;
-
- ret = exec_req(fd, (struct sd_req *)&hdr, NULL, &wlen, &rlen);
- if (!ret)
- *epoch = rsp->vdi_epoch;
-
- close(fd);
-
- if (ret)
- return -1;
-
- return 0;
-}
-
-static int read_from_one(uint64_t oid, unsigned int epoch,
- unsigned *rlen, void *buf, uint64_t offset)
-{
- int i, n, nr, fd, ret;
- unsigned wlen;
- char name[128];
- struct sheepdog_node_list_entry *e;
- void *p = NULL;
- struct sd_obj_req hdr;
- struct sd_obj_rsp *rsp = (struct sd_obj_rsp *)&hdr;
-
- if (epoch == node_list_version) {
- nr = nr_nodes;
- e = node_list_entries;
- } else {
- int idx;
- unsigned size;
-
- size = SD_MAX_NODES * sizeof(struct sheepdog_node_list_entry);
-
- p = zalloc(size);
- if (!p)
- return -1;
-
- ret = get_node_list(p, size, &epoch, &idx, 0);
- if (ret <= 0) {
- free(p);
- return -1;
- }
-
- nr = ret;
- e = (struct sheepdog_node_list_entry *)p;
- }
-
-again:
- for (i = 0; i < nr; i++) {
- n = obj_to_sheep(e, nr, oid, i);
-
- snprintf(name, sizeof(name), "%d.%d.%d.%d",
- e[n].addr[12], e[n].addr[13], e[n].addr[14], e[n].addr[15]);
-
- fd = connect_to(name, e[n].port);
- if (fd < 0)
- continue;
-
- memset(&hdr, 0, sizeof(hdr));
- hdr.opcode = SD_OP_READ_OBJ;
- hdr.oid = oid;
- hdr.epoch = node_list_version;
-
- hdr.flags = 0;
- hdr.data_length = *rlen;
- hdr.offset = offset;
-
- ret = exec_req(fd, (struct sd_req *)&hdr, buf, &wlen, rlen);
-
- close(fd);
-
- if (ret)
- continue;
-
- switch (rsp->result) {
- case SD_RES_SUCCESS:
- return 0;
- case SD_RES_OLD_NODE_VER:
- case SD_RES_NEW_NODE_VER:
- /* waits for the node list timer */
- sleep(2);
- goto again;
- break;
- default:
- ;
- }
- }
-
- return -1;
-}
-
-static int read_from_other_sheeps(uint64_t oid, char *buf, int copies)
-{
- int ret;
- unsigned int rlen;
- unsigned epoch;
- uint64_t offset, eidx;
- struct sheepdog_inode *i;
-
- ret = get_vdi_epoch(oid_to_ino(oid), &epoch);
- if (ret)
- return -1;
-
- rlen = sizeof(unsigned);
- eidx = (oid & ((1ULL << DATA_SPACE_SHIFT) - 1)) - 1;
- offset = (char *)&(i->epoch[eidx]) - (char *)i;
-
- ret = read_from_one(oid_to_ino(oid), epoch, &rlen, &epoch, offset);
- if (ret)
- return -1;
-
- rlen = SD_DATA_OBJ_SIZE;
-
- ret = read_from_one(oid, epoch, &rlen, buf, 0);
-
- return ret;
-}
-
-static void __queue_request(struct work *work, int idx)
-{
- struct request *req = container_of(work, struct request, work);
- char path[1024];
- int fd = -1, ret = SD_RES_SUCCESS;
- int flags = O_RDWR;
- char *buf = zero_block + idx * SD_DATA_OBJ_SIZE;
- char aname[] = "user.sheepdog.copies";
- struct sd_obj_req *hdr = (struct sd_obj_req *)&req->rq;
- struct sd_obj_rsp *rsp = (struct sd_obj_rsp *)&req->rp;
- uint64_t oid = hdr->oid;
- uint32_t opcode = hdr->opcode;
- uint32_t req_node_list_version = hdr->epoch;
- struct sd_node_rsp *nrsp = (struct sd_node_rsp *)&req->rp;
- int copies;
-
- /* use le_to_cpu */
-
- snprintf(path, sizeof(path), "%s/%" PRIx64, obj_dir, oid);
-
- dprintf("%d, %x, %s, %u, %u\n", idx, opcode, path,
- node_list_version, req_node_list_version);
-
- if (!nr_nodes) {
- /* we haven't got SD_OP_GET_NODE_LIST response yet. */
- ret = SD_RES_SYSTEM_ERROR;
- goto out;
- }
-
- if (opcode != SD_OP_GET_NODE_LIST) {
- if (before(req_node_list_version, node_list_version)) {
- ret = SD_RES_OLD_NODE_VER;
- eprintf("old node version %u %u, %x %" PRIx64 " %d\n",
- node_list_version, req_node_list_version, opcode,
- oid, req->ci->conn.fd);
- goto out;
- } else if (after(req_node_list_version, node_list_version)) {
- ret = SD_RES_NEW_NODE_VER;
- eprintf("protocol bug, new node version %u %u %x %" PRIx64 "\n",
- node_list_version, req_node_list_version, opcode,
- oid);
- goto out;
- }
- }
-
- switch (opcode) {
- case SD_OP_CREATE_AND_WRITE_OBJ:
- case SD_OP_WRITE_OBJ:
- case SD_OP_READ_OBJ:
- case SD_OP_SYNC_OBJ:
- if (opcode == SD_OP_CREATE_AND_WRITE_OBJ)
- flags |= O_CREAT;
-
- fd = open(path, flags, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP);
- if (fd < 0) {
- if (errno == ENOENT)
- ret = SD_RES_NO_OBJ;
- else
- ret = SD_RES_UNKNOWN;
-
- goto out;
- }
-
- if (opcode == SD_OP_CREATE_AND_WRITE_OBJ) {
- if (!hdr->copies) {
- eprintf("zero copies is invalid\n");
- ret = SD_RES_INVALID_PARMS;
- goto out;
- }
-
- ret = ftruncate(fd, 0);
- if (ret) {
- ret = SD_RES_EIO;
- goto out;
- }
-
- ret = fsetxattr(fd, aname, &hdr->copies,
- sizeof(hdr->copies), 0);
- if (ret) {
- eprintf("use 'user_xattr' option?\n");
- ret = SD_RES_SYSTEM_ERROR;
- goto out;
- }
-
- if (is_data_obj(oid)) {
- if (hdr->flags & SD_FLAG_CMD_COW) {
- dprintf("%" PRIu64 "\n", hdr->cow_oid);
-
- ret = read_from_other_sheeps(hdr->cow_oid, buf,
- hdr->copies);
- if (ret) {
- ret = 1;
- goto out;
- }
- } else {
- dprintf("%" PRIu64 "\n", oid);
- memset(buf, 0, SD_DATA_OBJ_SIZE);
- }
-
- dprintf("%" PRIu64 "\n", oid);
-
- ret = pwrite64(fd, buf, SD_DATA_OBJ_SIZE, 0);
- if (ret != SD_DATA_OBJ_SIZE) {
- ret = SD_RES_EIO;
- goto out;
- }
- }
- }
- default:
- break;
- }
-
- switch (opcode) {
- case SD_OP_REMOVE_OBJ:
- ret = unlink(path);
- if (ret)
- ret = 1;
- break;
- case SD_OP_READ_OBJ:
- /*
- * TODO: should be optional (we can use the flags) for
- * performance; qemu doesn't always need the copies.
- */
- copies = 0;
- ret = fgetxattr(fd, aname, &copies, sizeof(copies));
- if (ret != sizeof(copies)) {
- ret = SD_RES_SYSTEM_ERROR;
- goto out;
- }
-
- ret = pread64(fd, req->data, hdr->data_length, hdr->offset);
- if (ret < 0)
- ret = SD_RES_EIO;
- else {
- rsp->data_length = ret;
- rsp->copies = copies;
- ret = SD_RES_SUCCESS;
- }
- break;
- case SD_OP_CREATE_AND_WRITE_OBJ:
- case SD_OP_WRITE_OBJ:
- ret = pwrite64(fd, req->data, hdr->data_length, hdr->offset);
- if (ret != hdr->data_length) {
- ret = SD_RES_EIO;
- goto out;
- } else
- ret = SD_RES_SUCCESS;
- break;
- case SD_OP_SYNC_OBJ:
- ret = fsync(fd);
- if (ret) {
- if (errno == EIO)
- ret = SD_RES_EIO;
- else
- ret = SD_RES_UNKNOWN;
- }
- break;
- case SD_OP_STAT_SHEEP:
- ret = stat_sheep(&nrsp->store_size, &nrsp->store_free);
- break;
- }
-out:
- if (ret != SD_RES_SUCCESS) {
- dprintf("failed, %d, %x, %s, %u, %u\n", idx, opcode, path,
- node_list_version, req_node_list_version);
-
- rsp->result = ret;
- }
-
- if (fd != -1)
- close(fd);
-}
-
-static void __done(struct work *work, int idx)
-{
- struct request *req = container_of(work, struct request, work);
-
- req->done(req);
-}
-
-void queue_request(struct request *req)
-{
- req->work.fn = __queue_request;
- req->work.done = __done;
-
- list_del(&req->r_wlist);
-
- queue_work(&req->work);
-}
-
-int init_store(char *dir)
-{
- int ret;
- struct mntent *mnt;
- struct stat s, ms;
- FILE *fp;
-
- ret = stat(dir, &s);
- if (ret) {
- if (errno == ENOENT) {
- ret = mkdir(dir, S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP);
- if (ret) {
- eprintf("can't create the object dir %s, %m\n",
- dir);
- return 1;
- } else {
- ret = stat(dir, &s);
- if (ret)
- return 1;
-
- eprintf("created the object dir %s\n", dir);
- }
- } else {
- eprintf("can't handle the object dir %s, %m\n", dir);
- return 1;
- }
- } else if (!S_ISDIR(s.st_mode)) {
- eprintf("%s is not a directory\n", dir);
- return 1;
- }
-
- obj_dir = dir;
-
- fp = setmntent(MOUNTED, "r");
- if (!fp)
- return 1;
-
- while ((mnt = getmntent(fp))) {
- ret = stat(mnt->mnt_dir, &ms);
- if (ret)
- continue;
-
- if (ms.st_dev == s.st_dev) {
- mnt_dir = strdup(mnt->mnt_dir);
- break;
- }
- }
-
- endmntent(fp);
-
- zero_block = zalloc(SD_DATA_OBJ_SIZE * NR_WORKER_THREAD);
- if (!zero_block)
- return 1;
-
- return ret;
-}
diff --git a/sheep/work.c b/sheep/work.c
deleted file mode 100644
index 4df8dc0..0000000
--- a/sheep/work.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (C) 2007 FUJITA Tomonori <tomof at acm.org>
- * Copyright (C) 2007 Mike Christie <michaelc at cs.wisc.edu>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation, version 2 of the
- * License.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-#include <errno.h>
-#include <string.h>
-#include <inttypes.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <syscall.h>
-#include <sys/types.h>
-#include <linux/types.h>
-#include <linux/signalfd.h>
-
-#include "list.h"
-#include "util.h"
-#include "work.h"
-#include "logger.h"
-#include "event.h"
-
-extern int signalfd(int fd, const sigset_t *mask, int flags);
-
-struct worker_info {
- pthread_t worker_thread[NR_WORKER_THREAD];
-
- pthread_mutex_t finished_lock;
- struct list_head finished_list;
-
- /* wokers sleep on this and signaled by tgtd */
- pthread_cond_t pending_cond;
- /* locked by tgtd and workers */
- pthread_mutex_t pending_lock;
- /* protected by pending_lock */
- struct list_head pending_list;
-
- pthread_mutex_t startup_lock;
-
- int sig_fd;
-
- int stop;
-};
-
-static struct worker_info __wi;
-
-static void bs_thread_request_done(int fd, int events, void *data)
-{
- int ret;
- struct worker_info *wi = data;
- struct work *work;
- struct signalfd_siginfo siginfo[16];
- LIST_HEAD(list);
-
- ret = read(fd, (char *)siginfo, sizeof(siginfo));
- if (ret <= 0) {
- return;
- }
-
- pthread_mutex_lock(&wi->finished_lock);
- list_splice_init(&wi->finished_list, &list);
- pthread_mutex_unlock(&wi->finished_lock);
-
- while (!list_empty(&list)) {
- work = list_first_entry(&list, struct work, w_list);
- list_del(&work->w_list);
-
- work->done(work, 0);
- }
-}
-
-static void *worker_routine(void *arg)
-{
- struct worker_info *wi = &__wi;
- struct work *work;
- pthread_t *p = arg;
- int idx = p - wi->worker_thread;
- sigset_t set;
-
- sigfillset(&set);
- sigprocmask(SIG_BLOCK, &set, NULL);
-
- pthread_mutex_lock(&wi->startup_lock);
- dprintf("started this thread %d\n", idx);
- pthread_mutex_unlock(&wi->startup_lock);
-
- while (!wi->stop) {
- pthread_mutex_lock(&wi->pending_lock);
- retest:
- if (list_empty(&wi->pending_list)) {
- pthread_cond_wait(&wi->pending_cond, &wi->pending_lock);
- if (wi->stop) {
- pthread_mutex_unlock(&wi->pending_lock);
- pthread_exit(NULL);
- }
- goto retest;
- }
-
- work = list_first_entry(&wi->pending_list,
- struct work, w_list);
-
- list_del(&work->w_list);
- pthread_mutex_unlock(&wi->pending_lock);
-
- work->fn(work, idx);
-
- pthread_mutex_lock(&wi->finished_lock);
- list_add_tail(&work->w_list, &wi->finished_list);
- pthread_mutex_unlock(&wi->finished_lock);
-
- kill(getpid(), SIGUSR2);
- }
-
- pthread_exit(NULL);
-}
-
-int init_worker(void)
-{
- int i, ret;
- sigset_t mask;
- struct worker_info *wi = &__wi;
-
- INIT_LIST_HEAD(&wi->pending_list);
- INIT_LIST_HEAD(&wi->finished_list);
-
- pthread_cond_init(&wi->pending_cond, NULL);
-
- pthread_mutex_init(&wi->finished_lock, NULL);
- pthread_mutex_init(&wi->pending_lock, NULL);
- pthread_mutex_init(&wi->startup_lock, NULL);
-
- sigemptyset(&mask);
- sigaddset(&mask, SIGUSR2);
- sigprocmask(SIG_BLOCK, &mask, NULL);
-
- wi->sig_fd = signalfd(-1, &mask, 0);
- if (wi->sig_fd < 0) {
- eprintf("failed to create a signal fd, %m\n");
- return 1;
- }
-
- ret = fcntl(wi->sig_fd, F_GETFL);
- ret = fcntl(wi->sig_fd, F_SETFL, ret | O_NONBLOCK);
-
- ret = register_event(wi->sig_fd, bs_thread_request_done, wi);
- if (ret) {
- eprintf("failed to add epoll event\n");
- goto destroy_cond_mutex;
- }
-
- pthread_mutex_lock(&wi->startup_lock);
- for (i = 0; i < NR_WORKER_THREAD; i++) {
- ret = pthread_create(&wi->worker_thread[i], NULL,
- worker_routine, &wi->worker_thread[i]);
-
- if (ret) {
- eprintf("failed to create a worker thread, %d %s\n",
- i, strerror(ret));
- if (ret)
- goto destroy_threads;
- }
- }
- pthread_mutex_unlock(&wi->startup_lock);
-
- return 0;
-destroy_threads:
-
- wi->stop = 1;
- pthread_mutex_unlock(&wi->startup_lock);
- for (; i > 0; i--) {
- pthread_join(wi->worker_thread[i - 1], NULL);
- eprintf("stopped the worker thread %d\n", i - 1);
- }
-
- unregister_event(wi->sig_fd);
-destroy_cond_mutex:
- pthread_cond_destroy(&wi->pending_cond);
- pthread_mutex_destroy(&wi->pending_lock);
- pthread_mutex_destroy(&wi->startup_lock);
- pthread_mutex_destroy(&wi->finished_lock);
-
- return 1;
-}
-
-void exit_worker(void)
-{
- int i;
- struct worker_info *wi = &__wi;
-
- wi->stop = 1;
- pthread_cond_broadcast(&wi->pending_cond);
-
- for (i = 0; wi->worker_thread[i] &&
- i < ARRAY_SIZE(wi->worker_thread); i++)
- pthread_join(wi->worker_thread[i], NULL);
-
- pthread_cond_destroy(&wi->pending_cond);
- pthread_mutex_destroy(&wi->pending_lock);
- pthread_mutex_destroy(&wi->startup_lock);
- pthread_mutex_destroy(&wi->finished_lock);
-
- unregister_event(wi->sig_fd);
-
- wi->stop = 0;
-}
-
-void queue_work(struct work *work)
-{
- struct worker_info *wi = &__wi;
-
- pthread_mutex_lock(&wi->pending_lock);
-
- list_add_tail(&work->w_list, &wi->pending_list);
-
- pthread_mutex_unlock(&wi->pending_lock);
-
- pthread_cond_signal(&wi->pending_cond);
-}
diff --git a/sheep/work.h b/sheep/work.h
deleted file mode 100644
index 81d8c56..0000000
--- a/sheep/work.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef __WORK_H__
-#define __WORK_H__
-
-#define NR_WORKER_THREAD 4
-
-struct work;
-
-typedef void (*work_func_t)(struct work *, int idx);
-
-struct work {
- struct list_head w_list;
- work_func_t fn;
- work_func_t done;
-};
-
-int init_worker(void);
-void exit_worker(void);
-void queue_work(struct work *work);
-
-#endif
--
1.6.3.3
More information about the sheepdog
mailing list