]> jfr.im git - irc/rqf/shadowircd.git/commitdiff
Add SHA256/SHA512 support to crypt.c and fix up the MD5 component (it seemed to have...
authorJD Horelick <redacted>
Wed, 19 Jan 2011 20:50:46 +0000 (15:50 -0500)
committerJD Horelick <redacted>
Wed, 19 Jan 2011 20:50:46 +0000 (15:50 -0500)
libratbox/configure
libratbox/configure.ac
libratbox/src/Makefile.am
libratbox/src/Makefile.in
libratbox/src/crypt.c

index 0833ead94cc14a432668c7b96012561f207084d0..9b628aaf0e18bc32c64e676f88da7c8fc1a77bc8 100755 (executable)
@@ -1,13 +1,13 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65 for libratbox devel.
+# Generated by GNU Autoconf 2.68 for libratbox devel.
 #
 # $Id: configure.ac 26260 2008-12-10 04:08:39Z androsyn $
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -91,6 +91,7 @@ fi
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -216,11 +217,18 @@ IFS=$as_save_IFS
   # 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.
+       # Preserve -v and -x to the replacement shell.
        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+"$@"}
+       case $- in # ((((
+         *v*x* | *x*v* ) as_opts=-vx ;;
+         *v* ) as_opts=-v ;;
+         *x* ) as_opts=-x ;;
+         * ) as_opts= ;;
+       esac
+       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -318,7 +326,7 @@ $as_echo X"$as_dir" |
       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"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -358,19 +366,19 @@ else
 fi # as_fn_arith
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# as_fn_error STATUS 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.
+# 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
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -681,7 +689,7 @@ test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
 
 # Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
 # so uname gets run too.
 ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
 
@@ -756,9 +764,6 @@ GNUTLS_LIBS
 GNUTLS_CFLAGS
 PKG_CONFIG
 ALLOCA
-CRYPT_LIB
-NEED_CRYPT_FALSE
-NEED_CRYPT_TRUE
 MINGW_FALSE
 MINGW_TRUE
 OTOOL64
@@ -968,8 +973,9 @@ do
   fi
 
   case $ac_option in
-  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)   ac_optarg=yes ;;
+  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *=)   ac_optarg= ;;
+  *)    ac_optarg=yes ;;
   esac
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
@@ -1014,7 +1020,7 @@ do
     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"
+      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
@@ -1040,7 +1046,7 @@ do
     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"
+      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
@@ -1244,7 +1250,7 @@ do
     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"
+      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
@@ -1260,7 +1266,7 @@ do
     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"
+      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
@@ -1290,8 +1296,8 @@ do
   | --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."
+  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
     ;;
 
   *=*)
@@ -1299,7 +1305,7 @@ Try \`$0 --help' for more information."
     # 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'" ;;
+      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
     esac
     eval $ac_envvar=\$ac_optarg
     export $ac_envvar ;;
@@ -1309,7 +1315,7 @@ Try \`$0 --help' for more information."
     $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}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1317,13 +1323,13 @@ done
 
 if test -n "$ac_prev"; then
   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error "missing argument to $ac_option"
+  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" ;;
+    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
@@ -1346,7 +1352,7 @@ do
     [\\/$]* | ?:[\\/]* )  continue;;
     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
   esac
-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+  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'
@@ -1360,8 +1366,8 @@ target=$target_alias
 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
+    $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
@@ -1376,9 +1382,9 @@ 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"
+  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"
+  as_fn_error $? "pwd does not report name of working directory"
 
 
 # Find the source files, if location was not specified.
@@ -1417,11 +1423,11 @@ else
 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"
+  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"
+       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
@@ -1461,7 +1467,7 @@ Configuration:
       --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
+  -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
@@ -1633,9 +1639,9 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 libratbox configure devel
-generated by GNU Autoconf 2.65
+generated by GNU Autoconf 2.68
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 
@@ -1681,7 +1687,7 @@ 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;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1707,7 +1713,7 @@ $as_echo "$ac_try_echo"; } >&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 $ac_status = 0; } > conftest.i && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
        }; then :
@@ -1718,7 +1724,7 @@ 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;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1731,10 +1737,10 @@ fi
 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 :
+  if eval \${$3+:} false; 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 :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1770,7 +1776,7 @@ if ac_fn_c_try_cpp "$LINENO"; then :
 else
   ac_header_preproc=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
 $as_echo "$ac_header_preproc" >&6; }
 
@@ -1797,7 +1803,7 @@ $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 :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1806,7 +1812,7 @@ 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;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1847,7 +1853,7 @@ 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;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1861,7 +1867,7 @@ 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 :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1879,7 +1885,7 @@ 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;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1924,7 +1930,7 @@ fi
   # 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;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1937,7 +1943,7 @@ 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 :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1992,7 +1998,7 @@ 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;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
@@ -2005,7 +2011,7 @@ 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 :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=no"
@@ -2046,7 +2052,7 @@ 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;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 
@@ -2059,7 +2065,7 @@ ac_fn_c_check_member ()
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
 $as_echo_n "checking for $2.$3... " >&6; }
-if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then :
+if eval \${$4+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2103,7 +2109,7 @@ fi
 eval ac_res=\$$4
               { $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;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_member
 cat >config.log <<_ACEOF
@@ -2111,7 +2117,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by libratbox $as_me devel, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2221,11 +2227,9 @@ trap 'exit_status=$?
   {
     echo
 
-    cat <<\_ASBOX
-## ---------------- ##
+    $as_echo "## ---------------- ##
 ## Cache variables. ##
-## ---------------- ##
-_ASBOX
+## ---------------- ##"
     echo
     # The following way of writing the cache mishandles newlines in values,
 (
@@ -2259,11 +2263,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    cat <<\_ASBOX
-## ----------------- ##
+    $as_echo "## ----------------- ##
 ## Output variables. ##
-## ----------------- ##
-_ASBOX
+## ----------------- ##"
     echo
     for ac_var in $ac_subst_vars
     do
@@ -2276,11 +2278,9 @@ _ASBOX
     echo
 
     if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
+      $as_echo "## ------------------- ##
 ## File substitutions. ##
-## ------------------- ##
-_ASBOX
+## ------------------- ##"
       echo
       for ac_var in $ac_subst_files
       do
@@ -2294,11 +2294,9 @@ _ASBOX
     fi
 
     if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
+      $as_echo "## ----------- ##
 ## confdefs.h. ##
-## ----------- ##
-_ASBOX
+## ----------- ##"
       echo
       cat confdefs.h
       echo
@@ -2353,7 +2351,12 @@ _ACEOF
 ac_site_file1=NONE
 ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  ac_site_file1=$CONFIG_SITE
+  # We do not want a PATH search for config.site.
+  case $CONFIG_SITE in #((
+    -*)  ac_site_file1=./$CONFIG_SITE;;
+    */*) ac_site_file1=$CONFIG_SITE;;
+    *)   ac_site_file1=./$CONFIG_SITE;;
+  esac
 elif test "x$prefix" != xNONE; then
   ac_site_file1=$prefix/share/config.site
   ac_site_file2=$prefix/etc/config.site
@@ -2368,7 +2371,11 @@ do
     { $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"
+    . "$ac_site_file" \
+      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
   fi
 done
 
@@ -2447,7 +2454,7 @@ if $ac_cache_corrupted; then
 $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
+  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2464,16 +2471,22 @@ am__api_version='1.11'
 
 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
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
 done
 if test -z "$ac_aux_dir"; then
-  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+  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,
@@ -2502,7 +2515,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 { $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 :
+if ${ac_cv_path_install+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2589,11 +2602,11 @@ am_lf='
 '
 case `pwd` in
   *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
 esac
 case $srcdir in
   *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
-    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+    as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
 esac
 
 # Do `set' in a subshell so we don't clobber the current shell's
@@ -2615,7 +2628,7 @@ if (
       # if, for instance, CONFIG_SHELL is bash and it inherits a
       # broken ls alias from the environment.  This has actually
       # happened.  Such a system could not be considered "sane".
-      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
+      as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
 alias in your environment" "$LINENO" 5
    fi
 
@@ -2625,7 +2638,7 @@ then
    # Ok.
    :
 else
-   as_fn_error "newly created file is older than distributed files!
+   as_fn_error $? "newly created file is older than distributed files!
 Check your system clock" "$LINENO" 5
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -2679,7 +2692,7 @@ if test "$cross_compiling" != no; then
 set dummy ${ac_tool_prefix}strip; 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_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -2719,7 +2732,7 @@ if test -z "$ac_cv_prog_STRIP"; then
 set dummy strip; 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_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -2772,7 +2785,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if test "${ac_cv_path_mkdir+set}" = set; then :
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -2823,7 +2836,7 @@ do
 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_AWK+set}" = set; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AWK"; then
@@ -2863,7 +2876,7 @@ done
 $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 :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -2871,7 +2884,7 @@ SHELL = /bin/sh
 all:
        @echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# 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;;
@@ -2905,7 +2918,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then
   am__isrc=' -I$(srcdir)'
   # test to see if srcdir already configured
   if test -f $srcdir/config.status; then
-    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
   fi
 fi
 
@@ -3029,7 +3042,7 @@ if test -n "$ac_tool_prefix"; then
 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 :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3069,7 +3082,7 @@ if test -z "$ac_cv_prog_CC"; then
 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 :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3122,7 +3135,7 @@ if test -z "$CC"; then
 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 :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3162,7 +3175,7 @@ if test -z "$CC"; then
 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 :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3221,7 +3234,7 @@ if test -z "$CC"; then
 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 :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -3265,7 +3278,7 @@ do
 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 :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -3319,8 +3332,8 @@ 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; }
+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
@@ -3434,9 +3447,8 @@ 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; }; }
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -3478,8 +3490,8 @@ 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; }
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -3536,9 +3548,9 @@ $as_echo "$ac_try_echo"; } >&5
     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.
+as_fn_error $? "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
+See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
@@ -3549,7 +3561,7 @@ rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
 { $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 :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3589,8 +3601,8 @@ 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; }
+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
@@ -3600,7 +3612,7 @@ 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 :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3637,7 +3649,7 @@ 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 :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -3715,7 +3727,7 @@ else
 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 :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -3814,7 +3826,7 @@ depcc="$CC"   am_compiler_list=
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
 $as_echo_n "checking dependency style of $depcc... " >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
@@ -3950,7 +3962,7 @@ if test -n "$CPP" && test -d "$CPP"; then
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -3980,7 +3992,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -3996,11 +4008,11 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i conftest.err conftest.$ac_ext
 if $ac_preproc_ok; then :
   break
 fi
@@ -4039,7 +4051,7 @@ else
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
   # OK, works on sane cases.  Now check whether nonexistent headers
   # can be detected and how.
@@ -4055,18 +4067,18 @@ else
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.i 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; }
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -4078,7 +4090,7 @@ 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 :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -4127,7 +4139,7 @@ esac
   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
+    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
@@ -4141,7 +4153,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
 
 { $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 :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -4193,7 +4205,7 @@ esac
   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
+    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
@@ -4208,7 +4220,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 { $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 :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4325,8 +4337,7 @@ 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 :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -4338,7 +4349,7 @@ done
 
 
   ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
-if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+if test "x$ac_cv_header_minix_config_h" = xyes; then :
   MINIX=yes
 else
   MINIX=
@@ -4360,7 +4371,7 @@ $as_echo "#define _MINIX 1" >>confdefs.h
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
-if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+if ${ac_cv_safe_to_define___extensions__+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4401,7 +4412,7 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
 
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
-if test "${ac_cv_prog_cc_c99+set}" = set; then :
+if ${ac_cv_prog_cc_c99+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c99=no
@@ -4578,14 +4589,14 @@ fi
 
 
 if test x"$ac_cv_prog_cc_c99" = "xno"; then
-       as_fn_error "ircd-ratbox requires a C99 capable compiler" "$LINENO" 5
+       as_fn_error $? "ircd-ratbox requires a C99 capable compiler" "$LINENO" 5
 fi
 
 
 
 { $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 :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -4637,7 +4648,7 @@ esac
   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
+    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
@@ -4652,7 +4663,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -4707,7 +4718,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
   fi
 else
   ac_cv_path_SED=$SED
@@ -4812,7 +4823,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
 $as_echo_n "checking for library containing strerror... " >&6; }
-if test "${ac_cv_search_strerror+set}" = set; then :
+if ${ac_cv_search_strerror+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -4846,11 +4857,11 @@ for ac_lib in '' cposix; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_strerror+set}" = set; then :
+  if ${ac_cv_search_strerror+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_strerror+set}" = set; then :
+if ${ac_cv_search_strerror+:} false; then :
 
 else
   ac_cv_search_strerror=no
@@ -4868,7 +4879,7 @@ fi
 
 { $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 :
+if ${ac_cv_c_inline+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_c_inline=no
@@ -4910,7 +4921,7 @@ esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
 $as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then :
+if ${ac_cv_c_const+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4992,7 +5003,7 @@ fi
 $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 :
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat >conftest.make <<\_ACEOF
@@ -5000,7 +5011,7 @@ SHELL = /bin/sh
 all:
        @echo '@@@%%%=$(MAKE)=@@@%%%'
 _ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+# 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;;
@@ -5024,7 +5035,7 @@ fi
 set dummy automake; 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_path_AUTOMAKE+set}" = set; then :
+if ${ac_cv_path_AUTOMAKE+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $AUTOMAKE in
@@ -5064,7 +5075,7 @@ fi
 set dummy aclocal; 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_path_ACLOCAL+set}" = set; then :
+if ${ac_cv_path_ACLOCAL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $ACLOCAL in
@@ -5104,7 +5115,7 @@ fi
 set dummy autoheader; 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_path_AUTOHEADER+set}" = set; then :
+if ${ac_cv_path_AUTOHEADER+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $AUTOHEADER in
@@ -5144,7 +5155,7 @@ fi
 set dummy as; 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_path_AS+set}" = set; then :
+if ${ac_cv_path_AS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $AS in
@@ -5184,7 +5195,7 @@ fi
 set dummy rm; 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_path_RM+set}" = set; then :
+if ${ac_cv_path_RM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $RM in
@@ -5224,7 +5235,7 @@ fi
 set dummy cp; 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_path_CP+set}" = set; then :
+if ${ac_cv_path_CP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $CP in
@@ -5264,7 +5275,7 @@ fi
 set dummy mv; 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_path_MV+set}" = set; then :
+if ${ac_cv_path_MV+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MV in
@@ -5304,7 +5315,7 @@ fi
 set dummy ln; 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_path_LN+set}" = set; then :
+if ${ac_cv_path_LN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $LN in
@@ -5344,7 +5355,7 @@ fi
 set dummy touch; 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_path_TOUCH+set}" = set; then :
+if ${ac_cv_path_TOUCH+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $TOUCH in
@@ -5414,27 +5425,27 @@ ltmain="$ac_aux_dir/ltmain.sh"
 
 # Make sure we can run config.sub.
 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
 $as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
+if ${ac_cv_build+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
 test "x$ac_build_alias" = x &&
-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
 $as_echo "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
 esac
 build=$ac_cv_build
 ac_save_IFS=$IFS; IFS='-'
@@ -5452,14 +5463,14 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
 $as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
@@ -5467,7 +5478,7 @@ fi
 $as_echo "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
 esac
 host=$ac_cv_host
 ac_save_IFS=$IFS; IFS='-'
@@ -5485,7 +5496,7 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if test "${ac_cv_path_SED+set}" = set; then :
+if ${ac_cv_path_SED+:} false; then :
   $as_echo_n "(cached) " >&6
 else
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
@@ -5540,7 +5551,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_SED"; then
-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
   fi
 else
   ac_cv_path_SED=$SED
@@ -5567,7 +5578,7 @@ Xsed="$SED -e 1s/^X//"
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
 $as_echo_n "checking for fgrep... " >&6; }
-if test "${ac_cv_path_FGREP+set}" = set; then :
+if ${ac_cv_path_FGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
@@ -5619,7 +5630,7 @@ esac
   done
 IFS=$as_save_IFS
   if test -z "$ac_cv_path_FGREP"; then
-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
   ac_cv_path_FGREP=$FGREP
@@ -5698,7 +5709,7 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
 $as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-if test "${lt_cv_path_LD+set}" = set; then :
+if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
@@ -5735,10 +5746,10 @@ else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+if ${lt_cv_prog_gnu_ld+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
@@ -5765,7 +5776,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
-if test "${lt_cv_path_NM+set}" = set; then :
+if ${lt_cv_path_NM+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NM"; then
@@ -5825,7 +5836,7 @@ else
 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_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DUMPBIN"; then
@@ -5869,7 +5880,7 @@ do
 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_DUMPBIN+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DUMPBIN"; then
@@ -5932,18 +5943,18 @@ test -z "$NM" && NM=nm
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
 $as_echo_n "checking the name lister ($NM) interface... " >&6; }
-if test "${lt_cv_nm_interface+set}" = set; then :
+if ${lt_cv_nm_interface+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:5940: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:5951: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5943: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:5954: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:5946: output\"" >&5)
+  (eval echo "\"\$as_me:5957: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -5967,7 +5978,7 @@ fi
 # find the maximum length of command line arguments
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
 $as_echo_n "checking the maximum length of command line arguments... " >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
@@ -6159,7 +6170,7 @@ esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
 $as_echo_n "checking for $LD option to reload object files... " >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then :
+if ${lt_cv_ld_reload_flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_reload_flag='-r'
@@ -6195,7 +6206,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}objdump; 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_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OBJDUMP"; then
@@ -6235,7 +6246,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
 set dummy objdump; 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_OBJDUMP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OBJDUMP"; then
@@ -6294,7 +6305,7 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
 $as_echo_n "checking how to recognize dependent libraries... " >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then :
+if ${lt_cv_deplibs_check_method+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_file_magic_cmd='$MAGIC_CMD'
@@ -6510,7 +6521,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ar; 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_AR+set}" = set; then :
+if ${ac_cv_prog_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$AR"; then
@@ -6550,7 +6561,7 @@ if test -z "$ac_cv_prog_AR"; then
 set dummy ar; 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_AR+set}" = set; then :
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_AR"; then
@@ -6615,7 +6626,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}strip; 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_STRIP+set}" = set; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$STRIP"; then
@@ -6655,7 +6666,7 @@ if test -z "$ac_cv_prog_STRIP"; then
 set dummy strip; 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_STRIP+set}" = set; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_STRIP"; then
@@ -6714,7 +6725,7 @@ if test -n "$ac_tool_prefix"; then
 set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+set}" = set; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$RANLIB"; then
@@ -6754,7 +6765,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
 set dummy ranlib; 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_RANLIB+set}" = set; then :
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_RANLIB"; then
@@ -6871,7 +6882,7 @@ compiler=$CC
 # Check for command to grab the raw symbol name followed by C symbol from nm.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -7148,7 +7159,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 7151 "configure"' > conftest.$ac_ext
+  echo '#line 7162 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -7242,7 +7253,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   CFLAGS="$CFLAGS -belf"
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
 $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then :
+if ${lt_cv_cc_needs_belf+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_ext=c
@@ -7318,7 +7329,7 @@ need_locks="$enable_libtool_lock"
 set dummy ${ac_tool_prefix}dsymutil; 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_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$DSYMUTIL"; then
@@ -7358,7 +7369,7 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then
 set dummy dsymutil; 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_DSYMUTIL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_DSYMUTIL"; then
@@ -7410,7 +7421,7 @@ fi
 set dummy ${ac_tool_prefix}nmedit; 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_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$NMEDIT"; then
@@ -7450,7 +7461,7 @@ if test -z "$ac_cv_prog_NMEDIT"; then
 set dummy nmedit; 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_NMEDIT+set}" = set; then :
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_NMEDIT"; then
@@ -7502,7 +7513,7 @@ fi
 set dummy ${ac_tool_prefix}lipo; 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_LIPO+set}" = set; then :
+if ${ac_cv_prog_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$LIPO"; then
@@ -7542,7 +7553,7 @@ if test -z "$ac_cv_prog_LIPO"; then
 set dummy lipo; 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_LIPO+set}" = set; then :
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_LIPO"; then
@@ -7594,7 +7605,7 @@ fi
 set dummy ${ac_tool_prefix}otool; 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_OTOOL+set}" = set; then :
+if ${ac_cv_prog_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL"; then
@@ -7634,7 +7645,7 @@ if test -z "$ac_cv_prog_OTOOL"; then
 set dummy otool; 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_OTOOL+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL"; then
@@ -7686,7 +7697,7 @@ fi
 set dummy ${ac_tool_prefix}otool64; 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_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$OTOOL64"; then
@@ -7726,7 +7737,7 @@ if test -z "$ac_cv_prog_OTOOL64"; then
 set dummy otool64; 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_OTOOL64+set}" = set; then :
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_OTOOL64"; then
@@ -7801,7 +7812,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
 $as_echo_n "checking for -single_module linker flag... " >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+if ${lt_cv_apple_cc_single_mod+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
@@ -7830,7 +7841,7 @@ fi
 $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_ld_exported_symbols_list=no
@@ -7899,7 +7910,7 @@ for ac_header in dlfcn.h
 do :
   ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
 "
-if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_DLFCN_H 1
 _ACEOF
@@ -8023,7 +8034,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
 $as_echo_n "checking for objdir... " >&6; }
-if test "${lt_cv_objdir+set}" = set; then :
+if ${lt_cv_objdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   rm -f .libs 2>/dev/null
@@ -8131,7 +8142,7 @@ file_magic*)
   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -8197,7 +8208,7 @@ if test -z "$lt_cv_path_MAGIC_CMD"; then
   if test -n "$ac_tool_prefix"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
 $as_echo_n "checking for file... " >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $MAGIC_CMD in
@@ -8330,7 +8341,7 @@ if test "$GCC" = yes; then
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_rtti_exceptions=no
@@ -8346,11 +8357,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8349: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8360: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8353: \$? = $ac_status" >&5
+   echo "$as_me:8364: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8669,7 +8680,7 @@ $as_echo "$lt_prog_compiler_pic" >&6; }
 if test -n "$lt_prog_compiler_pic"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_pic_works=no
@@ -8685,11 +8696,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8688: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8699: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:8692: \$? = $ac_status" >&5
+   echo "$as_me:8703: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -8728,7 +8739,7 @@ fi
 wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+if ${lt_cv_prog_compiler_static_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
@@ -8771,7 +8782,7 @@ fi
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -8790,11 +8801,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8793: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8804: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8797: \$? = $ac_status" >&5
+   echo "$as_me:8808: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -8826,7 +8837,7 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+if ${lt_cv_prog_compiler_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_c_o=no
@@ -8845,11 +8856,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:8848: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:8859: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:8852: \$? = $ac_status" >&5
+   echo "$as_me:8863: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -10967,7 +10978,7 @@ else
   # if libdl is installed we need to link against it
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -11001,7 +11012,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
 
 
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
-if test "x$ac_cv_func_shl_load" = x""yes; then :
+if test "x$ac_cv_func_shl_load" = xyes; then :
   lt_cv_dlopen="shl_load"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
 $as_echo_n "checking for shl_load in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+if ${ac_cv_lib_dld_shl_load+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -11054,16 +11065,16 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
 $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
   lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
 else
   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
-if test "x$ac_cv_func_dlopen" = x""yes; then :
+if test "x$ac_cv_func_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
 $as_echo_n "checking for dlopen in -ldl... " >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -11097,12 +11108,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+if ${ac_cv_lib_svld_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -11136,12 +11147,12 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
 $as_echo_n "checking for dld_link in -ldld... " >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+if ${ac_cv_lib_dld_dld_link+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -11175,7 +11186,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
 fi
 
@@ -11216,7 +11227,7 @@ fi
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
 $as_echo_n "checking whether a program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then :
+if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
          if test "$cross_compiling" = yes; then :
@@ -11225,7 +11236,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11228 "configure"
+#line 11239 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11312,7 +11323,7 @@ $as_echo "$lt_cv_dlopen_self" >&6; }
       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then :
+if ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
          if test "$cross_compiling" = yes; then :
@@ -11321,7 +11332,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11324 "configure"
+#line 11335 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11576,18 +11587,18 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
      ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
-if test "x$ac_cv_header_windows_h" = x""yes; then :
+if test "x$ac_cv_header_windows_h" = xyes; then :
 
 else
-  as_fn_error "** MinGW and no windows.h.  I give up." "$LINENO" 5
+  as_fn_error $? "** MinGW and no windows.h.  I give up." "$LINENO" 5
 fi
 
 
      ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default"
-if test "x$ac_cv_header_winsock2_h" = x""yes; then :
+if test "x$ac_cv_header_winsock2_h" = xyes; then :
 
 else
-  as_fn_error "** MinGW and no winsock2.h.  I give up." "$LINENO" 5
+  as_fn_error $? "** MinGW and no winsock2.h.  I give up." "$LINENO" 5
 fi
 
 
@@ -11634,7 +11645,7 @@ if test "$libexecdir" = '${exec_prefix}/libexec' &&
 fi
 
 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 :
+if test "x$ac_cv_type_pid_t" = xyes; then :
 
 else
 
@@ -11645,7 +11656,7 @@ _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 :
+if test "x$ac_cv_type_size_t" = xyes; then :
 
 else
 
@@ -11656,7 +11667,7 @@ _ACEOF
 fi
 
 ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
-if test "x$ac_cv_type_ssize_t" = x""yes; then :
+if test "x$ac_cv_type_ssize_t" = xyes; then :
 
 else
 
@@ -11668,7 +11679,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
 $as_echo_n "checking for uid_t in sys/types.h... " >&6; }
-if test "${ac_cv_type_uid_t+set}" = set; then :
+if ${ac_cv_type_uid_t+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -11700,7 +11711,7 @@ fi
 
 { $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 :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -11815,8 +11826,7 @@ for ac_header in crypt.h unistd.h sys/socket.h sys/stat.h sys/time.h time.h neti
 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 :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -11827,7 +11837,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if test "${ac_cv_header_time+set}" = set; then :
+if ${ac_cv_header_time+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -11864,7 +11874,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5
 $as_echo_n "checking for library containing socket... " >&6; }
-if test "${ac_cv_search_socket+set}" = set; then :
+if ${ac_cv_search_socket+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -11898,11 +11908,11 @@ for ac_lib in '' socket; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_socket+set}" = set; then :
+  if ${ac_cv_search_socket+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_socket+set}" = set; then :
+if ${ac_cv_search_socket+:} false; then :
 
 else
   ac_cv_search_socket=no
@@ -11932,7 +11942,7 @@ ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_s
 #endif
 
 "
-if test "x$ac_cv_member_struct_sockaddr_sa_len" = x""yes; then :
+if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes; then :
 
 $as_echo "#define SOCKADDR_IN_HAS_LEN 1" >>confdefs.h
 
 ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h>
 #include <sys/socket.h>
 "
-if test "x$ac_cv_type_socklen_t" = x""yes; then :
+if test "x$ac_cv_type_socklen_t" = xyes; then :
   rb_cv_socklen_t=socklen_t
 else
 
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t equivalent" >&5
 $as_echo_n "checking for socklen_t equivalent... " >&6; }
-       if test "${rb_cv_socklen_t+set}" = set; then :
+       if ${rb_cv_socklen_t+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -12027,7 +12037,7 @@ have_v6=yes
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for INET6 protocol support" >&5
 $as_echo_n "checking for INET6 protocol support... " >&6; }
-if test "${rb_cv_proto_inet6+set}" = set; then :
+if ${rb_cv_proto_inet6+:} false; then :
   $as_echo_n "(cached) " >&6
 else
 
@@ -12054,7 +12064,7 @@ else
       rb_cv_proto_inet6=no
 
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err conftest.i conftest.$ac_ext
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rb_cv_proto_inet6" >&5
@@ -12080,7 +12090,7 @@ $as_echo "$as_me: Disabling IPv6 support: PF_INET6 not found" >&6;}
 #include <netinet/in.h>
 
 "
-if test "x$ac_cv_type_struct_sockaddr_in6" = x""yes; then :
+if test "x$ac_cv_type_struct_sockaddr_in6" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_SOCKADDR_IN6 1
@@ -12115,7 +12125,7 @@ ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockad
                #include <sys/socket.h>
 
 "
-if test "x$ac_cv_type_struct_sockaddr_storage" = x""yes; then :
+if test "x$ac_cv_type_struct_sockaddr_storage" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_SOCKADDR_STORAGE 1
 
 
 
-save_LIBS=$LIBS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing crypt" >&5
-$as_echo_n "checking for library containing crypt... " >&6; }
-if test "${ac_cv_search_crypt+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 crypt ();
-int
-main ()
-{
-return crypt ();
-  ;
-  return 0;
-}
-_ACEOF
-for ac_lib in '' crypt descrypt; 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_crypt=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if test "${ac_cv_search_crypt+set}" = set; then :
-  break
-fi
-done
-if test "${ac_cv_search_crypt+set}" = set; then :
-
-else
-  ac_cv_search_crypt=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_crypt" >&5
-$as_echo "$ac_cv_search_crypt" >&6; }
-ac_res=$ac_cv_search_crypt
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
-LIBS=$save_LIBS
-
-CRYPT_LIB=$ac_cv_search_crypt
-
-if test "$CRYPT_LIB" = "none required"; then
-       unset CRYPT_LIB
-elif test "$CRYPT_LIB" = no; then
-       need_crypt=yes;
-
-$as_echo "#define NEED_CRYPT 1" >>confdefs.h
-
-       unset CRYPT_LIB
-fi
-
- if test x"$need_crypt" = "xyes"; then
-  NEED_CRYPT_TRUE=
-  NEED_CRYPT_FALSE='#'
-else
-  NEED_CRYPT_TRUE='#'
-  NEED_CRYPT_FALSE=
-fi
-
-
-
-
-
 ac_fn_c_check_header_mongrel "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdarg_h" = x""yes; then :
+if test "x$ac_cv_header_stdarg_h" = xyes; then :
 
 else
-  as_fn_error "** stdarg.h could not be found - libratbox will not compile without it **" "$LINENO" 5
+  as_fn_error $? "** stdarg.h could not be found - libratbox will not compile without it **" "$LINENO" 5
 fi
 
 
@@ -12223,7 +12150,7 @@ fi
 ac_fn_c_check_type "$LINENO" "sa_family_t" "ac_cv_type_sa_family_t" "#include <sys/types.h>
 #include <sys/socket.h>
 "
-if test "x$ac_cv_type_sa_family_t" = x""yes; then :
+if test "x$ac_cv_type_sa_family_t" = xyes; then :
 
 else
 
@@ -12237,8 +12164,7 @@ for ac_func in socketpair gettimeofday writev sendmsg gmtime_r strtok_r usleep p
 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 :
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
@@ -12249,7 +12175,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing nanosleep" >&5
 $as_echo_n "checking for library containing nanosleep... " >&6; }
-if test "${ac_cv_search_nanosleep+set}" = set; then :
+if ${ac_cv_search_nanosleep+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -12283,11 +12209,11 @@ for ac_lib in '' rt posix4; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_nanosleep+set}" = set; then :
+  if ${ac_cv_search_nanosleep+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_nanosleep+set}" = set; then :
+if ${ac_cv_search_nanosleep+:} false; then :
 
 else
   ac_cv_search_nanosleep=no
@@ -12307,7 +12233,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing timer_create" >&5
 $as_echo_n "checking for library containing timer_create... " >&6; }
-if test "${ac_cv_search_timer_create+set}" = set; then :
+if ${ac_cv_search_timer_create+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -12341,11 +12267,11 @@ for ac_lib in '' rt; do
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if test "${ac_cv_search_timer_create+set}" = set; then :
+  if ${ac_cv_search_timer_create+:} false; then :
   break
 fi
 done
-if test "${ac_cv_search_timer_create+set}" = set; then :
+if ${ac_cv_search_timer_create+:} false; then :
 
 else
   ac_cv_search_timer_create=no
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working timer_create(CLOCK_REALTIME)" >&5
 $as_echo_n "checking for a working timer_create(CLOCK_REALTIME)... " >&6; }
-if test "${rb__cv_timer_create_works+set}" = set; then :
+if ${rb__cv_timer_create_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
   { { $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 test program while cross compiling
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -12424,14 +12350,14 @@ esac
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working timerfd_create(CLOCK_REALTIME)" >&5
 $as_echo_n "checking for a working timerfd_create(CLOCK_REALTIME)... " >&6; }
-if test "${rb__cv_timerfd_create_works+set}" = set; then :
+if ${rb__cv_timerfd_create_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
   { { $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 test program while cross compiling
-See \`config.log' for more details." "$LINENO" 5; }
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -12485,7 +12411,7 @@ esac
 # for constant arguments.  Useless!
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
 $as_echo_n "checking for working alloca.h... " >&6; }
-if test "${ac_cv_working_alloca_h+set}" = set; then :
+if ${ac_cv_working_alloca_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12518,7 +12444,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
 $as_echo_n "checking for alloca... " >&6; }
-if test "${ac_cv_func_alloca_works+set}" = set; then :
+if ${ac_cv_func_alloca_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12537,7 +12463,7 @@ else
  #pragma alloca
 #   else
 #    ifndef alloca /* predefined by HP cc +Olibcalls */
-char *alloca ();
+void *alloca (size_t);
 #    endif
 #   endif
 #  endif
@@ -12581,7 +12507,7 @@ $as_echo "#define C_ALLOCA 1" >>confdefs.h
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
-if test "${ac_cv_os_cray+set}" = set; then :
+if ${ac_cv_os_cray+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12608,8 +12534,7 @@ if test $ac_cv_os_cray = yes; then
   for ac_func in _getb67 GETB67 getb67; 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 :
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
 
 cat >>confdefs.h <<_ACEOF
 #define CRAY_STACKSEG_END $ac_func
@@ -12623,7 +12548,7 @@ fi
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
 $as_echo_n "checking stack direction for C alloca... " >&6; }
-if test "${ac_cv_c_stack_direction+set}" = set; then :
+if ${ac_cv_c_stack_direction+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -12674,7 +12599,7 @@ fi
 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 :
+if test "x$ac_cv_header_vfork_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_VFORK_H 1
 _ACEOF
@@ -12687,8 +12612,7 @@ 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 :
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
 _ACEOF
@@ -12699,7 +12623,7 @@ 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 :
+if ${ac_cv_func_fork_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -12752,7 +12676,7 @@ 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 :
+if ${ac_cv_func_vfork_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -12893,8 +12817,7 @@ 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 :
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
   cat >>confdefs.h <<_ACEOF
 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
 _ACEOF
@@ -12913,7 +12836,7 @@ done
 for ac_func in getpagesize
 do :
   ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
-if test "x$ac_cv_func_getpagesize" = x""yes; then :
+if test "x$ac_cv_func_getpagesize" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_GETPAGESIZE 1
 _ACEOF
@@ -12923,7 +12846,7 @@ done
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
 $as_echo_n "checking for working mmap... " >&6; }
-if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then :
+if ${ac_cv_func_mmap_fixed_mapped+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
@@ -13000,6 +12923,7 @@ int
 main ()
 {
   char *data, *data2, *data3;
+  const char *cdata2;
   int i, pagesize;
   int fd, fd2;
 
@@ -13024,10 +12948,10 @@ main ()
   fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600);
   if (fd2 < 0)
     return 4;
-  data2 = "";
-  if (write (fd2, data2, 1) != 1)
+  cdata2 = "";
+  if (write (fd2, cdata2, 1) != 1)
     return 5;
-  data2 = mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
+  data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L);
   if (data2 == MAP_FAILED)
     return 6;
   for (i = 0; i < pagesize; ++i)
@@ -13209,7 +13133,7 @@ if test "$cf_enable_openssl" != no; then
        CPPFLAGS="$CPPFLAGS $SSL_LIBS"
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RAND_status in -lcrypto" >&5
 $as_echo_n "checking for RAND_status in -lcrypto... " >&6; }
-if test "${ac_cv_lib_crypto_RAND_status+set}" = set; then :
+if ${ac_cv_lib_crypto_RAND_status+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -13243,7 +13167,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_RAND_status" >&5
 $as_echo "$ac_cv_lib_crypto_RAND_status" >&6; }
-if test "x$ac_cv_lib_crypto_RAND_status" = x""yes; then :
+if test "x$ac_cv_lib_crypto_RAND_status" = xyes; then :
   cf_enable_openssl=yes
 else
   cf_enable_openssl=no
@@ -13255,7 +13179,7 @@ if test "$cf_enable_openssl" != no; then
        CPPFLAGS="$CPPFLAGS $SSL_LIBS"
        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_read in -lssl" >&5
 $as_echo_n "checking for SSL_read in -lssl... " >&6; }
-if test "${ac_cv_lib_ssl_SSL_read+set}" = set; then :
+if ${ac_cv_lib_ssl_SSL_read+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -13289,7 +13213,7 @@ LIBS=$ac_check_lib_save_LIBS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_read" >&5
 $as_echo "$ac_cv_lib_ssl_SSL_read" >&6; }
-if test "x$ac_cv_lib_ssl_SSL_read" = x""yes; then :
+if test "x$ac_cv_lib_ssl_SSL_read" = xyes; then :
   SSL_LIBS="$SSL_LIBS -lssl -lcrypto"
 else
   cf_enable_openssl=no
@@ -13318,7 +13242,7 @@ if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
 set dummy ${ac_tool_prefix}pkg-config; 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_path_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $PKG_CONFIG in
@@ -13361,7 +13285,7 @@ if test -z "$ac_cv_path_PKG_CONFIG"; then
 set dummy pkg-config; 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_path_ac_pt_PKG_CONFIG+set}" = set; then :
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   case $ac_pt_PKG_CONFIG in
@@ -13699,10 +13623,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&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" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $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
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+       cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+         mv -f confcache "$cache_file"$$ &&
+         mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+         mv -f confcache "$cache_file" ;;
+       esac
+      fi
+    fi
   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;}
@@ -13718,6 +13653,7 @@ DEFS=-DHAVE_CONFIG_H
 
 ac_libobjs=
 ac_ltlibobjs=
+U=
 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$//'
@@ -13741,27 +13677,23 @@ else
 fi
 
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error "conditional \"AMDEP\" was never defined.
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error "conditional \"am__fastdepCC\" was never defined.
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
-  as_fn_error "conditional \"MAINTAINER_MODE\" was never defined.
+  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 if test -z "${MINGW_TRUE}" && test -z "${MINGW_FALSE}"; then
-  as_fn_error "conditional \"MINGW\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${NEED_CRYPT_TRUE}" && test -z "${NEED_CRYPT_FALSE}"; then
-  as_fn_error "conditional \"NEED_CRYPT\" was never defined.
+  as_fn_error $? "conditional \"MINGW\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -13862,6 +13794,7 @@ fi
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -13907,19 +13840,19 @@ export LANGUAGE
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
+# as_fn_error STATUS 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.
+# 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
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $1" >&2
+  $as_echo "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -14115,7 +14048,7 @@ $as_echo X"$as_dir" |
       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"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
 
 
 } # as_fn_mkdir_p
@@ -14169,7 +14102,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by libratbox $as_me devel, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -14235,10 +14168,10 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 libratbox config.status devel
-configured by $0, generated by GNU Autoconf 2.65,
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2009 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -14256,11 +14189,16 @@ 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=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
   *)
     ac_option=$1
     ac_optarg=$2
@@ -14282,6 +14220,7 @@ do
     $ac_shift
     case $ac_optarg in
     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
     esac
     as_fn_append CONFIG_FILES " '$ac_optarg'"
     ac_need_defaults=false;;
@@ -14294,7 +14233,7 @@ do
     ac_need_defaults=false;;
   --he | --h)
     # Conflict between --help and --header
-    as_fn_error "ambiguous option: \`$1'
+    as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
     $as_echo "$ac_cs_usage"; exit ;;
@@ -14303,7 +14242,7 @@ Try \`$0 --help' for more information.";;
     ac_cs_silent=: ;;
 
   # This is an error.
-  -*) as_fn_error "unrecognized option: \`$1'
+  -*) as_fn_error $? "unrecognized option: \`$1'
 Try \`$0 --help' for more information." ;;
 
   *) as_fn_append ac_config_targets " $1"
@@ -14700,7 +14639,7 @@ do
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
     "libratbox.pc") CONFIG_FILES="$CONFIG_FILES libratbox.pc" ;;
 
-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -14733,12 +14673,13 @@ $debug ||
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_FILES section.
 # No need to generate them if there are no CONFIG_FILES.
@@ -14755,12 +14696,12 @@ if test "x$ac_cr" = x; then
 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'
+  ac_cs_awk_cr='\\r'
 else
   ac_cs_awk_cr=$ac_cr
 fi
 
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
 _ACEOF
 
 
@@ -14769,18 +14710,18 @@ _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 '$'`
+  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
+    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
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -14788,7 +14729,7 @@ done
 rm -f conf$$subs.sh
 
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
 _ACEOF
 sed -n '
 h
@@ -14836,7 +14777,7 @@ t delim
 rm -f conf$$subs.awk
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
   for (key in S) S_is_set[key] = 1
   FS = "\a"
 
@@ -14868,21 +14809,29 @@ 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
+fi < "$ac_tmp/subs1.awk" > "$ac_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
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries 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/
+  ac_vpsub='/^[         ]*VPATH[        ]*=[    ]*/{
+h
+s///
+s/^/:/
+s/[     ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
 s/:*$//
+x
+s/\(=[  ]*\).*/\1/
+G
+s/\n//
 s/^[^=]*=[      ]*$//
 }'
 fi
@@ -14894,7 +14843,7 @@ fi # test -n "$CONFIG_FILES"
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -14906,11 +14855,11 @@ _ACEOF
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
   else
     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
   fi
@@ -14995,7 +14944,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 _ACAWK
 _ACEOF
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
 fi # test -n "$CONFIG_HEADERS"
 
 
@@ -15008,7 +14957,7 @@ do
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -15027,7 +14976,7 @@ do
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_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 `:'.
@@ -15036,7 +14985,7 @@ do
           [\\/$]*) false;;
           *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
           esac ||
-          as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+          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'"
@@ -15062,8 +15011,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -15199,23 +15148,24 @@ s&@INSTALL@&$ac_INSTALL&;t t
 s&@MKDIR_P@&$ac_MKDIR_P&;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
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_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"; } &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' \
+      "$ac_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
+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;}
+which seems to be undefined.  Please make sure it is defined" >&2;}
 
-  rm -f "$tmp/stdin"
+  rm -f "$ac_tmp/stdin"
   case $ac_file in
-  -) cat "$tmp/out" && rm -f "$tmp/out";;
-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
   esac \
-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
  ;;
   :H)
   #
@@ -15224,21 +15174,21 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
-      || as_fn_error "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
-       || as_fn_error "could not create $ac_file" "$LINENO" 5
+      mv "$ac_tmp/config.h" "$ac_file" \
+       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error "could not create -" "$LINENO" 5
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
   fi
 # Compute "$ac_file"'s index in $config_headers.
 _am_arg="$ac_file"
@@ -16132,7 +16082,7 @@ _ACEOF
 ac_clean_files=$ac_clean_files_save
 
 test $ac_write_fail = 0 ||
-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
 
 
 # configure is writing to config.log, and then calls config.status.
@@ -16153,7 +16103,7 @@ if test "$no_create" != yes; then
   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 $?
+  $ac_cs_success || as_fn_exit 1
 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
index 599e1f78026f39932d1dde93c282936704144a9d..b2b33f34f8deebad96174aac0bf3569e38e513d7 100644 (file)
@@ -200,25 +200,6 @@ AC_CHECK_TYPES([struct sockaddr_storage],[
        ])
                 
 
-save_LIBS=$LIBS
-AC_SEARCH_LIBS(crypt, [crypt descrypt],,)
-LIBS=$save_LIBS
-
-CRYPT_LIB=$ac_cv_search_crypt
-
-if test "$CRYPT_LIB" = "none required"; then
-       unset CRYPT_LIB
-elif test "$CRYPT_LIB" = no; then
-       need_crypt=yes;
-       AC_DEFINE(NEED_CRYPT, 1, [Define if your system needs crypt.])
-       unset CRYPT_LIB
-fi
-
-AM_CONDITIONAL([NEED_CRYPT], [test x"$need_crypt" = "xyes"])
-
-
-AC_SUBST(CRYPT_LIB)
-
 dnl Check for stdarg.h - if we cant find it, halt configure
 AC_CHECK_HEADER(stdarg.h, , [AC_MSG_ERROR([** stdarg.h could not be found - libratbox will not compile without it **])])
 
index ff750d112d0aadfa43cbe75c7e5416ca13636dcd..a32a6efe3048403af10453a383aaf19a9b2956fa 100644 (file)
@@ -42,7 +42,7 @@ libratbox_la_SOURCES =                        \
        version.c
        
 
-libratbox_la_LDFLAGS = @CRYPT_LIB@ @SSL_LIBS@ @GNUTLS_LIBS@  -avoid-version -no-undefined -export-symbols export-syms.txt
-libratbox_la_LIBADD = @CRYPT_LIB@ @SSL_LIBS@ @GNUTLS_LIBS@
+libratbox_la_LDFLAGS = @SSL_LIBS@ @GNUTLS_LIBS@  -avoid-version -no-undefined -export-symbols export-syms.txt
+libratbox_la_LIBADD = @SSL_LIBS@ @GNUTLS_LIBS@
 lib_LTLIBRARIES = libratbox.la
 
index 8489c71ff58b276a55b5459ae10ec85a48032408..53281bdc3084f4c345de007bca76d0a3ce80a0ba 100644 (file)
@@ -257,8 +257,8 @@ libratbox_la_SOURCES = \
        arc4random.c                    \
        version.c
 
-libratbox_la_LDFLAGS = @CRYPT_LIB@ @SSL_LIBS@ @GNUTLS_LIBS@  -avoid-version -no-undefined -export-symbols export-syms.txt
-libratbox_la_LIBADD = @CRYPT_LIB@ @SSL_LIBS@ @GNUTLS_LIBS@
+libratbox_la_LDFLAGS = @SSL_LIBS@ @GNUTLS_LIBS@  -avoid-version -no-undefined -export-symbols export-syms.txt
+libratbox_la_LIBADD = @SSL_LIBS@ @GNUTLS_LIBS@
 lib_LTLIBRARIES = libratbox.la
 all: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) all-am
index b4ef99ff3e75f54542a9a2107a9b9a3c835ec32b..54dca3b9bdd9992fbf74a3b3bfedebee89ea993e 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * crypt.c: Implements unix style crypt() for platforms that don't have it
- *         This version has both an md5 and des crypt.
- *          This was pretty much catted together from uclibc.
+ *         This version has MD5, DES, and SHA256/SHA512 crypt.
+ *         DES taken from uClibc, MD5 taken from BSD, SHA256/SHA512 taken from
+ *         Drepper's public domain implementation.
  */
 
 /*
 #include <libratbox_config.h>
 #include <ratbox_lib.h>
 
-
-#ifndef NEED_CRYPT
-extern char *crypt(const char *key, const char *salt);
-
-char *
-rb_crypt(const char *key, const char *salt)
-{
-       return (crypt(key, salt));
-}
-#else
-
-static char *__md5_crypt(const char *pw, const char *salt);
-static char *__des_crypt(const char *pw, const char *salt);
+static char *rb_md5_crypt(const char *pw, const char *salt);
+static char *rb_des_crypt(const char *pw, const char *salt);
+static char *rb_sha256_crypt(const char *key, const char *salt);
+static char *rb_sha512_crypt(const char *key, const char *salt);
 
 char *
 rb_crypt(const char *key, const char *salt)
 {
-       /* First, check if we are supposed to be using the MD5 replacement
-        * instead of DES...  */
-       if(salt[0] == '$' && salt[1] == '1' && salt[2] == '$')
-               return __md5_crypt(key, salt);
+       /* First, check if we are supposed to be using a replacement
+        * hash instead of DES...  */
+       if(salt[0] == '$' && salt[2] == '$')
+       {
+               switch(salt[1])
+               {
+               case '1':
+                       return rb_md5_crypt(key, salt);
+                       break;
+               case '5':
+                       return rb_sha256_crypt(key, salt);
+                       break;
+               case '6':
+                       return rb_sha512_crypt(key, salt);
+                       break;
+               default:
+                       return NULL;
+                       break;
+               };
+       }
        else
-               return __des_crypt(key, salt);
+               return rb_des_crypt(key, salt);
 }
 
+#define b64_from_24bit(B2, B1, B0, N)                                  \
+       do                                                              \
+       {                                                               \
+               unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0);     \
+               int n = (N);                                            \
+               while (n-- > 0 && buflen > 0)                           \
+               {                                                       \
+                       *cp++ = ascii64[w & 0x3f];                      \
+                       --buflen;                                       \
+                       w >>= 6;                                        \
+               }                                                       \
+       } while (0)
+
+#ifndef MAX
+#      define MAX(a,b) (((a) > (b)) ? (a) : (b))
+#endif
+#ifndef MIN
+#      define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#endif
+
 /* Here is the des crypt() stuff */
 
 /*
@@ -139,9 +167,6 @@ static uint8_t init_perm[64], final_perm[64];
 static uint8_t m_sbox[4][4096];
 static uint32_t psbox[4][256];
 
-
-
-
 /* A pile of data */
 static const uint8_t ascii64[] = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
@@ -239,7 +264,7 @@ static const uint32_t *bits28, *bits24;
 
 
 static int
-ascii_to_bin(char ch)
+rb_ascii_to_bin(char ch)
 {
        if(ch > 'z')
                return (0);
@@ -257,13 +282,13 @@ ascii_to_bin(char ch)
 }
 
 static void
-des_init(void)
+rb_des_init(void)
 {
        int i, j, b, k, inbit, obit;
        uint32_t *p, *il, *ir, *fl, *fr;
-       static int des_initialised = 0;
+       static int rb_des_initialised = 0;
 
-       if(des_initialised == 1)
+       if(rb_des_initialised == 1)
                return;
 
        old_rawkey0 = old_rawkey1 = 0L;
@@ -401,12 +426,12 @@ des_init(void)
                        }
                }
 
-       des_initialised = 1;
+       rb_des_initialised = 1;
 }
 
 
 static void
-setup_salt(long salt)
+rb_setup_salt(long salt)
 {
        uint32_t obit, saltbit;
        int i;
@@ -427,14 +452,13 @@ setup_salt(long salt)
        }
 }
 
-
 static int
-des_setkey(const char *key)
+rb_des_setkey(const char *key)
 {
        uint32_t k0, k1, rawkey0, rawkey1;
        int shifts, round;
 
-       des_init();
+       rb_des_init();
 
        rawkey0 = ntohl(*(const uint32_t *)key);
        rawkey1 = ntohl(*(const uint32_t *)(key + 4));
@@ -505,9 +529,8 @@ des_setkey(const char *key)
        return (0);
 }
 
-
 static int
-do_des(uint32_t l_in, uint32_t r_in, uint32_t *l_out, uint32_t *r_out, int count)
+rb_do_des(uint32_t l_in, uint32_t r_in, uint32_t *l_out, uint32_t *r_out, int count)
 {
        /*
         *      l_in, r_in, l_out, and r_out are in pseudo-"big-endian" format.
@@ -623,90 +646,14 @@ do_des(uint32_t l_in, uint32_t r_in, uint32_t *l_out, uint32_t *r_out, int count
        return (0);
 }
 
-
-#if 0
-static int
-des_cipher(const char *in, char *out, uint32_t salt, int count)
-{
-       uint32_t l_out, r_out, rawl, rawr;
-       int retval;
-       union
-       {
-               uint32_t *ui32;
-               const char *c;
-       } trans;
-
-       des_init();
-
-       setup_salt(salt);
-
-       trans.c = in;
-       rawl = ntohl(*trans.ui32++);
-       rawr = ntohl(*trans.ui32);
-
-       retval = do_des(rawl, rawr, &l_out, &r_out, count);
-
-       trans.c = out;
-       *trans.ui32++ = htonl(l_out);
-       *trans.ui32 = htonl(r_out);
-       return (retval);
-}
-#endif
-
-#if 0
-void
-setkey(const char *key)
-{
-       int i, j;
-       uint32_t packed_keys[2];
-       uint8_t *p;
-
-       p = (uint8_t *)packed_keys;
-
-       for(i = 0; i < 8; i++)
-       {
-               p[i] = 0;
-               for(j = 0; j < 8; j++)
-                       if(*key++ & 1)
-                               p[i] |= bits8[j];
-       }
-       des_setkey((char *)p);
-}
-
-
-void
-encrypt(char *block, int flag)
-{
-       uint32_t io[2];
-       uint8_t *p;
-       int i, j;
-
-       des_init();
-
-       setup_salt(0L);
-       p = (uint8_t *)block;
-       for(i = 0; i < 2; i++)
-       {
-               io[i] = 0L;
-               for(j = 0; j < 32; j++)
-                       if(*p++ & 1)
-                               io[i] |= bits32[j];
-       }
-       do_des(io[0], io[1], io, io + 1, flag ? -1 : 1);
-       for(i = 0; i < 2; i++)
-               for(j = 0; j < 32; j++)
-                       block[(i << 5) | j] = (io[i] & bits32[j]) ? 1 : 0;
-}
-#endif
-
 static char *
-__des_crypt(const char *key, const char *setting)
+rb_des_crypt(const char *key, const char *setting)
 {
        uint32_t count, salt, l, r0, r1, keybuf[2];
        uint8_t *p, *q;
        static char output[21];
 
-       des_init();
+       rb_des_init();
 
        /*
         * Copy the key, shifting each character up by one bit
@@ -719,55 +666,8 @@ __des_crypt(const char *key, const char *setting)
                if(*(q - 1))
                        key++;
        }
-       if(des_setkey((char *)keybuf))
+       if(rb_des_setkey((char *)keybuf))
                return (NULL);
-
-#if 0
-       if(*setting == _PASSWORD_EFMT1)
-       {
-               int i;
-               /*
-                * "new"-style:
-                *      setting - underscore, 4 bytes of count, 4 bytes of salt
-                *      key - unlimited characters
-                */
-               for(i = 1, count = 0L; i < 5; i++)
-                       count |= ascii_to_bin(setting[i]) << ((i - 1) * 6);
-
-               for(i = 5, salt = 0L; i < 9; i++)
-                       salt |= ascii_to_bin(setting[i]) << ((i - 5) * 6);
-
-               while(*key)
-               {
-                       /*
-                        * Encrypt the key with itself.
-                        */
-                       if(des_cipher((char *)keybuf, (char *)keybuf, 0L, 1))
-                               return (NULL);
-                       /*
-                        * And XOR with the next 8 characters of the key.
-                        */
-                       q = (uint8_t *)keybuf;
-                       while(q - (uint8_t *)keybuf - 8 && *key)
-                               *q++ ^= *key++ << 1;
-
-                       if(des_setkey((char *)keybuf))
-                               return (NULL);
-               }
-               strncpy(output, setting, 9);
-
-               /*
-                * Double check that we weren't given a short setting.
-                * If we were, the above code will probably have created
-                * wierd values for count and salt, but we don't really care.
-                * Just make sure the output string doesn't have an extra
-                * NUL in it.
-                */
-               output[9] = '\0';
-               p = (uint8_t *)output + strlen(output);
-       }
-       else
-#endif
        {
                /*
                 * "old"-style:
@@ -776,7 +676,7 @@ __des_crypt(const char *key, const char *setting)
                 */
                count = 25;
 
-               salt = (ascii_to_bin(setting[1]) << 6) | ascii_to_bin(setting[0]);
+               salt = (rb_ascii_to_bin(setting[1]) << 6) | rb_ascii_to_bin(setting[0]);
 
                output[0] = setting[0];
                /*
@@ -789,11 +689,11 @@ __des_crypt(const char *key, const char *setting)
 
                p = (uint8_t *)output + 2;
        }
-       setup_salt(salt);
+       rb_setup_salt(salt);
        /*
         * Do it.
         */
-       if(do_des(0L, 0L, &r0, &r1, (int)count))
+       if(rb_do_des(0L, 0L, &r0, &r1, (int)count))
                return (NULL);
        /*
         * Now encode the result...
@@ -820,7 +720,6 @@ __des_crypt(const char *key, const char *setting)
 }
 
 /* Now md5 crypt */
-
 /*
  * MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
  *
@@ -845,118 +744,77 @@ __des_crypt(const char *key, const char *setting)
  * These notices must be retained in any copies of any part of this
  * documentation and/or software.
  *
- * $FreeBSD: src/lib/libmd/md5c.c,v 1.9.2.1 1999/08/29 14:57:12 peter Exp $
- *
  * This code is the same as the code published by RSA Inc.  It has been
  * edited for clarity and style only.
- *
- * ----------------------------------------------------------------------------
- * The md5_crypt() function was taken from freeBSD's libcrypt and contains 
- * this license: 
- *    "THE BEER-WARE LICENSE" (Revision 42):
- *     <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
- *     can do whatever you want with this stuff. If we meet some day, and you think
- *     this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
- *
- * $FreeBSD: src/lib/libcrypt/crypt.c,v 1.7.2.1 1999/08/29 14:56:33 peter Exp $
- *
- * ----------------------------------------------------------------------------
- * On April 19th, 2001 md5_crypt() was modified to make it reentrant 
- * by Erik Andersen <andersen@uclibc.org>
- *
- *
- * June 28, 2001             Manuel Novoa III
- *
- * "Un-inlined" code using loops and static const tables in order to
- * reduce generated code size (on i386 from approx 4k to approx 2.5k).
- *
- * June 29, 2001             Manuel Novoa III
- *
- * Completely removed static PADDING array.
- *
- * Reintroduced the loop unrolling in MD5_Transform and added the
- * MD5_SIZE_OVER_SPEED option for configurability.  Define below as:
- *       0    fully unrolled loops
- *       1    partially unrolled (4 ops per loop)
- *       2    no unrolling -- introduces the need to swap 4 variables (slow)
- *       3    no unrolling and all 4 loops merged into one with switch
- *               in each loop (glacial)
- * On i386, sizes are roughly (-Os -fno-builtin):
- *     0: 3k     1: 2.5k     2: 2.2k     3: 2k
- *
- *
- * Since SuSv3 does not require crypt_r, modified again August 7, 2002
- * by Erik Andersen to remove reentrance stuff...
- */
-
-/*
- * Valid values are  1 (fastest/largest) to 3 (smallest/slowest).
  */
-#define MD5_SIZE_OVER_SPEED 1
 
-/**********************************************************************/
+#define MD5_BLOCK_LENGTH                64
+#define MD5_DIGEST_LENGTH               16
+#define MD5_DIGEST_STRING_LENGTH        (MD5_DIGEST_LENGTH * 2 + 1)
+#define MD5_SIZE                       16
 
-/* MD5 context. */
-struct MD5Context
+static void
+_crypt_to64(char *s, u_long v, int n)
 {
-       uint32_t state[4];      /* state (ABCD) */
-       uint32_t count[2];      /* number of bits, modulo 2^64 (lsb first) */
-       unsigned char buffer[64];       /* input buffer */
-};
-
-static void __md5_Init(struct MD5Context *);
-static void __md5_Update(struct MD5Context *, const char *, unsigned int);
-static void __md5_Pad(struct MD5Context *);
-static void __md5_Final(char[16], struct MD5Context *);
-static void __md5_Transform(uint32_t[4], const unsigned char[64]);
-
-
-static const char __md5__magic[] = "$1$";      /* This string is magic for this algorithm.  Having 
-                                                  it this way, we can get better later on */
-static const unsigned char __md5_itoa64[] =    /* 0 ... 63 => ascii - 64 */
-       "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
-
+       while (--n >= 0) {
+               *s++ = ascii64[v&0x3f];
+               v >>= 6;
+       }
+}
 
-#ifdef i386
-#define __md5_Encode memcpy
-#define __md5_Decode memcpy
-#else /* i386 */
+/* MD5 context. */
+typedef struct MD5Context {
+       u_int32_t state[4];   /* state (ABCD) */
+       u_int32_t count[2];   /* number of bits, modulo 2^64 (lsb first) */
+       unsigned char buffer[64];     /* input buffer */
+} MD5_CTX;
+
+static void   MD5Transform(u_int32_t [4], const unsigned char [64]);
+static void   MD5Init (MD5_CTX *);
+static void   MD5Update (MD5_CTX *, const void *, unsigned int);
+static void   MD5Final (unsigned char [16], MD5_CTX *);
+
+#if (BYTE_ORDER == LITTLE_ENDIAN)
+#define Encode memcpy
+#define Decode memcpy
+#else 
 
 /*
- * __md5_Encodes input (uint32_t) into output (unsigned char). Assumes len is
+ * Encodes input (u_int32_t) into output (unsigned char). Assumes len is
  * a multiple of 4.
  */
 
 static void
-__md5_Encode(unsigned char *output, uint32_t *input, unsigned int len)
+Encode (unsigned char *output, u_int32_t *input, unsigned int len)
 {
-       unsigned int i, j;
+       unsigned int i;
+       u_int32_t *op = (u_int32_t *)output;
 
-       for(i = 0, j = 0; j < len; i++, j += 4)
-       {
-               output[j] = (unsigned char)(input[i] & 0xff);
-               output[j + 1] = (unsigned char)((input[i] >> 8) & 0xff);
-               output[j + 2] = (unsigned char)((input[i] >> 16) & 0xff);
-               output[j + 3] = (unsigned char)((input[i] >> 24) & 0xff);
-       }
+       for (i = 0; i < len / 4; i++)
+               op[i] = htole32(input[i]);
 }
 
 /*
- * __md5_Decodes input (unsigned char) into output (uint32_t). Assumes len is
+ * Decodes input (unsigned char) into output (u_int32_t). Assumes len is
  * a multiple of 4.
  */
 
 static void
-__md5_Decode(uint32_t *output, const unsigned char *input, unsigned int len)
+Decode (u_int32_t *output, const unsigned char *input, unsigned int len)
 {
-       unsigned int i, j;
+       unsigned int i;
+       const u_int32_t *ip = (const u_int32_t *)input;
 
-       for(i = 0, j = 0; j < len; i++, j += 4)
-               output[i] = ((uint32_t)input[j]) | (((uint32_t)input[j + 1]) << 8) |
-                       (((uint32_t)input[j + 2]) << 16) | (((uint32_t)input[j + 3]) << 24);
+       for (i = 0; i < len / 4; i++)
+               output[i] = le32toh(ip[i]);
 }
-#endif /* i386 */
+#endif
+
+static unsigned char PADDING[64] = {
+  0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
 
 /* F, G, H and I are basic MD5 functions. */
 #define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
@@ -972,22 +830,22 @@ __md5_Decode(uint32_t *output, const unsigned char *input, unsigned int len)
  * Rotation is separate from addition to prevent recomputation.
  */
 #define FF(a, b, c, d, x, s, ac) { \
-       (a) += F ((b), (c), (d)) + (x) + (uint32_t)(ac); \
+       (a) += F ((b), (c), (d)) + (x) + (u_int32_t)(ac); \
        (a) = ROTATE_LEFT ((a), (s)); \
        (a) += (b); \
        }
 #define GG(a, b, c, d, x, s, ac) { \
-       (a) += G ((b), (c), (d)) + (x) + (uint32_t)(ac); \
+       (a) += G ((b), (c), (d)) + (x) + (u_int32_t)(ac); \
        (a) = ROTATE_LEFT ((a), (s)); \
        (a) += (b); \
        }
 #define HH(a, b, c, d, x, s, ac) { \
-       (a) += H ((b), (c), (d)) + (x) + (uint32_t)(ac); \
+       (a) += H ((b), (c), (d)) + (x) + (u_int32_t)(ac); \
        (a) = ROTATE_LEFT ((a), (s)); \
        (a) += (b); \
        }
 #define II(a, b, c, d, x, s, ac) { \
-       (a) += I ((b), (c), (d)) + (x) + (uint32_t)(ac); \
+       (a) += I ((b), (c), (d)) + (x) + (u_int32_t)(ac); \
        (a) = ROTATE_LEFT ((a), (s)); \
        (a) += (b); \
        }
@@ -995,8 +853,10 @@ __md5_Decode(uint32_t *output, const unsigned char *input, unsigned int len)
 /* MD5 initialization. Begins an MD5 operation, writing a new context. */
 
 static void
-__md5_Init(struct MD5Context *context)
+MD5Init (context)
+       MD5_CTX *context;
 {
+
        context->count[0] = context->count[1] = 0;
 
        /* Load magic initialization constants.  */
@@ -1013,36 +873,42 @@ __md5_Init(struct MD5Context *context)
  */
 
 static void
-__md5_Update(struct MD5Context *context, const char *xinput, unsigned int inputLen)
+MD5Update (context, in, inputLen)
+       MD5_CTX *context;
+       const void *in;
+       unsigned int inputLen;
 {
-       unsigned int i, lindex, partLen;
-       const unsigned char *input = (const unsigned char *)xinput;     /* i hate gcc */
+       unsigned int i, idx, partLen;
+       const unsigned char *input = in;
+
        /* Compute number of bytes mod 64 */
-       lindex = (unsigned int)((context->count[0] >> 3) & 0x3F);
+       idx = (unsigned int)((context->count[0] >> 3) & 0x3F);
 
        /* Update number of bits */
-       if((context->count[0] += ((uint32_t)inputLen << 3)) < ((uint32_t)inputLen << 3))
+       if ((context->count[0] += ((u_int32_t)inputLen << 3))
+           < ((u_int32_t)inputLen << 3))
                context->count[1]++;
-       context->count[1] += ((uint32_t)inputLen >> 29);
+       context->count[1] += ((u_int32_t)inputLen >> 29);
 
-       partLen = 64 - lindex;
+       partLen = 64 - idx;
 
        /* Transform as many times as possible. */
-       if(inputLen >= partLen)
-       {
-               memcpy(&context->buffer[lindex], input, partLen);
-               __md5_Transform(context->state, context->buffer);
+       if (inputLen >= partLen) {
+               memcpy((void *)&context->buffer[idx], (const void *)input,
+                   partLen);
+               MD5Transform (context->state, context->buffer);
 
-               for(i = partLen; i + 63 < inputLen; i += 64)
-                       __md5_Transform(context->state, &input[i]);
+               for (i = partLen; i + 63 < inputLen; i += 64)
+                       MD5Transform (context->state, &input[i]);
 
-               lindex = 0;
+               idx = 0;
        }
        else
                i = 0;
 
        /* Buffer remaining input */
-       memcpy(&context->buffer[lindex], &input[i], inputLen - i);
+       memcpy ((void *)&context->buffer[idx], (const void *)&input[i],
+           inputLen-i);
 }
 
 /*
@@ -1050,25 +916,22 @@ __md5_Update(struct MD5Context *context, const char *xinput, unsigned int inputL
  */
 
 static void
-__md5_Pad(struct MD5Context *context)
+MD5Pad (context)
+       MD5_CTX *context;
 {
-       char bits[8];
-       unsigned int lindex, padLen;
-       char PADDING[64];
-
-       memset(PADDING, 0, sizeof(PADDING));
-       PADDING[0] = 0x80;
+       unsigned char bits[8];
+       unsigned int idx, padLen;
 
        /* Save number of bits */
-       __md5_Encode(bits, context->count, 8);
+       Encode (bits, context->count, 8);
 
        /* Pad out to 56 mod 64. */
-       lindex = (unsigned int)((context->count[0] >> 3) & 0x3f);
-       padLen = (lindex < 56) ? (56 - lindex) : (120 - lindex);
-       __md5_Update(context, PADDING, padLen);
+       idx = (unsigned int)((context->count[0] >> 3) & 0x3f);
+       padLen = (idx < 56) ? (56 - idx) : (120 - idx);
+       MD5Update (context, PADDING, padLen);
 
        /* Append length (before padding) */
-       __md5_Update(context, bits, 8);
+       MD5Update (context, bits, 8);
 }
 
 /*
@@ -1077,294 +940,118 @@ __md5_Pad(struct MD5Context *context)
  */
 
 static void
-__md5_Final(char xdigest[16], struct MD5Context *context)
+MD5Final (digest, context)
+       unsigned char digest[16];
+       MD5_CTX *context;
 {
-       unsigned char *digest = (unsigned char *)xdigest;
        /* Do padding. */
-       __md5_Pad(context);
+       MD5Pad (context);
 
        /* Store state in digest */
-       __md5_Encode(digest, context->state, 16);
+       Encode (digest, context->state, 16);
 
        /* Zeroize sensitive information. */
-       memset(context, 0, sizeof(*context));
+       memset ((void *)context, 0, sizeof (*context));
 }
 
 /* MD5 basic transformation. Transforms state based on block. */
 
 static void
-__md5_Transform(state, block)
-     uint32_t state[4];
-     const unsigned char block[64];
+MD5Transform (state, block)
+       u_int32_t state[4];
+       const unsigned char block[64];
 {
-       uint32_t a, b, c, d, x[16];
-
-#if MD5_SIZE_OVER_SPEED > 1
-       uint32_t temp;
-       const char *ps;
-
-       static const char S[] = {
-               7, 12, 17, 22,
-               5, 9, 14, 20,
-               4, 11, 16, 23,
-               6, 10, 15, 21
-       };
-#endif /* MD5_SIZE_OVER_SPEED > 1 */
-
-#if MD5_SIZE_OVER_SPEED > 0
-       const uint32_t *pc;
-       const char *pp;
-       int i;
-
-       static const uint32_t C[] = {
-               /* round 1 */
-               0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
-               0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
-               0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
-               0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
-               /* round 2 */
-               0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
-               0xd62f105d, 0x2441453, 0xd8a1e681, 0xe7d3fbc8,
-               0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
-               0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,
-               /* round 3 */
-               0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
-               0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
-               0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x4881d05,
-               0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
-               /* round 4 */
-               0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,
-               0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
-               0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
-               0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391
-       };
-
-       static const char P[] = {
-               0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,   /* 1 */
-               1, 6, 11, 0, 5, 10, 15, 4, 9, 14, 3, 8, 13, 2, 7, 12,   /* 2 */
-               5, 8, 11, 14, 1, 4, 7, 10, 13, 0, 3, 6, 9, 12, 15, 2,   /* 3 */
-               0, 7, 14, 5, 12, 3, 10, 1, 8, 15, 6, 13, 4, 11, 2, 9    /* 4 */
-       };
-
-#endif /* MD5_SIZE_OVER_SPEED > 0 */
-
-       __md5_Decode(x, block, 64);
-
-       a = state[0];
-       b = state[1];
-       c = state[2];
-       d = state[3];
-
-#if MD5_SIZE_OVER_SPEED > 2
-       pc = C;
-       pp = P;
-       ps = S - 4;
-
-       for(i = 0; i < 64; i++)
-       {
-               if((i & 0x0f) == 0)
-                       ps += 4;
-               temp = a;
-               switch (i >> 4)
-               {
-               case 0:
-                       temp += F(b, c, d);
-                       break;
-               case 1:
-                       temp += G(b, c, d);
-                       break;
-               case 2:
-                       temp += H(b, c, d);
-                       break;
-               case 3:
-                       temp += I(b, c, d);
-                       break;
-               }
-               temp += x[(int)(*pp++)] + *pc++;
-               temp = ROTATE_LEFT(temp, ps[i & 3]);
-               temp += b;
-               a = d;
-               d = c;
-               c = b;
-               b = temp;
-       }
-#elif MD5_SIZE_OVER_SPEED > 1
-       pc = C;
-       pp = P;
-       ps = S;
-
-       /* Round 1 */
-       for(i = 0; i < 16; i++)
-       {
-               FF(a, b, c, d, x[(int)(*pp++)], ps[i & 0x3], *pc++);
-               temp = d;
-               d = c;
-               c = b;
-               b = a;
-               a = temp;
-       }
-
-       /* Round 2 */
-       ps += 4;
-       for(; i < 32; i++)
-       {
-               GG(a, b, c, d, x[(int)(*pp++)], ps[i & 0x3], *pc++);
-               temp = d;
-               d = c;
-               c = b;
-               b = a;
-               a = temp;
-       }
-       /* Round 3 */
-       ps += 4;
-       for(; i < 48; i++)
-       {
-               HH(a, b, c, d, x[(int)(*pp++)], ps[i & 0x3], *pc++);
-               temp = d;
-               d = c;
-               c = b;
-               b = a;
-               a = temp;
-       }
+       u_int32_t a = state[0], b = state[1], c = state[2], d = state[3], x[16];
 
-       /* Round 4 */
-       ps += 4;
-       for(; i < 64; i++)
-       {
-               II(a, b, c, d, x[(int)(*pp++)], ps[i & 0x3], *pc++);
-               temp = d;
-               d = c;
-               c = b;
-               b = a;
-               a = temp;
-       }
-#elif MD5_SIZE_OVER_SPEED > 0
-       pc = C;
-       pp = P;
+       Decode (x, block, 64);
 
        /* Round 1 */
-       for(i = 0; i < 4; i++)
-       {
-               FF(a, b, c, d, x[(int)(*pp++)], 7, *pc++);
-               FF(d, a, b, c, x[(int)(*pp++)], 12, *pc++);
-               FF(c, d, a, b, x[(int)(*pp++)], 17, *pc++);
-               FF(b, c, d, a, x[(int)(*pp++)], 22, *pc++);
-       }
-
-       /* Round 2 */
-       for(i = 0; i < 4; i++)
-       {
-               GG(a, b, c, d, x[(int)(*pp++)], 5, *pc++);
-               GG(d, a, b, c, x[(int)(*pp++)], 9, *pc++);
-               GG(c, d, a, b, x[(int)(*pp++)], 14, *pc++);
-               GG(b, c, d, a, x[(int)(*pp++)], 20, *pc++);
-       }
-       /* Round 3 */
-       for(i = 0; i < 4; i++)
-       {
-               HH(a, b, c, d, x[(int)(*pp++)], 4, *pc++);
-               HH(d, a, b, c, x[(int)(*pp++)], 11, *pc++);
-               HH(c, d, a, b, x[(int)(*pp++)], 16, *pc++);
-               HH(b, c, d, a, x[(int)(*pp++)], 23, *pc++);
-       }
-
-       /* Round 4 */
-       for(i = 0; i < 4; i++)
-       {
-               II(a, b, c, d, x[(int)(*pp++)], 6, *pc++);
-               II(d, a, b, c, x[(int)(*pp++)], 10, *pc++);
-               II(c, d, a, b, x[(int)(*pp++)], 15, *pc++);
-               II(b, c, d, a, x[(int)(*pp++)], 21, *pc++);
-       }
-#else
-       /* Round 1 */
 #define S11 7
 #define S12 12
 #define S13 17
 #define S14 22
-       FF(a, b, c, d, x[0], S11, 0xd76aa478);  /* 1 */
-       FF(d, a, b, c, x[1], S12, 0xe8c7b756);  /* 2 */
-       FF(c, d, a, b, x[2], S13, 0x242070db);  /* 3 */
-       FF(b, c, d, a, x[3], S14, 0xc1bdceee);  /* 4 */
-       FF(a, b, c, d, x[4], S11, 0xf57c0faf);  /* 5 */
-       FF(d, a, b, c, x[5], S12, 0x4787c62a);  /* 6 */
-       FF(c, d, a, b, x[6], S13, 0xa8304613);  /* 7 */
-       FF(b, c, d, a, x[7], S14, 0xfd469501);  /* 8 */
-       FF(a, b, c, d, x[8], S11, 0x698098d8);  /* 9 */
-       FF(d, a, b, c, x[9], S12, 0x8b44f7af);  /* 10 */
-       FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
-       FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
-       FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
-       FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
-       FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
-       FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
+       FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
+       FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
+       FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
+       FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
+       FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
+       FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
+       FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
+       FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
+       FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
+       FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
+       FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+       FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+       FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+       FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+       FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+       FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
 
        /* Round 2 */
 #define S21 5
 #define S22 9
 #define S23 14
 #define S24 20
-       GG(a, b, c, d, x[1], S21, 0xf61e2562);  /* 17 */
-       GG(d, a, b, c, x[6], S22, 0xc040b340);  /* 18 */
-       GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
-       GG(b, c, d, a, x[0], S24, 0xe9b6c7aa);  /* 20 */
-       GG(a, b, c, d, x[5], S21, 0xd62f105d);  /* 21 */
-       GG(d, a, b, c, x[10], S22, 0x2441453);  /* 22 */
-       GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
-       GG(b, c, d, a, x[4], S24, 0xe7d3fbc8);  /* 24 */
-       GG(a, b, c, d, x[9], S21, 0x21e1cde6);  /* 25 */
-       GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
-       GG(c, d, a, b, x[3], S23, 0xf4d50d87);  /* 27 */
-       GG(b, c, d, a, x[8], S24, 0x455a14ed);  /* 28 */
-       GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
-       GG(d, a, b, c, x[2], S22, 0xfcefa3f8);  /* 30 */
-       GG(c, d, a, b, x[7], S23, 0x676f02d9);  /* 31 */
-       GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+       GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
+       GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
+       GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+       GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
+       GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
+       GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
+       GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
+       GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
+       GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
+       GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+       GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
+       GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
+       GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+       GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
+       GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
+       GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
 
        /* Round 3 */
 #define S31 4
 #define S32 11
 #define S33 16
 #define S34 23
-       HH(a, b, c, d, x[5], S31, 0xfffa3942);  /* 33 */
-       HH(d, a, b, c, x[8], S32, 0x8771f681);  /* 34 */
-       HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
-       HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
-       HH(a, b, c, d, x[1], S31, 0xa4beea44);  /* 37 */
-       HH(d, a, b, c, x[4], S32, 0x4bdecfa9);  /* 38 */
-       HH(c, d, a, b, x[7], S33, 0xf6bb4b60);  /* 39 */
-       HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
-       HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
-       HH(d, a, b, c, x[0], S32, 0xeaa127fa);  /* 42 */
-       HH(c, d, a, b, x[3], S33, 0xd4ef3085);  /* 43 */
-       HH(b, c, d, a, x[6], S34, 0x4881d05);   /* 44 */
-       HH(a, b, c, d, x[9], S31, 0xd9d4d039);  /* 45 */
-       HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
-       HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
-       HH(b, c, d, a, x[2], S34, 0xc4ac5665);  /* 48 */
+       HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
+       HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
+       HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+       HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+       HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
+       HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
+       HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
+       HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+       HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+       HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
+       HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
+       HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
+       HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
+       HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+       HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
+       HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
 
        /* Round 4 */
 #define S41 6
 #define S42 10
 #define S43 15
 #define S44 21
-       II(a, b, c, d, x[0], S41, 0xf4292244);  /* 49 */
-       II(d, a, b, c, x[7], S42, 0x432aff97);  /* 50 */
-       II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
-       II(b, c, d, a, x[5], S44, 0xfc93a039);  /* 52 */
-       II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
-       II(d, a, b, c, x[3], S42, 0x8f0ccc92);  /* 54 */
-       II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
-       II(b, c, d, a, x[1], S44, 0x85845dd1);  /* 56 */
-       II(a, b, c, d, x[8], S41, 0x6fa87e4f);  /* 57 */
-       II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
-       II(c, d, a, b, x[6], S43, 0xa3014314);  /* 59 */
-       II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
-       II(a, b, c, d, x[4], S41, 0xf7537e82);  /* 61 */
-       II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
-       II(c, d, a, b, x[2], S43, 0x2ad7d2bb);  /* 63 */
-       II(b, c, d, a, x[9], S44, 0xeb86d391);  /* 64 */
-#endif
+       II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
+       II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
+       II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+       II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
+       II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+       II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
+       II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+       II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
+       II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
+       II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
+       II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
+       II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+       II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
+       II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+       II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
+       II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
 
        state[0] += a;
        state[1] += b;
@@ -1372,45 +1059,31 @@ __md5_Transform(state, block)
        state[3] += d;
 
        /* Zeroize sensitive information. */
-       memset(x, 0, sizeof(x));
-}
-
-
-static void
-__md5_to64(char *s, unsigned long v, int n)
-{
-       while(--n >= 0)
-       {
-               *s++ = __md5_itoa64[v & 0x3f];
-               v >>= 6;
-       }
+       memset ((void *)x, 0, sizeof (x));
 }
 
 /*
  * UNIX password
- *
- * Use MD5 for what it is best at...
  */
 
 static char *
-__md5_crypt(const char *pw, const char *salt)
+rb_md5_crypt(const char *pw, const char *salt)
 {
-       /* Static stuff */
+       MD5_CTX ctx,ctx1;
+       unsigned long l;
+       int sl, pl;
+       u_int i;
+       u_char final[MD5_SIZE];
        static const char *sp, *ep;
        static char passwd[120], *p;
-
-       char final[17];         /* final[16] exists only to aid in looping */
-       int sl, pl, i, __md5__magic_len, pw_len;
-       struct MD5Context ctx, ctx1;
-       unsigned long l;
+       static const char *magic = "$1$";
 
        /* Refine the Salt first */
        sp = salt;
 
        /* If it starts with the magic string, then skip that */
-       __md5__magic_len = strlen(__md5__magic);
-       if(!strncmp(sp, __md5__magic, __md5__magic_len))
-               sp += __md5__magic_len;
+       if(!strncmp(sp, magic, strlen(magic)))
+               sp += strlen(magic);
 
        /* It stops at the first '$', max 8 chars */
        for(ep = sp; *ep && *ep != '$' && ep < (sp + 8); ep++)
@@ -1419,87 +1092,1224 @@ __md5_crypt(const char *pw, const char *salt)
        /* get the length of the true salt */
        sl = ep - sp;
 
-       __md5_Init(&ctx);
+       MD5Init(&ctx);
 
        /* The password first, since that is what is most unknown */
-       pw_len = strlen(pw);
-       __md5_Update(&ctx, pw, pw_len);
+       MD5Update(&ctx, (const u_char *)pw, strlen(pw));
 
        /* Then our magic string */
-       __md5_Update(&ctx, __md5__magic, __md5__magic_len);
+       MD5Update(&ctx, (const u_char *)magic, strlen(magic));
 
        /* Then the raw salt */
-       __md5_Update(&ctx, sp, sl);
+       MD5Update(&ctx, (const u_char *)sp, (u_int)sl);
 
        /* Then just as many characters of the MD5(pw,salt,pw) */
-       __md5_Init(&ctx1);
-       __md5_Update(&ctx1, pw, pw_len);
-       __md5_Update(&ctx1, sp, sl);
-       __md5_Update(&ctx1, pw, pw_len);
-       __md5_Final(final, &ctx1);
-       for(pl = pw_len; pl > 0; pl -= 16)
-               __md5_Update(&ctx, final, pl > 16 ? 16 : pl);
+       MD5Init(&ctx1);
+       MD5Update(&ctx1, (const u_char *)pw, strlen(pw));
+       MD5Update(&ctx1, (const u_char *)sp, (u_int)sl);
+       MD5Update(&ctx1, (const u_char *)pw, strlen(pw));
+       MD5Final(final, &ctx1);
+       for(pl = (int)strlen(pw); pl > 0; pl -= MD5_SIZE)
+               MD5Update(&ctx, (const u_char *)final,
+                   (u_int)(pl > MD5_SIZE ? MD5_SIZE : pl));
 
        /* Don't leave anything around in vm they could use. */
-       memset(final, 0, sizeof final);
+       memset(final, 0, sizeof(final));
 
        /* Then something really weird... */
-       for(i = pw_len; i; i >>= 1)
-       {
-               __md5_Update(&ctx, ((i & 1) ? final : pw), 1);
-       }
+       for (i = strlen(pw); i; i >>= 1)
+               if(i & 1)
+                   MD5Update(&ctx, (const u_char *)final, 1);
+               else
+                   MD5Update(&ctx, (const u_char *)pw, 1);
 
        /* Now make the output string */
-       rb_strlcpy(passwd, __md5__magic, sizeof(passwd));
-       strncat(passwd, sp, sl);
+       rb_strlcpy(passwd, magic, sizeof(passwd));
+       strncat(passwd, sp, (u_int)sl);
        rb_strlcat(passwd, "$", sizeof(passwd));
 
-       __md5_Final(final, &ctx);
+       MD5Final(final, &ctx);
 
        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         */
-       for(i = 0; i < 1000; i++)
-       {
-               __md5_Init(&ctx1);
+       for(i = 0; i < 1000; i++) {
+               MD5Init(&ctx1);
                if(i & 1)
-                       __md5_Update(&ctx1, pw, pw_len);
+                       MD5Update(&ctx1, (const u_char *)pw, strlen(pw));
                else
-                       __md5_Update(&ctx1, final, 16);
+                       MD5Update(&ctx1, (const u_char *)final, MD5_SIZE);
 
                if(i % 3)
-                       __md5_Update(&ctx1, sp, sl);
+                       MD5Update(&ctx1, (const u_char *)sp, (u_int)sl);
 
                if(i % 7)
-                       __md5_Update(&ctx1, pw, pw_len);
+                       MD5Update(&ctx1, (const u_char *)pw, strlen(pw));
 
                if(i & 1)
-                       __md5_Update(&ctx1, final, 16);
+                       MD5Update(&ctx1, (const u_char *)final, MD5_SIZE);
                else
-                       __md5_Update(&ctx1, pw, pw_len);
-               __md5_Final(final, &ctx1);
+                       MD5Update(&ctx1, (const u_char *)pw, strlen(pw));
+               MD5Final(final, &ctx1);
        }
 
        p = passwd + strlen(passwd);
 
-       final[16] = final[5];
-       for(i = 0; i < 5; i++)
-       {
-               l = (final[i] << 16) | (final[i + 6] << 8) | final[i + 12];
-               __md5_to64(p, l, 4);
-               p += 4;
-       }
+       l = (final[ 0]<<16) | (final[ 6]<<8) | final[12];
+       _crypt_to64(p, l, 4); p += 4;
+       l = (final[ 1]<<16) | (final[ 7]<<8) | final[13];
+       _crypt_to64(p, l, 4); p += 4;
+       l = (final[ 2]<<16) | (final[ 8]<<8) | final[14];
+       _crypt_to64(p, l, 4); p += 4;
+       l = (final[ 3]<<16) | (final[ 9]<<8) | final[15];
+       _crypt_to64(p, l, 4); p += 4;
+       l = (final[ 4]<<16) | (final[10]<<8) | final[ 5];
+       _crypt_to64(p, l, 4); p += 4;
        l = final[11];
-       __md5_to64(p, l, 2);
-       p += 2;
+       _crypt_to64(p, l, 2); p += 2;
        *p = '\0';
 
        /* Don't leave anything around in vm they could use. */
-       memset(final, 0, sizeof final);
+       memset(final, 0, sizeof(final));
+
+       return (passwd);
+}
+
+
+/* SHA256-based Unix crypt implementation.
+   Released into the Public Domain by Ulrich Drepper <drepper@redhat.com>.  */
+
+/* Structure to save state of computation between the single steps.  */
+struct sha256_ctx
+{
+       uint32_t H[8];
+
+       uint32_t total[2];
+       uint32_t buflen;
+       char buffer[128];       /* NB: always correctly aligned for uint32_t.  */
+};
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#      define SHA256_SWAP(n) \
+               (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
+#else
+#      define SHA256_SWAP(n) (n)
+#endif
+
+/* This array contains the bytes used to pad the buffer to the next
+   64-byte boundary.  (FIPS 180-2:5.1.1)  */
+static const unsigned char SHA256_fillbuf[64] = { 0x80, 0 /* , 0, 0, ...  */  };
+
+
+/* Constants for SHA256 from FIPS 180-2:4.2.2.  */
+static const uint32_t SHA256_K[64] = {
+       0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
+       0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+       0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
+       0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+       0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
+       0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+       0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
+       0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+       0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
+       0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+       0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
+       0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+       0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
+       0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+       0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
+       0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
+};
+
+
+/* Process LEN bytes of BUFFER, accumulating context into CTX.
+   It is assumed that LEN % 64 == 0.  */
+static void rb_sha256_process_block(const void *buffer, size_t len, struct sha256_ctx *ctx)
+{
+       const uint32_t *words = buffer;
+       size_t nwords = len / sizeof(uint32_t);
+       uint32_t a = ctx->H[0];
+       uint32_t b = ctx->H[1];
+       uint32_t c = ctx->H[2];
+       uint32_t d = ctx->H[3];
+       uint32_t e = ctx->H[4];
+       uint32_t f = ctx->H[5];
+       uint32_t g = ctx->H[6];
+       uint32_t h = ctx->H[7];
+
+       /* First increment the byte count.  FIPS 180-2 specifies the possible
+          length of the file up to 2^64 bits.  Here we only compute the
+          number of bytes.  Do a double word increment.  */
+       ctx->total[0] += len;
+       if (ctx->total[0] < len)
+               ++ctx->total[1];
+
+       /* Process all bytes in the buffer with 64 bytes in each round of
+          the loop.  */
+       while (nwords > 0)
+       {
+               uint32_t W[64];
+               uint32_t a_save = a;
+               uint32_t b_save = b;
+               uint32_t c_save = c;
+               uint32_t d_save = d;
+               uint32_t e_save = e;
+               uint32_t f_save = f;
+               uint32_t g_save = g;
+               uint32_t h_save = h;
+               unsigned int t;
+
+               /* Operators defined in FIPS 180-2:4.1.2.  */
+               #define SHA256_Ch(x, y, z) ((x & y) ^ (~x & z))
+               #define SHA256_Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
+               #define SHA256_S0(x) (SHA256_CYCLIC (x, 2) ^ SHA256_CYCLIC (x, 13) ^ SHA256_CYCLIC (x, 22))
+               #define SHA256_S1(x) (SHA256_CYCLIC (x, 6) ^ SHA256_CYCLIC (x, 11) ^ SHA256_CYCLIC (x, 25))
+               #define SHA256_R0(x) (SHA256_CYCLIC (x, 7) ^ SHA256_CYCLIC (x, 18) ^ (x >> 3))
+               #define SHA256_R1(x) (SHA256_CYCLIC (x, 17) ^ SHA256_CYCLIC (x, 19) ^ (x >> 10))
+
+               /* It is unfortunate that C does not provide an operator for
+                  cyclic rotation.  Hope the C compiler is smart enough.  */
+               #define SHA256_CYCLIC(w, s) ((w >> s) | (w << (32 - s)))
+
+               /* Compute the message schedule according to FIPS 180-2:6.2.2 step 2.  */
+               for (t = 0; t < 16; ++t)
+               {
+                       W[t] = SHA256_SWAP(*words);
+                       ++words;
+               }
+               for (t = 16; t < 64; ++t)
+                       W[t] = SHA256_R1(W[t - 2]) + W[t - 7] + SHA256_R0(W[t - 15]) + W[t - 16];
+
+               /* The actual computation according to FIPS 180-2:6.2.2 step 3.  */
+               for (t = 0; t < 64; ++t)
+               {
+                       uint32_t T1 = h + SHA256_S1(e) + SHA256_Ch(e, f, g) + SHA256_K[t] + W[t];
+                       uint32_t T2 = SHA256_S0(a) + SHA256_Maj(a, b, c);
+                       h = g;
+                       g = f;
+                       f = e;
+                       e = d + T1;
+                       d = c;
+                       c = b;
+                       b = a;
+                       a = T1 + T2;
+               }
+
+               /* Add the starting values of the context according to FIPS 180-2:6.2.2
+                  step 4.  */
+               a += a_save;
+               b += b_save;
+               c += c_save;
+               d += d_save;
+               e += e_save;
+               f += f_save;
+               g += g_save;
+               h += h_save;
+
+               /* Prepare for the next round.  */
+               nwords -= 16;
+       }
+
+       /* Put checksum in context given as argument.  */
+       ctx->H[0] = a;
+       ctx->H[1] = b;
+       ctx->H[2] = c;
+       ctx->H[3] = d;
+       ctx->H[4] = e;
+       ctx->H[5] = f;
+       ctx->H[6] = g;
+       ctx->H[7] = h;
+}
+
+
+/* Initialize structure containing state of computation.
+   (FIPS 180-2:5.3.2)  */
+static void rb_sha256_init_ctx(struct sha256_ctx *ctx)
+{
+       ctx->H[0] = 0x6a09e667;
+       ctx->H[1] = 0xbb67ae85;
+       ctx->H[2] = 0x3c6ef372;
+       ctx->H[3] = 0xa54ff53a;
+       ctx->H[4] = 0x510e527f;
+       ctx->H[5] = 0x9b05688c;
+       ctx->H[6] = 0x1f83d9ab;
+       ctx->H[7] = 0x5be0cd19;
+
+       ctx->total[0] = ctx->total[1] = 0;
+       ctx->buflen = 0;
+}
+
+
+/* Process the remaining bytes in the internal buffer and the usual
+   prolog according to the standard and write the result to RESBUF.
+
+   IMPORTANT: On some systems it is required that RESBUF is correctly
+   aligned for a 32 bits value.  */
+static void *rb_sha256_finish_ctx(struct sha256_ctx *ctx, void *resbuf)
+{
+       /* Take yet unprocessed bytes into account.  */
+       uint32_t bytes = ctx->buflen;
+       size_t pad;
+       unsigned int i;
+
+       /* Now count remaining bytes.  */
+       ctx->total[0] += bytes;
+       if (ctx->total[0] < bytes)
+               ++ctx->total[1];
+
+       pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
+       memcpy(&ctx->buffer[bytes], SHA256_fillbuf, pad);
+
+       /* Put the 64-bit file length in *bits* at the end of the buffer.  */
+       *(uint32_t *) & ctx->buffer[bytes + pad + 4] = SHA256_SWAP(ctx->total[0] << 3);
+       *(uint32_t *) & ctx->buffer[bytes + pad] = SHA256_SWAP((ctx->total[1] << 3) |
+                                                       (ctx->total[0] >> 29));
+
+       /* Process last bytes.  */
+       rb_sha256_process_block(ctx->buffer, bytes + pad + 8, ctx);
+
+       /* Put result from CTX in first 32 bytes following RESBUF.  */
+       for (i = 0; i < 8; ++i)
+               ((uint32_t *) resbuf)[i] = SHA256_SWAP(ctx->H[i]);
+
+       return resbuf;
+}
+
+
+static void rb_sha256_process_bytes(const void *buffer, size_t len, struct sha256_ctx *ctx)
+{
+       /* When we already have some bits in our internal buffer concatenate
+          both inputs first.  */
+       if (ctx->buflen != 0)
+       {
+               size_t left_over = ctx->buflen;
+               size_t add = 128 - left_over > len ? len : 128 - left_over;
+
+               memcpy(&ctx->buffer[left_over], buffer, add);
+               ctx->buflen += add;
+
+               if (ctx->buflen > 64)
+               {
+                       rb_sha256_process_block(ctx->buffer, ctx->buflen & ~63, ctx);
+
+                       ctx->buflen &= 63;
+                       /* The regions in the following copy operation cannot overlap.  */
+                       memcpy(ctx->buffer, &ctx->buffer[(left_over + add) & ~63], ctx->buflen);
+               }
+
+               buffer = (const char *)buffer + add;
+               len -= add;
+       }
+
+       /* Process available complete blocks.  */
+       if (len >= 64)
+       {
+               /* To check alignment gcc has an appropriate operator.  Other
+                  compilers don't.  */
+               #if __GNUC__ >= 2
+               #       define SHA256_UNALIGNED_P(p) (((uintptr_t) p) % __alignof__ (uint32_t) != 0)
+               #else
+               #       define SHA256_UNALIGNED_P(p) (((uintptr_t) p) % sizeof (uint32_t) != 0)
+               #endif
+               if (SHA256_UNALIGNED_P(buffer))
+                       while (len > 64)
+                       {
+                               rb_sha256_process_block(memcpy(ctx->buffer, buffer, 64), 64, ctx);
+                               buffer = (const char *)buffer + 64;
+                               len -= 64;
+                       }
+               else
+               {
+                       rb_sha256_process_block(buffer, len & ~63, ctx);
+                       buffer = (const char *)buffer + (len & ~63);
+                       len &= 63;
+               }
+       }
+
+       /* Move remaining bytes into internal buffer.  */
+       if (len > 0)
+       {
+               size_t left_over = ctx->buflen;
+
+               memcpy(&ctx->buffer[left_over], buffer, len);
+               left_over += len;
+               if (left_over >= 64)
+               {
+                       rb_sha256_process_block(ctx->buffer, 64, ctx);
+                       left_over -= 64;
+                       memcpy(ctx->buffer, &ctx->buffer[64], left_over);
+               }
+               ctx->buflen = left_over;
+       }
+}
+
+
+/* Define our magic string to mark salt for SHA256 "encryption"
+   replacement.  */
+static const char sha256_salt_prefix[] = "$5$";
+
+/* Prefix for optional rounds specification.  */
+static const char sha256_rounds_prefix[] = "rounds=";
+
+/* Maximum salt string length.  */
+#define SHA256_SALT_LEN_MAX 16
+/* Default number of rounds if not explicitly specified.  */
+#define SHA256_ROUNDS_DEFAULT 5000
+/* Minimum number of rounds.  */
+#define SHA256_ROUNDS_MIN 1000
+/* Maximum number of rounds.  */
+#define SHA256_ROUNDS_MAX 999999999
+
+static char *rb_sha256_crypt_r(const char *key, const char *salt, char *buffer, int buflen)
+{
+       unsigned char alt_result[32] __attribute__ ((__aligned__(__alignof__(uint32_t))));
+       unsigned char temp_result[32] __attribute__ ((__aligned__(__alignof__(uint32_t))));
+       struct sha256_ctx ctx;
+       struct sha256_ctx alt_ctx;
+       size_t salt_len;
+       size_t key_len;
+       size_t cnt;
+       char *cp;
+       char *copied_key = NULL;
+       char *copied_salt = NULL;
+       char *p_bytes;
+       char *s_bytes;
+       /* Default number of rounds.  */
+       size_t rounds = SHA256_ROUNDS_DEFAULT;
+       int rounds_custom = 0;
+
+       /* Find beginning of salt string.  The prefix should normally always
+          be present.  Just in case it is not.  */
+       if (strncmp(sha256_salt_prefix, salt, sizeof(sha256_salt_prefix) - 1) == 0)
+               /* Skip salt prefix.  */
+               salt += sizeof(sha256_salt_prefix) - 1;
+
+       if (strncmp(salt, sha256_rounds_prefix, sizeof(sha256_rounds_prefix) - 1) == 0)
+       {
+               const char *num = salt + sizeof(sha256_rounds_prefix) - 1;
+               char *endp;
+               unsigned long int srounds = strtoul(num, &endp, 10);
+               if (*endp == '$')
+               {
+                       salt = endp + 1;
+                       rounds = MAX(SHA256_ROUNDS_MIN, MIN(srounds, SHA256_ROUNDS_MAX));
+                       rounds_custom = 1;
+               }
+       }
+
+       salt_len = MIN(strcspn(salt, "$"), SHA256_SALT_LEN_MAX);
+       key_len = strlen(key);
+
+       if ((key - (char *)0) % __alignof__(uint32_t) != 0)
+       {
+               char *tmp = (char *)alloca(key_len + __alignof__(uint32_t));
+               key = copied_key =
+                       memcpy(tmp + __alignof__(uint32_t)
+                              - (tmp - (char *)0) % __alignof__(uint32_t), key, key_len);
+       }
+
+       if ((salt - (char *)0) % __alignof__(uint32_t) != 0)
+       {
+               char *tmp = (char *)alloca(salt_len + __alignof__(uint32_t));
+               salt = copied_salt =
+                       memcpy(tmp + __alignof__(uint32_t)
+                              - (tmp - (char *)0) % __alignof__(uint32_t), salt, salt_len);
+       }
+
+       /* Prepare for the real work.  */
+       rb_sha256_init_ctx(&ctx);
+
+       /* Add the key string.  */
+       rb_sha256_process_bytes(key, key_len, &ctx);
+
+       /* The last part is the salt string.  This must be at most 16
+          characters and it ends at the first `$' character (for
+          compatibility with existing implementations).  */
+       rb_sha256_process_bytes(salt, salt_len, &ctx);
+
+
+       /* Compute alternate SHA256 sum with input KEY, SALT, and KEY.  The
+          final result will be added to the first context.  */
+       rb_sha256_init_ctx(&alt_ctx);
+
+       /* Add key.  */
+       rb_sha256_process_bytes(key, key_len, &alt_ctx);
+
+       /* Add salt.  */
+       rb_sha256_process_bytes(salt, salt_len, &alt_ctx);
+
+       /* Add key again.  */
+       rb_sha256_process_bytes(key, key_len, &alt_ctx);
+
+       /* Now get result of this (32 bytes) and add it to the other
+          context.  */
+       rb_sha256_finish_ctx(&alt_ctx, alt_result);
+
+       /* Add for any character in the key one byte of the alternate sum.  */
+       for (cnt = key_len; cnt > 32; cnt -= 32)
+               rb_sha256_process_bytes(alt_result, 32, &ctx);
+       rb_sha256_process_bytes(alt_result, cnt, &ctx);
+
+       /* Take the binary representation of the length of the key and for every
+          1 add the alternate sum, for every 0 the key.  */
+       for (cnt = key_len; cnt > 0; cnt >>= 1)
+               if ((cnt & 1) != 0)
+                       rb_sha256_process_bytes(alt_result, 32, &ctx);
+               else
+                       rb_sha256_process_bytes(key, key_len, &ctx);
+
+       /* Create intermediate result.  */
+       rb_sha256_finish_ctx(&ctx, alt_result);
+
+       /* Start computation of P byte sequence.  */
+       rb_sha256_init_ctx(&alt_ctx);
+
+       /* For every character in the password add the entire password.  */
+       for (cnt = 0; cnt < key_len; ++cnt)
+               rb_sha256_process_bytes(key, key_len, &alt_ctx);
+
+       /* Finish the digest.  */
+       rb_sha256_finish_ctx(&alt_ctx, temp_result);
+
+       /* Create byte sequence P.  */
+       cp = p_bytes = alloca(key_len);
+       for (cnt = key_len; cnt >= 32; cnt -= 32)
+       {
+               memcpy(cp, temp_result, 32);
+               cp += 32;
+       }
+       memcpy(cp, temp_result, cnt);
+
+       /* Start computation of S byte sequence.  */
+       rb_sha256_init_ctx(&alt_ctx);
+
+       /* For every character in the password add the entire password.  */
+       for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt)
+               rb_sha256_process_bytes(salt, salt_len, &alt_ctx);
+
+       /* Finish the digest.  */
+       rb_sha256_finish_ctx(&alt_ctx, temp_result);
+
+       /* Create byte sequence S.  */
+       cp = s_bytes = alloca(salt_len);
+       for (cnt = salt_len; cnt >= 32; cnt -= 32)
+       {
+               memcpy(cp, temp_result, 32);
+               cp += 32;
+       }
+       memcpy(cp, temp_result, cnt);
+
+       /* Repeatedly run the collected hash value through SHA256 to burn
+          CPU cycles.  */
+       for (cnt = 0; cnt < rounds; ++cnt)
+       {
+               /* New context.  */
+               rb_sha256_init_ctx(&ctx);
+
+               /* Add key or last result.  */
+               if ((cnt & 1) != 0)
+                       rb_sha256_process_bytes(p_bytes, key_len, &ctx);
+               else
+                       rb_sha256_process_bytes(alt_result, 32, &ctx);
+
+               /* Add salt for numbers not divisible by 3.  */
+               if (cnt % 3 != 0)
+                       rb_sha256_process_bytes(s_bytes, salt_len, &ctx);
+
+               /* Add key for numbers not divisible by 7.  */
+               if (cnt % 7 != 0)
+                       rb_sha256_process_bytes(p_bytes, key_len, &ctx);
+
+               /* Add key or last result.  */
+               if ((cnt & 1) != 0)
+                       rb_sha256_process_bytes(alt_result, 32, &ctx);
+               else
+                       rb_sha256_process_bytes(p_bytes, key_len, &ctx);
+
+               /* Create intermediate result.  */
+               rb_sha256_finish_ctx(&ctx, alt_result);
+       }
+
+       /* Now we can construct the result string.  It consists of three
+          parts.  */
+       memset(buffer, '\0', MAX(0, buflen));
+       strncpy(buffer, sha256_salt_prefix, MAX(0, buflen));
+       if((cp = strchr(buffer, '\0')) == NULL)
+               cp = buffer + MAX(0, buflen);
+       buflen -= sizeof(sha256_salt_prefix) - 1;
+
+       if (rounds_custom)
+       {
+               int n = snprintf(cp, MAX(0, buflen), "%s%zu$",
+                                sha256_rounds_prefix, rounds);
+               cp += n;
+               buflen -= n;
+       }
+
+       memset(cp, '\0', salt_len);
+       strncpy(cp, salt, MIN((size_t) MAX(0, buflen), salt_len));
+       if((cp = strchr(buffer, '\0')) == NULL)
+               cp += salt_len;
+       buflen -= MIN((size_t) MAX(0, buflen), salt_len);
+
+       if (buflen > 0)
+       {
+               *cp++ = '$';
+               --buflen;
+       }
+
+       b64_from_24bit(alt_result[0], alt_result[10], alt_result[20], 4);
+       b64_from_24bit(alt_result[21], alt_result[1], alt_result[11], 4);
+       b64_from_24bit(alt_result[12], alt_result[22], alt_result[2], 4);
+       b64_from_24bit(alt_result[3], alt_result[13], alt_result[23], 4);
+       b64_from_24bit(alt_result[24], alt_result[4], alt_result[14], 4);
+       b64_from_24bit(alt_result[15], alt_result[25], alt_result[5], 4);
+       b64_from_24bit(alt_result[6], alt_result[16], alt_result[26], 4);
+       b64_from_24bit(alt_result[27], alt_result[7], alt_result[17], 4);
+       b64_from_24bit(alt_result[18], alt_result[28], alt_result[8], 4);
+       b64_from_24bit(alt_result[9], alt_result[19], alt_result[29], 4);
+       b64_from_24bit(0, alt_result[31], alt_result[30], 3);
+       if (buflen <= 0)
+       {
+               errno = ERANGE;
+               buffer = NULL;
+       }
+       else
+               *cp = '\0';     /* Terminate the string.  */
+
+       /* Clear the buffer for the intermediate result so that people
+          attaching to processes or reading core dumps cannot get any
+          information.  We do it in this way to clear correct_words[]
+          inside the SHA256 implementation as well.  */
+       rb_sha256_init_ctx(&ctx);
+       rb_sha256_finish_ctx(&ctx, alt_result);
+       memset(temp_result, '\0', sizeof(temp_result));
+       memset(p_bytes, '\0', key_len);
+       memset(s_bytes, '\0', salt_len);
+       memset(&ctx, '\0', sizeof(ctx));
+       memset(&alt_ctx, '\0', sizeof(alt_ctx));
+       if (copied_key != NULL)
+               memset(copied_key, '\0', key_len);
+       if (copied_salt != NULL)
+               memset(copied_salt, '\0', salt_len);
+
+       return buffer;
+}
+
+
+/* This entry point is equivalent to the `crypt' function in Unix
+   libcs.  */
+static char *rb_sha256_crypt(const char *key, const char *salt)
+{
+       /* We don't want to have an arbitrary limit in the size of the
+          password.  We can compute an upper bound for the size of the
+          result in advance and so we can prepare the buffer we pass to
+          `rb_sha256_crypt_r'.  */
+       static char *buffer;
+       static int buflen;
+       int needed = (sizeof(sha256_salt_prefix) - 1
+                     + sizeof(sha256_rounds_prefix) + 9 + 1 + strlen(salt) + 1 + 43 + 1);
+
+               char *new_buffer = (char *)malloc(needed);
+               if (new_buffer == NULL)
+                       return NULL;
+
+               buffer = new_buffer;
+               buflen = needed;
+
+       return rb_sha256_crypt_r(key, salt, buffer, buflen);
+}
+
+/* Structure to save state of computation between the single steps.  */
+struct sha512_ctx
+{
+       uint64_t H[8];
+
+       uint64_t total[2];
+       uint64_t buflen;
+       char buffer[256];       /* NB: always correctly aligned for uint64_t.  */
+};
+
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#      define SHA512_SWAP(n)                   \
+               (((n) << 56)                    \
+               | (((n) & 0xff00) << 40)        \
+               | (((n) & 0xff0000) << 24)      \
+               | (((n) & 0xff000000) << 8)     \
+               | (((n) >> 8) & 0xff000000)     \
+               | (((n) >> 24) & 0xff0000)      \
+               | (((n) >> 40) & 0xff00)        \
+               | ((n) >> 56))
+#else
+#      define SHA512_SWAP(n) (n)
+#endif
+
+
+/* This array contains the bytes used to pad the buffer to the next
+   64-byte boundary.  (FIPS 180-2:5.1.2)  */
+static const unsigned char SHA512_fillbuf[128] = { 0x80, 0 /* , 0, 0, ...  */  };
+
+
+/* Constants for SHA512 from FIPS 180-2:4.2.3.  */
+static const uint64_t SHA512_K[80] = {
+       0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
+       0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
+       0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
+       0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
+       0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
+       0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
+       0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
+       0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
+       0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
+       0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
+       0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
+       0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
+       0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
+       0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
+       0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
+       0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
+       0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
+       0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
+       0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
+       0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
+       0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
+       0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
+       0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
+       0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
+       0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
+       0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
+       0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
+       0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
+       0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
+       0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
+       0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
+       0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
+       0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
+       0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
+       0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
+       0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
+       0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
+       0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
+       0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
+       0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
+};
+
+
+/* Process LEN bytes of BUFFER, accumulating context into CTX.
+   It is assumed that LEN % 128 == 0.  */
+static void rb_sha512_process_block(const void *buffer, size_t len, struct sha512_ctx *ctx)
+{
+       const uint64_t *words = buffer;
+       size_t nwords = len / sizeof(uint64_t);
+       uint64_t a = ctx->H[0];
+       uint64_t b = ctx->H[1];
+       uint64_t c = ctx->H[2];
+       uint64_t d = ctx->H[3];
+       uint64_t e = ctx->H[4];
+       uint64_t f = ctx->H[5];
+       uint64_t g = ctx->H[6];
+       uint64_t h = ctx->H[7];
+
+       /* First increment the byte count.  FIPS 180-2 specifies the possible
+          length of the file up to 2^128 bits.  Here we only compute the
+          number of bytes.  Do a double word increment.  */
+       ctx->total[0] += len;
+       if (ctx->total[0] < len)
+               ++ctx->total[1];
+
+       /* Process all bytes in the buffer with 128 bytes in each round of
+          the loop.  */
+       while (nwords > 0)
+       {
+               uint64_t W[80];
+               uint64_t a_save = a;
+               uint64_t b_save = b;
+               uint64_t c_save = c;
+               uint64_t d_save = d;
+               uint64_t e_save = e;
+               uint64_t f_save = f;
+               uint64_t g_save = g;
+               uint64_t h_save = h;
+               unsigned int t;
+
+               /* Operators defined in FIPS 180-2:4.1.2.  */
+               #define SHA512_Ch(x, y, z) ((x & y) ^ (~x & z))
+               #define SHA512_Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
+               #define SHA512_S0(x) (SHA512_CYCLIC (x, 28) ^ SHA512_CYCLIC (x, 34) ^ SHA512_CYCLIC (x, 39))
+               #define SHA512_S1(x) (SHA512_CYCLIC (x, 14) ^ SHA512_CYCLIC (x, 18) ^ SHA512_CYCLIC (x, 41))
+               #define SHA512_R0(x) (SHA512_CYCLIC (x, 1) ^ SHA512_CYCLIC (x, 8) ^ (x >> 7))
+               #define SHA512_R1(x) (SHA512_CYCLIC (x, 19) ^ SHA512_CYCLIC (x, 61) ^ (x >> 6))
+
+               /* It is unfortunate that C does not provide an operator for
+                  cyclic rotation.  Hope the C compiler is smart enough.  */
+               #define SHA512_CYCLIC(w, s) ((w >> s) | (w << (64 - s)))
+
+               /* Compute the message schedule according to FIPS 180-2:6.3.2 step 2.  */
+               for (t = 0; t < 16; ++t)
+               {
+                       W[t] = SHA512_SWAP(*words);
+                       ++words;
+               }
+               for (t = 16; t < 80; ++t)
+                       W[t] = SHA512_R1(W[t - 2]) + W[t - 7] + SHA512_R0(W[t - 15]) + W[t - 16];
+
+               /* The actual computation according to FIPS 180-2:6.3.2 step 3.  */
+               for (t = 0; t < 80; ++t)
+               {
+                       uint64_t T1 = h + SHA512_S1(e) + SHA512_Ch(e, f, g) + SHA512_K[t] + W[t];
+                       uint64_t T2 = SHA512_S0(a) + SHA512_Maj(a, b, c);
+                       h = g;
+                       g = f;
+                       f = e;
+                       e = d + T1;
+                       d = c;
+                       c = b;
+                       b = a;
+                       a = T1 + T2;
+               }
+
+               /* Add the starting values of the context according to FIPS 180-2:6.3.2
+                  step 4.  */
+               a += a_save;
+               b += b_save;
+               c += c_save;
+               d += d_save;
+               e += e_save;
+               f += f_save;
+               g += g_save;
+               h += h_save;
+
+               /* Prepare for the next round.  */
+               nwords -= 16;
+       }
+
+       /* Put checksum in context given as argument.  */
+       ctx->H[0] = a;
+       ctx->H[1] = b;
+       ctx->H[2] = c;
+       ctx->H[3] = d;
+       ctx->H[4] = e;
+       ctx->H[5] = f;
+       ctx->H[6] = g;
+       ctx->H[7] = h;
+}
+
+
+/* Initialize structure containing state of computation.
+   (FIPS 180-2:5.3.3)  */
+static void rb_sha512_init_ctx(struct sha512_ctx *ctx)
+{
+       ctx->H[0] = 0x6a09e667f3bcc908ULL;
+       ctx->H[1] = 0xbb67ae8584caa73bULL;
+       ctx->H[2] = 0x3c6ef372fe94f82bULL;
+       ctx->H[3] = 0xa54ff53a5f1d36f1ULL;
+       ctx->H[4] = 0x510e527fade682d1ULL;
+       ctx->H[5] = 0x9b05688c2b3e6c1fULL;
+       ctx->H[6] = 0x1f83d9abfb41bd6bULL;
+       ctx->H[7] = 0x5be0cd19137e2179ULL;
+
+       ctx->total[0] = ctx->total[1] = 0;
+       ctx->buflen = 0;
+}
+
+
+/* Process the remaining bytes in the internal buffer and the usual
+   prolog according to the standard and write the result to RESBUF.
+
+   IMPORTANT: On some systems it is required that RESBUF is correctly
+   aligned for a 32 bits value.  */
+static void *rb_sha512_finish_ctx(struct sha512_ctx *ctx, void *resbuf)
+{
+       /* Take yet unprocessed bytes into account.  */
+       uint64_t bytes = ctx->buflen;
+       size_t pad;
+       unsigned int i;
+
+       /* Now count remaining bytes.  */
+       ctx->total[0] += bytes;
+       if (ctx->total[0] < bytes)
+               ++ctx->total[1];
+
+       pad = bytes >= 112 ? 128 + 112 - bytes : 112 - bytes;
+       memcpy(&ctx->buffer[bytes], SHA512_fillbuf, pad);
+
+       /* Put the 128-bit file length in *bits* at the end of the buffer.  */
+       *(uint64_t *) & ctx->buffer[bytes + pad + 8] = SHA512_SWAP(ctx->total[0] << 3);
+       *(uint64_t *) & ctx->buffer[bytes + pad] = SHA512_SWAP((ctx->total[1] << 3) |
+                                                       (ctx->total[0] >> 61));
+
+       /* Process last bytes.  */
+       rb_sha512_process_block(ctx->buffer, bytes + pad + 16, ctx);
+
+       /* Put result from CTX in first 64 bytes following RESBUF.  */
+       for (i = 0; i < 8; ++i)
+               ((uint64_t *) resbuf)[i] = SHA512_SWAP(ctx->H[i]);
+
+       return resbuf;
+}
+
+
+static void rb_sha512_process_bytes(const void *buffer, size_t len, struct sha512_ctx *ctx)
+{
+       /* When we already have some bits in our internal buffer concatenate
+          both inputs first.  */
+       if (ctx->buflen != 0)
+       {
+               size_t left_over = ctx->buflen;
+               size_t add = 256 - left_over > len ? len : 256 - left_over;
+
+               memcpy(&ctx->buffer[left_over], buffer, add);
+               ctx->buflen += add;
+
+               if (ctx->buflen > 128)
+               {
+                       rb_sha512_process_block(ctx->buffer, ctx->buflen & ~127, ctx);
+
+                       ctx->buflen &= 127;
+                       /* The regions in the following copy operation cannot overlap.  */
+                       memcpy(ctx->buffer, &ctx->buffer[(left_over + add) & ~127], ctx->buflen);
+               }
+
+               buffer = (const char *)buffer + add;
+               len -= add;
+       }
+
+       /* Process available complete blocks.  */
+       if (len >= 128)
+       {
+       #if !_STRING_ARCH_unaligned
+       /* To check alignment gcc has an appropriate operator.  Other
+          compilers don't.  */
+       #       if __GNUC__ >= 2
+       #               define SHA512_UNALIGNED_P(p) (((uintptr_t) p) % __alignof__ (uint64_t) != 0)
+       #       else
+       #               define SHA512_UNALIGNED_P(p) (((uintptr_t) p) % sizeof (uint64_t) != 0)
+       #       endif
+               if (SHA512_UNALIGNED_P(buffer))
+                       while (len > 128)
+                       {
+                               rb_sha512_process_block(memcpy(ctx->buffer, buffer, 128), 128, ctx);
+                               buffer = (const char *)buffer + 128;
+                               len -= 128;
+                       }
+               else
+       #endif
+               {
+                       rb_sha512_process_block(buffer, len & ~127, ctx);
+                       buffer = (const char *)buffer + (len & ~127);
+                       len &= 127;
+               }
+       }
+
+       /* Move remaining bytes into internal buffer.  */
+       if (len > 0)
+       {
+               size_t left_over = ctx->buflen;
+
+               memcpy(&ctx->buffer[left_over], buffer, len);
+               left_over += len;
+               if (left_over >= 128)
+               {
+                       rb_sha512_process_block(ctx->buffer, 128, ctx);
+                       left_over -= 128;
+                       memcpy(ctx->buffer, &ctx->buffer[128], left_over);
+               }
+               ctx->buflen = left_over;
+       }
+}
+
+
+/* Define our magic string to mark salt for SHA512 "encryption"
+   replacement.  */
+static const char sha512_salt_prefix[] = "$6$";
+
+/* Prefix for optional rounds specification.  */
+static const char sha512_rounds_prefix[] = "rounds=";
+
+/* Maximum salt string length.  */
+#define SHA512_SALT_LEN_MAX 16
+/* Default number of rounds if not explicitly specified.  */
+#define SHA512_ROUNDS_DEFAULT 5000
+/* Minimum number of rounds.  */
+#define SHA512_ROUNDS_MIN 1000
+/* Maximum number of rounds.  */
+#define SHA512_ROUNDS_MAX 999999999
+
+static char *rb_sha512_crypt_r(const char *key, const char *salt, char *buffer, int buflen)
+{
+       unsigned char alt_result[64] __attribute__ ((__aligned__(__alignof__(uint64_t))));
+       unsigned char temp_result[64] __attribute__ ((__aligned__(__alignof__(uint64_t))));
+       struct sha512_ctx ctx;
+       struct sha512_ctx alt_ctx;
+       size_t salt_len;
+       size_t key_len;
+       size_t cnt;
+       char *cp;
+       char *copied_key = NULL;
+       char *copied_salt = NULL;
+       char *p_bytes;
+       char *s_bytes;
+       /* Default number of rounds.  */
+       size_t rounds = SHA512_ROUNDS_DEFAULT;
+       int rounds_custom = 0;
+
+       /* Find beginning of salt string.  The prefix should normally always
+          be present.  Just in case it is not.  */
+       if (strncmp(sha512_salt_prefix, salt, sizeof(sha512_salt_prefix) - 1) == 0)
+               /* Skip salt prefix.  */
+               salt += sizeof(sha512_salt_prefix) - 1;
+
+       if (strncmp(salt, sha512_rounds_prefix, sizeof(sha512_rounds_prefix) - 1) == 0)
+       {
+               const char *num = salt + sizeof(sha512_rounds_prefix) - 1;
+               char *endp;
+               unsigned long int srounds = strtoul(num, &endp, 10);
+               if (*endp == '$')
+               {
+                       salt = endp + 1;
+                       rounds = MAX(SHA512_ROUNDS_MIN, MIN(srounds, SHA512_ROUNDS_MAX));
+                       rounds_custom = 1;
+               }
+       }
+
+       salt_len = MIN(strcspn(salt, "$"), SHA512_SALT_LEN_MAX);
+       key_len = strlen(key);
+
+       if ((key - (char *)0) % __alignof__(uint64_t) != 0)
+       {
+               char *tmp = (char *)alloca(key_len + __alignof__(uint64_t));
+               key = copied_key =
+                       memcpy(tmp + __alignof__(uint64_t)
+                              - (tmp - (char *)0) % __alignof__(uint64_t), key, key_len);
+       }
+
+       if ((salt - (char *)0) % __alignof__(uint64_t) != 0)
+       {
+               char *tmp = (char *)alloca(salt_len + __alignof__(uint64_t));
+               salt = copied_salt =
+                       memcpy(tmp + __alignof__(uint64_t)
+                              - (tmp - (char *)0) % __alignof__(uint64_t), salt, salt_len);
+       }
+
+       /* Prepare for the real work.  */
+       rb_sha512_init_ctx(&ctx);
+
+       /* Add the key string.  */
+       rb_sha512_process_bytes(key, key_len, &ctx);
+
+       /* The last part is the salt string.  This must be at most 16
+          characters and it ends at the first `$' character (for
+          compatibility with existing implementations).  */
+       rb_sha512_process_bytes(salt, salt_len, &ctx);
+
+
+       /* Compute alternate SHA512 sum with input KEY, SALT, and KEY.  The
+          final result will be added to the first context.  */
+       rb_sha512_init_ctx(&alt_ctx);
+
+       /* Add key.  */
+       rb_sha512_process_bytes(key, key_len, &alt_ctx);
+
+       /* Add salt.  */
+       rb_sha512_process_bytes(salt, salt_len, &alt_ctx);
+
+       /* Add key again.  */
+       rb_sha512_process_bytes(key, key_len, &alt_ctx);
+
+       /* Now get result of this (64 bytes) and add it to the other
+          context.  */
+       rb_sha512_finish_ctx(&alt_ctx, alt_result);
+
+       /* Add for any character in the key one byte of the alternate sum.  */
+       for (cnt = key_len; cnt > 64; cnt -= 64)
+               rb_sha512_process_bytes(alt_result, 64, &ctx);
+       rb_sha512_process_bytes(alt_result, cnt, &ctx);
+
+       /* Take the binary representation of the length of the key and for every
+          1 add the alternate sum, for every 0 the key.  */
+       for (cnt = key_len; cnt > 0; cnt >>= 1)
+               if ((cnt & 1) != 0)
+                       rb_sha512_process_bytes(alt_result, 64, &ctx);
+               else
+                       rb_sha512_process_bytes(key, key_len, &ctx);
+
+       /* Create intermediate result.  */
+       rb_sha512_finish_ctx(&ctx, alt_result);
+
+       /* Start computation of P byte sequence.  */
+       rb_sha512_init_ctx(&alt_ctx);
+
+       /* For every character in the password add the entire password.  */
+       for (cnt = 0; cnt < key_len; ++cnt)
+               rb_sha512_process_bytes(key, key_len, &alt_ctx);
+
+       /* Finish the digest.  */
+       rb_sha512_finish_ctx(&alt_ctx, temp_result);
+
+       /* Create byte sequence P.  */
+       cp = p_bytes = alloca(key_len);
+       for (cnt = key_len; cnt >= 64; cnt -= 64)
+       {
+               memcpy(cp, temp_result, 64);
+               cp += 64;
+       }
+       memcpy(cp, temp_result, cnt);
+
+       /* Start computation of S byte sequence.  */
+       rb_sha512_init_ctx(&alt_ctx);
+
+       /* For every character in the password add the entire password.  */
+       for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt)
+               rb_sha512_process_bytes(salt, salt_len, &alt_ctx);
+
+       /* Finish the digest.  */
+       rb_sha512_finish_ctx(&alt_ctx, temp_result);
+
+       /* Create byte sequence S.  */
+       cp = s_bytes = alloca(salt_len);
+       for (cnt = salt_len; cnt >= 64; cnt -= 64)
+       {
+               memcpy(cp, temp_result, 64);
+               cp += 64;
+       }
+       memcpy(cp, temp_result, cnt);
+
+       /* Repeatedly run the collected hash value through SHA512 to burn
+          CPU cycles.  */
+       for (cnt = 0; cnt < rounds; ++cnt)
+       {
+               /* New context.  */
+               rb_sha512_init_ctx(&ctx);
+
+               /* Add key or last result.  */
+               if ((cnt & 1) != 0)
+                       rb_sha512_process_bytes(p_bytes, key_len, &ctx);
+               else
+                       rb_sha512_process_bytes(alt_result, 64, &ctx);
+
+               /* Add salt for numbers not divisible by 3.  */
+               if (cnt % 3 != 0)
+                       rb_sha512_process_bytes(s_bytes, salt_len, &ctx);
+
+               /* Add key for numbers not divisible by 7.  */
+               if (cnt % 7 != 0)
+                       rb_sha512_process_bytes(p_bytes, key_len, &ctx);
+
+               /* Add key or last result.  */
+               if ((cnt & 1) != 0)
+                       rb_sha512_process_bytes(alt_result, 64, &ctx);
+               else
+                       rb_sha512_process_bytes(p_bytes, key_len, &ctx);
+
+               /* Create intermediate result.  */
+               rb_sha512_finish_ctx(&ctx, alt_result);
+       }
+
+       /* Now we can construct the result string.  It consists of three
+          parts.  */
+       memset(buffer, '\0', MAX(0, buflen));
+       strncpy(buffer, sha512_salt_prefix, MAX(0, buflen));
+       if((cp = strchr(buffer, '\0')) == NULL)
+               cp = buffer + MAX(0, buflen);
+       buflen -= sizeof(sha512_salt_prefix) - 1;
+
+       if (rounds_custom)
+       {
+               int n = snprintf(cp, MAX(0, buflen), "%s%zu$",
+                                sha512_rounds_prefix, rounds);
+               cp += n;
+               buflen -= n;
+       }
+
+       memset(cp, '\0', MIN((size_t) MAX(0, buflen), salt_len));
+       strncpy(cp, salt, MIN((size_t) MAX(0, buflen), salt_len));
+       if((cp = strchr(buffer, '\0')) == NULL)
+               cp = buffer + salt_len;
+       buflen -= MIN((size_t) MAX(0, buflen), salt_len);
+
+       if (buflen > 0)
+       {
+               *cp++ = '$';
+               --buflen;
+       }
+
+       b64_from_24bit(alt_result[0], alt_result[21], alt_result[42], 4);
+       b64_from_24bit(alt_result[22], alt_result[43], alt_result[1], 4);
+       b64_from_24bit(alt_result[44], alt_result[2], alt_result[23], 4);
+       b64_from_24bit(alt_result[3], alt_result[24], alt_result[45], 4);
+       b64_from_24bit(alt_result[25], alt_result[46], alt_result[4], 4);
+       b64_from_24bit(alt_result[47], alt_result[5], alt_result[26], 4);
+       b64_from_24bit(alt_result[6], alt_result[27], alt_result[48], 4);
+       b64_from_24bit(alt_result[28], alt_result[49], alt_result[7], 4);
+       b64_from_24bit(alt_result[50], alt_result[8], alt_result[29], 4);
+       b64_from_24bit(alt_result[9], alt_result[30], alt_result[51], 4);
+       b64_from_24bit(alt_result[31], alt_result[52], alt_result[10], 4);
+       b64_from_24bit(alt_result[53], alt_result[11], alt_result[32], 4);
+       b64_from_24bit(alt_result[12], alt_result[33], alt_result[54], 4);
+       b64_from_24bit(alt_result[34], alt_result[55], alt_result[13], 4);
+       b64_from_24bit(alt_result[56], alt_result[14], alt_result[35], 4);
+       b64_from_24bit(alt_result[15], alt_result[36], alt_result[57], 4);
+       b64_from_24bit(alt_result[37], alt_result[58], alt_result[16], 4);
+       b64_from_24bit(alt_result[59], alt_result[17], alt_result[38], 4);
+       b64_from_24bit(alt_result[18], alt_result[39], alt_result[60], 4);
+       b64_from_24bit(alt_result[40], alt_result[61], alt_result[19], 4);
+       b64_from_24bit(alt_result[62], alt_result[20], alt_result[41], 4);
+       b64_from_24bit(0, 0, alt_result[63], 2);
+
+       if (buflen <= 0)
+       {
+               errno = ERANGE;
+               buffer = NULL;
+       }
+       else
+               *cp = '\0';     /* Terminate the string.  */
+
+       /* Clear the buffer for the intermediate result so that people
+          attaching to processes or reading core dumps cannot get any
+          information.  We do it in this way to clear correct_words[]
+          inside the SHA512 implementation as well.  */
+       rb_sha512_init_ctx(&ctx);
+       rb_sha512_finish_ctx(&ctx, alt_result);
+       memset(temp_result, '\0', sizeof(temp_result));
+       memset(p_bytes, '\0', key_len);
+       memset(s_bytes, '\0', salt_len);
+       memset(&ctx, '\0', sizeof(ctx));
+       memset(&alt_ctx, '\0', sizeof(alt_ctx));
+       if (copied_key != NULL)
+               memset(copied_key, '\0', key_len);
+       if (copied_salt != NULL)
+               memset(copied_salt, '\0', salt_len);
+
+       return buffer;
+}
+
+
+/* This entry point is equivalent to the `crypt' function in Unix
+   libcs.  */
+static char *rb_sha512_crypt(const char *key, const char *salt)
+{
+       /* We don't want to have an arbitrary limit in the size of the
+          password.  We can compute an upper bound for the size of the
+          result in advance and so we can prepare the buffer we pass to
+          `rb_sha512_crypt_r'.  */
+       static char *buffer;
+       static int buflen;
+       int needed = (sizeof(sha512_salt_prefix) - 1
+                     + sizeof(sha512_rounds_prefix) + 9 + 1 + strlen(salt) + 1 + 86 + 1);
+
+       if (buflen < needed)
+       {
+               char *new_buffer = (char *)realloc(buffer, needed);
+               if (new_buffer == NULL)
+                       return NULL;
+
+               buffer = new_buffer;
+               buflen = needed;
+       }
 
-       return passwd;
+       return rb_sha512_crypt_r(key, salt, buffer, buflen);
 }
 
-#endif /* NEED_CRYPT */