diff --git a/configure b/configure
index 25e351b..488d93f 100755
--- a/configure
+++ b/configure
@@ -1,8 +1,9 @@
 #! /bin/sh
-# From configure.in Revision: 1.618 .
+# From configure.in Revision: 1.779 .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by Autoconf 2.52.20141204.
+# Generated by Autoconf 2.52.20231210.
 #
+# Copyright 2003-2022,2023	Thomas E. Dickey
 # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
 # Free Software Foundation, Inc.
 # This configure script is free software; the Free Software Foundation
@@ -33,9 +34,9 @@
 as_me=`echo "$0" |sed 's,.*[\\/],,'`
 
 if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
+  as_expr="expr"
 else
-  as_expr=false
+  as_expr="false"
 fi
 
 rm -f conf$$ conf$$.exe conf$$.file
@@ -50,7 +51,7 @@
     as_ln_s='ln -s'
   fi
 elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
+  as_ln_s='ln'
 else
   as_ln_s='cp -p'
 fi
@@ -60,9 +61,9 @@
 
 # Support unset when possible.
 if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
-  as_unset=unset
+  as_unset="unset"
 else
-  as_unset=false
+  as_unset="false"
 fi
 
 # NLS nuisances.
@@ -97,13 +98,14 @@
 ac_default_prefix=/usr/local
 cross_compiling=no
 subdirs=
-MFLAGS= MAKEFLAGS=
+MFLAGS=
+MAKEFLAGS=
 SHELL=${CONFIG_SHELL-/bin/sh}
 
 # Maximum number of lines to put in a shell here document.
 # This variable seems obsolete.  It should probably be removed, and
 # only ac_max_sed_lines should be used.
-: ${ac_max_here_lines=38}
+: "${ac_max_here_lines=38}"
 
 ac_unique_file="ncurses/base/lib_initscr.c"
 # Factoring default headers for most tests.
@@ -176,6 +178,7 @@
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 libdir='${exec_prefix}/lib'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
@@ -203,7 +206,7 @@
 
   # Accept the important Cygnus configure options, so we can diagnose typos.
 
-  case $ac_option in
+  case "$ac_option" in
 
   -bindir | --bindir | --bindi | --bind | --bin | --bi)
     ac_prev=bindir ;;
@@ -244,7 +247,7 @@
     expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
       { echo "$as_me: error: invalid feature name: $ac_feature" >&2
    { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    ac_feature=`echo "$ac_feature" | sed 's/-/_/g'`
     eval "enable_$ac_feature=no" ;;
 
   -enable-* | --enable-*)
@@ -253,8 +256,8 @@
     expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
       { echo "$as_me: error: invalid feature name: $ac_feature" >&2
    { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
-    case $ac_option in
+    ac_feature=`echo "$ac_feature" | sed 's/-/_/g'`
+    case "$ac_option" in
       *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
       *) ac_optarg=yes ;;
     esac
@@ -318,6 +321,15 @@
   | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
     localstatedir=$ac_optarg ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst \
+  | --runs | --run | --ru)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* \
+  | --runs=* | --run=* | --ru=*)
+    runstatedir=$ac_optarg ;;
+
   -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
     ac_prev=mandir ;;
   -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
@@ -435,8 +447,8 @@
     expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
       { echo "$as_me: error: invalid package name: $ac_package" >&2
    { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package| sed 's/-/_/g'`
-    case $ac_option in
+    ac_package=`echo "$ac_package" | sed 's/-/_/g'`
+    case "$ac_option" in
       *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
       *) ac_optarg=yes ;;
     esac
@@ -448,7 +460,7 @@
     expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
       { echo "$as_me: error: invalid package name: $ac_package" >&2
    { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    ac_package=`echo "$ac_package" | sed 's/-/_/g'`
     eval "with_$ac_package=no" ;;
 
   --x)
@@ -482,21 +494,21 @@
    { (exit 1); exit 1; }; }
     ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
     eval "$ac_envvar='$ac_optarg'"
-    export $ac_envvar ;;
+    export "$ac_envvar" ;;
 
   *)
     # FIXME: should be removed in autoconf 3.0.
     echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option}" "${host_alias=$ac_option}" "${target_alias=$ac_option}"
     ;;
 
   esac
 done
 
 if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  ac_option=--`echo "$ac_prev" | sed 's/_/-/g'`
   { echo "$as_me: error: missing argument to $ac_option" >&2
    { (exit 1); exit 1; }; }
 fi
@@ -504,8 +516,8 @@
 # Be sure to have absolute paths.
 for ac_var in exec_prefix prefix
 do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
+  eval ac_val=$`echo "$ac_var"`
+  case "$ac_val" in
     [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
     *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
    { (exit 1); exit 1; }; };;
@@ -516,8 +528,8 @@
 for ac_var in bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir \
               localstatedir libdir includedir oldincludedir infodir mandir
 do
-  eval ac_val=$`echo $ac_var`
-  case $ac_val in
+  eval ac_val=$`echo "$ac_var"`
+  case "$ac_val" in
     [\\/$]* | ?:[\\/]* ) ;;
     *)  { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
    { (exit 1); exit 1; }; };;
@@ -554,13 +566,13 @@
   ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
   test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
   srcdir=$ac_confdir
-  if test ! -r $srcdir/$ac_unique_file; then
+  if test ! -r "$srcdir/$ac_unique_file"; then
     srcdir=..
   fi
 else
   ac_srcdir_defaulted=no
 fi
-if test ! -r $srcdir/$ac_unique_file; then
+if test ! -r "$srcdir/$ac_unique_file"; then
   if test "$ac_srcdir_defaulted" = yes; then
     { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
    { (exit 1); exit 1; }; }
@@ -667,6 +679,7 @@
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       extra definition of runtime data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -703,7 +716,8 @@
   --with-rel-version=XXX  override derived release version
   --with-abi-version=XXX  override derived ABI version
   --with-system-type=XXX  test: override derived host system-type
-  --without-ada           suppress check for Ada95, don't build demo
+  --with-abi-altered=XXX  override visible ABI version, for packaging
+  --without-ada           suppress check for Ada compiler, don't build demo
   --without-cxx           do not adjust ncurses bool to match C++
   --without-cxx-binding   do not build C++ binding and demo
   --disable-db-install    suppress install of terminal database
@@ -711,12 +725,13 @@
   --without-progs         suppress build/install with programs (e.g., tic)
   --without-tests         suppress build/install with test-programs
   --without-curses-h      install curses.h as ncurses.h only
-  --with-pkg-config{=path} enable/disable use of pkg-config
-  --with-pkg-config-libdir=XXX use given directory for installing pc-files
+  --with-config-suffix=X  name ncurses*X-config file with X
+  --with-pkg-config[=CMD] enable/disable use of pkg-config and its name CMD
+  --with-pkg-config-libdir[=XXX] use given directory for installing pc-files
   --enable-pc-files       generate and install .pc files for pkg-config
-  --with-pc-suffix        suffixes pc-files
+  --with-pc-suffix[=XXX]  suffix pkg-config files with XXX
   --enable-mixed-case     tic should assume mixed-case filenames
-  --with-install-prefix   prefixes actual install-location ($DESTDIR)
+  --with-install-prefix=DESTDIR use DESTDIR as installation directory prefix
 Build-Tools Needed to Compile Temporary Applications for Cross-compiling:
   --with-build-cc=XXX     the build C compiler ($BUILD_CC)
   --with-build-cpp=XXX    the build C preprocessor ($BUILD_CPP)
@@ -735,26 +750,30 @@
   --with-lib-prefix       override library-prefix
   --with-termlib          generate separate terminfo library
   --with-ticlib           generate separate tic library
-  --with-gpm              use Alessandro Rubini's GPM library
-  --without-dlsym         do not use dlsym() to load GPM dynamically
-  --with-sysmouse         use sysmouse (FreeBSD console)
   --enable-rpath          use rpath option when generating shared libraries
   --disable-relink        relink shared libraries during install
-  --with-shlib-version=X  Specify rel or abi version for shared libs
-  --with-libtool-opts=XXX specify additional libtool options
-  --with-export-syms=XXX  limit exported symbols using libtool
-  --with-versioned-syms=X markup versioned symbols using ld
+  --with-shlib-version[={rel|abi}] use release or ABI version in shared library file names
+  --with-libtool-opts[=XXX] give libtool additional options XXX
+  --with-export-syms[=SYM-FILE] limit symbols exported by libtool to those listed in SYM-FILE
+  --with-versioned-syms[=MAP-FILE] version ELF shared library symbols per MAP-FILE
+  --with-gpm              use Alessandro Rubini's GPM library
+  --without-dlsym         do not use dlsym() to load GPM dynamically
+  --with-pcre2            use PCRE2 for regular-expressions
+  --with-sysmouse         use sysmouse (FreeBSD console)
   --disable-lib-suffixes  disable library suffixes
   --disable-rpath-hack    don't add rpath options for additional libraries
+  --disable-pkg-ldflags   disable extra LDFLAGS for package-scripts
 Fine-Tuning Your Configuration:
-  --with-extra-suffix=X   append extra suffix to header/library paths
+  --with-extra-suffix[=X] append extra suffix X to header/library paths
   --disable-overwrite     put headers in subdir, omit link to -lcurses
   --disable-database      do not use terminfo, only fallbacks/termcap
   --with-database=XXX     specify terminfo source to install
   --with-hashed-db        specify hashed-database library
   --with-fallbacks=XXX    specify list of fallback terminal descriptions
+  --with-tic-path=XXX     specify path of tic for fallbacks
+  --with-infocmp-path=XXX     specify path of infocmp for fallbacks
   --without-xterm-new     specify if xterm terminfo should be old version
-  --with-xterm-kbs=XXX    specify if xterm backspace sends BS or DEL
+  --with-xterm-kbs[=XXX]  specify if xterm backspace sends BS or DEL
   --with-terminfo-dirs=XXX specify list of terminfo directories (default: DATADIR/terminfo)
   --with-default-terminfo-dir=DIR default terminfo directory (default: DATADIR/terminfo)
   --disable-big-core      assume machine has little memory
@@ -764,26 +783,32 @@
   --enable-getcap         fast termcap load, no xrefs to terminfo
   --enable-getcap-cache   cache translated termcaps in ~/.terminfo
   --disable-home-terminfo drop ~/.terminfo from terminfo search-path
-  --disable-root-environ  restrict environment when running as root
+  --disable-root-environ  restrict root use of ncurses environment variables
+  --disable-root-access   restrict file-access when running setuid
+  --disable-setuid-environ restrict setuid use of ncurses environment variables
   --enable-symlinks       make tic use symbolic links not hard links
   --enable-broken_linker  compile with broken-linker support code
   --enable-bsdpad         recognize BSD-style prefix padding
-  --enable-widec          compile with wide-char/UTF-8 code
+  --disable-widec         compile without wide character and UTF-8 support
   --disable-lp64          allow chtype to be long (ignore _LP64)
   --disable-largefile     omit support for large files
   --disable-tparm-varargs compile tparm() without varargs interface
   --disable-tic-depends   link tic library without explicit dependency on ncurses library
-  --with-bool=TYPE        override fallback type of bool variable
+  --enable-wattr-macros   enable wattr* macros
+  --with-x11-rgb=FILE     obtain X11 color definitions from FILE (default: EPREFIX/lib/X11/rgb.txt)
+  --with-bool=TYPE        fall back to TYPE for curses 'bool' typedef
   --with-caps=alt         compile with alternate Caps file
   --with-chtype=TYPE      override type of chtype
   --with-ospeed=TYPE      override type of ospeed variable
   --with-mmask-t=TYPE     override type of mmask_t
   --with-ccharw-max=XXX   override size CCHARW_MAX
+  --enable-signed-char    use signed chars for Boolean array in term.h
   --with-tparm-arg=TYPE   override parameter type of tparm
   --with-rcs-ids          compile-in RCS identifiers
 Options to Specify How Manpages are Installed:
-  --with-manpage-format   specify manpage-format: gzip/compress/BSDI/normal and
-                          optionally formatted/catonly, e.g., gzip,formatted
+  --with-manpage-format   specify manpage-format: gzip/compress/bzip2/xz,
+                          BSDI/normal and optionally formatted/catonly,
+                          e.g., gzip,formatted
   --with-manpage-renames  specify manpage-renaming
   --with-manpage-aliases  specify manpage-aliases using .so
   --with-manpage-symlinks specify manpage-aliases using symlinks
@@ -797,29 +822,39 @@
   --enable-ext-mouse      compile for extended mouse-encoding
   --enable-ext-putwin     compile with extended putwin/screendump
   --enable-no-padding     compile with $NCURSES_NO_PADDING code
-  --enable-signed-char    compile using signed Boolean's in term.h
   --enable-sigwinch       compile with SIGWINCH handler
   --enable-tcap-names     compile with user-definable terminal capabilities
+Reentrant Code:
+  --with-pthread          use POSIX thread library
+  --enable-pthreads-eintr enable EINTR in wgetch with pthreads
+  --enable-weak-symbols   enable weak-symbols for pthreads
+  --enable-reentrant      compile with reentrant code
+  --disable-opaque-curses do not make WINDOW, etc., structures opaque
+  --disable-opaque-form   do not make form library structures opaque
+  --disable-opaque-menu   do not make menu library structures opaque
+  --disable-opaque-panel  do not make panel library structures opaque
+  --with-wrap-prefix=XXX  override prefix used for public variables
 Development Code:
   --without-develop       disable development options
+  --enable-check-size     compile-in code to detect screensize of serial terminals
   --enable-hard-tabs      compile with hard-tabs code
   --enable-xmc-glitch     compile with support for xmc (magic-cookie)
 Experimental Code:
   --disable-assumed-color do not assume anything about default-colors
   --disable-hashmap       compile without hashmap scrolling-optimization
   --enable-colorfgbg      compile-in experimental $COLORFGBG code
+  --enable-fvisibility    compile with -fvisibility=hidden
   --enable-interop        compile-in interop bindings
-  --with-pthread          use POSIX thread library
-  --enable-pthreads-eintr enable EINTR in wgetch with pthreads
-  --enable-weak-symbols   enable weak-symbols for pthreads
-  --enable-reentrant      compile with reentrant code
-  --with-wrap-prefix=XXX  override prefix used for public variables
   --enable-safe-sprintf   compile with experimental safe-sprintf code
   --disable-scroll-hints  compile without scroll-hints code
   --enable-wgetch-events  compile with wgetch-events code
+  --enable-exp-win32      compile with experimental-Windows driver
 Testing/development Options:
   --disable-echo          do not display "compiling" commands
-  --enable-warnings       build: turn on GCC compiler warnings
+  --disable-stripping     do not strip (debug info) installed executables
+  --with-strip-program=XX specify program to use when stripping in install
+  --enable-warnings       test: turn on gcc compiler warnings
+  --enable-stdnoreturn    enable C11 _Noreturn feature for diagnostics
   --enable-string-hacks   work around bogus compiler/loader warnings
   --enable-assertions     test: turn on generation of assertion code
   --with-dmalloc          test: use Gray Watson's dmalloc library
@@ -830,11 +865,17 @@
   --disable-macros        test: use functions rather than macros
   --with-trace            test: add trace() function to all models of ncurses
   --disable-gnat-projects test: disable GNAT projects even if usable
-Ada95 Binding Options:
-  --with-ada-compiler=CMD specify Ada95 compiler command (default gnatmake)
-  --with-ada-include=DIR  Ada includes are in DIR (default: PREFIX/share/ada/adainclude)
-  --with-ada-objects=DIR  Ada objects are in DIR (default: PREFIX/lib/ada/adalib)
-  --with-ada-sharedlib=soname build shared-library (requires GNAT projects)
+Ada Binding Options:
+  --with-ada-compiler[=CMD] use CMD as Ada95 compiler (default: gnatmake)
+  --with-ada-include=DIR  find Ada95 includes in DIR (default: PREFIX/share/ada/adainclude)
+  --with-ada-objects=DIR  find Ada95 objects in DIR (default: PREFIX/lib/ada/adalib)
+  --with-ada-sharedlib    build Ada95 shared library; requires GNAT project support
+  --with-ada-libname[=XXX]  use XXX as Ada95 library name
+Library basenames for pkgsrc:
+  --with-form-libname[=XXX] override ifelse(,,form,) basename of library
+  --with-menu-libname[=XXX] override ifelse(,,menu,) basename of library
+  --with-panel-libname[=XXX] override ifelse(,,panel,) basename of library
+  --with-cxx-libname[=XXX] override ifelse(ncurses++,,cxx,ncurses++) basename of library
 
 Some influential environment variables:
   CC          C compiler command
@@ -858,42 +899,43 @@
   # If there are subdirs, report their specific --help.
   ac_popdir=`pwd`
   for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
-    cd $ac_subdir
+    cd "$ac_subdir"
     # A "../" for each directory in /$ac_subdir.
-    ac_dots=`echo $ac_subdir |
+    ac_dots=`echo "$ac_subdir" |
              sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
 
-    case $srcdir in
+    case "$srcdir" in
     .) # No --srcdir option.  We are building in place.
-      ac_sub_srcdir=$srcdir ;;
+      ac_sub_srcdir="$srcdir" ;;
     [\\/]* | ?:[\\/]* ) # Absolute path.
-      ac_sub_srcdir=$srcdir/$ac_subdir ;;
+      ac_sub_srcdir="$srcdir/$ac_subdir" ;;
     *) # Relative path.
-      ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
+      ac_sub_srcdir="$ac_dots$srcdir/$ac_subdir" ;;
     esac
 
     # Check for guested configure; otherwise get Cygnus style configure.
-    if test -f $ac_sub_srcdir/configure.gnu; then
+    if test -f "$ac_sub_srcdir/configure.gnu"; then
       echo
-      $SHELL $ac_sub_srcdir/configure.gnu  --help=recursive
-    elif test -f $ac_sub_srcdir/configure; then
+      $SHELL "$ac_sub_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_sub_srcdir/configure"; then
       echo
-      $SHELL $ac_sub_srcdir/configure  --help=recursive
-    elif test -f $ac_sub_srcdir/configure.ac ||
-           test -f $ac_sub_srcdir/configure.in; then
+      $SHELL "$ac_sub_srcdir/configure" --help=recursive
+    elif test -f "$ac_sub_srcdir/configure.ac" ||
+           test -f "$ac_sub_srcdir/configure.in"; then
       echo
-      $ac_configure --help
+      "$ac_configure" --help
     else
       echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
     fi
-    cd $ac_popdir
+    cd "$ac_popdir"
   done
 fi
 
 test -n "$ac_init_help" && exit 0
-if $ac_init_version; then
+if "$ac_init_version"; then
   cat <<\EOF
 
+Copyright 2003-2022,2023	Thomas E. Dickey
 Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -907,7 +949,7 @@
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by $as_me, which was
-generated by GNU Autoconf 2.52.20141204.  Invocation command line was
+generated by GNU Autoconf 2.52.20231210.  Invocation command line was
 
   $ $0 $@
 
@@ -954,7 +996,7 @@
 ac_sep=
 for ac_arg
 do
-  case $ac_arg in
+  case "$ac_arg" in
   -no-create | --no-create | --no-creat | --no-crea | --no-cre \
   | --no-cr | --no-c) ;;
   -no-recursion | --no-recursion | --no-recursio | --no-recursi \
@@ -1011,7 +1053,7 @@
     exit $exit_status
      ' 0
 for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' "$ac_signal"
 done
 ac_signal=0
 
@@ -1031,7 +1073,7 @@
 fi
 for ac_site_file in $CONFIG_SITE; do
   if test -r "$ac_site_file"; then
-    { echo "$as_me:1034: loading site script $ac_site_file" >&5
+    { echo "$as_me:1076: loading site script $ac_site_file" >&5
 echo "$as_me: loading site script $ac_site_file" >&6;}
     cat "$ac_site_file" >&5
     . "$ac_site_file"
@@ -1042,7 +1084,7 @@
   # Some versions of bash will fail to source /dev/null (special
   # files actually), so we avoid doing that.
   if test -f "$cache_file"; then
-    { echo "$as_me:1045: loading cache $cache_file" >&5
+    { echo "$as_me:1087: loading cache $cache_file" >&5
 echo "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . $cache_file;;
@@ -1050,7 +1092,7 @@
     esac
   fi
 else
-  { echo "$as_me:1053: creating cache $cache_file" >&5
+  { echo "$as_me:1095: creating cache $cache_file" >&5
 echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
@@ -1064,23 +1106,23 @@
   eval ac_new_set=\$ac_env_${ac_var}_set
   eval ac_old_val="\$ac_cv_env_${ac_var}_value"
   eval ac_new_val="\$ac_env_${ac_var}_value"
-  case $ac_old_set,$ac_new_set in
+  case "$ac_old_set,$ac_new_set" in
     set,)
-      { echo "$as_me:1069: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+      { echo "$as_me:1111: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { echo "$as_me:1073: error: \`$ac_var' was not set in the previous run" >&5
+      { echo "$as_me:1115: error: \`$ac_var' was not set in the previous run" >&5
 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
       if test "x$ac_old_val" != "x$ac_new_val"; then
-        { echo "$as_me:1079: error: \`$ac_var' has changed since the previous run:" >&5
+        { echo "$as_me:1121: error: \`$ac_var' has changed since the previous run:" >&5
 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-        { echo "$as_me:1081:   former value:  $ac_old_val" >&5
+        { echo "$as_me:1123:   former value:  $ac_old_val" >&5
 echo "$as_me:   former value:  $ac_old_val" >&2;}
-        { echo "$as_me:1083:   current value: $ac_new_val" >&5
+        { echo "$as_me:1125:   current value: $ac_new_val" >&5
 echo "$as_me:   current value: $ac_new_val" >&2;}
         ac_cache_corrupted=:
       fi;;
@@ -1088,7 +1130,7 @@
   # Pass precious variables to config.status.  It doesn't matter if
   # we pass some twice (in addition to the command line arguments).
   if test "$ac_new_set" = set; then
-    case $ac_new_val in
+    case "$ac_new_val" in
     *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
       ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
       ac_configure_args="$ac_configure_args '$ac_arg'"
@@ -1098,35 +1140,43 @@
     esac
   fi
 done
-if $ac_cache_corrupted; then
-  { echo "$as_me:1102: error: changes in the environment can compromise the build" >&5
+if "$ac_cache_corrupted"; then
+  { echo "$as_me:1144: error: changes in the environment can compromise the build" >&5
 echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:1104: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+  { { echo "$as_me:1146: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 case `echo "testing\c" 2>/dev/null; echo 1,2,3`,`echo -n testing 2>/dev/null; echo 1,2,3` in
-  *c*,-n*) ECHO_N= ECHO_C=	# newlines do not sed ;-) only broken shells would use this case anyway
-		   ECHO_T='	' ;;
-  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
-  *)      ECHO_N= ECHO_C='\c' ECHO_T= ;;
+  *c*,-n*) ECHO_N=
+           ECHO_C=      # newlines do not sed ;-) only broken shells would use this case anyway
+           ECHO_T='	'
+           ;;
+  *c*,*  ) ECHO_N=-n
+           ECHO_C=
+           ECHO_T=
+           ;;
+  *)       ECHO_N=
+           ECHO_C='\c'
+           ECHO_T=
+           ;;
 esac
 echo "#! $SHELL" >conftest.sh
 echo  "exit 0"   >>conftest.sh
 chmod +x conftest.sh
-if { (echo "$as_me:1125: PATH=\".;.\"; conftest.sh") >&5
+if { (echo "$as_me:1175: PATH=\".;.\"; conftest.sh") >&5
   (PATH=".;."; conftest.sh) 2>&5
   ac_status=$?
-  echo "$as_me:1128: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  echo "$as_me:1178: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
   ac_path_separator=';'
 else
   ac_path_separator=:
@@ -1138,79 +1188,160 @@
 
 top_builddir=`pwd`
 
-echo "$as_me:1141: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
+for ac_prog in ggrep grep
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1195: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_GREP+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-		then ac_cv_prog_egrep='grep -E'
-		else ac_cv_prog_egrep='egrep'
-	fi
+  if test -n "$GREP"; then
+  ac_cv_prog_GREP="$GREP" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_GREP="$ac_prog"
+echo "$as_me:1210: found $ac_dir/$ac_word" >&5
+break
+done
+
 fi
-echo "$as_me:1151: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
-	EGREP=$ac_cv_prog_egrep
+fi
+GREP=$ac_cv_prog_GREP
+if test -n "$GREP"; then
+  echo "$as_me:1218: result: $GREP" >&5
+echo "${ECHO_T}$GREP" >&6
+else
+  echo "$as_me:1221: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
 
-	test -z "$EGREP" && { { echo "$as_me:1155: error: No egrep program found" >&5
-echo "$as_me: error: No egrep program found" >&2;}
+  test -n "$GREP" && break
+done
+test -n "$GREP" || GREP=": "
+
+echo "$as_me:1229: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     for ac_prog in gegrep egrep
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1241: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $EGREP in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_EGREP="$EGREP" # Let the user override the test with a path.
+  ;;
+  *)
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  if $as_executable_p "$ac_dir/$ac_word"; then
+   ac_cv_path_EGREP="$ac_dir/$ac_word"
+   echo "$as_me:1258: found $ac_dir/$ac_word" >&5
+   break
+fi
+done
+
+  ;;
+esac
+fi
+EGREP=$ac_cv_path_EGREP
+
+if test -n "$EGREP"; then
+  echo "$as_me:1269: result: $EGREP" >&5
+echo "${ECHO_T}$EGREP" >&6
+else
+  echo "$as_me:1272: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$EGREP" && break
+done
+test -n "$EGREP" || EGREP=": "
+
+     test "x$ac_cv_path_EGREP" = "x:" && { { echo "$as_me:1280: error: cannot find workable egrep" >&5
+echo "$as_me: error: cannot find workable egrep" >&2;}
    { (exit 1); exit 1; }; }
+   fi
+fi
+echo "$as_me:1285: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6
+ EGREP="$ac_cv_path_EGREP"
 
-NCURSES_MAJOR="`$ac_cv_prog_egrep '^NCURSES_MAJOR[ 	]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`"
-NCURSES_MINOR="`$ac_cv_prog_egrep '^NCURSES_MINOR[ 	]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`"
-NCURSES_PATCH="`$ac_cv_prog_egrep '^NCURSES_PATCH[ 	]*=' $srcdir/dist.mk | sed -e 's/^[^0-9]*//'`"
+NCURSES_MAJOR="`${EGREP-egrep} '^NCURSES_MAJOR[ 	]*=' "$srcdir/dist.mk" | sed -e 's/^[^0-9]*//'`"
+NCURSES_MINOR="`${EGREP-egrep} '^NCURSES_MINOR[ 	]*=' "$srcdir/dist.mk" | sed -e 's/^[^0-9]*//'`"
+NCURSES_PATCH="`${EGREP-egrep} '^NCURSES_PATCH[ 	]*=' "$srcdir/dist.mk" | sed -e 's/^[^0-9]*//'`"
 cf_cv_abi_version=${NCURSES_MAJOR}
+cf_cv_abi_default=${NCURSES_MAJOR}
 cf_cv_rel_version=${NCURSES_MAJOR}.${NCURSES_MINOR}
 cf_cv_timestamp=`date`
-echo "$as_me:1165: result: Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)" >&5
-echo "${ECHO_T}Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_version ($cf_cv_timestamp)" >&6
+echo "$as_me:1296: result: Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_default ($cf_cv_timestamp)" >&5
+echo "${ECHO_T}Configuring NCURSES $cf_cv_rel_version ABI $cf_cv_abi_default ($cf_cv_timestamp)" >&6
 
-if test -f $srcdir/VERSION ; then
-	echo "$as_me:1169: checking for package version" >&5
+if test -f "$srcdir/VERSION" ; then
+	echo "$as_me:1300: checking for package version" >&5
 echo $ECHO_N "checking for package version... $ECHO_C" >&6
 
 	# if there are not enough fields, cut returns the last one...
-	cf_field1=`sed -e '2,$d' $srcdir/VERSION|cut -f1`
-	cf_field2=`sed -e '2,$d' $srcdir/VERSION|cut -f2`
-	cf_field3=`sed -e '2,$d' $srcdir/VERSION|cut -f3`
+	cf_field1=`sed -e '2,$d' "$srcdir/VERSION" |cut -f1`
+	cf_field2=`sed -e '2,$d' "$srcdir/VERSION" |cut -f2`
+	cf_field3=`sed -e '2,$d' "$srcdir/VERSION" |cut -f3`
 
 	# this is how CF_BUNDLED_INTL uses $VERSION:
 	VERSION="$cf_field1"
 
 	VERSION_MAJOR=`echo "$cf_field2" | sed -e 's/\..*//'`
-	test -z "$VERSION_MAJOR" && { { echo "$as_me:1181: error: missing major-version" >&5
+	test -z "$VERSION_MAJOR" && { { echo "$as_me:1312: error: missing major-version" >&5
 echo "$as_me: error: missing major-version" >&2;}
    { (exit 1); exit 1; }; }
 
 	VERSION_MINOR=`echo "$cf_field2" | sed -e 's/^[^.]*\.//' -e 's/-.*//'`
-	test -z "$VERSION_MINOR" && { { echo "$as_me:1186: error: missing minor-version" >&5
+	test -z "$VERSION_MINOR" && { { echo "$as_me:1317: error: missing minor-version" >&5
 echo "$as_me: error: missing minor-version" >&2;}
    { (exit 1); exit 1; }; }
 
-	echo "$as_me:1190: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5
+	echo "$as_me:1321: result: ${VERSION_MAJOR}.${VERSION_MINOR}" >&5
 echo "${ECHO_T}${VERSION_MAJOR}.${VERSION_MINOR}" >&6
 
-	echo "$as_me:1193: checking for package patch date" >&5
+	echo "$as_me:1324: checking for package patch date" >&5
 echo $ECHO_N "checking for package patch date... $ECHO_C" >&6
 	VERSION_PATCH=`echo "$cf_field3" | sed -e 's/^[^-]*-//'`
 	case .$VERSION_PATCH in
 	(.)
-		{ { echo "$as_me:1198: error: missing patch-date $VERSION_PATCH" >&5
+		{ { echo "$as_me:1329: error: missing patch-date $VERSION_PATCH" >&5
 echo "$as_me: error: missing patch-date $VERSION_PATCH" >&2;}
    { (exit 1); exit 1; }; }
 		;;
 	(.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])
 		;;
 	(*)
-		{ { echo "$as_me:1205: error: illegal patch-date $VERSION_PATCH" >&5
+		{ { echo "$as_me:1336: error: illegal patch-date $VERSION_PATCH" >&5
 echo "$as_me: error: illegal patch-date $VERSION_PATCH" >&2;}
    { (exit 1); exit 1; }; }
 		;;
 	esac
-	echo "$as_me:1210: result: $VERSION_PATCH" >&5
+	echo "$as_me:1341: result: $VERSION_PATCH" >&5
 echo "${ECHO_T}$VERSION_PATCH" >&6
 else
-	{ { echo "$as_me:1213: error: did not find $srcdir/VERSION" >&5
+	{ { echo "$as_me:1344: error: did not find $srcdir/VERSION" >&5
 echo "$as_me: error: did not find $srcdir/VERSION" >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -1218,19 +1349,19 @@
 # show the actual data that we have for versions:
 test -n "$verbose" && echo "	ABI VERSION $VERSION" 1>&6
 
-echo "${as_me:-configure}:1221: testing ABI VERSION $VERSION ..." 1>&5
+echo "${as_me:-configure}:1352: testing ABI VERSION $VERSION ..." 1>&5
 
 test -n "$verbose" && echo "	VERSION_MAJOR $VERSION_MAJOR" 1>&6
 
-echo "${as_me:-configure}:1225: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5
+echo "${as_me:-configure}:1356: testing VERSION_MAJOR $VERSION_MAJOR ..." 1>&5
 
 test -n "$verbose" && echo "	VERSION_MINOR $VERSION_MINOR" 1>&6
 
-echo "${as_me:-configure}:1229: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5
+echo "${as_me:-configure}:1360: testing VERSION_MINOR $VERSION_MINOR ..." 1>&5
 
 test -n "$verbose" && echo "	VERSION_PATCH $VERSION_PATCH" 1>&6
 
-echo "${as_me:-configure}:1233: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5
+echo "${as_me:-configure}:1364: testing VERSION_PATCH $VERSION_PATCH ..." 1>&5
 
 	cf_PACKAGE=NCURSES
 	PACKAGE=ncurses
@@ -1254,42 +1385,43 @@
 # Check whether --with-rel-version or --without-rel-version was given.
 if test "${with_rel_version+set}" = set; then
   withval="$with_rel_version"
-  { echo "$as_me:1257: WARNING: overriding release version $cf_cv_rel_version to $withval" >&5
+  { echo "$as_me:1388: WARNING: overriding release version $cf_cv_rel_version to $withval" >&5
 echo "$as_me: WARNING: overriding release version $cf_cv_rel_version to $withval" >&2;}
  cf_cv_rel_version=$withval
 fi;
 
  NCURSES_MAJOR=`echo "$cf_cv_rel_version" | sed -e 's/\..*//'`
  NCURSES_MINOR=`echo "$cf_cv_rel_version" | sed -e 's/^[^.]*//' -e 's/^\.//' -e 's/\..*//'`
+ test -n "NCURSES_MINOR" || NCURSES_MINOR=0
 
 if test -n "$NCURSES_MAJOR" ; then
-  case $NCURSES_MAJOR in
-  ([0-9]*)
+  case `echo "$NCURSES_MAJOR" | sed -e 's/^[0-9]*$/0/g'` in
+  (0)
  	;;
   (*)
-	{ { echo "$as_me:1270: error: Release major-version is not a number: $NCURSES_MAJOR" >&5
+	{ { echo "$as_me:1402: error: Release major-version is not a number: $NCURSES_MAJOR" >&5
 echo "$as_me: error: Release major-version is not a number: $NCURSES_MAJOR" >&2;}
    { (exit 1); exit 1; }; }
  	;;
   esac
 else
-  { { echo "$as_me:1276: error: Release major-version value is empty" >&5
+  { { echo "$as_me:1408: error: Release major-version value is empty" >&5
 echo "$as_me: error: Release major-version value is empty" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
 if test -n "$NCURSES_MINOR" ; then
-  case $NCURSES_MINOR in
-  ([0-9]*)
+  case `echo "$NCURSES_MINOR" | sed -e 's/^[0-9]*$/0/g'` in
+  (0)
  	;;
   (*)
-	{ { echo "$as_me:1286: error: Release minor-version is not a number: $NCURSES_MINOR" >&5
+	{ { echo "$as_me:1418: error: Release minor-version is not a number: $NCURSES_MINOR" >&5
 echo "$as_me: error: Release minor-version is not a number: $NCURSES_MINOR" >&2;}
    { (exit 1); exit 1; }; }
  	;;
   esac
 else
-  { { echo "$as_me:1292: error: Release minor-version value is empty" >&5
+  { { echo "$as_me:1424: error: Release minor-version value is empty" >&5
 echo "$as_me: error: Release minor-version value is empty" >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -1302,9 +1434,9 @@
 
 	if test "x$cf_cv_abi_version" != "x$withval"
 	then
-		{ echo "$as_me:1305: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&5
+		{ echo "$as_me:1437: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&5
 echo "$as_me: WARNING: overriding ABI version $cf_cv_abi_version to $withval" >&2;}
-		case $cf_cv_rel_version in
+		case "$cf_cv_rel_version" in
 		(5.*)
 			cf_cv_rel_version=$withval.0
 			;;
@@ -1317,24 +1449,26 @@
 fi;
 
 if test -n "$cf_cv_abi_version" ; then
-  case $cf_cv_abi_version in
-  ([0-9]*)
+  case `echo "$cf_cv_abi_version" | sed -e 's/^[0-9]*$/0/g'` in
+  (0)
  	;;
   (*)
-	{ { echo "$as_me:1324: error: ABI version is not a number: $cf_cv_abi_version" >&5
+	{ { echo "$as_me:1456: error: ABI version is not a number: $cf_cv_abi_version" >&5
 echo "$as_me: error: ABI version is not a number: $cf_cv_abi_version" >&2;}
    { (exit 1); exit 1; }; }
  	;;
   esac
 else
-  { { echo "$as_me:1330: error: ABI version value is empty" >&5
+  { { echo "$as_me:1462: error: ABI version value is empty" >&5
 echo "$as_me: error: ABI version value is empty" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
+cf_cv_abi_default=$cf_cv_abi_version
+
 if test "x$cf_cv_abi_version" != "x$with_abi_version"
 then
-	case $cf_cv_rel_version in
+	case "$cf_cv_rel_version" in
 	(5.*)
 		cf_cv_rel_version=$with_abi_version.0
 		;;
@@ -1343,22 +1477,22 @@
 
 ac_aux_dir=
 for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
-  if test -f $ac_dir/install-sh; then
+  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
+  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
+  elif test -f "$ac_dir/shtool"; then
     ac_aux_dir=$ac_dir
     ac_install_sh="$ac_aux_dir/shtool install -c"
     break
   fi
 done
 if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:1361: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+  { { echo "$as_me:1495: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -1368,11 +1502,11 @@
 
 # Make sure we can run config.sub.
 $ac_config_sub sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:1371: error: cannot run $ac_config_sub" >&5
+  { { echo "$as_me:1505: error: cannot run $ac_config_sub" >&5
 echo "$as_me: error: cannot run $ac_config_sub" >&2;}
    { (exit 1); exit 1; }; }
 
-echo "$as_me:1375: checking build system type" >&5
+echo "$as_me:1509: checking build system type" >&5
 echo $ECHO_N "checking build system type... $ECHO_C" >&6
 if test "${ac_cv_build+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1381,23 +1515,23 @@
 test -z "$ac_cv_build_alias" &&
   ac_cv_build_alias=`$ac_config_guess`
 test -z "$ac_cv_build_alias" &&
-  { { echo "$as_me:1384: error: cannot guess build type; you must specify one" >&5
+  { { echo "$as_me:1518: error: cannot guess build type; you must specify one" >&5
 echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
    { (exit 1); exit 1; }; }
-ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
-  { { echo "$as_me:1388: error: $ac_config_sub $ac_cv_build_alias failed." >&5
+ac_cv_build=`$ac_config_sub "$ac_cv_build_alias"` ||
+  { { echo "$as_me:1522: error: $ac_config_sub $ac_cv_build_alias failed." >&5
 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;}
    { (exit 1); exit 1; }; }
 
 fi
-echo "$as_me:1393: result: $ac_cv_build" >&5
+echo "$as_me:1527: result: $ac_cv_build" >&5
 echo "${ECHO_T}$ac_cv_build" >&6
 build=$ac_cv_build
-build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+build_cpu=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo "$ac_cv_build" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 
-echo "$as_me:1400: checking host system type" >&5
+echo "$as_me:1534: checking host system type" >&5
 echo $ECHO_N "checking host system type... $ECHO_C" >&6
 if test "${ac_cv_host+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1405,21 +1539,21 @@
   ac_cv_host_alias=$host_alias
 test -z "$ac_cv_host_alias" &&
   ac_cv_host_alias=$ac_cv_build_alias
-ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
-  { { echo "$as_me:1409: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+ac_cv_host=`$ac_config_sub "$ac_cv_host_alias"` ||
+  { { echo "$as_me:1543: error: $ac_config_sub $ac_cv_host_alias failed" >&5
 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
    { (exit 1); exit 1; }; }
 
 fi
-echo "$as_me:1414: result: $ac_cv_host" >&5
+echo "$as_me:1548: result: $ac_cv_host" >&5
 echo "${ECHO_T}$ac_cv_host" >&6
 host=$ac_cv_host
-host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+host_cpu=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$ac_cv_host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 
-if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then
-	echo "$as_me:1422: checking target system type" >&5
+if test -f "$srcdir/config.guess" || test -f "$ac_aux_dir/config.guess" ; then
+	echo "$as_me:1556: checking target system type" >&5
 echo $ECHO_N "checking target system type... $ECHO_C" >&6
 if test "${ac_cv_target+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1427,18 +1561,18 @@
   ac_cv_target_alias=$target_alias
 test "x$ac_cv_target_alias" = "x" &&
   ac_cv_target_alias=$ac_cv_host_alias
-ac_cv_target=`$ac_config_sub $ac_cv_target_alias` ||
-  { { echo "$as_me:1431: error: $ac_config_sub $ac_cv_target_alias failed" >&5
+ac_cv_target=`$ac_config_sub "$ac_cv_target_alias"` ||
+  { { echo "$as_me:1565: error: $ac_config_sub $ac_cv_target_alias failed" >&5
 echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;}
    { (exit 1); exit 1; }; }
 
 fi
-echo "$as_me:1436: result: $ac_cv_target" >&5
+echo "$as_me:1570: result: $ac_cv_target" >&5
 echo "${ECHO_T}$ac_cv_target" >&6
 target=$ac_cv_target
-target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+target_cpu=`echo "$ac_cv_target" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo "$ac_cv_target" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo "$ac_cv_target" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 
 # The aliases save the names the user supplied, while $host etc.
 # will get canonicalized.
@@ -1465,13 +1599,13 @@
 fi
 
 test -z "$system_name" && system_name="$cf_cv_system_name"
-test -n "$cf_cv_system_name" && echo "$as_me:1468: result: Configuring for $cf_cv_system_name" >&5
+test -n "$cf_cv_system_name" && echo "$as_me:1602: result: Configuring for $cf_cv_system_name" >&5
 echo "${ECHO_T}Configuring for $cf_cv_system_name" >&6
 
 if test ".$system_name" != ".$cf_cv_system_name" ; then
-	echo "$as_me:1472: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5
+	echo "$as_me:1606: result: Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&5
 echo "${ECHO_T}Cached system name ($system_name) does not agree with actual ($cf_cv_system_name)" >&6
-	{ { echo "$as_me:1474: error: \"Please remove config.cache and try again.\"" >&5
+	{ { echo "$as_me:1608: error: \"Please remove config.cache and try again.\"" >&5
 echo "$as_me: error: \"Please remove config.cache and try again.\"" >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -1479,7 +1613,7 @@
 # Check whether --with-system-type or --without-system-type was given.
 if test "${with_system_type+set}" = set; then
   withval="$with_system_type"
-  { echo "$as_me:1482: WARNING: overriding system type to $withval" >&5
+  { echo "$as_me:1616: WARNING: overriding system type to $withval" >&5
 echo "$as_me: WARNING: overriding system type to $withval" >&2;}
 	cf_cv_system_name=$withval
 	host_os=$withval
@@ -1490,8 +1624,67 @@
 cf_user_CFLAGS="$CFLAGS"
 
 ###	Default install-location
+echo "$as_me:1627: checking for fgrep" >&5
+echo $ECHO_N "checking for fgrep... $ECHO_C" >&6
+if test "${ac_cv_path_FGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     for ac_prog in gfgrep fgrep
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1639: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_FGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $FGREP in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_FGREP="$FGREP" # Let the user override the test with a path.
+  ;;
+  *)
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  if $as_executable_p "$ac_dir/$ac_word"; then
+   ac_cv_path_FGREP="$ac_dir/$ac_word"
+   echo "$as_me:1656: found $ac_dir/$ac_word" >&5
+   break
+fi
+done
 
-echo "$as_me:1494: checking for prefix" >&5
+  ;;
+esac
+fi
+FGREP=$ac_cv_path_FGREP
+
+if test -n "$FGREP"; then
+  echo "$as_me:1667: result: $FGREP" >&5
+echo "${ECHO_T}$FGREP" >&6
+else
+  echo "$as_me:1670: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$FGREP" && break
+done
+test -n "$FGREP" || FGREP=": "
+
+     test "x$ac_cv_path_FGREP" = "x:" && { { echo "$as_me:1678: error: cannot find workable fgrep" >&5
+echo "$as_me: error: cannot find workable fgrep" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+fi
+echo "$as_me:1683: result: $ac_cv_path_FGREP" >&5
+echo "${ECHO_T}$ac_cv_path_FGREP" >&6
+ FGREP="$ac_cv_path_FGREP"
+
+echo "$as_me:1687: checking for prefix" >&5
 echo $ECHO_N "checking for prefix... $ECHO_C" >&6
 if test "x$prefix" = "xNONE" ; then
 	case "$cf_cv_system_name" in
@@ -1503,68 +1696,118 @@
 		;;
 	esac
 fi
-echo "$as_me:1506: result: $prefix" >&5
+echo "$as_me:1699: result: $prefix" >&5
 echo "${ECHO_T}$prefix" >&6
 
 if test "x$prefix" = "xNONE" ; then
-echo "$as_me:1510: checking for default include-directory" >&5
+echo "$as_me:1703: checking for default include-directory" >&5
 echo $ECHO_N "checking for default include-directory... $ECHO_C" >&6
 test -n "$verbose" && echo 1>&6
 for cf_symbol in \
-	$includedir \
-	$includedir/ncurses \
-	$prefix/include \
-	$prefix/include/ncurses \
+	"$includedir" \
+	"$includedir/ncurses" \
+	"$prefix/include" \
+	"$prefix/include/ncurses" \
 	/usr/local/include \
 	/usr/local/include/ncurses \
 	/usr/include \
 	/usr/include/ncurses
 do
-	cf_dir=`eval echo $cf_symbol`
-	if test -f $cf_dir/curses.h ; then
-	if ( fgrep NCURSES_VERSION $cf_dir/curses.h 2>&1 >/dev/null ) ; then
+	cf_dir=`eval echo "$cf_symbol"`
+	if test -f "$cf_dir/curses.h" ; then
+	if ( ${FGREP-fgrep} NCURSES_VERSION "$cf_dir/curses.h" >/dev/null 2>&1 ) ; then
 		includedir="$cf_symbol"
-		test -n "$verbose"  && echo $ac_n "	found " 1>&6
+		test -n "$verbose"  && echo $ECHO_N "	found " 1>&6
 		break
 	fi
 	fi
 	test -n "$verbose"  && echo "	tested $cf_dir" 1>&6
 done
-echo "$as_me:1533: result: $includedir" >&5
+echo "$as_me:1726: result: $includedir" >&5
 echo "${ECHO_T}$includedir" >&6
 fi
 
 ### Defaults for ncurses ABI
 
-case x$cf_cv_abi_version in
+# ABI 5 defaults:
+cf_dft_ccharw_max=5
+cf_dft_chtype=auto
+cf_dft_ext_colors=no
+cf_dft_ext_const=no
+cf_dft_ext_mouse=no
+cf_dft_ext_putwin=no
+cf_dft_ext_spfuncs=no
+cf_dft_filter_syms=no
+cf_dft_interop=no
+cf_dft_mmask_t=auto
+cf_dft_opaque_curses=no
+cf_dft_ordinate_type=short
+cf_dft_signed_char=no
+cf_dft_tparm_arg=long
+cf_dft_widec=no
+cf_dft_with_lp64=no
+
+# ABI 6 default differences from ABI 5:
+case x$cf_cv_abi_default in
 (x[6789])
+	cf_dft_chtype=uint32_t
 	cf_dft_ext_colors=yes
 	cf_dft_ext_const=yes
 	cf_dft_ext_mouse=yes
 	cf_dft_ext_putwin=yes
 	cf_dft_ext_spfuncs=yes
 	cf_dft_filter_syms=yes
-	cf_dft_chtype=uint32_t
-	cf_dft_mmask_t=uint32_t
 	cf_dft_interop=yes
+	cf_dft_mmask_t=uint32_t
+	cf_dft_opaque_curses=yes
 	cf_dft_tparm_arg=intptr_t
+	cf_dft_widec=yes
 	cf_dft_with_lp64=yes
 	;;
-(*)
-	cf_dft_ext_colors=no
-	cf_dft_ext_const=no
-	cf_dft_ext_mouse=no
-	cf_dft_ext_putwin=no
-	cf_dft_ext_spfuncs=no
-	cf_dft_filter_syms=no
-	cf_dft_chtype=auto
-	cf_dft_mmask_t=auto
-	cf_dft_interop=no
-	cf_dft_tparm_arg=long
-	cf_dft_with_lp64=no
+esac
+
+# ABI 7 default differences from ABI 6:
+case x$cf_cv_abi_default in
+(x[789])
+	cf_dft_ccharw_max=6
+	cf_dft_mmask_t=uint64_t
+	cf_dft_ordinate_type=int
+	cf_dft_signed_char=yes
+	# also: remove the wgetch-events feature in ABI 7
 	;;
 esac
 
+### override ABI version, e.g., packagers
+
+# Check whether --with-abi-altered or --without-abi-altered was given.
+if test "${with_abi_altered+set}" = set; then
+  withval="$with_abi_altered"
+
+if test -n "$withval" ; then
+  case `echo "$withval" | sed -e 's/^[0-9]*$/0/g'` in
+  (0)
+ 	;;
+  (*)
+	{ { echo "$as_me:1791: error: ABI altered is not a number: $withval" >&5
+echo "$as_me: error: ABI altered is not a number: $withval" >&2;}
+   { (exit 1); exit 1; }; }
+ 	;;
+  esac
+else
+  { { echo "$as_me:1797: error: ABI altered value is empty" >&5
+echo "$as_me: error: ABI altered value is empty" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+	if test "$cf_cv_abi_version" != "$withval"
+	then
+		{ echo "$as_me:1804: WARNING: altering visible ABI from $cf_cv_abi_version to $withval" >&5
+echo "$as_me: WARNING: altering visible ABI from $cf_cv_abi_version to $withval" >&2;}
+		cf_cv_abi_version=$withval
+	fi
+
+fi;
+
 ###	Checks for programs.
 
 # Check whether --with-ada or --without-ada was given.
@@ -1574,25 +1817,26 @@
 else
   cf_with_ada=yes
 fi;
+
 if test "x$cf_with_ada" = xyes
 then
-	cf_PROG_CC="gnatgcc gcc cc"
+	cf_prog_cc="gnatgcc gcc cc"
 else
-	cf_PROG_CC="gcc cc"
+	cf_prog_cc="gcc cc"
 fi
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 if test -n "$ac_tool_prefix"; then
-  for ac_prog in $cf_PROG_CC
+  for ac_prog in $cf_prog_cc
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:1595: checking for $ac_word" >&5
+echo "$as_me:1839: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1607,7 +1851,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-echo "$as_me:1610: found $ac_dir/$ac_word" >&5
+echo "$as_me:1854: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -1615,10 +1859,10 @@
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  echo "$as_me:1618: result: $CC" >&5
+  echo "$as_me:1862: result: $CC" >&5
 echo "${ECHO_T}$CC" >&6
 else
-  echo "$as_me:1621: result: no" >&5
+  echo "$as_me:1865: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -1627,11 +1871,11 @@
 fi
 if test -z "$CC"; then
   ac_ct_CC=$CC
-  for ac_prog in $cf_PROG_CC
+  for ac_prog in $cf_prog_cc
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:1634: checking for $ac_word" >&5
+echo "$as_me:1878: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -1646,7 +1890,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_CC="$ac_prog"
-echo "$as_me:1649: found $ac_dir/$ac_word" >&5
+echo "$as_me:1893: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -1654,10 +1898,10 @@
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  echo "$as_me:1657: result: $ac_ct_CC" >&5
+  echo "$as_me:1901: result: $ac_ct_CC" >&5
 echo "${ECHO_T}$ac_ct_CC" >&6
 else
-  echo "$as_me:1660: result: no" >&5
+  echo "$as_me:1904: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -1667,36 +1911,36 @@
   CC=$ac_ct_CC
 fi
 
-test -z "$CC" && { { echo "$as_me:1670: error: no acceptable cc found in \$PATH" >&5
+test -z "$CC" && { { echo "$as_me:1914: error: no acceptable cc found in \$PATH" >&5
 echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
    { (exit 1); exit 1; }; }
 
 # Provide some information about the compiler.
-echo "$as_me:1675:" \
+echo "$as_me:1919:" \
      "checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:1678: \"$ac_compiler --version </dev/null >&5\"") >&5
+ac_compiler=`set X $ac_compile; echo "$2"`
+{ (eval echo "$as_me:1922: \"$ac_compiler --version </dev/null >&5\"") >&5
   (eval $ac_compiler --version </dev/null >&5) 2>&5
   ac_status=$?
-  echo "$as_me:1681: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:1683: \"$ac_compiler -v </dev/null >&5\"") >&5
+  echo "$as_me:1925: \$? = $ac_status" >&5
+  (exit "$ac_status"); }
+{ (eval echo "$as_me:1927: \"$ac_compiler -v </dev/null >&5\"") >&5
   (eval $ac_compiler -v </dev/null >&5) 2>&5
   ac_status=$?
-  echo "$as_me:1686: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:1688: \"$ac_compiler -V </dev/null >&5\"") >&5
+  echo "$as_me:1930: \$? = $ac_status" >&5
+  (exit "$ac_status"); }
+{ (eval echo "$as_me:1932: \"$ac_compiler -V </dev/null >&5\"") >&5
   (eval $ac_compiler -V </dev/null >&5) 2>&5
   ac_status=$?
-  echo "$as_me:1691: \$? = $ac_status" >&5
-  (exit $ac_status); }
+  echo "$as_me:1935: \$? = $ac_status" >&5
+  (exit "$ac_status"); }
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 1695 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 1939 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
 
   ;
@@ -1708,14 +1952,14 @@
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-echo "$as_me:1711: checking for C compiler default output" >&5
+echo "$as_me:1955: checking for C compiler default output" >&5
 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-if { (eval echo "$as_me:1714: \"$ac_link_default\"") >&5
+ac_link_default=`echo "$ac_link" | sed 's/ -o *"conftest[^"]*"//'`
+if { (eval echo "$as_me:1958: \"$ac_link_default\"") >&5
   (eval $ac_link_default) 2>&5
   ac_status=$?
-  echo "$as_me:1717: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  echo "$as_me:1961: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
   # Find the output, starting from the most likely.  This scheme is
 # not robust to junk in `.', hence go to wildcards (a.*) only as a last
 # resort.
@@ -1736,35 +1980,35 @@
 done
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-{ { echo "$as_me:1740: error: C compiler cannot create executables" >&5
+cat "conftest.$ac_ext" >&5
+{ { echo "$as_me:1984: error: C compiler cannot create executables" >&5
 echo "$as_me: error: C compiler cannot create executables" >&2;}
    { (exit 77); exit 77; }; }
 fi
 
 ac_exeext=$ac_cv_exeext
-echo "$as_me:1746: result: $ac_file" >&5
+echo "$as_me:1990: result: $ac_file" >&5
 echo "${ECHO_T}$ac_file" >&6
 
 # Check the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-echo "$as_me:1751: checking whether the C compiler works" >&5
+echo "$as_me:1995: checking whether the C compiler works" >&5
 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0
 # If not cross compiling, check that we can run a simple program.
 if test "$cross_compiling" != yes; then
   if { ac_try='./$ac_file'
-  { (eval echo "$as_me:1757: \"$ac_try\"") >&5
+  { (eval echo "$as_me:2001: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:1760: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:2004: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
     cross_compiling=no
   else
     if test "$cross_compiling" = maybe; then
 	cross_compiling=yes
     else
-	{ { echo "$as_me:1767: error: cannot run C compiled programs.
+	{ { echo "$as_me:2011: error: cannot run C compiled programs.
 If you meant to cross compile, use \`--host'." >&5
 echo "$as_me: error: cannot run C compiled programs.
 If you meant to cross compile, use \`--host'." >&2;}
@@ -1772,25 +2016,25 @@
     fi
   fi
 fi
-echo "$as_me:1775: result: yes" >&5
+echo "$as_me:2019: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 
-rm -f a.out a.exe conftest$ac_cv_exeext
+rm -f a.out a.exe "conftest$ac_cv_exeext"
 ac_clean_files=$ac_clean_files_save
 # Check the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-echo "$as_me:1782: checking whether we are cross compiling" >&5
+echo "$as_me:2026: checking whether we are cross compiling" >&5
 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
-echo "$as_me:1784: result: $cross_compiling" >&5
+echo "$as_me:2028: result: $cross_compiling" >&5
 echo "${ECHO_T}$cross_compiling" >&6
 
-echo "$as_me:1787: checking for executable suffix" >&5
+echo "$as_me:2031: checking for executable suffix" >&5
 echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
-if { (eval echo "$as_me:1789: \"$ac_link\"") >&5
+if { (eval echo "$as_me:2033: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:1792: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  echo "$as_me:2036: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -1805,29 +2049,29 @@
   esac
 done
 else
-  { { echo "$as_me:1808: error: cannot compute EXEEXT: cannot compile and link" >&5
+  { { echo "$as_me:2052: error: cannot compute EXEEXT: cannot compile and link" >&5
 echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
-rm -f conftest$ac_cv_exeext
-echo "$as_me:1814: result: $ac_cv_exeext" >&5
+rm -f "conftest$ac_cv_exeext"
+echo "$as_me:2058: result: $ac_cv_exeext" >&5
 echo "${ECHO_T}$ac_cv_exeext" >&6
 
-rm -f conftest.$ac_ext
+rm -f "conftest.$ac_ext"
 EXEEXT=$ac_cv_exeext
 ac_exeext=$EXEEXT
-echo "$as_me:1820: checking for object suffix" >&5
+echo "$as_me:2064: checking for object suffix" >&5
 echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
 if test "${ac_cv_objext+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 1826 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 2070 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
 
   ;
@@ -1835,11 +2079,11 @@
 }
 _ACEOF
 rm -f conftest.o conftest.obj
-if { (eval echo "$as_me:1838: \"$ac_compile\"") >&5
+if { (eval echo "$as_me:2082: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:1841: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  echo "$as_me:2085: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
   for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
   case $ac_file in
     *.$ac_ext | *.xcoff | *.tds | *.d | *.dbg | *.pdb | *.xSYM | *.map | *.inf ) ;;
@@ -1849,29 +2093,29 @@
 done
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-{ { echo "$as_me:1853: error: cannot compute OBJEXT: cannot compile" >&5
+cat "conftest.$ac_ext" >&5
+{ { echo "$as_me:2097: error: cannot compute OBJEXT: cannot compile" >&5
 echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
+rm -f "conftest.$ac_cv_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:1860: result: $ac_cv_objext" >&5
+echo "$as_me:2104: result: $ac_cv_objext" >&5
 echo "${ECHO_T}$ac_cv_objext" >&6
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-echo "$as_me:1864: checking whether we are using the GNU C compiler" >&5
+echo "$as_me:2108: checking whether we are using the GNU C compiler" >&5
 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
 if test "${ac_cv_c_compiler_gnu+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 1870 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 2114 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
 #ifndef __GNUC__
        choke me
@@ -1881,72 +2125,72 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1885: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2129: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:1888: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:1891: \"$ac_try\"") >&5
+  echo "$as_me:2132: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:2135: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:1894: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:2138: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_compiler_gnu=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_compiler_gnu=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-echo "$as_me:1906: result: $ac_cv_c_compiler_gnu" >&5
+echo "$as_me:2150: result: $ac_cv_c_compiler_gnu" >&5
 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
 GCC=`test $ac_compiler_gnu = yes && echo yes`
 ac_test_CFLAGS=${CFLAGS+set}
 ac_save_CFLAGS=$CFLAGS
 CFLAGS="-g"
-echo "$as_me:1912: checking whether $CC accepts -g" >&5
+echo "$as_me:2156: checking whether $CC accepts -g" >&5
 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
 if test "${ac_cv_prog_cc_g+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 1918 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 2162 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1930: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2174: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:1933: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:1936: \"$ac_try\"") >&5
+  echo "$as_me:2177: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:2180: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:1939: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:2183: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_prog_cc_g=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_prog_cc_g=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:1949: result: $ac_cv_prog_cc_g" >&5
+echo "$as_me:2193: result: $ac_cv_prog_cc_g" >&5
 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
 if test "$ac_test_CFLAGS" = set; then
   CFLAGS=$ac_save_CFLAGS
@@ -1967,23 +2211,23 @@
 # in C++ we need to declare it.  In case someone uses the same compiler
 # for both compiling C and C++ we need to have the C++ compiler decide
 # the declaration of exit, since it's the most demanding environment.
-cat >conftest.$ac_ext <<_ACEOF
+cat >"conftest.$ac_ext" <<_ACEOF
 #ifndef __cplusplus
   choke me
 #endif
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:1976: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2220: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:1979: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:1982: \"$ac_try\"") >&5
+  echo "$as_me:2223: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:2226: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:1985: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:2229: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   for ac_declaration in \
    ''\
    '#include <stdlib.h>' \
@@ -1993,107 +2237,284 @@
    'extern "C" void exit (int);' \
    'void exit (int);'
 do
-  cat >conftest.$ac_ext <<_ACEOF
-#line 1997 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 2241 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 $ac_declaration
 int
-main ()
+main (void)
 {
 exit (42);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2010: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2254: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:2013: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:2016: \"$ac_try\"") >&5
+  echo "$as_me:2257: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:2260: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2019: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:2263: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   :
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 continue
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-#line 2029 "configure"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 2273 "configure"
 #include "confdefs.h"
 $ac_declaration
 int
-main ()
+main (void)
 {
 exit (42);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2041: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2285: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:2044: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:2047: \"$ac_try\"") >&5
+  echo "$as_me:2288: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:2291: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2050: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:2294: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 done
 rm -rf conftest*
 if test -n "$ac_declaration"; then
   echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
+  echo "$ac_declaration"    >>confdefs.h
   echo '#endif'             >>confdefs.h
 fi
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 GCC_VERSION=none
 if test "$GCC" = yes ; then
-	echo "$as_me:2080: checking version of $CC" >&5
+	echo "$as_me:2324: checking version of $CC" >&5
 echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
-	GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(GCC[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
+	GCC_VERSION="`${CC} --version 2>/dev/null | sed -e '2,$d' -e 's/^[^(]*([^)][^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
 	test -z "$GCC_VERSION" && GCC_VERSION=unknown
-	echo "$as_me:2084: result: $GCC_VERSION" >&5
+	echo "$as_me:2328: result: $GCC_VERSION" >&5
 echo "${ECHO_T}$GCC_VERSION" >&6
 fi
 
-echo "$as_me:2088: checking for $CC option to accept ANSI C" >&5
+INTEL_COMPILER=no
+
+if test "$GCC" = yes ; then
+	case "$host_os" in
+	(linux*|gnu*)
+		echo "$as_me:2337: checking if this is really Intel C compiler" >&5
+echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6
+		cf_save_CFLAGS="$CFLAGS"
+		CFLAGS="$CFLAGS -no-gcc"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 2342 "configure"
+#include "confdefs.h"
+
+int
+main (void)
+{
+
+#ifdef __INTEL_COMPILER
+#else
+#error __INTEL_COMPILER is not defined
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2359: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2362: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:2365: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2368: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  INTEL_COMPILER=yes
+cf_save_CFLAGS="$cf_save_CFLAGS -we147"
+
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+		CFLAGS="$cf_save_CFLAGS"
+		echo "$as_me:2379: result: $INTEL_COMPILER" >&5
+echo "${ECHO_T}$INTEL_COMPILER" >&6
+		;;
+	esac
+fi
+
+CLANG_COMPILER=no
+
+if test "$GCC" = yes ; then
+	echo "$as_me:2388: checking if this is really Clang C compiler" >&5
+echo $ECHO_N "checking if this is really Clang C compiler... $ECHO_C" >&6
+	cf_save_CFLAGS="$CFLAGS"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 2392 "configure"
+#include "confdefs.h"
+
+int
+main (void)
+{
+
+#ifdef __clang__
+#else
+#error __clang__ is not defined
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2409: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:2412: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:2415: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2418: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  CLANG_COMPILER=yes
+
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+	CFLAGS="$cf_save_CFLAGS"
+	echo "$as_me:2428: result: $CLANG_COMPILER" >&5
+echo "${ECHO_T}$CLANG_COMPILER" >&6
+fi
+
+CLANG_VERSION=none
+
+if test "x$CLANG_COMPILER" = "xyes" ; then
+	case "$CC" in
+	(c[1-9][0-9]|*/c[1-9][0-9])
+		{ echo "$as_me:2437: WARNING: replacing broken compiler alias $CC" >&5
+echo "$as_me: WARNING: replacing broken compiler alias $CC" >&2;}
+		CFLAGS="$CFLAGS -std=`echo "$CC" | sed -e 's%.*/%%'`"
+		CC=clang
+		;;
+	esac
+
+	echo "$as_me:2444: checking version of $CC" >&5
+echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
+	CLANG_VERSION="`$CC --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(CLANG[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
+	test -z "$CLANG_VERSION" && CLANG_VERSION=unknown
+	echo "$as_me:2448: result: $CLANG_VERSION" >&5
+echo "${ECHO_T}$CLANG_VERSION" >&6
+
+	for cf_clang_opt in \
+		-Qunused-arguments \
+		-Wno-error=implicit-function-declaration
+	do
+		echo "$as_me:2455: checking if option $cf_clang_opt works" >&5
+echo $ECHO_N "checking if option $cf_clang_opt works... $ECHO_C" >&6
+		cf_save_CFLAGS="$CFLAGS"
+		CFLAGS="$CFLAGS $cf_clang_opt"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 2460 "configure"
+#include "confdefs.h"
+
+			#include <stdio.h>
+int
+main (void)
+{
+
+			printf("hello!\\n");
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:2474: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:2477: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:2480: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:2483: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+
+			cf_clang_optok=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+
+			cf_clang_optok=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+		echo "$as_me:2494: result: $cf_clang_optok" >&5
+echo "${ECHO_T}$cf_clang_optok" >&6
+		CFLAGS="$cf_save_CFLAGS"
+		if test "$cf_clang_optok" = yes; then
+			test -n "$verbose" && echo "	adding option $cf_clang_opt" 1>&6
+
+echo "${as_me:-configure}:2500: testing adding option $cf_clang_opt ..." 1>&5
+
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_clang_opt"
+
+		fi
+	done
+fi
+
+echo "$as_me:2509: checking for $CC option to accept ANSI C" >&5
 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
 if test "${ac_cv_prog_cc_stdc+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_cv_prog_cc_stdc=no
 ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-#line 2096 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 2517 "configure"
 #include "confdefs.h"
 #include <stdarg.h>
 #include <stdio.h>
@@ -2102,9 +2523,7 @@
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
+static char *e (char **p, int i)
 {
   return p[i];
 }
@@ -2124,7 +2543,7 @@
 int argc;
 char **argv;
 int
-main ()
+main (void)
 {
 return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
   ;
@@ -2141,80 +2560,87 @@
 for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2145: \"$ac_compile\"") >&5
+  rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:2564: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:2148: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:2151: \"$ac_try\"") >&5
+  echo "$as_me:2567: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:2570: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2154: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:2573: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_prog_cc_stdc=$ac_arg
 break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext
+rm -f "conftest.$ac_objext"
 done
-rm -f conftest.$ac_ext conftest.$ac_objext
+rm -f "conftest.$ac_ext" "conftest.$ac_objext"
 CC=$ac_save_CC
 
 fi
 
 case "x$ac_cv_prog_cc_stdc" in
   x|xno)
-    echo "$as_me:2171: result: none needed" >&5
+    echo "$as_me:2590: result: none needed" >&5
 echo "${ECHO_T}none needed" >&6 ;;
   *)
-    echo "$as_me:2174: result: $ac_cv_prog_cc_stdc" >&5
+    echo "$as_me:2593: result: $ac_cv_prog_cc_stdc" >&5
 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
     CC="$CC $ac_cv_prog_cc_stdc" ;;
 esac
 
 # This should have been defined by AC_PROG_CC
-: ${CC:=cc}
+: "${CC:=cc}"
 
-echo "$as_me:2182: checking \$CC variable" >&5
-echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6
-case "$CC" in
-(*[\ \	]-[IUD]*)
-	echo "$as_me:2186: result: broken" >&5
+echo "$as_me:2601: checking \$CFLAGS variable" >&5
+echo $ECHO_N "checking \$CFLAGS variable... $ECHO_C" >&6
+case "x$CFLAGS" in
+(*-[IUD]*)
+	echo "$as_me:2605: result: broken" >&5
 echo "${ECHO_T}broken" >&6
-	{ echo "$as_me:2188: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&5
-echo "$as_me: WARNING: your environment misuses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;}
-	# humor him...
-	cf_flags=`echo "$CC" | sed -e 's/^[^ 	]*[ 	]//'`
-	CC=`echo "$CC" | sed -e 's/[ 	].*//'`
+	{ echo "$as_me:2607: WARNING: your environment uses the CFLAGS variable to hold CPPFLAGS options" >&5
+echo "$as_me: WARNING: your environment uses the CFLAGS variable to hold CPPFLAGS options" >&2;}
+	cf_flags="$CFLAGS"
+	CFLAGS=
+	for cf_arg in $cf_flags
+	do
 
 cf_fix_cppflags=no
 cf_new_cflags=
 cf_new_cppflags=
 cf_new_extra_cppflags=
 
-for cf_add_cflags in $cf_flags
+for cf_add_cflags in $cf_arg
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -2223,7 +2649,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -2233,19 +2659,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -2256,33 +2690,180 @@
 
 if test -n "$cf_new_cflags" ; then
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
 fi
 
+	done
+	;;
+(*)
+	echo "$as_me:2715: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+	;;
+esac
+
+echo "$as_me:2720: checking \$CC variable" >&5
+echo $ECHO_N "checking \$CC variable... $ECHO_C" >&6
+case "$CC" in
+(*[\ \	]-*)
+	echo "$as_me:2724: result: broken" >&5
+echo "${ECHO_T}broken" >&6
+	{ echo "$as_me:2726: WARNING: your environment uses the CC variable to hold CFLAGS/CPPFLAGS options" >&5
+echo "$as_me: WARNING: your environment uses the CC variable to hold CFLAGS/CPPFLAGS options" >&2;}
+	# humor him...
+	cf_prog=`echo "$CC" | sed -e 's/	/ /g' -e 's/[ ]* / /g' -e 's/[ ]*[ ]-[^ ].*//'`
+	cf_flags=`echo "$CC" | sed -e "s%^$cf_prog%%"`
+	CC="$cf_prog"
+	for cf_arg in $cf_flags
+	do
+		case "x$cf_arg" in
+		(x-[IUDfgOW]*)
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_arg
+do
+case "$cf_fix_cppflags" in
+(no)
+	case "$cf_add_cflags" in
+	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+		case "$cf_add_cflags" in
+		(-D*)
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+				&& test -z "${cf_tst_cflags}" \
+				&& cf_fix_cppflags=yes
+
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			fi
+			;;
+		esac
+		case "$CPPFLAGS" in
+		(*$cf_add_cflags)
+			;;
+		(*)
+			case "$cf_add_cflags" in
+			(-D*)
+				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+	sed	-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?[ 	]/ /g' \
+		-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?$//g'`
+
+				;;
+			esac
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+			;;
+		esac
+		;;
+	(*)
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+		;;
+	esac
+	;;
+(yes)
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+		&& test -z "${cf_tst_cflags}" \
+		&& cf_fix_cppflags=no
+	;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
+fi
+
+			;;
+		(*)
+			CC="$CC $cf_arg"
+			;;
+		esac
+	done
+	test -n "$verbose" && echo "	resulting CC: '$CC'" 1>&6
+
+echo "${as_me:-configure}:2843: testing resulting CC: '$CC' ..." 1>&5
+
+	test -n "$verbose" && echo "	resulting CFLAGS: '$CFLAGS'" 1>&6
+
+echo "${as_me:-configure}:2847: testing resulting CFLAGS: '$CFLAGS' ..." 1>&5
+
+	test -n "$verbose" && echo "	resulting CPPFLAGS: '$CPPFLAGS'" 1>&6
+
+echo "${as_me:-configure}:2851: testing resulting CPPFLAGS: '$CPPFLAGS' ..." 1>&5
+
 	;;
 (*)
-	echo "$as_me:2274: result: ok" >&5
+	echo "$as_me:2855: result: ok" >&5
 echo "${ECHO_T}ok" >&6
 	;;
 esac
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
-echo "$as_me:2285: checking how to run the C preprocessor" >&5
+ac_main_return="return"
+echo "$as_me:2866: checking how to run the C preprocessor" >&5
 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
@@ -2302,20 +2883,20 @@
   # with a fresh cross-compiler works.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 2306 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 2887 "configure"
 #include "confdefs.h"
 #include <assert.h>
                      Syntax error
 _ACEOF
-if { (eval echo "$as_me:2311: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:2892: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2317: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:2898: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -2328,27 +2909,27 @@
   :
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 
   # OK, works on sane cases.  Now check whether non-existent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 2340 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 2921 "configure"
 #include "confdefs.h"
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:2344: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:2925: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2350: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:2931: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -2362,16 +2943,16 @@
 continue
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 if $ac_preproc_ok; then
   break
 fi
@@ -2384,7 +2965,7 @@
 else
   ac_cv_prog_CPP=$CPP
 fi
-echo "$as_me:2387: result: $CPP" >&5
+echo "$as_me:2968: result: $CPP" >&5
 echo "${ECHO_T}$CPP" >&6
 ac_preproc_ok=false
 for ac_c_preproc_warn_flag in '' yes
@@ -2393,20 +2974,20 @@
   # with a fresh cross-compiler works.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 2397 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 2978 "configure"
 #include "confdefs.h"
 #include <assert.h>
                      Syntax error
 _ACEOF
-if { (eval echo "$as_me:2402: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:2983: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2408: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:2989: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -2419,27 +3000,27 @@
   :
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 
   # OK, works on sane cases.  Now check whether non-existent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 2431 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 3012 "configure"
 #include "confdefs.h"
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:2435: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:3016: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:2441: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:3022: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -2453,46 +3034,46 @@
 continue
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 if $ac_preproc_ok; then
   :
 else
-  { { echo "$as_me:2469: error: C preprocessor \"$CPP\" fails sanity check" >&5
+  { { echo "$as_me:3050: error: C preprocessor \"$CPP\" fails sanity check" >&5
 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 if test $ac_cv_c_compiler_gnu = yes; then
-    echo "$as_me:2482: checking whether $CC needs -traditional" >&5
+    echo "$as_me:3063: checking whether $CC needs -traditional" >&5
 echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6
 if test "${ac_cv_prog_gcc_traditional+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
     ac_pattern="Autoconf.*'x'"
-  cat >conftest.$ac_ext <<_ACEOF
-#line 2489 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 3070 "configure"
 #include "confdefs.h"
 #include <sgtty.h>
 int Autoconf = TIOCGETP;
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "$ac_pattern" >/dev/null 2>&1; then
+  $EGREP "$ac_pattern" >/dev/null 2>&1; then
   ac_cv_prog_gcc_traditional=yes
 else
   ac_cv_prog_gcc_traditional=no
@@ -2500,66 +3081,65 @@
 rm -rf conftest*
 
   if test $ac_cv_prog_gcc_traditional = no; then
-    cat >conftest.$ac_ext <<_ACEOF
-#line 2504 "configure"
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 3085 "configure"
 #include "confdefs.h"
 #include <termio.h>
 int Autoconf = TCGETA;
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "$ac_pattern" >/dev/null 2>&1; then
+  $EGREP "$ac_pattern" >/dev/null 2>&1; then
   ac_cv_prog_gcc_traditional=yes
 fi
 rm -rf conftest*
 
   fi
 fi
-echo "$as_me:2517: result: $ac_cv_prog_gcc_traditional" >&5
+echo "$as_me:3098: result: $ac_cv_prog_gcc_traditional" >&5
 echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6
   if test $ac_cv_prog_gcc_traditional = yes; then
     CC="$CC -traditional"
   fi
 fi
 
-echo "$as_me:2524: checking whether $CC understands -c and -o together" >&5
+echo "$as_me:3105: checking whether $CC understands -c and -o together" >&5
 echo $ECHO_N "checking whether $CC understands -c and -o together... $ECHO_C" >&6
 if test "${cf_cv_prog_CC_c_o+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
 cat > conftest.$ac_ext <<CF_EOF
-#include <stdio.h>
-int main()
+int main(void)
 {
 	${cf_cv_main_return:-return}(0);
 }
 CF_EOF
 # We do the test twice because some compilers refuse to overwrite an
 # existing .o file with -o, though they will create one.
-ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-if { (eval echo "$as_me:2540: \"$ac_try\"") >&5
+ac_try='$CC $CFLAGS $CPPFLAGS -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+if { (eval echo "$as_me:3120: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2543: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-  test -f conftest2.$ac_objext && { (eval echo "$as_me:2545: \"$ac_try\"") >&5
+  echo "$as_me:3123: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+  test -f conftest2.$ac_objext && { (eval echo "$as_me:3125: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2548: \$? = $ac_status" >&5
-  (exit $ac_status); };
+  echo "$as_me:3128: \$? = $ac_status" >&5
+  (exit "$ac_status"); };
 then
   eval cf_cv_prog_CC_c_o=yes
 else
   eval cf_cv_prog_CC_c_o=no
 fi
-rm -rf conftest*
+rm -rf ./conftest*
 
 fi
-if test $cf_cv_prog_CC_c_o = yes; then
-  echo "$as_me:2559: result: yes" >&5
+if test "$cf_cv_prog_CC_c_o" = yes; then
+  echo "$as_me:3139: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 else
-  echo "$as_me:2562: result: no" >&5
+  echo "$as_me:3142: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -2573,7 +3153,7 @@
 	(*) LDPATH=$PATH:/sbin:/usr/sbin
 		# Extract the first word of "ldconfig", so it can be a program name with args.
 set dummy ldconfig; ac_word=$2
-echo "$as_me:2576: checking for $ac_word" >&5
+echo "$as_me:3156: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_LDCONFIG+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2590,7 +3170,7 @@
   test -z "$ac_dir" && ac_dir=.
   if $as_executable_p "$ac_dir/$ac_word"; then
    ac_cv_path_LDCONFIG="$ac_dir/$ac_word"
-   echo "$as_me:2593: found $ac_dir/$ac_word" >&5
+   echo "$as_me:3173: found $ac_dir/$ac_word" >&5
    break
 fi
 done
@@ -2601,10 +3181,10 @@
 LDCONFIG=$ac_cv_path_LDCONFIG
 
 if test -n "$LDCONFIG"; then
-  echo "$as_me:2604: result: $LDCONFIG" >&5
+  echo "$as_me:3184: result: $LDCONFIG" >&5
 echo "${ECHO_T}$LDCONFIG" >&6
 else
-  echo "$as_me:2607: result: no" >&5
+  echo "$as_me:3187: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -2612,7 +3192,7 @@
 	esac
 fi
 
-echo "$as_me:2615: checking if you want to ensure bool is consistent with C++" >&5
+echo "$as_me:3195: checking if you want to ensure bool is consistent with C++" >&5
 echo $ECHO_N "checking if you want to ensure bool is consistent with C++... $ECHO_C" >&6
 
 # Check whether --with-cxx or --without-cxx was given.
@@ -2622,7 +3202,7 @@
 else
   cf_with_cxx=yes
 fi;
-echo "$as_me:2625: result: $cf_with_cxx" >&5
+echo "$as_me:3205: result: $cf_with_cxx" >&5
 echo "${ECHO_T}$cf_with_cxx" >&6
 if test "X$cf_with_cxx" = Xno ; then
 	CXX=""
@@ -2631,16 +3211,16 @@
 	# with autoconf 2.13, we can change the error to a warning:
 		ac_ext=cc
 ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 if test -n "$ac_tool_prefix"; then
   for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:2643: checking for $ac_word" >&5
+echo "$as_me:3223: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_CXX+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2655,7 +3235,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-echo "$as_me:2658: found $ac_dir/$ac_word" >&5
+echo "$as_me:3238: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -2663,10 +3243,10 @@
 fi
 CXX=$ac_cv_prog_CXX
 if test -n "$CXX"; then
-  echo "$as_me:2666: result: $CXX" >&5
+  echo "$as_me:3246: result: $CXX" >&5
 echo "${ECHO_T}$CXX" >&6
 else
-  echo "$as_me:2669: result: no" >&5
+  echo "$as_me:3249: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -2679,7 +3259,7 @@
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:2682: checking for $ac_word" >&5
+echo "$as_me:3262: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -2694,7 +3274,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_CXX="$ac_prog"
-echo "$as_me:2697: found $ac_dir/$ac_word" >&5
+echo "$as_me:3277: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -2702,10 +3282,10 @@
 fi
 ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
 if test -n "$ac_ct_CXX"; then
-  echo "$as_me:2705: result: $ac_ct_CXX" >&5
+  echo "$as_me:3285: result: $ac_ct_CXX" >&5
 echo "${ECHO_T}$ac_ct_CXX" >&6
 else
-  echo "$as_me:2708: result: no" >&5
+  echo "$as_me:3288: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -2717,36 +3297,36 @@
 fi
 
 # Provide some information about the compiler.
-echo "$as_me:2720:" \
+echo "$as_me:3300:" \
      "checking for C++ compiler version" >&5
 ac_compiler=`set X $ac_compile; echo $2`
-{ (eval echo "$as_me:2723: \"$ac_compiler --version </dev/null >&5\"") >&5
+{ (eval echo "$as_me:3303: \"$ac_compiler --version </dev/null >&5\"") >&5
   (eval $ac_compiler --version </dev/null >&5) 2>&5
   ac_status=$?
-  echo "$as_me:2726: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:2728: \"$ac_compiler -v </dev/null >&5\"") >&5
+  echo "$as_me:3306: \$? = $ac_status" >&5
+  (exit "$ac_status"); }
+{ (eval echo "$as_me:3308: \"$ac_compiler -v </dev/null >&5\"") >&5
   (eval $ac_compiler -v </dev/null >&5) 2>&5
   ac_status=$?
-  echo "$as_me:2731: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (eval echo "$as_me:2733: \"$ac_compiler -V </dev/null >&5\"") >&5
+  echo "$as_me:3311: \$? = $ac_status" >&5
+  (exit "$ac_status"); }
+{ (eval echo "$as_me:3313: \"$ac_compiler -V </dev/null >&5\"") >&5
   (eval $ac_compiler -V </dev/null >&5) 2>&5
   ac_status=$?
-  echo "$as_me:2736: \$? = $ac_status" >&5
-  (exit $ac_status); }
+  echo "$as_me:3316: \$? = $ac_status" >&5
+  (exit "$ac_status"); }
 
-echo "$as_me:2739: checking whether we are using the GNU C++ compiler" >&5
+echo "$as_me:3319: checking whether we are using the GNU C++ compiler" >&5
 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 2745 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 3325 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
 #ifndef __GNUC__
        choke me
@@ -2756,72 +3336,72 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2760: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:3340: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:2763: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:2766: \"$ac_try\"") >&5
+  echo "$as_me:3343: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:3346: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2769: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:3349: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_compiler_gnu=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_compiler_gnu=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
 
 fi
-echo "$as_me:2781: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "$as_me:3361: result: $ac_cv_cxx_compiler_gnu" >&5
 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
 GXX=`test $ac_compiler_gnu = yes && echo yes`
 ac_test_CXXFLAGS=${CXXFLAGS+set}
 ac_save_CXXFLAGS=$CXXFLAGS
 CXXFLAGS="-g"
-echo "$as_me:2787: checking whether $CXX accepts -g" >&5
+echo "$as_me:3367: checking whether $CXX accepts -g" >&5
 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
 if test "${ac_cv_prog_cxx_g+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 2793 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 3373 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2805: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:3385: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:2808: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:2811: \"$ac_try\"") >&5
+  echo "$as_me:3388: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:3391: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2814: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:3394: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_prog_cxx_g=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_prog_cxx_g=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:2824: result: $ac_cv_prog_cxx_g" >&5
+echo "$as_me:3404: result: $ac_cv_prog_cxx_g" >&5
 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
 if test "$ac_test_CXXFLAGS" = set; then
   CXXFLAGS=$ac_save_CXXFLAGS
@@ -2847,110 +3427,110 @@
    'extern "C" void exit (int);' \
    'void exit (int);'
 do
-  cat >conftest.$ac_ext <<_ACEOF
-#line 2851 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 3431 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 $ac_declaration
 int
-main ()
+main (void)
 {
 exit (42);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2864: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:3444: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:2867: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:2870: \"$ac_try\"") >&5
+  echo "$as_me:3447: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:3450: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2873: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:3453: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   :
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 continue
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-#line 2883 "configure"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 3463 "configure"
 #include "confdefs.h"
 $ac_declaration
 int
-main ()
+main (void)
 {
 exit (42);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2895: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:3475: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:2898: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:2901: \"$ac_try\"") >&5
+  echo "$as_me:3478: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:3481: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2904: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:3484: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 done
 rm -rf conftest*
 if test -n "$ac_declaration"; then
   echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
+  echo "$ac_declaration"    >>confdefs.h
   echo '#endif'             >>confdefs.h
 fi
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 	ac_ext=cc
 ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 	if test "x$cf_with_cxx" != xno
 	then
 		# Several of the C++ configurations do not work, particularly when
 		# cross-compiling (20140913 -TD)
-		echo "$as_me:2938: checking if $CXX works" >&5
+		echo "$as_me:3518: checking if $CXX works" >&5
 echo $ECHO_N "checking if $CXX works... $ECHO_C" >&6
 
 		save_CPPFLAGS="$CPPFLAGS"
 		eval cf_includedir=${includedir}
 		CPPFLAGS="$CPPFLAGS -I${cf_includedir}"
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 2946 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 3526 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
 #include <stdio.h>
 
 int
-main ()
+main (void)
 {
 
 		printf("Hello world!\n")
@@ -2959,48 +3539,48 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:2963: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:3543: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:2966: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:2969: \"$ac_try\"") >&5
+  echo "$as_me:3546: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:3549: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:2972: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:3552: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cxx_works=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cxx_works=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 		CPPFLAGS="$save_CPPFLAGS"
 
-		echo "$as_me:2983: result: $cf_cxx_works" >&5
+		echo "$as_me:3563: result: $cf_cxx_works" >&5
 echo "${ECHO_T}$cf_cxx_works" >&6
 		if test "x$cf_cxx_works" = xno
 		then
-			{ echo "$as_me:2987: WARNING: Ignore $CXX, since it cannot compile hello-world." >&5
+			{ echo "$as_me:3567: WARNING: Ignore $CXX, since it cannot compile hello-world." >&5
 echo "$as_me: WARNING: Ignore $CXX, since it cannot compile hello-world." >&2;}
 			cf_with_cxx=no; CXX=""; GXX="";
 		fi
 	fi
 	ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 	# autoconf 2.5x removed the error (hardcoding it to g++, or just blank)
 	if test "$CXX" = "g++" ; then
 		# Extract the first word of "g++", so it can be a program name with args.
 set dummy g++; ac_word=$2
-echo "$as_me:3003: checking for $ac_word" >&5
+echo "$as_me:3583: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_CXX+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3017,7 +3597,7 @@
   test -z "$ac_dir" && ac_dir=.
   if $as_executable_p "$ac_dir/$ac_word"; then
    ac_cv_path_CXX="$ac_dir/$ac_word"
-   echo "$as_me:3020: found $ac_dir/$ac_word" >&5
+   echo "$as_me:3600: found $ac_dir/$ac_word" >&5
    break
 fi
 done
@@ -3028,17 +3608,17 @@
 CXX=$ac_cv_path_CXX
 
 if test -n "$CXX"; then
-  echo "$as_me:3031: result: $CXX" >&5
+  echo "$as_me:3611: result: $CXX" >&5
 echo "${ECHO_T}$CXX" >&6
 else
-  echo "$as_me:3034: result: no" >&5
+  echo "$as_me:3614: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
 	fi
 	case "x$CXX" in
 	(x|xg++)
-		{ echo "$as_me:3041: WARNING: You don't have any C++ compiler, too bad" >&5
+		{ echo "$as_me:3621: WARNING: You don't have any C++ compiler, too bad" >&5
 echo "$as_me: WARNING: You don't have any C++ compiler, too bad" >&2;}
 		cf_with_cxx=no; CXX=""; GXX="";
 		;;
@@ -3047,24 +3627,28 @@
 
 GXX_VERSION=none
 if test "$GXX" = yes; then
-	echo "$as_me:3050: checking version of ${CXX:-g++}" >&5
+	echo "$as_me:3630: checking version of ${CXX:-g++}" >&5
 echo $ECHO_N "checking version of ${CXX:-g++}... $ECHO_C" >&6
-	GXX_VERSION="`${CXX:-g++} --version| sed -e '2,$d' -e 's/^.*(GCC) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
-	test -z "$GXX_VERSION" && GXX_VERSION=unknown
-	echo "$as_me:3054: result: $GXX_VERSION" >&5
+	GXX_VERSION="`${CXX:-g++} --version 2>/dev/null | sed -e '2,$d' -e 's/^[^(]*([^)][^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
+	if test -z "$GXX_VERSION"
+	then
+		GXX_VERSION=unknown
+		GXX=no
+	fi
+	echo "$as_me:3638: result: $GXX_VERSION" >&5
 echo "${ECHO_T}$GXX_VERSION" >&6
 fi
 
-case $GXX_VERSION in
-(1*|2.[0-6]*)
-	# GXX=""; CXX=""; ac_cv_prog_gxx=no
-	# cf_cxx_library=no
-	{ echo "$as_me:3062: WARNING: templates do not work" >&5
+case "$GXX_VERSION" in
+([1-9][0-9].*)
+	;;
+(1.*|2.[0-6]*)
+	{ echo "$as_me:3646: WARNING: templates do not work" >&5
 echo "$as_me: WARNING: templates do not work" >&2;}
 	;;
 esac
 
-echo "$as_me:3067: checking if you want to build C++ binding and demo" >&5
+echo "$as_me:3651: checking if you want to build C++ binding and demo" >&5
 echo $ECHO_N "checking if you want to build C++ binding and demo... $ECHO_C" >&6
 
 # Check whether --with-cxx-binding or --without-cxx-binding was given.
@@ -3074,15 +3658,15 @@
 else
   cf_with_cxx_binding=$cf_with_cxx
 fi;
-echo "$as_me:3077: result: $cf_with_cxx_binding" >&5
+echo "$as_me:3661: result: $cf_with_cxx_binding" >&5
 echo "${ECHO_T}$cf_with_cxx_binding" >&6
 
-echo "$as_me:3080: checking if you want to build with Ada95" >&5
-echo $ECHO_N "checking if you want to build with Ada95... $ECHO_C" >&6
-echo "$as_me:3082: result: $cf_with_ada" >&5
+echo "$as_me:3664: checking if you want to build with Ada" >&5
+echo $ECHO_N "checking if you want to build with Ada... $ECHO_C" >&6
+echo "$as_me:3666: result: $cf_with_ada" >&5
 echo "${ECHO_T}$cf_with_ada" >&6
 
-echo "$as_me:3085: checking if you want to install terminal database" >&5
+echo "$as_me:3669: checking if you want to install terminal database" >&5
 echo $ECHO_N "checking if you want to install terminal database... $ECHO_C" >&6
 
 # Check whether --enable-db-install or --disable-db-install was given.
@@ -3092,10 +3676,10 @@
 else
   cf_with_db_install=yes
 fi;
-echo "$as_me:3095: result: $cf_with_db_install" >&5
+echo "$as_me:3679: result: $cf_with_db_install" >&5
 echo "${ECHO_T}$cf_with_db_install" >&6
 
-echo "$as_me:3098: checking if you want to install manpages" >&5
+echo "$as_me:3682: checking if you want to install manpages" >&5
 echo $ECHO_N "checking if you want to install manpages... $ECHO_C" >&6
 
 # Check whether --with-manpages or --without-manpages was given.
@@ -3105,10 +3689,10 @@
 else
   cf_with_manpages=yes
 fi;
-echo "$as_me:3108: result: $cf_with_manpages" >&5
+echo "$as_me:3692: result: $cf_with_manpages" >&5
 echo "${ECHO_T}$cf_with_manpages" >&6
 
-echo "$as_me:3111: checking if you want to build programs such as tic" >&5
+echo "$as_me:3695: checking if you want to build programs such as tic" >&5
 echo $ECHO_N "checking if you want to build programs such as tic... $ECHO_C" >&6
 
 # Check whether --with-progs or --without-progs was given.
@@ -3118,10 +3702,10 @@
 else
   cf_with_progs=yes
 fi;
-echo "$as_me:3121: result: $cf_with_progs" >&5
+echo "$as_me:3705: result: $cf_with_progs" >&5
 echo "${ECHO_T}$cf_with_progs" >&6
 
-echo "$as_me:3124: checking if you want to build test-programs" >&5
+echo "$as_me:3708: checking if you want to build test-programs" >&5
 echo $ECHO_N "checking if you want to build test-programs... $ECHO_C" >&6
 
 # Check whether --with-tests or --without-tests was given.
@@ -3131,10 +3715,10 @@
 else
   cf_with_tests=yes
 fi;
-echo "$as_me:3134: result: $cf_with_tests" >&5
+echo "$as_me:3718: result: $cf_with_tests" >&5
 echo "${ECHO_T}$cf_with_tests" >&6
 
-echo "$as_me:3137: checking if you wish to install curses.h" >&5
+echo "$as_me:3721: checking if you wish to install curses.h" >&5
 echo $ECHO_N "checking if you wish to install curses.h... $ECHO_C" >&6
 
 # Check whether --with-curses-h or --without-curses-h was given.
@@ -3144,13 +3728,11 @@
 else
   with_curses_h=yes
 fi;
-echo "$as_me:3147: result: $with_curses_h" >&5
+echo "$as_me:3731: result: $with_curses_h" >&5
 echo "${ECHO_T}$with_curses_h" >&6
 
 modules_to_build="ncurses"
-if test "X$cf_with_progs" != Xno ; then
-modules_to_build="$modules_to_build progs tack"
-fi
+test "X$cf_with_progs" != Xno && modules_to_build="$modules_to_build progs"
 modules_to_build="$modules_to_build panel menu form"
 
 test "$program_prefix" != NONE &&
@@ -3170,7 +3752,7 @@
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:3173: checking for $ac_word" >&5
+echo "$as_me:3755: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_AWK+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3185,7 +3767,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_AWK="$ac_prog"
-echo "$as_me:3188: found $ac_dir/$ac_word" >&5
+echo "$as_me:3770: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -3193,38 +3775,20 @@
 fi
 AWK=$ac_cv_prog_AWK
 if test -n "$AWK"; then
-  echo "$as_me:3196: result: $AWK" >&5
+  echo "$as_me:3778: result: $AWK" >&5
 echo "${ECHO_T}$AWK" >&6
 else
-  echo "$as_me:3199: result: no" >&5
+  echo "$as_me:3781: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
   test -n "$AWK" && break
 done
 
-test -z "$AWK" && { { echo "$as_me:3206: error: No awk program found" >&5
+test -z "$AWK" && { { echo "$as_me:3788: error: No awk program found" >&5
 echo "$as_me: error: No awk program found" >&2;}
    { (exit 1); exit 1; }; }
 
-echo "$as_me:3210: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6
-if test "${ac_cv_prog_egrep+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-		then ac_cv_prog_egrep='grep -E'
-		else ac_cv_prog_egrep='egrep'
-	fi
-fi
-echo "$as_me:3220: result: $ac_cv_prog_egrep" >&5
-echo "${ECHO_T}$ac_cv_prog_egrep" >&6
-	EGREP=$ac_cv_prog_egrep
-
-	test -z "$EGREP" && { { echo "$as_me:3224: error: No egrep program found" >&5
-echo "$as_me: error: No egrep program found" >&2;}
-   { (exit 1); exit 1; }; }
-
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -3237,7 +3801,7 @@
 # AFS /usr/afsws/bin/install, which mishandles nonexistent args
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
-echo "$as_me:3240: checking for a BSD compatible install" >&5
+echo "$as_me:3804: checking for a BSD compatible install" >&5
 echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
 if test -z "$INSTALL"; then
 if test "${ac_cv_path_install+set}" = set; then
@@ -3286,7 +3850,7 @@
     INSTALL=$ac_install_sh
   fi
 fi
-echo "$as_me:3289: result: $INSTALL" >&5
+echo "$as_me:3853: result: $INSTALL" >&5
 echo "${ECHO_T}$INSTALL" >&6
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
@@ -3301,17 +3865,17 @@
 (/*)
 	;;
 (*)
-	cf_dir=`echo $INSTALL | sed -e 's%/[^/]*$%%'`
+	cf_dir=`echo "$INSTALL" | sed -e 's%/[^/]*$%%'`
 	test -z "$cf_dir" && cf_dir=.
-	INSTALL=`cd $cf_dir && pwd`/`echo $INSTALL | sed -e 's%^.*/%%'`
+	INSTALL="`cd \"$cf_dir\" && pwd`"/"`echo "$INSTALL" | sed -e 's%^.*/%%'`"
 	;;
 esac
 
-for ac_prog in tdlint lint alint splint lclint
+for ac_prog in lint cppcheck splint
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:3314: checking for $ac_word" >&5
+echo "$as_me:3878: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_LINT+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3326,7 +3890,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_LINT="$ac_prog"
-echo "$as_me:3329: found $ac_dir/$ac_word" >&5
+echo "$as_me:3893: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -3334,28 +3898,34 @@
 fi
 LINT=$ac_cv_prog_LINT
 if test -n "$LINT"; then
-  echo "$as_me:3337: result: $LINT" >&5
+  echo "$as_me:3901: result: $LINT" >&5
 echo "${ECHO_T}$LINT" >&6
 else
-  echo "$as_me:3340: result: no" >&5
+  echo "$as_me:3904: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
   test -n "$LINT" && break
 done
 
-echo "$as_me:3347: checking whether ln -s works" >&5
+case "x$LINT" in
+(xcppcheck|x*/cppcheck)
+	test -z "$LINT_OPTS" && LINT_OPTS="--enable=all"
+	;;
+esac
+
+echo "$as_me:3917: checking whether ln -s works" >&5
 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
 LN_S=$as_ln_s
 if test "$LN_S" = "ln -s"; then
-  echo "$as_me:3351: result: yes" >&5
+  echo "$as_me:3921: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 else
-  echo "$as_me:3354: result: no, using $LN_S" >&5
+  echo "$as_me:3924: result: no, using $LN_S" >&5
 echo "${ECHO_T}no, using $LN_S" >&6
 fi
 
-echo "$as_me:3358: checking if $LN_S -f options work" >&5
+echo "$as_me:3928: checking if $LN_S -f options work" >&5
 echo $ECHO_N "checking if $LN_S -f options work... $ECHO_C" >&6
 
 rm -f conf$$.src conf$$dst
@@ -3367,12 +3937,12 @@
 	cf_prog_ln_sf=no
 fi
 rm -f conf$$.dst conf$$src
-echo "$as_me:3370: result: $cf_prog_ln_sf" >&5
+echo "$as_me:3940: result: $cf_prog_ln_sf" >&5
 echo "${ECHO_T}$cf_prog_ln_sf" >&6
 
 test "$cf_prog_ln_sf" = yes && LN_S="$LN_S -f"
 
-echo "$as_me:3375: checking for long file names" >&5
+echo "$as_me:3945: checking for long file names" >&5
 echo $ECHO_N "checking for long file names... $ECHO_C" >&6
 if test "${ac_cv_sys_long_file_names+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3393,27 +3963,27 @@
 else
   ac_tmpdirs='/tmp /var/tmp /usr/tmp'
 fi
-for ac_dir in  . $ac_tmpdirs `eval echo $prefix/lib $exec_prefix/lib` ; do
-  test -d $ac_dir || continue
-  test -w $ac_dir || continue # It is less confusing to not echo anything here.
+for ac_dir in  . $ac_tmpdirs `eval echo "$prefix/lib" "$exec_prefix/lib"` ; do
+  test -d "$ac_dir" || continue
+  test -w "$ac_dir" || continue # It is less confusing to not echo anything here.
   ac_xdir=$ac_dir/cf$$
-  (umask 077 && mkdir $ac_xdir 2>/dev/null) || continue
+  (umask 077 && mkdir "$ac_xdir" 2>/dev/null) || continue
   ac_tf1=$ac_xdir/conftest9012345
   ac_tf2=$ac_xdir/conftest9012346
-  (echo 1 >$ac_tf1) 2>/dev/null
-  (echo 2 >$ac_tf2) 2>/dev/null
-  ac_val=`cat $ac_tf1 2>/dev/null`
-  if test ! -f $ac_tf1 || test "$ac_val" != 1; then
+  (echo 1 >"$ac_tf1") 2>/dev/null
+  (echo 2 >"$ac_tf2") 2>/dev/null
+  ac_val=`cat "$ac_tf1" 2>/dev/null`
+  if test ! -f "$ac_tf1" || test "$ac_val" != 1; then
     ac_cv_sys_long_file_names=no
-    rm -rf $ac_xdir 2>/dev/null
+    rm -rf "$ac_xdir" 2>/dev/null
     break
   fi
-  rm -rf $ac_xdir 2>/dev/null
+  rm -rf "$ac_xdir" 2>/dev/null
 done
 fi
-echo "$as_me:3414: result: $ac_cv_sys_long_file_names" >&5
+echo "$as_me:3984: result: $ac_cv_sys_long_file_names" >&5
 echo "${ECHO_T}$ac_cv_sys_long_file_names" >&6
-if test $ac_cv_sys_long_file_names = yes; then
+if test "$ac_cv_sys_long_file_names" = yes; then
 
 cat >>confdefs.h <<\EOF
 #define HAVE_LONG_FILE_NAMES 1
@@ -3421,9 +3991,26 @@
 
 fi
 
-# if we find pkg-config, check if we should install the ".pc" files.
+# Provide for renaming "ncurses5-config" to "ncurses5X-config", etc., in case
+# of package conflict.
+cf_config_suffix=
 
-echo "$as_me:3426: checking if you want to use pkg-config" >&5
+# Check whether --with-config-suffix or --without-config-suffix was given.
+if test "${with_config_suffix+set}" = set; then
+  withval="$with_config_suffix"
+  case "x$withval" in
+	(xyes|xno)
+		{ echo "$as_me:4003: WARNING: expected a value for config-suffix option" >&5
+echo "$as_me: WARNING: expected a value for config-suffix option" >&2;}
+		;;
+	(*)	cf_config_suffix="$withval"
+		;;
+	esac
+fi;
+
+# If we find pkg-config, check if we should install the ".pc" files.
+
+echo "$as_me:4013: checking if you want to use pkg-config" >&5
 echo $ECHO_N "checking if you want to use pkg-config... $ECHO_C" >&6
 
 # Check whether --with-pkg-config or --without-pkg-config was given.
@@ -3433,10 +4020,10 @@
 else
   cf_pkg_config=yes
 fi;
-echo "$as_me:3436: result: $cf_pkg_config" >&5
+echo "$as_me:4023: result: $cf_pkg_config" >&5
 echo "${ECHO_T}$cf_pkg_config" >&6
 
-case $cf_pkg_config in
+case "$cf_pkg_config" in
 (no)
 	PKG_CONFIG=none
 	;;
@@ -3445,7 +4032,7 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
-echo "$as_me:3448: checking for $ac_word" >&5
+echo "$as_me:4035: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3462,7 +4049,7 @@
   test -z "$ac_dir" && ac_dir=.
   if $as_executable_p "$ac_dir/$ac_word"; then
    ac_cv_path_PKG_CONFIG="$ac_dir/$ac_word"
-   echo "$as_me:3465: found $ac_dir/$ac_word" >&5
+   echo "$as_me:4052: found $ac_dir/$ac_word" >&5
    break
 fi
 done
@@ -3473,10 +4060,10 @@
 PKG_CONFIG=$ac_cv_path_PKG_CONFIG
 
 if test -n "$PKG_CONFIG"; then
-  echo "$as_me:3476: result: $PKG_CONFIG" >&5
+  echo "$as_me:4063: result: $PKG_CONFIG" >&5
 echo "${ECHO_T}$PKG_CONFIG" >&6
 else
-  echo "$as_me:3479: result: no" >&5
+  echo "$as_me:4066: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -3485,7 +4072,7 @@
   ac_pt_PKG_CONFIG=$PKG_CONFIG
   # Extract the first word of "pkg-config", so it can be a program name with args.
 set dummy pkg-config; ac_word=$2
-echo "$as_me:3488: checking for $ac_word" >&5
+echo "$as_me:4075: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3502,7 +4089,7 @@
   test -z "$ac_dir" && ac_dir=.
   if $as_executable_p "$ac_dir/$ac_word"; then
    ac_cv_path_ac_pt_PKG_CONFIG="$ac_dir/$ac_word"
-   echo "$as_me:3505: found $ac_dir/$ac_word" >&5
+   echo "$as_me:4092: found $ac_dir/$ac_word" >&5
    break
 fi
 done
@@ -3514,10 +4101,10 @@
 ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
 
 if test -n "$ac_pt_PKG_CONFIG"; then
-  echo "$as_me:3517: result: $ac_pt_PKG_CONFIG" >&5
+  echo "$as_me:4104: result: $ac_pt_PKG_CONFIG" >&5
 echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6
 else
-  echo "$as_me:3520: result: no" >&5
+  echo "$as_me:4107: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -3548,116 +4135,176 @@
 	;;
 (.[a-zA-Z]:[\\/]*) # OS/2 EMX
 	;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
 	eval PKG_CONFIG="$PKG_CONFIG"
 	case ".$PKG_CONFIG" in
 	(.NONE/*)
-		PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%`
+		PKG_CONFIG=`echo "$PKG_CONFIG" | sed -e s%NONE%$cf_path_syntax%`
 		;;
 	esac
 	;;
 (.no|.NONE/*)
-	PKG_CONFIG=`echo $PKG_CONFIG | sed -e s%NONE%$cf_path_syntax%`
+	PKG_CONFIG=`echo "$PKG_CONFIG" | sed -e s%NONE%$cf_path_syntax%`
 	;;
 (*)
-	{ { echo "$as_me:3563: error: expected a pathname, not \"$PKG_CONFIG\"" >&5
+	{ { echo "$as_me:4150: error: expected a pathname, not \"$PKG_CONFIG\"" >&5
 echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG\"" >&2;}
    { (exit 1); exit 1; }; }
 	;;
 esac
 
 elif test "x$cf_pkg_config" != xno ; then
-	{ echo "$as_me:3570: WARNING: pkg-config is not installed" >&5
+	{ echo "$as_me:4157: WARNING: pkg-config is not installed" >&5
 echo "$as_me: WARNING: pkg-config is not installed" >&2;}
 fi
 
-if test "x$PKG_CONFIG" = xnone ; then
-	PKG_CONFIG_LIBDIR=no
-else
-	echo "$as_me:3577: checking for $PKG_CONFIG library directory" >&5
+case "$PKG_CONFIG" in
+(no|none|yes)
+	echo "$as_me:4163: checking for pkg-config library directory" >&5
+echo $ECHO_N "checking for pkg-config library directory... $ECHO_C" >&6
+	;;
+(*)
+	echo "$as_me:4167: checking for $PKG_CONFIG library directory" >&5
 echo $ECHO_N "checking for $PKG_CONFIG library directory... $ECHO_C" >&6
+	;;
+esac
+
+# if $PKG_CONFIG_LIBDIR is set, try to use that
+if test -n "$PKG_CONFIG_PATH"; then
+	cf_search_path=`echo "$PKG_CONFIG_PATH" | sed -e 's/:/ /g' -e 's,^[ 	]*,,' -e 's,[ 	]*$,,'`
+elif test -n "$PKG_CONFIG_LIBDIR"; then
+	cf_search_path=`echo "$PKG_CONFIG_LIBDIR" | sed -e 's/:/ /g' -e 's,^[ 	]*,,' -e 's,[ 	]*$,,'`
+else
+	cf_search_path=auto
+fi
+
+# if the option is used, let that override.  otherwise default to "libdir"
 
 # Check whether --with-pkg-config-libdir or --without-pkg-config-libdir was given.
 if test "${with_pkg_config_libdir+set}" = set; then
   withval="$with_pkg_config_libdir"
-  PKG_CONFIG_LIBDIR=$withval
+  cf_search_path=$withval
 else
-  PKG_CONFIG_LIBDIR=yes
+  test "x$PKG_CONFIG" != xnone && test -z "$cf_search_path" && cf_search_path=libdir
 fi;
-fi
 
-case x$PKG_CONFIG_LIBDIR in
-(x/*)
+case "x$cf_search_path" in
+(xlibdir)
+	PKG_CONFIG_LIBDIR='${libdir}/pkgconfig'
+	echo "$as_me:4194: result: $PKG_CONFIG_LIBDIR" >&5
+echo "${ECHO_T}$PKG_CONFIG_LIBDIR" >&6
+	cf_search_path=
 	;;
-(xyes)
+(x)
+	;;
+(x/*\ *)
+	PKG_CONFIG_LIBDIR=
+	;;
+(x/*)
+	PKG_CONFIG_LIBDIR="$cf_search_path"
+	echo "$as_me:4205: result: $PKG_CONFIG_LIBDIR" >&5
+echo "${ECHO_T}$PKG_CONFIG_LIBDIR" >&6
+	cf_search_path=
+	;;
+(xyes|xauto)
+	echo "$as_me:4210: result: auto" >&5
+echo "${ECHO_T}auto" >&6
+	cf_search_path=
 	# Look for the library directory using the same prefix as the executable
-	if test "x$PKG_CONFIG" = xnone
+	echo "$as_me:4214: checking for search-list" >&5
+echo $ECHO_N "checking for search-list... $ECHO_C" >&6
+	if test "x$PKG_CONFIG" != xnone
 	then
-		cf_path=$prefix
-	else
-		cf_path=`echo "$PKG_CONFIG" | sed -e 's,/[^/]*/[^/]*$,,'`
+		# works for pkg-config since version 0.24 (2009)
+		# works for pkgconf since version 0.8.3 (2012)
+		for cf_pkg_program in \
+			`echo "$PKG_CONFIG" | sed -e 's,^.*/,,'` \
+			pkg-config \
+			pkgconf
+		do
+			cf_search_path=`"$PKG_CONFIG" --variable=pc_path "$cf_pkg_program" 2>/dev/null | tr : ' '`
+			test -n "$cf_search_path" && break
+		done
+
+		# works for pkg-config since import in 2005 of original 2001 HP code.
+		test -z "$cf_search_path" && \
+		cf_search_path=`
+		"$PKG_CONFIG" --debug --exists no-such-package 2>&1 | $AWK "\
+/^Scanning directory (#[1-9][0-9]* )?'.*'$/{ \
+	sub(\"^[^']*'\",\"\"); \
+	sub(\"'.*\",\"\"); \
+	printf \" %s\", \\$0; } \
+{ next; } \
+"`
 	fi
 
-	# If you don't like using the default architecture, you have to specify the
-	# intended library directory and corresponding compiler/linker options.
-	#
-	# This case allows for Debian's 2014-flavor of multiarch, along with the
-	# most common variations before that point.  Some other variants spell the
-	# directory differently, e.g., "pkg-config", and put it in unusual places.
-	# pkg-config has always been poorly standardized, which is ironic...
-	case x`(arch) 2>/dev/null` in
-	(*64)
-		cf_search_path="\
-			$cf_path/lib/*64-linux-gnu \
-			$cf_path/share \
-			$cf_path/lib64 \
-			$cf_path/lib32 \
-			$cf_path/lib"
-		;;
-	(*)
-		cf_search_path="\
-			$cf_path/lib/*-linux-gnu \
-			$cf_path/share \
-			$cf_path/lib32 \
-			$cf_path/lib \
-			$cf_path/libdata"
-		;;
-	esac
-
-	test -n "$verbose" && echo "	list..." 1>&6
-
-echo "${as_me:-configure}:3629: testing list... ..." 1>&5
-
-	for cf_config in $cf_search_path
-	do
-		test -n "$verbose" && echo "	checking $cf_config/pkgconfig" 1>&6
-
-echo "${as_me:-configure}:3635: testing checking $cf_config/pkgconfig ..." 1>&5
-
-		if test -d $cf_config/pkgconfig
-		then
-			PKG_CONFIG_LIBDIR=$cf_config/pkgconfig
-			echo "$as_me:3640: checking done" >&5
-echo $ECHO_N "checking done... $ECHO_C" >&6
-			break
-		fi
-	done
+	echo "$as_me:4241: result: $cf_search_path" >&5
+echo "${ECHO_T}$cf_search_path" >&6
 	;;
 (*)
+	{ { echo "$as_me:4245: error: Unexpected option value: $cf_search_path" >&5
+echo "$as_me: error: Unexpected option value: $cf_search_path" >&2;}
+   { (exit 1); exit 1; }; }
 	;;
 esac
 
-if test "x$PKG_CONFIG" != xnone ; then
-	echo "$as_me:3651: result: $PKG_CONFIG_LIBDIR" >&5
+if test -n "$cf_search_path"
+then
+	echo "$as_me:4253: checking for first directory" >&5
+echo $ECHO_N "checking for first directory... $ECHO_C" >&6
+	cf_pkg_config_path=none
+	for cf_config in $cf_search_path
+	do
+		if test -d "$cf_config"
+		then
+			cf_pkg_config_path=$cf_config
+			break
+		fi
+	done
+	echo "$as_me:4264: result: $cf_pkg_config_path" >&5
+echo "${ECHO_T}$cf_pkg_config_path" >&6
+
+	if test "x$cf_pkg_config_path" != xnone ; then
+		# limit this to the first directory found
+		PKG_CONFIG_LIBDIR="$cf_pkg_config_path"
+	fi
+
+	if test -z "$PKG_CONFIG_LIBDIR" && test -n "$cf_search_path"
+	then
+		echo "$as_me:4274: checking for workaround" >&5
+echo $ECHO_N "checking for workaround... $ECHO_C" >&6
+		if test "$prefix" = "NONE" ; then
+			cf_prefix="$ac_default_prefix"
+		else
+			cf_prefix="$prefix"
+		fi
+		eval cf_libdir=$libdir
+		cf_libdir=`echo "$cf_libdir" | sed -e "s,^NONE,$cf_prefix,"`
+		cf_backup=
+		for cf_config in $cf_search_path
+		do
+			case $cf_config in
+			$cf_libdir/pkgconfig)
+				PKG_CONFIG_LIBDIR=$cf_libdir/pkgconfig
+				break
+				;;
+			*)
+				test -z "$cf_backup" && cf_backup=$cf_config
+				;;
+			esac
+		done
+		test -z "$PKG_CONFIG_LIBDIR" && PKG_CONFIG_LIBDIR=$cf_backup
+		echo "$as_me:4297: result: $PKG_CONFIG_LIBDIR" >&5
 echo "${ECHO_T}$PKG_CONFIG_LIBDIR" >&6
+	fi
 fi
 
 if test "x$PKG_CONFIG" != xnone
 then
-	echo "$as_me:3657: checking if we should install .pc files for $PKG_CONFIG" >&5
+	echo "$as_me:4304: checking if we should install .pc files for $PKG_CONFIG" >&5
 echo $ECHO_N "checking if we should install .pc files for $PKG_CONFIG... $ECHO_C" >&6
 else
-	echo "$as_me:3660: checking if we should install .pc files" >&5
+	echo "$as_me:4307: checking if we should install .pc files" >&5
 echo $ECHO_N "checking if we should install .pc files... $ECHO_C" >&6
 fi
 
@@ -3668,18 +4315,19 @@
 else
   enable_pc_files=no
 fi;
-echo "$as_me:3671: result: $enable_pc_files" >&5
+echo "$as_me:4318: result: $enable_pc_files" >&5
 echo "${ECHO_T}$enable_pc_files" >&6
 
 if test "x$enable_pc_files" != xno
 then
+	MAKE_PC_FILES=
 	case "x$PKG_CONFIG_LIBDIR" in
-	(xno|xyes)
-		{ echo "$as_me:3678: WARNING: no PKG_CONFIG_LIBDIR was found" >&5
+	(xno|xnone|xyes|x)
+		{ echo "$as_me:4326: WARNING: no PKG_CONFIG_LIBDIR was found" >&5
 echo "$as_me: WARNING: no PKG_CONFIG_LIBDIR was found" >&2;}
-		MAKE_PC_FILES="#"
 		;;
 	(*)
+		cf_pkg_config_libdir="$PKG_CONFIG_LIBDIR"
 
 if test "x$prefix" != xNONE; then
 	cf_path_syntax="$prefix"
@@ -3687,32 +4335,31 @@
 	cf_path_syntax="$ac_default_prefix"
 fi
 
-case ".$PKG_CONFIG_LIBDIR" in
+case ".$cf_pkg_config_libdir" in
 (.\$\(*\)*|.\'*\'*)
 	;;
 (..|./*|.\\*)
 	;;
 (.[a-zA-Z]:[\\/]*) # OS/2 EMX
 	;;
-(.\${*prefix}*|.\${*dir}*)
-	eval PKG_CONFIG_LIBDIR="$PKG_CONFIG_LIBDIR"
-	case ".$PKG_CONFIG_LIBDIR" in
+(.\$\{*prefix\}*|.\$\{*dir\}*)
+	eval cf_pkg_config_libdir="$cf_pkg_config_libdir"
+	case ".$cf_pkg_config_libdir" in
 	(.NONE/*)
-		PKG_CONFIG_LIBDIR=`echo $PKG_CONFIG_LIBDIR | sed -e s%NONE%$cf_path_syntax%`
+		cf_pkg_config_libdir=`echo "$cf_pkg_config_libdir" | sed -e s%NONE%$cf_path_syntax%`
 		;;
 	esac
 	;;
 (.no|.NONE/*)
-	PKG_CONFIG_LIBDIR=`echo $PKG_CONFIG_LIBDIR | sed -e s%NONE%$cf_path_syntax%`
+	cf_pkg_config_libdir=`echo "$cf_pkg_config_libdir" | sed -e s%NONE%$cf_path_syntax%`
 	;;
 (*)
-	{ { echo "$as_me:3709: error: expected a pathname, not \"$PKG_CONFIG_LIBDIR\"" >&5
-echo "$as_me: error: expected a pathname, not \"$PKG_CONFIG_LIBDIR\"" >&2;}
+	{ { echo "$as_me:4357: error: expected a pathname, not \"$cf_pkg_config_libdir\"" >&5
+echo "$as_me: error: expected a pathname, not \"$cf_pkg_config_libdir\"" >&2;}
    { (exit 1); exit 1; }; }
 	;;
 esac
 
-		MAKE_PC_FILES=
 		;;
 	esac
 else
@@ -3721,8 +4368,8 @@
 
 if test -z "$MAKE_PC_FILES"
 then
-	echo "$as_me:3724: checking for suffix to add to pc-files" >&5
-echo $ECHO_N "checking for suffix to add to pc-files... $ECHO_C" >&6
+	echo "$as_me:4371: checking for suffix to add to pkg-config files" >&5
+echo $ECHO_N "checking for suffix to add to pkg-config files... $ECHO_C" >&6
 
 # Check whether --with-pc-suffix or --without-pc-suffix was given.
 if test "${with_pc_suffix+set}" = set; then
@@ -3736,13 +4383,13 @@
 	esac
 fi;
 	test -z "$PC_MODULE_SUFFIX" && PC_MODULE_SUFFIX=none
-	echo "$as_me:3739: result: $PC_MODULE_SUFFIX" >&5
+	echo "$as_me:4386: result: $PC_MODULE_SUFFIX" >&5
 echo "${ECHO_T}$PC_MODULE_SUFFIX" >&6
 	test "$PC_MODULE_SUFFIX" = none && PC_MODULE_SUFFIX=
 
 fi
 
-echo "$as_me:3745: checking if we should assume mixed-case filenames" >&5
+echo "$as_me:4392: checking if we should assume mixed-case filenames" >&5
 echo $ECHO_N "checking if we should assume mixed-case filenames... $ECHO_C" >&6
 
 # Check whether --enable-mixed-case or --disable-mixed-case was given.
@@ -3752,19 +4399,19 @@
 else
   enable_mixedcase=auto
 fi;
-echo "$as_me:3755: result: $enable_mixedcase" >&5
+echo "$as_me:4402: result: $enable_mixedcase" >&5
 echo "${ECHO_T}$enable_mixedcase" >&6
 if test "$enable_mixedcase" = "auto" ; then
 
-echo "$as_me:3759: checking if filesystem supports mixed-case filenames" >&5
+echo "$as_me:4406: checking if filesystem supports mixed-case filenames" >&5
 echo $ECHO_N "checking if filesystem supports mixed-case filenames... $ECHO_C" >&6
 if test "${cf_cv_mixedcase+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
 if test "$cross_compiling" = yes ; then
-	case $target_alias in
-	(*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*)
+	case "$target_alias" in
+	(*-os2-emx*|*-msdosdjgpp*|*-cygwin*|*-msys*|*-mingw*|*-uwin*|darwin*)
 		cf_cv_mixedcase=no
 		;;
 	(*)
@@ -3783,7 +4430,7 @@
 fi
 
 fi
-echo "$as_me:3786: result: $cf_cv_mixedcase" >&5
+echo "$as_me:4433: result: $cf_cv_mixedcase" >&5
 echo "${ECHO_T}$cf_cv_mixedcase" >&6
 test "$cf_cv_mixedcase" = yes &&
 cat >>confdefs.h <<\EOF
@@ -3802,7 +4449,7 @@
 fi
 
 # do this after mixed-case option (tags/TAGS is not as important as tic).
-echo "$as_me:3805: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "$as_me:4452: checking whether ${MAKE-make} sets \${MAKE}" >&5
 echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
 if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
@@ -3822,20 +4469,82 @@
 rm -f conftest.make
 fi
 if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
-  echo "$as_me:3825: result: yes" >&5
+  echo "$as_me:4472: result: yes" >&5
 echo "${ECHO_T}yes" >&6
   SET_MAKE=
 else
-  echo "$as_me:3829: result: no" >&5
+  echo "$as_me:4476: result: no" >&5
 echo "${ECHO_T}no" >&6
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
+echo "$as_me:4481: checking for \".PHONY\" make-support" >&5
+echo $ECHO_N "checking for \".PHONY\" make-support... $ECHO_C" >&6
+if test "${cf_cv_make_PHONY+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	rm -rf conftest*
+	(
+		mkdir conftest || exit 1
+		cd conftest
+		cat >makefile <<'CF_EOF'
+.PHONY: always
+DATA=0
+always:	always.out
+	@echo "** making $@ $(DATA)"
+once: once.out
+	@echo "** making $@ $(DATA)"
+always.out:
+	@echo "** making $@ $(DATA)"
+	echo $(DATA) > $@
+once.out:
+	@echo "** making $@ $(DATA)"
+	echo $(DATA) > $@
+CF_EOF
+		for cf_data in 1 2 3
+		do
+			${MAKE:-make} always DATA=$cf_data
+			${MAKE:-make} once   DATA=$cf_data
+			${MAKE:-make} -t always once
+			if test -f always ; then
+				echo "no (case 1)" > ../conftest.tmp
+			elif test ! -f always.out ; then
+				echo "no (case 2)" > ../conftest.tmp
+			elif test ! -f once.out ; then
+				echo "no (case 3)" > ../conftest.tmp
+			elif ! cmp -s always.out once.out ; then
+				echo "no (case 4)" > ../conftest.tmp
+				diff always.out once.out
+			else
+				cf_check="`cat always.out`"
+				if test "x$cf_check" != "x$cf_data" ; then
+					echo "no (case 5)" > ../conftest.tmp
+				else
+					echo yes > ../conftest.tmp
+					rm -f ./*.out
+					continue
+				fi
+			fi
+			break
+		done
+	) >&5 2>&1
+	cf_cv_make_PHONY="`cat conftest.tmp`"
+	rm -rf conftest*
+
+fi
+echo "$as_me:4536: result: $cf_cv_make_PHONY" >&5
+echo "${ECHO_T}$cf_cv_make_PHONY" >&6
+MAKE_NO_PHONY="#"
+MAKE_PHONY="#"
+test "x$cf_cv_make_PHONY" = xyes && MAKE_PHONY=
+test "x$cf_cv_make_PHONY" != xyes && MAKE_NO_PHONY=
+
 for ac_prog in exctags ctags
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:3838: checking for $ac_word" >&5
+echo "$as_me:4547: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_CTAGS+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3850,7 +4559,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_CTAGS="$ac_prog"
-echo "$as_me:3853: found $ac_dir/$ac_word" >&5
+echo "$as_me:4562: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -3858,10 +4567,10 @@
 fi
 CTAGS=$ac_cv_prog_CTAGS
 if test -n "$CTAGS"; then
-  echo "$as_me:3861: result: $CTAGS" >&5
+  echo "$as_me:4570: result: $CTAGS" >&5
 echo "${ECHO_T}$CTAGS" >&6
 else
-  echo "$as_me:3864: result: no" >&5
+  echo "$as_me:4573: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -3872,7 +4581,7 @@
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:3875: checking for $ac_word" >&5
+echo "$as_me:4584: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ETAGS+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3887,7 +4596,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ETAGS="$ac_prog"
-echo "$as_me:3890: found $ac_dir/$ac_word" >&5
+echo "$as_me:4599: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -3895,10 +4604,10 @@
 fi
 ETAGS=$ac_cv_prog_ETAGS
 if test -n "$ETAGS"; then
-  echo "$as_me:3898: result: $ETAGS" >&5
+  echo "$as_me:4607: result: $ETAGS" >&5
 echo "${ECHO_T}$ETAGS" >&6
 else
-  echo "$as_me:3901: result: no" >&5
+  echo "$as_me:4610: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -3907,7 +4616,7 @@
 
 # Extract the first word of "${CTAGS:-ctags}", so it can be a program name with args.
 set dummy ${CTAGS:-ctags}; ac_word=$2
-echo "$as_me:3910: checking for $ac_word" >&5
+echo "$as_me:4619: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_MAKE_LOWER_TAGS+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3922,7 +4631,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_MAKE_LOWER_TAGS="yes"
-echo "$as_me:3925: found $ac_dir/$ac_word" >&5
+echo "$as_me:4634: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -3931,17 +4640,17 @@
 fi
 MAKE_LOWER_TAGS=$ac_cv_prog_MAKE_LOWER_TAGS
 if test -n "$MAKE_LOWER_TAGS"; then
-  echo "$as_me:3934: result: $MAKE_LOWER_TAGS" >&5
+  echo "$as_me:4643: result: $MAKE_LOWER_TAGS" >&5
 echo "${ECHO_T}$MAKE_LOWER_TAGS" >&6
 else
-  echo "$as_me:3937: result: no" >&5
+  echo "$as_me:4646: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
 if test "$cf_cv_mixedcase" = yes ; then
 	# Extract the first word of "${ETAGS:-etags}", so it can be a program name with args.
 set dummy ${ETAGS:-etags}; ac_word=$2
-echo "$as_me:3944: checking for $ac_word" >&5
+echo "$as_me:4653: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_MAKE_UPPER_TAGS+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3956,7 +4665,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_MAKE_UPPER_TAGS="yes"
-echo "$as_me:3959: found $ac_dir/$ac_word" >&5
+echo "$as_me:4668: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -3965,10 +4674,10 @@
 fi
 MAKE_UPPER_TAGS=$ac_cv_prog_MAKE_UPPER_TAGS
 if test -n "$MAKE_UPPER_TAGS"; then
-  echo "$as_me:3968: result: $MAKE_UPPER_TAGS" >&5
+  echo "$as_me:4677: result: $MAKE_UPPER_TAGS" >&5
 echo "${ECHO_T}$MAKE_UPPER_TAGS" >&6
 else
-  echo "$as_me:3971: result: no" >&5
+  echo "$as_me:4680: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -3988,7 +4697,7 @@
 	MAKE_LOWER_TAGS="#"
 fi
 
-echo "$as_me:3991: checking for makeflags variable" >&5
+echo "$as_me:4700: checking for makeflags variable" >&5
 echo $ECHO_N "checking for makeflags variable... $ECHO_C" >&6
 if test "${cf_cv_makeflags+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4002,10 +4711,10 @@
 all :
 	@ echo '.$cf_option'
 CF_EOF
-		cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp 2>/dev/null | fgrep -v "ing directory" | sed -e 's,[ 	]*$,,'`
+		cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp 2>/dev/null | ${FGREP-fgrep} -v "ing directory" | sed -e 's,[ 	]*$,,'`
 		case "$cf_result" in
 		(.*k|.*kw)
-			cf_result=`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null`
+			cf_result="`${MAKE:-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null`"
 			case "$cf_result" in
 			(.*CC=*)	cf_cv_makeflags=
 				;;
@@ -4014,21 +4723,25 @@
 			esac
 			break
 			;;
-		(.-)	;;
-		(*)	echo "given option \"$cf_option\", no match \"$cf_result\""
+		(.-)
+			;;
+		(*)
+
+echo "${as_me:-configure}:4730: testing given option \"$cf_option\",no match \"$cf_result\" ..." 1>&5
+
 			;;
 		esac
 	done
 	rm -f cf_makeflags.tmp
 
 fi
-echo "$as_me:4025: result: $cf_cv_makeflags" >&5
+echo "$as_me:4738: result: $cf_cv_makeflags" >&5
 echo "${ECHO_T}$cf_cv_makeflags" >&6
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-echo "$as_me:4031: checking for $ac_word" >&5
+echo "$as_me:4744: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_RANLIB+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4043,7 +4756,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-echo "$as_me:4046: found $ac_dir/$ac_word" >&5
+echo "$as_me:4759: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4051,10 +4764,10 @@
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  echo "$as_me:4054: result: $RANLIB" >&5
+  echo "$as_me:4767: result: $RANLIB" >&5
 echo "${ECHO_T}$RANLIB" >&6
 else
-  echo "$as_me:4057: result: no" >&5
+  echo "$as_me:4770: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4063,7 +4776,7 @@
   ac_ct_RANLIB=$RANLIB
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
-echo "$as_me:4066: checking for $ac_word" >&5
+echo "$as_me:4779: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4078,7 +4791,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_RANLIB="ranlib"
-echo "$as_me:4081: found $ac_dir/$ac_word" >&5
+echo "$as_me:4794: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4087,10 +4800,10 @@
 fi
 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 if test -n "$ac_ct_RANLIB"; then
-  echo "$as_me:4090: result: $ac_ct_RANLIB" >&5
+  echo "$as_me:4803: result: $ac_ct_RANLIB" >&5
 echo "${ECHO_T}$ac_ct_RANLIB" >&6
 else
-  echo "$as_me:4093: result: no" >&5
+  echo "$as_me:4806: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4102,7 +4815,7 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ld; ac_word=$2
-echo "$as_me:4105: checking for $ac_word" >&5
+echo "$as_me:4818: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_LD+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4117,7 +4830,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_LD="${ac_tool_prefix}ld"
-echo "$as_me:4120: found $ac_dir/$ac_word" >&5
+echo "$as_me:4833: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4125,10 +4838,10 @@
 fi
 LD=$ac_cv_prog_LD
 if test -n "$LD"; then
-  echo "$as_me:4128: result: $LD" >&5
+  echo "$as_me:4841: result: $LD" >&5
 echo "${ECHO_T}$LD" >&6
 else
-  echo "$as_me:4131: result: no" >&5
+  echo "$as_me:4844: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4137,7 +4850,7 @@
   ac_ct_LD=$LD
   # Extract the first word of "ld", so it can be a program name with args.
 set dummy ld; ac_word=$2
-echo "$as_me:4140: checking for $ac_word" >&5
+echo "$as_me:4853: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_LD+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4152,7 +4865,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_LD="ld"
-echo "$as_me:4155: found $ac_dir/$ac_word" >&5
+echo "$as_me:4868: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4161,10 +4874,10 @@
 fi
 ac_ct_LD=$ac_cv_prog_ac_ct_LD
 if test -n "$ac_ct_LD"; then
-  echo "$as_me:4164: result: $ac_ct_LD" >&5
+  echo "$as_me:4877: result: $ac_ct_LD" >&5
 echo "${ECHO_T}$ac_ct_LD" >&6
 else
-  echo "$as_me:4167: result: no" >&5
+  echo "$as_me:4880: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4176,7 +4889,7 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
-echo "$as_me:4179: checking for $ac_word" >&5
+echo "$as_me:4892: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_AR+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4191,7 +4904,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_AR="${ac_tool_prefix}ar"
-echo "$as_me:4194: found $ac_dir/$ac_word" >&5
+echo "$as_me:4907: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4199,10 +4912,10 @@
 fi
 AR=$ac_cv_prog_AR
 if test -n "$AR"; then
-  echo "$as_me:4202: result: $AR" >&5
+  echo "$as_me:4915: result: $AR" >&5
 echo "${ECHO_T}$AR" >&6
 else
-  echo "$as_me:4205: result: no" >&5
+  echo "$as_me:4918: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4211,7 +4924,7 @@
   ac_ct_AR=$AR
   # Extract the first word of "ar", so it can be a program name with args.
 set dummy ar; ac_word=$2
-echo "$as_me:4214: checking for $ac_word" >&5
+echo "$as_me:4927: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4226,7 +4939,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_AR="ar"
-echo "$as_me:4229: found $ac_dir/$ac_word" >&5
+echo "$as_me:4942: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4235,10 +4948,10 @@
 fi
 ac_ct_AR=$ac_cv_prog_ac_ct_AR
 if test -n "$ac_ct_AR"; then
-  echo "$as_me:4238: result: $ac_ct_AR" >&5
+  echo "$as_me:4951: result: $ac_ct_AR" >&5
 echo "${ECHO_T}$ac_ct_AR" >&6
 else
-  echo "$as_me:4241: result: no" >&5
+  echo "$as_me:4954: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4250,7 +4963,7 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args.
 set dummy ${ac_tool_prefix}nm; ac_word=$2
-echo "$as_me:4253: checking for $ac_word" >&5
+echo "$as_me:4966: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_NM+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4265,7 +4978,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_NM="${ac_tool_prefix}nm"
-echo "$as_me:4268: found $ac_dir/$ac_word" >&5
+echo "$as_me:4981: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4273,10 +4986,10 @@
 fi
 NM=$ac_cv_prog_NM
 if test -n "$NM"; then
-  echo "$as_me:4276: result: $NM" >&5
+  echo "$as_me:4989: result: $NM" >&5
 echo "${ECHO_T}$NM" >&6
 else
-  echo "$as_me:4279: result: no" >&5
+  echo "$as_me:4992: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4285,7 +4998,7 @@
   ac_ct_NM=$NM
   # Extract the first word of "nm", so it can be a program name with args.
 set dummy nm; ac_word=$2
-echo "$as_me:4288: checking for $ac_word" >&5
+echo "$as_me:5001: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_NM+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4300,7 +5013,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_NM="nm"
-echo "$as_me:4303: found $ac_dir/$ac_word" >&5
+echo "$as_me:5016: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4309,10 +5022,10 @@
 fi
 ac_ct_NM=$ac_cv_prog_ac_ct_NM
 if test -n "$ac_ct_NM"; then
-  echo "$as_me:4312: result: $ac_ct_NM" >&5
+  echo "$as_me:5025: result: $ac_ct_NM" >&5
 echo "${ECHO_T}$ac_ct_NM" >&6
 else
-  echo "$as_me:4315: result: no" >&5
+  echo "$as_me:5028: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4324,7 +5037,7 @@
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
-echo "$as_me:4327: checking for $ac_word" >&5
+echo "$as_me:5040: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_AR+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4339,7 +5052,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_AR="${ac_tool_prefix}ar"
-echo "$as_me:4342: found $ac_dir/$ac_word" >&5
+echo "$as_me:5055: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4347,10 +5060,10 @@
 fi
 AR=$ac_cv_prog_AR
 if test -n "$AR"; then
-  echo "$as_me:4350: result: $AR" >&5
+  echo "$as_me:5063: result: $AR" >&5
 echo "${ECHO_T}$AR" >&6
 else
-  echo "$as_me:4353: result: no" >&5
+  echo "$as_me:5066: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4359,7 +5072,7 @@
   ac_ct_AR=$AR
   # Extract the first word of "ar", so it can be a program name with args.
 set dummy ar; ac_word=$2
-echo "$as_me:4362: checking for $ac_word" >&5
+echo "$as_me:5075: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4374,7 +5087,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_AR="ar"
-echo "$as_me:4377: found $ac_dir/$ac_word" >&5
+echo "$as_me:5090: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4383,10 +5096,10 @@
 fi
 ac_ct_AR=$ac_cv_prog_ac_ct_AR
 if test -n "$ac_ct_AR"; then
-  echo "$as_me:4386: result: $ac_ct_AR" >&5
+  echo "$as_me:5099: result: $ac_ct_AR" >&5
 echo "${ECHO_T}$ac_ct_AR" >&6
 else
-  echo "$as_me:4389: result: no" >&5
+  echo "$as_me:5102: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4395,55 +5108,71 @@
   AR="$ac_cv_prog_AR"
 fi
 
-echo "$as_me:4398: checking for options to update archives" >&5
+echo "$as_me:5111: checking for options to update archives" >&5
 echo $ECHO_N "checking for options to update archives... $ECHO_C" >&6
 if test "${cf_cv_ar_flags+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cf_cv_ar_flags=unknown
-	for cf_ar_flags in -curv curv -crv crv -cqv cqv -rv rv
-	do
+	case "$cf_cv_system_name" in
+	(*-msvc*)
+		cf_cv_ar_flags=''
+		cat >mk_static_lib.sh <<-EOF
+		#!$SHELL
+		MSVC_BIN="$AR"
+		out="\$1"
+		shift
+		exec \$MSVC_BIN -out:"\$out" \$@
+		EOF
+		chmod +x mk_static_lib.sh
+		AR=`pwd`/mk_static_lib.sh
+		;;
+	(*)
+		cf_cv_ar_flags=unknown
+		for cf_ar_flags in -curvU -curv curv -crv crv -cqv cqv -rv rv
+		do
 
-		# check if $ARFLAGS already contains this choice
-		if test "x$ARFLAGS" != "x" ; then
-			cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"`
-			if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then
-				cf_cv_ar_flags=
-				break
+			# check if $ARFLAGS already contains this choice
+			if test "x$ARFLAGS" != "x" ; then
+				cf_check_ar_flags=`echo "x$ARFLAGS" | sed -e "s/$cf_ar_flags\$//" -e "s/$cf_ar_flags / /"`
+				if test "x$ARFLAGS" != "$cf_check_ar_flags" ; then
+					cf_cv_ar_flags=
+					break
+				fi
 			fi
-		fi
 
-		rm -f conftest.$ac_cv_objext
-		rm -f conftest.a
+			rm -f "conftest.$ac_cv_objext"
+			rm -f conftest.a
 
-		cat >conftest.$ac_ext <<EOF
-#line 4421 "configure"
+			cat >"conftest.$ac_ext" <<EOF
+#line 5148 "configure"
 int	testdata[3] = { 123, 456, 789 };
 EOF
-		if { (eval echo "$as_me:4424: \"$ac_compile\"") >&5
+			if { (eval echo "$as_me:5151: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:4427: \$? = $ac_status" >&5
-  (exit $ac_status); } ; then
-			echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&5
-			$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext 2>&5 1>/dev/null
-			if test -f conftest.a ; then
-				cf_cv_ar_flags=$cf_ar_flags
+  echo "$as_me:5154: \$? = $ac_status" >&5
+  (exit "$ac_status"); } ; then
+				echo "$AR $ARFLAGS $cf_ar_flags conftest.a conftest.$ac_cv_objext" >&5
+				$AR $ARFLAGS "$cf_ar_flags" conftest.a "conftest.$ac_cv_objext" 2>&5 1>/dev/null
+				if test -f conftest.a ; then
+					cf_cv_ar_flags="$cf_ar_flags"
+					break
+				fi
+			else
+				test -n "$verbose" && echo "	cannot compile test-program" 1>&6
+
+echo "${as_me:-configure}:5165: testing cannot compile test-program ..." 1>&5
+
 				break
 			fi
-		else
-			test -n "$verbose" && echo "	cannot compile test-program" 1>&6
-
-echo "${as_me:-configure}:4438: testing cannot compile test-program ..." 1>&5
-
-			break
-		fi
-	done
-	rm -f conftest.a conftest.$ac_ext conftest.$ac_cv_objext
+		done
+		rm -f conftest.a "conftest.$ac_ext" "conftest.$ac_cv_objext"
+		;;
+	esac
 
 fi
-echo "$as_me:4446: result: $cf_cv_ar_flags" >&5
+echo "$as_me:5175: result: $cf_cv_ar_flags" >&5
 echo "${ECHO_T}$cf_cv_ar_flags" >&6
 
 if test -n "$ARFLAGS" ; then
@@ -4454,8 +5183,8 @@
 	ARFLAGS=$cf_cv_ar_flags
 fi
 
-echo "$as_me:4457: checking if you have specified an install-prefix" >&5
-echo $ECHO_N "checking if you have specified an install-prefix... $ECHO_C" >&6
+echo "$as_me:5186: checking for an installation directory prefix" >&5
+echo $ECHO_N "checking for an installation directory prefix... $ECHO_C" >&6
 
 # Check whether --with-install-prefix or --without-install-prefix was given.
 if test "${with_install_prefix+set}" = set; then
@@ -4467,8 +5196,8 @@
 		;;
 	esac
 fi;
-echo "$as_me:4470: result: $DESTDIR" >&5
-echo "${ECHO_T}$DESTDIR" >&6
+echo "$as_me:5199: result: ${DESTDIR:-(none)}" >&5
+echo "${ECHO_T}${DESTDIR:-(none)}" >&6
 
 ###############################################################################
 
@@ -4476,6 +5205,13 @@
 # options.  The configure script is oriented toward identifying the host
 # compiler, etc., but we need a build compiler to generate parts of the source.
 
+case "$cf_cv_system_name" in
+(*-msvc*)
+	LDFLAGS="$LDFLAGS user32.lib"
+	export LDFLAGS
+	;;
+esac
+
 if test "$cross_compiling" = yes ; then
 
 	# defaults that we might want to override
@@ -4491,11 +5227,11 @@
   withval="$with_build_cc"
   BUILD_CC="$withval"
 else
-  for ac_prog in gcc cc cl
+  for ac_prog in gcc clang c99 c89 cc cl
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:4498: checking for $ac_word" >&5
+echo "$as_me:5234: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_BUILD_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4510,7 +5246,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_BUILD_CC="$ac_prog"
-echo "$as_me:4513: found $ac_dir/$ac_word" >&5
+echo "$as_me:5249: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4518,23 +5254,24 @@
 fi
 BUILD_CC=$ac_cv_prog_BUILD_CC
 if test -n "$BUILD_CC"; then
-  echo "$as_me:4521: result: $BUILD_CC" >&5
+  echo "$as_me:5257: result: $BUILD_CC" >&5
 echo "${ECHO_T}$BUILD_CC" >&6
 else
-  echo "$as_me:4524: result: no" >&5
+  echo "$as_me:5260: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
   test -n "$BUILD_CC" && break
 done
+test -n "$BUILD_CC" || BUILD_CC="none"
 
 fi;
-	echo "$as_me:4532: checking for native build C compiler" >&5
+	echo "$as_me:5269: checking for native build C compiler" >&5
 echo $ECHO_N "checking for native build C compiler... $ECHO_C" >&6
-	echo "$as_me:4534: result: $BUILD_CC" >&5
+	echo "$as_me:5271: result: $BUILD_CC" >&5
 echo "${ECHO_T}$BUILD_CC" >&6
 
-	echo "$as_me:4537: checking for native build C preprocessor" >&5
+	echo "$as_me:5274: checking for native build C preprocessor" >&5
 echo $ECHO_N "checking for native build C preprocessor... $ECHO_C" >&6
 
 # Check whether --with-build-cpp or --without-build-cpp was given.
@@ -4544,10 +5281,10 @@
 else
   BUILD_CPP='${BUILD_CC} -E'
 fi;
-	echo "$as_me:4547: result: $BUILD_CPP" >&5
+	echo "$as_me:5284: result: $BUILD_CPP" >&5
 echo "${ECHO_T}$BUILD_CPP" >&6
 
-	echo "$as_me:4550: checking for native build C flags" >&5
+	echo "$as_me:5287: checking for native build C flags" >&5
 echo $ECHO_N "checking for native build C flags... $ECHO_C" >&6
 
 # Check whether --with-build-cflags or --without-build-cflags was given.
@@ -4555,10 +5292,10 @@
   withval="$with_build_cflags"
   BUILD_CFLAGS="$withval"
 fi;
-	echo "$as_me:4558: result: $BUILD_CFLAGS" >&5
+	echo "$as_me:5295: result: $BUILD_CFLAGS" >&5
 echo "${ECHO_T}$BUILD_CFLAGS" >&6
 
-	echo "$as_me:4561: checking for native build C preprocessor-flags" >&5
+	echo "$as_me:5298: checking for native build C preprocessor-flags" >&5
 echo $ECHO_N "checking for native build C preprocessor-flags... $ECHO_C" >&6
 
 # Check whether --with-build-cppflags or --without-build-cppflags was given.
@@ -4566,10 +5303,10 @@
   withval="$with_build_cppflags"
   BUILD_CPPFLAGS="$withval"
 fi;
-	echo "$as_me:4569: result: $BUILD_CPPFLAGS" >&5
+	echo "$as_me:5306: result: $BUILD_CPPFLAGS" >&5
 echo "${ECHO_T}$BUILD_CPPFLAGS" >&6
 
-	echo "$as_me:4572: checking for native build linker-flags" >&5
+	echo "$as_me:5309: checking for native build linker-flags" >&5
 echo $ECHO_N "checking for native build linker-flags... $ECHO_C" >&6
 
 # Check whether --with-build-ldflags or --without-build-ldflags was given.
@@ -4577,10 +5314,10 @@
   withval="$with_build_ldflags"
   BUILD_LDFLAGS="$withval"
 fi;
-	echo "$as_me:4580: result: $BUILD_LDFLAGS" >&5
+	echo "$as_me:5317: result: $BUILD_LDFLAGS" >&5
 echo "${ECHO_T}$BUILD_LDFLAGS" >&6
 
-	echo "$as_me:4583: checking for native build linker-libraries" >&5
+	echo "$as_me:5320: checking for native build linker-libraries" >&5
 echo $ECHO_N "checking for native build linker-libraries... $ECHO_C" >&6
 
 # Check whether --with-build-libs or --without-build-libs was given.
@@ -4588,7 +5325,7 @@
   withval="$with_build_libs"
   BUILD_LIBS="$withval"
 fi;
-	echo "$as_me:4591: result: $BUILD_LIBS" >&5
+	echo "$as_me:5328: result: $BUILD_LIBS" >&5
 echo "${ECHO_T}$BUILD_LIBS" >&6
 
 	# this assumes we're on Unix.
@@ -4597,8 +5334,59 @@
 
 	: ${BUILD_CC:='${CC}'}
 
-	if ( test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '${CC}' ) ; then
-		{ { echo "$as_me:4601: error: Cross-build requires two compilers.
+	echo "$as_me:5337: checking if the build-compiler \"$BUILD_CC\" works" >&5
+echo $ECHO_N "checking if the build-compiler \"$BUILD_CC\" works... $ECHO_C" >&6
+
+	cf_save_crossed=$cross_compiling
+	cf_save_ac_link=$ac_link
+	cross_compiling=no
+	cf_build_cppflags=$BUILD_CPPFLAGS
+	test "$cf_build_cppflags" = "#" && cf_build_cppflags=
+	ac_link='$BUILD_CC -o "conftest$ac_exeext" $BUILD_CFLAGS $cf_build_cppflags $BUILD_LDFLAGS "conftest.$ac_ext" $BUILD_LIBS >&5'
+
+	if test "$cross_compiling" = yes; then
+  cf_ok_build_cc=unknown
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 5351 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+		int main(int argc, char *argv[])
+		{
+			${cf_cv_main_return:-return}(argc < 0 || argv == 0 || argv[0] == 0);
+		}
+
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:5361: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:5364: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:5366: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:5369: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_ok_build_cc=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_ok_build_cc=no
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+
+	cross_compiling=$cf_save_crossed
+	ac_link=$cf_save_ac_link
+
+	echo "$as_me:5384: result: $cf_ok_build_cc" >&5
+echo "${ECHO_T}$cf_ok_build_cc" >&6
+
+	if test "$cf_ok_build_cc" != yes
+	then
+		{ { echo "$as_me:5389: error: Cross-build requires two compilers.
 Use --with-build-cc to specify the native compiler." >&5
 echo "$as_me: error: Cross-build requires two compilers.
 Use --with-build-cc to specify the native compiler." >&2;}
@@ -4623,7 +5411,7 @@
 ### shared, for example.
 cf_list_models=""
 
-echo "$as_me:4626: checking if libtool -version-number should be used" >&5
+echo "$as_me:5414: checking if libtool -version-number should be used" >&5
 echo $ECHO_N "checking if libtool -version-number should be used... $ECHO_C" >&6
 
 # Check whether --enable-libtool-version or --disable-libtool-version was given.
@@ -4640,7 +5428,7 @@
 	cf_libtool_version=yes
 
 fi;
-echo "$as_me:4643: result: $cf_libtool_version" >&5
+echo "$as_me:5431: result: $cf_libtool_version" >&5
 echo "${ECHO_T}$cf_libtool_version" >&6
 
 if test "$cf_libtool_version" = yes ; then
@@ -4649,25 +5437,25 @@
 	LIBTOOL_VERSION="-version-info"
 	case "x$VERSION" in
 	(x)
-		{ echo "$as_me:4652: WARNING: VERSION was not set" >&5
+		{ echo "$as_me:5440: WARNING: VERSION was not set" >&5
 echo "$as_me: WARNING: VERSION was not set" >&2;}
 		;;
 	(x*.*.*)
 		ABI_VERSION="$VERSION"
 		test -n "$verbose" && echo "	ABI_VERSION: $ABI_VERSION" 1>&6
 
-echo "${as_me:-configure}:4659: testing ABI_VERSION: $ABI_VERSION ..." 1>&5
+echo "${as_me:-configure}:5447: testing ABI_VERSION: $ABI_VERSION ..." 1>&5
 
 		;;
 	(x*:*:*)
 		ABI_VERSION=`echo "$VERSION" | sed -e 's/:/./g'`
 		test -n "$verbose" && echo "	ABI_VERSION: $ABI_VERSION" 1>&6
 
-echo "${as_me:-configure}:4666: testing ABI_VERSION: $ABI_VERSION ..." 1>&5
+echo "${as_me:-configure}:5454: testing ABI_VERSION: $ABI_VERSION ..." 1>&5
 
 		;;
 	(*)
-		{ echo "$as_me:4670: WARNING: unexpected VERSION value: $VERSION" >&5
+		{ echo "$as_me:5458: WARNING: unexpected VERSION value: $VERSION" >&5
 echo "$as_me: WARNING: unexpected VERSION value: $VERSION" >&2;}
 		;;
 	esac
@@ -4689,7 +5477,7 @@
 LIB_INSTALL=
 LIB_UNINSTALL=
 
-echo "$as_me:4692: checking if you want to build libraries with libtool" >&5
+echo "$as_me:5480: checking if you want to build libraries with libtool" >&5
 echo $ECHO_N "checking if you want to build libraries with libtool... $ECHO_C" >&6
 
 # Check whether --with-libtool or --without-libtool was given.
@@ -4699,7 +5487,7 @@
 else
   with_libtool=no
 fi;
-echo "$as_me:4702: result: $with_libtool" >&5
+echo "$as_me:5490: result: $with_libtool" >&5
 echo "${ECHO_T}$with_libtool" >&6
 if test "$with_libtool" != "no"; then
 
@@ -4718,19 +5506,19 @@
 	;;
 (.[a-zA-Z]:[\\/]*) # OS/2 EMX
 	;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
 	eval with_libtool="$with_libtool"
 	case ".$with_libtool" in
 	(.NONE/*)
-		with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%`
+		with_libtool=`echo "$with_libtool" | sed -e s%NONE%$cf_path_syntax%`
 		;;
 	esac
 	;;
 (.no|.NONE/*)
-	with_libtool=`echo $with_libtool | sed -e s%NONE%$cf_path_syntax%`
+	with_libtool=`echo "$with_libtool" | sed -e s%NONE%$cf_path_syntax%`
 	;;
 (*)
-	{ { echo "$as_me:4733: error: expected a pathname, not \"$with_libtool\"" >&5
+	{ { echo "$as_me:5521: error: expected a pathname, not \"$with_libtool\"" >&5
 echo "$as_me: error: expected a pathname, not \"$with_libtool\"" >&2;}
    { (exit 1); exit 1; }; }
 	;;
@@ -4743,7 +5531,7 @@
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:4746: checking for $ac_word" >&5
+echo "$as_me:5534: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_LIBTOOL+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4758,7 +5546,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog"
-echo "$as_me:4761: found $ac_dir/$ac_word" >&5
+echo "$as_me:5549: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4766,10 +5554,10 @@
 fi
 LIBTOOL=$ac_cv_prog_LIBTOOL
 if test -n "$LIBTOOL"; then
-  echo "$as_me:4769: result: $LIBTOOL" >&5
+  echo "$as_me:5557: result: $LIBTOOL" >&5
 echo "${ECHO_T}$LIBTOOL" >&6
 else
-  echo "$as_me:4772: result: no" >&5
+  echo "$as_me:5560: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4782,7 +5570,7 @@
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:4785: checking for $ac_word" >&5
+echo "$as_me:5573: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4797,7 +5585,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_LIBTOOL="$ac_prog"
-echo "$as_me:4800: found $ac_dir/$ac_word" >&5
+echo "$as_me:5588: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4805,10 +5593,10 @@
 fi
 ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL
 if test -n "$ac_ct_LIBTOOL"; then
-  echo "$as_me:4808: result: $ac_ct_LIBTOOL" >&5
+  echo "$as_me:5596: result: $ac_ct_LIBTOOL" >&5
 echo "${ECHO_T}$ac_ct_LIBTOOL" >&6
 else
-  echo "$as_me:4811: result: no" >&5
+  echo "$as_me:5599: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4839,7 +5627,7 @@
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-echo "$as_me:4842: checking for $ac_word" >&5
+echo "$as_me:5630: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_LIBTOOL+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4854,7 +5642,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_LIBTOOL="$ac_tool_prefix$ac_prog"
-echo "$as_me:4857: found $ac_dir/$ac_word" >&5
+echo "$as_me:5645: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4862,10 +5650,10 @@
 fi
 LIBTOOL=$ac_cv_prog_LIBTOOL
 if test -n "$LIBTOOL"; then
-  echo "$as_me:4865: result: $LIBTOOL" >&5
+  echo "$as_me:5653: result: $LIBTOOL" >&5
 echo "${ECHO_T}$LIBTOOL" >&6
 else
-  echo "$as_me:4868: result: no" >&5
+  echo "$as_me:5656: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4878,7 +5666,7 @@
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:4881: checking for $ac_word" >&5
+echo "$as_me:5669: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_ac_ct_LIBTOOL+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -4893,7 +5681,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_ac_ct_LIBTOOL="$ac_prog"
-echo "$as_me:4896: found $ac_dir/$ac_word" >&5
+echo "$as_me:5684: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -4901,10 +5689,10 @@
 fi
 ac_ct_LIBTOOL=$ac_cv_prog_ac_ct_LIBTOOL
 if test -n "$ac_ct_LIBTOOL"; then
-  echo "$as_me:4904: result: $ac_ct_LIBTOOL" >&5
+  echo "$as_me:5692: result: $ac_ct_LIBTOOL" >&5
 echo "${ECHO_T}$ac_ct_LIBTOOL" >&6
 else
-  echo "$as_me:4907: result: no" >&5
+  echo "$as_me:5695: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -4926,11 +5714,11 @@
 		fi
 	fi
 	if test -z "$LIBTOOL" ; then
-		{ { echo "$as_me:4929: error: Cannot find libtool" >&5
+		{ { echo "$as_me:5717: error: Cannot find libtool" >&5
 echo "$as_me: error: Cannot find libtool" >&2;}
    { (exit 1); exit 1; }; }
 	fi
-	LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${DESTDIR}${libdir} ${LIBTOOL_VERSION} `cut -f1 ${top_srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o'
+	LIB_CREATE='${LIBTOOL} --mode=link ${CC} -rpath ${libdir} ${LIBTOOL_VERSION} `cut -f1 ${top_srcdir}/VERSION` ${LIBTOOL_OPTS} ${LT_UNDEF} $(LIBS) -o'
 	LIB_OBJECT='${OBJECTS:.o=.lo}'
 	LIB_SUFFIX=.la
 	LIB_CLEAN='${LIBTOOL} --mode=clean'
@@ -4942,7 +5730,7 @@
 
 if test -n "$LIBTOOL" && test "$LIBTOOL" != none
 then
-	echo "$as_me:4945: checking version of $LIBTOOL" >&5
+	echo "$as_me:5733: checking version of $LIBTOOL" >&5
 echo $ECHO_N "checking version of $LIBTOOL... $ECHO_C" >&6
 
 if test -n "$LIBTOOL" && test "$LIBTOOL" != none
@@ -4953,15 +5741,27 @@
 fi
 test -z "$cf_cv_libtool_version" && unset cf_cv_libtool_version
 
-	echo "$as_me:4956: result: $cf_cv_libtool_version" >&5
+	echo "$as_me:5744: result: $cf_cv_libtool_version" >&5
 echo "${ECHO_T}$cf_cv_libtool_version" >&6
-	if test -z "$cf_cv_libtool_version" ; then
-		{ { echo "$as_me:4959: error: This is not GNU libtool" >&5
+	if test -n "$cf_cv_libtool_version"
+	then
+		cf_check_libtool_version=`$LIBTOOL --version 2>&1 | sed -e '/^$/d' -e 's,[()],...,g' -e 's,[ ],-,g' -e '2,$d'`
+		case "x$cf_check_libtool_version" in
+		(*...GNU-libtool...*)
+			;;
+		(*)
+			{ { echo "$as_me:5753: error: This is not GNU libtool" >&5
 echo "$as_me: error: This is not GNU libtool" >&2;}
    { (exit 1); exit 1; }; }
+			;;
+		esac
+	else
+		{ { echo "$as_me:5759: error: No version found for $LIBTOOL" >&5
+echo "$as_me: error: No version found for $LIBTOOL" >&2;}
+   { (exit 1); exit 1; }; }
 	fi
 else
-	{ { echo "$as_me:4964: error: GNU libtool has not been found" >&5
+	{ { echo "$as_me:5764: error: GNU libtool has not been found" >&5
 echo "$as_me: error: GNU libtool has not been found" >&2;}
    { (exit 1); exit 1; }; }
 fi
@@ -4969,13 +5769,13 @@
 	# special hack to add -no-undefined (which libtool should do for itself)
 	LT_UNDEF=
 	case "$cf_cv_system_name" in
-	(cygwin*|msys*|mingw32*|uwin*|aix[4-7])
+	(cygwin*|msys*|mingw32*|os2*|uwin*|aix[4-7])
 		LT_UNDEF=-no-undefined
 		;;
 	esac
 
 	# special hack to add --tag option for C++ compiler
-	case $cf_cv_libtool_version in
+	case "$cf_cv_libtool_version" in
 	(1.[5-9]*|[2-9].[0-9.a-z]*)
 		LIBTOOL_CXX="$LIBTOOL --tag=CXX"
 		LIBTOOL="$LIBTOOL --tag=CC"
@@ -4997,7 +5797,7 @@
 
 else
 
-echo "$as_me:5000: checking if you want to build shared libraries" >&5
+echo "$as_me:5800: checking if you want to build shared libraries" >&5
 echo $ECHO_N "checking if you want to build shared libraries... $ECHO_C" >&6
 
 # Check whether --with-shared or --without-shared was given.
@@ -5007,11 +5807,11 @@
 else
   with_shared=no
 fi;
-echo "$as_me:5010: result: $with_shared" >&5
+echo "$as_me:5810: result: $with_shared" >&5
 echo "${ECHO_T}$with_shared" >&6
 test "x$with_shared" = "xyes" && cf_list_models="$cf_list_models shared"
 
-echo "$as_me:5014: checking if you want to build static libraries" >&5
+echo "$as_me:5814: checking if you want to build static libraries" >&5
 echo $ECHO_N "checking if you want to build static libraries... $ECHO_C" >&6
 
 # Check whether --with-normal or --without-normal was given.
@@ -5021,11 +5821,11 @@
 else
   with_normal=yes
 fi;
-echo "$as_me:5024: result: $with_normal" >&5
+echo "$as_me:5824: result: $with_normal" >&5
 echo "${ECHO_T}$with_normal" >&6
 test "x$with_normal" = "xyes" && cf_list_models="$cf_list_models normal"
 
-echo "$as_me:5028: checking if you want to build debug libraries" >&5
+echo "$as_me:5828: checking if you want to build debug libraries" >&5
 echo $ECHO_N "checking if you want to build debug libraries... $ECHO_C" >&6
 
 # Check whether --with-debug or --without-debug was given.
@@ -5035,11 +5835,11 @@
 else
   with_debug=yes
 fi;
-echo "$as_me:5038: result: $with_debug" >&5
+echo "$as_me:5838: result: $with_debug" >&5
 echo "${ECHO_T}$with_debug" >&6
 test "x$with_debug" = "xyes" && cf_list_models="$cf_list_models debug"
 
-echo "$as_me:5042: checking if you want to build profiling libraries" >&5
+echo "$as_me:5842: checking if you want to build profiling libraries" >&5
 echo $ECHO_N "checking if you want to build profiling libraries... $ECHO_C" >&6
 
 # Check whether --with-profile or --without-profile was given.
@@ -5049,7 +5849,7 @@
 else
   with_profile=no
 fi;
-echo "$as_me:5052: result: $with_profile" >&5
+echo "$as_me:5852: result: $with_profile" >&5
 echo "${ECHO_T}$with_profile" >&6
 test "x$with_profile" = "xyes" && cf_list_models="$cf_list_models profile"
 
@@ -5057,7 +5857,7 @@
 
 if test "X$cf_with_cxx_binding" != Xno; then
 if test "x$with_shared" = "xyes"; then
-echo "$as_me:5060: checking if you want to build C++ shared libraries" >&5
+echo "$as_me:5860: checking if you want to build C++ shared libraries" >&5
 echo $ECHO_N "checking if you want to build C++ shared libraries... $ECHO_C" >&6
 
 # Check whether --with-cxx-shared or --without-cxx-shared was given.
@@ -5067,26 +5867,26 @@
 else
   with_shared_cxx=no
 fi;
-echo "$as_me:5070: result: $with_shared_cxx" >&5
+echo "$as_me:5870: result: $with_shared_cxx" >&5
 echo "${ECHO_T}$with_shared_cxx" >&6
 fi
 fi
 
 ###############################################################################
 
-echo "$as_me:5077: checking for specified models" >&5
+echo "$as_me:5877: checking for specified models" >&5
 echo $ECHO_N "checking for specified models... $ECHO_C" >&6
 test -z "$cf_list_models" && cf_list_models=normal
 test "$with_libtool" != "no" && cf_list_models=libtool
-echo "$as_me:5081: result: $cf_list_models" >&5
+echo "$as_me:5881: result: $cf_list_models" >&5
 echo "${ECHO_T}$cf_list_models" >&6
 
 ### Use the first model as the default, and save its suffix for use in building
 ### up test-applications.
-echo "$as_me:5086: checking for default model" >&5
+echo "$as_me:5886: checking for default model" >&5
 echo $ECHO_N "checking for default model... $ECHO_C" >&6
 DFT_LWR_MODEL=`echo "$cf_list_models" | $AWK '{print $1}'`
-echo "$as_me:5089: result: $DFT_LWR_MODEL" >&5
+echo "$as_me:5889: result: $DFT_LWR_MODEL" >&5
 echo "${ECHO_T}$DFT_LWR_MODEL" >&6
 
 DFT_UPR_MODEL=`echo "$DFT_LWR_MODEL" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
@@ -5100,7 +5900,7 @@
 LIB_DIR=../lib
 LIB_2ND=../../lib
 
-echo "$as_me:5103: checking if you want to have a library-prefix" >&5
+echo "$as_me:5903: checking if you want to have a library-prefix" >&5
 echo $ECHO_N "checking if you want to have a library-prefix... $ECHO_C" >&6
 
 # Check whether --with-lib-prefix or --without-lib-prefix was given.
@@ -5110,14 +5910,21 @@
 else
   with_lib_prefix=auto
 fi;
-echo "$as_me:5113: result: $with_lib_prefix" >&5
+echo "$as_me:5913: result: $with_lib_prefix" >&5
 echo "${ECHO_T}$with_lib_prefix" >&6
 
-if test $with_lib_prefix = auto
+if test "$with_lib_prefix" = auto
 then
 
-	case $cf_cv_system_name in
+	case "$cf_cv_system_name" in
 	(OS/2*|os2*)
+		if test "$DFT_LWR_MODEL" = libtool; then
+			LIB_PREFIX='lib'
+		else
+			LIB_PREFIX=''
+		fi
+		;;
+	(*-msvc*)
 		LIB_PREFIX=''
 		;;
 	(*)	LIB_PREFIX='lib'
@@ -5125,7 +5932,7 @@
 	esac
 cf_prefix=$LIB_PREFIX
 
-elif test $with_lib_prefix = no
+elif test "$with_lib_prefix" = no
 then
 	LIB_PREFIX=
 else
@@ -5134,79 +5941,39 @@
 
 LIB_SUFFIX=
 
-	echo "$as_me:5137: checking for PATH separator" >&5
+	echo "$as_me:5944: checking for PATH separator" >&5
 echo $ECHO_N "checking for PATH separator... $ECHO_C" >&6
-	case $cf_cv_system_name in
+	case "$cf_cv_system_name" in
 	(os2*)	PATH_SEPARATOR=';'  ;;
 	(*)	${PATH_SEPARATOR:=':'}  ;;
 	esac
 
-	echo "$as_me:5144: result: $PATH_SEPARATOR" >&5
+	echo "$as_me:5951: result: $PATH_SEPARATOR" >&5
 echo "${ECHO_T}$PATH_SEPARATOR" >&6
 
-###############################################################################
-
-echo "$as_me:5149: checking if you want to build a separate terminfo library" >&5
-echo $ECHO_N "checking if you want to build a separate terminfo library... $ECHO_C" >&6
-
-# Check whether --with-termlib or --without-termlib was given.
-if test "${with_termlib+set}" = set; then
-  withval="$with_termlib"
-  with_termlib=$withval
-else
-  with_termlib=no
-fi;
-echo "$as_me:5159: result: $with_termlib" >&5
-echo "${ECHO_T}$with_termlib" >&6
-
-echo "$as_me:5162: checking if you want to build a separate tic library" >&5
-echo $ECHO_N "checking if you want to build a separate tic library... $ECHO_C" >&6
-
-# Check whether --with-ticlib or --without-ticlib was given.
-if test "${with_ticlib+set}" = set; then
-  withval="$with_ticlib"
-  with_ticlib=$withval
-else
-  with_ticlib=no
-fi;
-echo "$as_me:5172: result: $with_ticlib" >&5
-echo "${ECHO_T}$with_ticlib" >&6
-
-### Checks for special libraries, must be done up-front.
-SHLIB_LIST=""
-
-echo "$as_me:5178: checking if you want to link with the GPM mouse library" >&5
-echo $ECHO_N "checking if you want to link with the GPM mouse library... $ECHO_C" >&6
-
-# Check whether --with-gpm or --without-gpm was given.
-if test "${with_gpm+set}" = set; then
-  withval="$with_gpm"
-  with_gpm=$withval
-else
-  with_gpm=maybe
-fi;
-echo "$as_me:5188: result: $with_gpm" >&5
-echo "${ECHO_T}$with_gpm" >&6
-
-if test "$with_gpm" != no ; then
-	echo "$as_me:5192: checking for gpm.h" >&5
-echo $ECHO_N "checking for gpm.h... $ECHO_C" >&6
-if test "${ac_cv_header_gpm_h+set}" = set; then
+# headers needed for checks...
+echo "$as_me:5955: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 5198 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 5961 "configure"
 #include "confdefs.h"
-#include <gpm.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
 _ACEOF
-if { (eval echo "$as_me:5202: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:5969: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:5208: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:5975: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -5216,416 +5983,268 @@
   ac_cpp_err=yes
 fi
 if test -z "$ac_cpp_err"; then
-  ac_cv_header_gpm_h=yes
+  ac_cv_header_stdc=yes
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_cv_header_gpm_h=no
+  cat "conftest.$ac_ext" >&5
+  ac_cv_header_stdc=no
 fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:5227: result: $ac_cv_header_gpm_h" >&5
-echo "${ECHO_T}$ac_cv_header_gpm_h" >&6
-if test $ac_cv_header_gpm_h = yes; then
+rm -f conftest.err "conftest.$ac_ext"
 
-cat >>confdefs.h <<\EOF
-#define HAVE_GPM_H 1
-EOF
-
-		if test "$with_gpm" != yes && test "$with_gpm" != maybe ; then
-			test -n "$verbose" && echo "	assuming we really have GPM library" 1>&6
-
-echo "${as_me:-configure}:5238: testing assuming we really have GPM library ..." 1>&5
-
-cat >>confdefs.h <<\EOF
-#define HAVE_LIBGPM 1
-EOF
-
-		else
-			echo "$as_me:5245: checking for Gpm_Open in -lgpm" >&5
-echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6
-if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgpm  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 5253 "configure"
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 5997 "configure"
 #include "confdefs.h"
+#include <string.h>
 
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char Gpm_Open ();
-int
-main ()
-{
-Gpm_Open ();
-  ;
-  return 0;
-}
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5272: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:5275: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:5278: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:5281: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_gpm_Gpm_Open=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_gpm_Gpm_Open=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:5292: result: $ac_cv_lib_gpm_Gpm_Open" >&5
-echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6
-if test $ac_cv_lib_gpm_Gpm_Open = yes; then
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
   :
 else
-
-				{ { echo "$as_me:5298: error: Cannot link with GPM library" >&5
-echo "$as_me: error: Cannot link with GPM library" >&2;}
-   { (exit 1); exit 1; }; }
-		fi
-		with_gpm=yes
-
+  ac_cv_header_stdc=no
 fi
-
-else
-
-		test "$with_gpm" != maybe && { echo "$as_me:5308: WARNING: Cannot find GPM header" >&5
-echo "$as_me: WARNING: Cannot find GPM header" >&2;}
-		with_gpm=no
-
-fi
-
-fi
-
-if test "$with_gpm" != no ; then
-	echo "$as_me:5317: checking if you want to load GPM dynamically" >&5
-echo $ECHO_N "checking if you want to load GPM dynamically... $ECHO_C" >&6
-
-# Check whether --with-dlsym or --without-dlsym was given.
-if test "${with_dlsym+set}" = set; then
-  withval="$with_dlsym"
-  with_dlsym=$withval
-else
-  with_dlsym=yes
-fi;
-	echo "$as_me:5327: result: $with_dlsym" >&5
-echo "${ECHO_T}$with_dlsym" >&6
-	if test "x$with_dlsym" = xyes ; then
-
-cf_have_dlsym=no
-echo "$as_me:5332: checking for dlsym" >&5
-echo $ECHO_N "checking for dlsym... $ECHO_C" >&6
-if test "${ac_cv_func_dlsym+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 5338 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlsym (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlsym ();
-char (*f) ();
-
-int
-main ()
-{
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_dlsym) || defined (__stub___dlsym)
-choke me
-#else
-f = dlsym; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5369: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:5372: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:5375: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:5378: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_dlsym=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_dlsym=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:5388: result: $ac_cv_func_dlsym" >&5
-echo "${ECHO_T}$ac_cv_func_dlsym" >&6
-if test $ac_cv_func_dlsym = yes; then
-  cf_have_dlsym=yes
-else
-
-cf_have_libdl=no
-echo "$as_me:5395: checking for dlsym in -ldl" >&5
-echo $ECHO_N "checking for dlsym in -ldl... $ECHO_C" >&6
-if test "${ac_cv_lib_dl_dlsym+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 5403 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char dlsym ();
-int
-main ()
-{
-dlsym ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5422: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:5425: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:5428: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:5431: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dl_dlsym=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_dl_dlsym=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:5442: result: $ac_cv_lib_dl_dlsym" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlsym" >&6
-if test $ac_cv_lib_dl_dlsym = yes; then
-
-	cf_have_dlsym=yes
-	cf_have_libdl=yes
-fi
-
-fi
-
-if test "$cf_have_dlsym" = yes ; then
-	test "$cf_have_libdl" = yes &&
-cf_add_libs="-ldl"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
-			cf_add_1lib=
-			break
-		fi
-	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
-done
-LIBS="$cf_add_libs"
-
-	echo "$as_me:5470: checking whether able to link to dl*() functions" >&5
-echo $ECHO_N "checking whether able to link to dl*() functions... $ECHO_C" >&6
-	cat >conftest.$ac_ext <<_ACEOF
-#line 5473 "configure"
-#include "confdefs.h"
-#include <dlfcn.h>
-int
-main ()
-{
-
-		void *obj;
-		if ((obj = dlopen("filename", 0)) != 0) {
-			if (dlsym(obj, "symbolname") == 0) {
-			dlclose(obj);
-			}
-		}
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5491: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:5494: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:5497: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:5500: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
-cat >>confdefs.h <<\EOF
-#define HAVE_LIBDL 1
-EOF
-
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-
-		{ { echo "$as_me:5511: error: Cannot link test program for libdl" >&5
-echo "$as_me: error: Cannot link test program for libdl" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-	echo "$as_me:5516: result: ok" >&5
-echo "${ECHO_T}ok" >&6
-else
-	{ { echo "$as_me:5519: error: Cannot find dlsym function" >&5
-echo "$as_me: error: Cannot find dlsym function" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-		if test "x$with_gpm" != xyes ; then
-			test -n "$verbose" && echo "	assuming soname for gpm is $with_gpm" 1>&6
-
-echo "${as_me:-configure}:5527: testing assuming soname for gpm is $with_gpm ..." 1>&5
-
-			cf_cv_gpm_soname="$with_gpm"
-		else
-
-echo "$as_me:5532: checking for soname of gpm library" >&5
-echo $ECHO_N "checking for soname of gpm library... $ECHO_C" >&6
-if test "${cf_cv_gpm_soname+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-
-cf_cv_gpm_soname=unknown
-if test "$cross_compiling" != yes ; then
-cat >conftest.$ac_ext <<CF_EOF
-#include <gpm.h>
-int main()
-{
-if (Gpm_Open(0,0)) Gpm_Close();
-	${cf_cv_main_return:-return}(0);
-}
-CF_EOF
-cf_save_LIBS="$LIBS"
-
-cf_add_libs="-lgpm"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
-			cf_add_1lib=
-			break
-		fi
-	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
-done
-LIBS="$cf_add_libs"
-
-	if { (eval echo "$as_me:5566: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:5569: \$? = $ac_status" >&5
-  (exit $ac_status); } ; then
-		if { (eval echo "$as_me:5571: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:5574: \$? = $ac_status" >&5
-  (exit $ac_status); } ; then
-			cf_cv_gpm_soname=`ldd conftest$ac_exeext 2>/dev/null | sed -e 's,^.*/,,' -e 's, .*$,,' | fgrep libgpm.`
-			test -z "$cf_cv_gpm_soname" && cf_cv_gpm_soname=unknown
-		fi
-	fi
 rm -rf conftest*
-LIBS="$cf_save_LIBS"
-fi
 
 fi
-echo "$as_me:5585: result: $cf_cv_gpm_soname" >&5
-echo "${ECHO_T}$cf_cv_gpm_soname" >&6
 
-		fi
-		test "$cf_cv_gpm_soname" != "unknown" &&
-cat >>confdefs.h <<EOF
-#define LIBGPM_SONAME "$cf_cv_gpm_soname"
-EOF
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 6015 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
 
-		SHLIB_LIST="-ldl $SHLIB_LIST"
-	else
-		SHLIB_LIST="-lgpm $SHLIB_LIST"
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -rf conftest*
 
-cf_add_libs="-lgpm"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $TEST_LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
-			cf_add_1lib=
-			break
-		fi
-	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
-done
-TEST_LIBS="$cf_add_libs"
+fi
 
-	fi
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 6036 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
+                     || ('j' <= (c) && (c) <= 'r') \
+                     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main (void)
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+        || toupper (i) != TOUPPER (i))
+      $ac_main_return(2);
+  $ac_main_return (0);
+}
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:6062: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:6065: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:6067: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:6070: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_header_stdc=no
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+fi
+fi
+echo "$as_me:6083: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
 
 cat >>confdefs.h <<\EOF
-#define HAVE_LIBGPM 1
+#define STDC_HEADERS 1
 EOF
 
-echo "$as_me:5620: checking for Gpm_Wgetch in -lgpm" >&5
-echo $ECHO_N "checking for Gpm_Wgetch in -lgpm... $ECHO_C" >&6
-if test "${ac_cv_lib_gpm_Gpm_Wgetch+set}" = set; then
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:6099: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 6105 "configure"
+#include "confdefs.h"
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:6111: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:6114: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:6117: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:6120: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_Header=no"
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:6130: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+echo "$as_me:6140: checking whether exit is declared" >&5
+echo $ECHO_N "checking whether exit is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_exit+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 6146 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main (void)
+{
+#ifndef exit
+  (void) exit;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:6161: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:6164: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:6167: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:6170: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_have_decl_exit=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_have_decl_exit=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:6180: result: $ac_cv_have_decl_exit" >&5
+echo "${ECHO_T}$ac_cv_have_decl_exit" >&6
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+  as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+echo "$as_me:6186: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 6192 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <$ac_hdr>
+
+int
+main (void)
+{
+if ((DIR *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:6207: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:6210: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:6213: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:6216: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_Header=no"
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:6226: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+EOF
+
+ac_header_dirent=$ac_hdr; break
+fi
+
+done
+# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
+if test $ac_header_dirent = dirent.h; then
+  echo "$as_me:6239: checking for opendir in -ldir" >&5
+echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6
+if test "${ac_cv_lib_dir_opendir+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgpm  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 5628 "configure"
+LIBS="-ldir  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 6247 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -5634,161 +6253,126 @@
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char Gpm_Wgetch ();
+char opendir (void);
 int
-main ()
+main (void)
 {
-Gpm_Wgetch ();
+opendir ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5647: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:6266: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:5650: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:5653: \"$ac_try\"") >&5
+  echo "$as_me:6269: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:6272: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:5656: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_gpm_Gpm_Wgetch=yes
+  echo "$as_me:6275: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_dir_opendir=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_gpm_Gpm_Wgetch=no
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_dir_opendir=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:5667: result: $ac_cv_lib_gpm_Gpm_Wgetch" >&5
-echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Wgetch" >&6
-if test $ac_cv_lib_gpm_Gpm_Wgetch = yes; then
+echo "$as_me:6286: result: $ac_cv_lib_dir_opendir" >&5
+echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6
+if test "$ac_cv_lib_dir_opendir" = yes; then
+  LIBS="$LIBS -ldir"
+fi
 
-echo "$as_me:5671: checking if GPM is weakly bound to curses library" >&5
-echo $ECHO_N "checking if GPM is weakly bound to curses library... $ECHO_C" >&6
-if test "${cf_cv_check_gpm_wgetch+set}" = set; then
+else
+  echo "$as_me:6293: checking for opendir in -lx" >&5
+echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6
+if test "${ac_cv_lib_x_opendir+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-
-cf_cv_check_gpm_wgetch=unknown
-if test "$cross_compiling" != yes ; then
-
-cat >conftest.$ac_ext <<CF_EOF
-#include <gpm.h>
-int main()
-{
-	Gpm_Wgetch();
-	${cf_cv_main_return:-return}(0);
-}
-CF_EOF
-
-	cf_save_LIBS="$LIBS"
-	# This only works if we can look at the symbol table.  If a shared
-	# library is stripped for install, we cannot use that.  So we're forced
-	# to rely on the static library, noting that some packagers may not
-	# include it.
-	LIBS="-static -lgpm -dynamic $LIBS"
-	if { (eval echo "$as_me:5695: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:5698: \$? = $ac_status" >&5
-  (exit $ac_status); } ; then
-		if { (eval echo "$as_me:5700: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:5703: \$? = $ac_status" >&5
-  (exit $ac_status); } ; then
-			cf_cv_check_gpm_wgetch=`nm conftest$ac_exeext | egrep '\<wgetch\>' | egrep '\<[vVwW]\>'`
-			test -n "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=yes
-			test -z "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=no
-		fi
-	fi
-	rm -rf conftest*
-	LIBS="$cf_save_LIBS"
-fi
-
-fi
-echo "$as_me:5715: result: $cf_cv_check_gpm_wgetch" >&5
-echo "${ECHO_T}$cf_cv_check_gpm_wgetch" >&6
-
-if test "$cf_cv_check_gpm_wgetch" != yes ; then
-	{ echo "$as_me:5719: WARNING: GPM library is already linked with curses - read the FAQ" >&5
-echo "$as_me: WARNING: GPM library is already linked with curses - read the FAQ" >&2;}
-fi
-
-fi
-
-fi
-
-# not everyone has "test -c"
-if test -c /dev/sysmouse 2>/dev/null ; then
-echo "$as_me:5729: checking if you want to use sysmouse" >&5
-echo $ECHO_N "checking if you want to use sysmouse... $ECHO_C" >&6
-
-# Check whether --with-sysmouse or --without-sysmouse was given.
-if test "${with_sysmouse+set}" = set; then
-  withval="$with_sysmouse"
-  cf_with_sysmouse=$withval
-else
-  cf_with_sysmouse=maybe
-fi;
-	if test "$cf_with_sysmouse" != no ; then
-	cat >conftest.$ac_ext <<_ACEOF
-#line 5741 "configure"
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lx  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 6301 "configure"
 #include "confdefs.h"
 
-#include <osreldate.h>
-#if (__FreeBSD_version >= 400017)
-#include <sys/consio.h>
-#include <sys/fbio.h>
-#else
-#include <machine/console.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
 #endif
-
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char opendir (void);
 int
-main ()
+main (void)
 {
-
-	struct mouse_info the_mouse;
-	ioctl(0, CONS_MOUSECTL, &the_mouse);
-
+opendir ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:5764: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:6320: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:5767: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:5770: \"$ac_try\"") >&5
+  echo "$as_me:6323: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:6326: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:5773: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  cf_with_sysmouse=yes
+  echo "$as_me:6329: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_x_opendir=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cf_with_sysmouse=no
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_x_opendir=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-	fi
-echo "$as_me:5783: result: $cf_with_sysmouse" >&5
-echo "${ECHO_T}$cf_with_sysmouse" >&6
-test "$cf_with_sysmouse" = yes &&
-cat >>confdefs.h <<\EOF
-#define USE_SYSMOUSE 1
-EOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:6340: result: $ac_cv_lib_x_opendir" >&5
+echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6
+if test "$ac_cv_lib_x_opendir" = yes; then
+  LIBS="$LIBS -lx"
+fi
 
 fi
 
+###############################################################################
+
+echo "$as_me:6350: checking if you want to build a separate terminfo library" >&5
+echo $ECHO_N "checking if you want to build a separate terminfo library... $ECHO_C" >&6
+
+# Check whether --with-termlib or --without-termlib was given.
+if test "${with_termlib+set}" = set; then
+  withval="$with_termlib"
+  with_termlib=$withval
+else
+  with_termlib=no
+fi;
+echo "$as_me:6360: result: $with_termlib" >&5
+echo "${ECHO_T}$with_termlib" >&6
+
+echo "$as_me:6363: checking if you want to build a separate tic library" >&5
+echo $ECHO_N "checking if you want to build a separate tic library... $ECHO_C" >&6
+
+# Check whether --with-ticlib or --without-ticlib was given.
+if test "${with_ticlib+set}" = set; then
+  withval="$with_ticlib"
+  with_ticlib=$withval
+else
+  with_ticlib=no
+fi;
+echo "$as_me:6373: result: $with_ticlib" >&5
+echo "${ECHO_T}$with_ticlib" >&6
+
 if test X"$CC_G_OPT" = X"" ; then
 	CC_G_OPT='-g'
 	test -n "$GCC" && test "x${ac_cv_prog_cc_g}" != xyes && CC_G_OPT=''
@@ -5799,22 +6383,22 @@
 	test -n "$GXX" && test "x${ac_cv_prog_cxx_g}" != xyes && CXX_G_OPT=''
 fi
 
-echo "$as_me:5802: checking for default loader flags" >&5
+echo "$as_me:6386: checking for default loader flags" >&5
 echo $ECHO_N "checking for default loader flags... $ECHO_C" >&6
-case $DFT_LWR_MODEL in
+case "$DFT_LWR_MODEL" in
 (libtool) LD_MODEL=''   ;;
 (normal)  LD_MODEL=''   ;;
 (debug)   LD_MODEL=$CC_G_OPT ;;
 (profile) LD_MODEL='-pg';;
 (shared)  LD_MODEL=''   ;;
 esac
-echo "$as_me:5811: result: $LD_MODEL" >&5
-echo "${ECHO_T}$LD_MODEL" >&6
+echo "$as_me:6395: result: ${LD_MODEL:-(none)}" >&5
+echo "${ECHO_T}${LD_MODEL:-(none)}" >&6
 
-case $DFT_LWR_MODEL in
+case "$DFT_LWR_MODEL" in
 (shared)
 
-echo "$as_me:5817: checking if rpath option should be used" >&5
+echo "$as_me:6401: checking if rpath option should be used" >&5
 echo $ECHO_N "checking if rpath option should be used... $ECHO_C" >&6
 
 # Check whether --enable-rpath or --disable-rpath was given.
@@ -5824,10 +6408,10 @@
 else
   cf_cv_enable_rpath=no
 fi;
-echo "$as_me:5827: result: $cf_cv_enable_rpath" >&5
+echo "$as_me:6411: result: $cf_cv_enable_rpath" >&5
 echo "${ECHO_T}$cf_cv_enable_rpath" >&6
 
-echo "$as_me:5830: checking if shared libraries should be relinked during install" >&5
+echo "$as_me:6414: checking if shared libraries should be relinked during install" >&5
 echo $ECHO_N "checking if shared libraries should be relinked during install... $ECHO_C" >&6
 
 # Check whether --enable-relink or --disable-relink was given.
@@ -5837,7 +6421,7 @@
 else
   cf_cv_do_relink=yes
 fi;
-echo "$as_me:5840: result: $cf_cv_do_relink" >&5
+echo "$as_me:6424: result: $cf_cv_do_relink" >&5
 echo "${ECHO_T}$cf_cv_do_relink" >&6
 	;;
 esac
@@ -5846,99 +6430,102 @@
 rel_builddir=..
 
 LD_RPATH_OPT=
-echo "$as_me:5849: checking for an rpath option" >&5
+if test "x$cf_cv_enable_rpath" != xno
+then
+	echo "$as_me:6435: checking for an rpath option" >&5
 echo $ECHO_N "checking for an rpath option... $ECHO_C" >&6
-case $cf_cv_system_name in
-(irix*)
-	if test "$GCC" = yes; then
+	case "$cf_cv_system_name" in
+	(irix*)
+		if test "$GCC" = yes; then
+			LD_RPATH_OPT="-Wl,-rpath,"
+		else
+			LD_RPATH_OPT="-rpath "
+		fi
+		;;
+	(linux*|gnu*|k*bsd*-gnu|freebsd*)
 		LD_RPATH_OPT="-Wl,-rpath,"
-	else
+		;;
+	(openbsd[2-9].*|mirbsd*)
+		LD_RPATH_OPT="-Wl,-rpath,"
+		;;
+	(dragonfly*)
 		LD_RPATH_OPT="-rpath "
-	fi
-	;;
-(linux*|gnu*|k*bsd*-gnu)
-	LD_RPATH_OPT="-Wl,-rpath,"
-	;;
-(openbsd[2-9].*|mirbsd*)
-	LD_RPATH_OPT="-Wl,-rpath,"
-	;;
-(dragonfly*|freebsd*)
-	LD_RPATH_OPT="-rpath "
-	;;
-(netbsd*)
-	LD_RPATH_OPT="-Wl,-rpath,"
-	;;
-(osf*|mls+*)
-	LD_RPATH_OPT="-rpath "
-	;;
-(solaris2*)
-	LD_RPATH_OPT="-R"
-	;;
-(*)
-	;;
-esac
-echo "$as_me:5880: result: $LD_RPATH_OPT" >&5
+		;;
+	(netbsd*)
+		LD_RPATH_OPT="-Wl,-rpath,"
+		;;
+	(osf*|mls+*)
+		LD_RPATH_OPT="-rpath "
+		;;
+	(solaris2*)
+		LD_RPATH_OPT="-R"
+		;;
+	(*)
+		;;
+	esac
+	echo "$as_me:6466: result: $LD_RPATH_OPT" >&5
 echo "${ECHO_T}$LD_RPATH_OPT" >&6
 
-case "x$LD_RPATH_OPT" in
-(x-R*)
-	echo "$as_me:5885: checking if we need a space after rpath option" >&5
+	case "x$LD_RPATH_OPT" in
+	(x-R*)
+		echo "$as_me:6471: checking if we need a space after rpath option" >&5
 echo $ECHO_N "checking if we need a space after rpath option... $ECHO_C" >&6
-	cf_save_LIBS="$LIBS"
+		cf_save_LIBS="$LIBS"
 
-cf_add_libs="${LD_RPATH_OPT}$libdir"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in ${LD_RPATH_OPT}$libdir; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 5906 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 6492 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:5918: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:6504: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:5921: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:5924: \"$ac_try\"") >&5
+  echo "$as_me:6507: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:6510: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:5927: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:6513: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_rpath_space=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_rpath_space=yes
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-	LIBS="$cf_save_LIBS"
-	echo "$as_me:5937: result: $cf_rpath_space" >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+		LIBS="$cf_save_LIBS"
+		echo "$as_me:6523: result: $cf_rpath_space" >&5
 echo "${ECHO_T}$cf_rpath_space" >&6
-	test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT "
-	;;
-esac
+		test "$cf_rpath_space" = yes && LD_RPATH_OPT="$LD_RPATH_OPT "
+		;;
+	esac
+fi
 
 	RM_SHARED_OPTS=
 	LOCAL_LDFLAGS=
@@ -5955,23 +6542,25 @@
 	cf_ld_rpath_opt=
 	test "$cf_cv_enable_rpath" = yes && cf_ld_rpath_opt="$LD_RPATH_OPT"
 
-	echo "$as_me:5958: checking if release/abi version should be used for shared libs" >&5
-echo $ECHO_N "checking if release/abi version should be used for shared libs... $ECHO_C" >&6
+	echo "$as_me:6545: checking whether to use release or ABI version in shared library file names" >&5
+echo $ECHO_N "checking whether to use release or ABI version in shared library file names... $ECHO_C" >&6
 
 # Check whether --with-shlib-version or --without-shlib-version was given.
 if test "${with_shlib_version+set}" = set; then
   withval="$with_shlib_version"
   test -z "$withval" && withval=auto
-	case $withval in
+	case "$withval" in
 	(yes)
 		cf_cv_shlib_version=auto
 		;;
-	(rel|abi|auto|no)
+	(rel|abi|auto)
 		cf_cv_shlib_version=$withval
 		;;
 	(*)
-		{ { echo "$as_me:5973: error: option value must be one of: rel, abi, auto or no" >&5
-echo "$as_me: error: option value must be one of: rel, abi, auto or no" >&2;}
+		echo "$as_me:6560: result: $withval" >&5
+echo "${ECHO_T}$withval" >&6
+		{ { echo "$as_me:6562: error: option value must be one of: rel, abi, or auto" >&5
+echo "$as_me: error: option value must be one of: rel, abi, or auto" >&2;}
    { (exit 1); exit 1; }; }
 		;;
 	esac
@@ -5979,7 +6568,7 @@
 else
   cf_cv_shlib_version=auto
 fi;
-	echo "$as_me:5982: result: $cf_cv_shlib_version" >&5
+	echo "$as_me:6571: result: $cf_cv_shlib_version" >&5
 echo "${ECHO_T}$cf_cv_shlib_version" >&6
 
 	cf_cv_rm_so_locs=no
@@ -5987,65 +6576,78 @@
 
 	# Some less-capable ports of gcc support only -fpic
 	CC_SHARED_OPTS=
+
+	cf_try_fPIC=no
 	if test "$GCC" = yes
 	then
-		echo "$as_me:5992: checking which $CC option to use" >&5
+		cf_try_fPIC=yes
+	else
+		case "$cf_cv_system_name" in
+		(*linux*)	# e.g., PGI compiler
+			cf_try_fPIC=yes
+			;;
+		esac
+	fi
+
+	if test "$cf_try_fPIC" = yes
+	then
+		echo "$as_me:6594: checking which $CC option to use" >&5
 echo $ECHO_N "checking which $CC option to use... $ECHO_C" >&6
 		cf_save_CFLAGS="$CFLAGS"
 		for CC_SHARED_OPTS in -fPIC -fpic ''
 		do
 			CFLAGS="$cf_save_CFLAGS $CC_SHARED_OPTS"
-			cat >conftest.$ac_ext <<_ACEOF
-#line 5999 "configure"
+			cat >"conftest.$ac_ext" <<_ACEOF
+#line 6601 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int
-main ()
+main (void)
 {
-int x = 1
+int x = 1; (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:6011: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:6613: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:6014: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:6017: \"$ac_try\"") >&5
+  echo "$as_me:6616: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:6619: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:6020: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:6622: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 		done
-		echo "$as_me:6029: result: $CC_SHARED_OPTS" >&5
+		echo "$as_me:6631: result: $CC_SHARED_OPTS" >&5
 echo "${ECHO_T}$CC_SHARED_OPTS" >&6
 		CFLAGS="$cf_save_CFLAGS"
 	fi
 
 	cf_cv_shlib_version_infix=no
 
-	case $cf_cv_system_name in
+	case "$cf_cv_system_name" in
 	(aix4.3-9*|aix[5-7]*)
 		if test "$GCC" = yes; then
 			CC_SHARED_OPTS='-Wl,-brtl'
-			MK_SHARED_LIB='${CC} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@'
+			MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@'
 		else
 			CC_SHARED_OPTS='-brtl'
 			# as well as '-qpic=large -G' or perhaps "-bM:SRE -bnoentry -bexpall"
-			MK_SHARED_LIB='${CC} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@'
+			MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -G -Wl,-brtl -Wl,-blibpath:${RPATH_LIST}:/usr/lib -o $@'
 		fi
 		;;
 	(beos*)
-		MK_SHARED_LIB='${CC} ${CFLAGS} -o $@ -Xlinker -soname=`basename $@` -nostart -e 0'
+		MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -o $@ -Xlinker -soname=`basename $@` -nostart -e 0'
 		;;
 	(cygwin*)
 		CC_SHARED_OPTS=
@@ -6065,7 +6667,7 @@
 		** SHARED_LIB \$SHARED_LIB
 		** IMPORT_LIB \$IMPORT_LIB
 EOF
-		exec \$* -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
+		exec \$* ${LDFLAGS} -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
 CF_EOF
 		chmod +x mk_shared_lib.sh
 		;;
@@ -6087,17 +6689,17 @@
 		** SHARED_LIB \$SHARED_LIB
 		** IMPORT_LIB \$IMPORT_LIB
 EOF
-		exec \$* -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
+		exec \$* ${LDFLAGS} -shared -Wl,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
 CF_EOF
 		chmod +x mk_shared_lib.sh
 		;;
 	(darwin*)
 		cf_try_cflags="no-cpp-precomp"
 		CC_SHARED_OPTS="-dynamic"
-		MK_SHARED_LIB='${CC} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $@` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $@'
+		MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dynamiclib -install_name ${libdir}/`basename $@` -compatibility_version ${ABI_VERSION} -current_version ${ABI_VERSION} -o $@'
 		test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=abi
 		cf_cv_shlib_version_infix=yes
-		echo "$as_me:6100: checking if ld -search_paths_first works" >&5
+		echo "$as_me:6702: checking if ld -search_paths_first works" >&5
 echo $ECHO_N "checking if ld -search_paths_first works... $ECHO_C" >&6
 if test "${cf_cv_ldflags_search_paths_first+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -6105,51 +6707,62 @@
 
 			cf_save_LDFLAGS=$LDFLAGS
 			LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
-			cat >conftest.$ac_ext <<_ACEOF
-#line 6109 "configure"
+			cat >"conftest.$ac_ext" <<_ACEOF
+#line 6711 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
 int i;
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6121: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:6723: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:6124: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:6127: \"$ac_try\"") >&5
+  echo "$as_me:6726: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:6729: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:6130: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:6732: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_ldflags_search_paths_first=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_ldflags_search_paths_first=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 				LDFLAGS=$cf_save_LDFLAGS
 fi
-echo "$as_me:6141: result: $cf_cv_ldflags_search_paths_first" >&5
+echo "$as_me:6743: result: $cf_cv_ldflags_search_paths_first" >&5
 echo "${ECHO_T}$cf_cv_ldflags_search_paths_first" >&6
-		if test $cf_cv_ldflags_search_paths_first = yes; then
+		if test "$cf_cv_ldflags_search_paths_first" = yes; then
 			LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
 		fi
 		;;
+	(haiku*)
+
+	test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
+	if test "$cf_cv_shlib_version" = rel; then
+		cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
+	else
+		cf_cv_shared_soname='`basename $@`'
+	fi
+
+		MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
+		;;
 	(hpux[7-8]*)
 		# HP-UX 8.07 ld lacks "+b" option used for libdir search-list
 		if test "$GCC" != yes; then
 			CC_SHARED_OPTS='+Z'
 		fi
-		MK_SHARED_LIB='${LD} -b -o $@'
+		MK_SHARED_LIB='${LD} ${LDFLAGS} -b -o $@'
 		INSTALL_LIB="-m 555"
 		;;
 	(hpux*)
@@ -6160,7 +6773,7 @@
 			CC_SHARED_OPTS='+Z'
 			LD_SHARED_OPTS='-Wl,+b,${libdir}'
 		fi
-		MK_SHARED_LIB='${LD} +b ${libdir} -b -o $@'
+		MK_SHARED_LIB='${LD} ${LDFLAGS} +b ${libdir} -b -o $@'
 		# HP-UX shared libraries must be executable, and should be
 		# readonly to exploit a quirk in the memory manager.
 		INSTALL_LIB="-m 555"
@@ -6168,12 +6781,12 @@
 	(interix*)
 		test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
 		if test "$cf_cv_shlib_version" = rel; then
-			cf_shared_soname='`basename  .${REL_VERSION}`.${ABI_VERSION}'
+			cf_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
 		else
-			cf_shared_soname='`basename `'
+			cf_shared_soname='`basename $@`'
 		fi
 		CC_SHARED_OPTS=
-		MK_SHARED_LIB='${CC} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o '
+		MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-rpath,${RPATH_LIST} -Wl,-h,'$cf_shared_soname' -o $@'
 		;;
 	(irix*)
 		if test "$cf_cv_enable_rpath" = yes ; then
@@ -6182,14 +6795,14 @@
 		# tested with IRIX 5.2 and 'cc'.
 		if test "$GCC" != yes; then
 			CC_SHARED_OPTS='-KPIC'
-			MK_SHARED_LIB='${CC} -shared -rdata_shared -soname `basename $@` -o $@'
+			MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -rdata_shared -soname `basename $@` -o $@'
 		else
-			MK_SHARED_LIB='${CC} -shared -Wl,-soname,`basename $@` -o $@'
+			MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,`basename $@` -o $@'
 		fi
 		cf_cv_rm_so_locs=yes
 		;;
 	(linux*|gnu*|k*bsd*-gnu)
-		if test "$DFT_LWR_MODEL" = "shared" ; then
+		if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then
 			LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
 			LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
 		fi
@@ -6204,7 +6817,113 @@
 		cf_cv_shared_soname='`basename $@`'
 	fi
 
-		MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
+		MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
+		;;
+	(mingw*msvc*)
+		cf_cv_shlib_version=msvcdll
+		cf_cv_shlib_version_infix=msvcdll
+		shlibdir=$bindir
+		MAKE_DLLS=
+		if test "$DFT_LWR_MODEL" = "shared" ; then
+			LOCAL_LDFLAGS="-link -dll"
+			LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
+			EXTRA_LDFLAGS="-link -dll $EXTRA_LDFLAGS"
+		fi
+		CC_SHARED_OPTS=
+		MK_SHARED_LIB=$SHELL' '$rel_builddir'/mk_shared_lib.sh $@ ${LD} ${CFLAGS}'
+		RM_SHARED_OPTS="$RM_SHARED_OPTS $rel_builddir/mk_shared_lib.sh *.dll.lib"
+		cat >mk_shared_lib.sh <<-CF_EOF
+		#!$SHELL
+		SHARED_LIB=\$1
+		IMPORT_LIB=\`echo "\$1" | sed -e 's/[0-9]*\.dll$/.dll.lib/'\`
+		shift
+		my_ld=\$1
+		shift
+		cat <<-EOF
+		Linking shared library
+		** SHARED LIB \$SHARED_LIB
+		** IMPORT_LIB \$IMPORT_LIB
+EOF
+		args=\$(echo \$* | sed -E "s#-l(\w*)#\1.dll.lib#g" | sed -E "s#-L(\w*)#-LIBPATH:\1#g")
+		exec \$my_ld -DLL -IMPLIB:"\${IMPORT_LIB}" -OUT:"\${SHARED_LIB}" ${LDFLAGS} \$args
+		mv "\${IMPORT_LIB}" "\${IMPORT_LIB}"
+CF_EOF
+		chmod +x mk_shared_lib.sh
+		cat >mk_prog.sh <<-CF_EOF
+		#!$SHELL
+		shift
+		# Ignore first argument (compiler) and use LD (link.exe) unconditionally
+		LD="$LD"
+		clopts=()
+		ldopts=("/subsystem:console")
+		libs=()
+		isdll=0
+		while test \$# -gt 0; do
+			case "\$1" in
+				-link)
+					# ignore -link argument
+					;;
+				-M[TD] | -M[TD]d)
+					# ignore runtime-library option
+					;;
+				-dll)
+					isdll=1
+					;;
+				-W* | -w*)
+					# ignore warnings
+					;;
+				-D*)
+					clopts+=("\$1")
+					;;
+				-I*)
+					clopts+=("\$1")
+					;;
+				-l*)
+					libs+=("\`echo \"\$1\" | sed \"s/^-l//\"\`")
+					;;
+				-L*)
+					ldopts+=("\`echo \"\$1\" | sed \"s/^-L/-LIBPATH:/\"\`")
+					;;
+				*.obj | *.o)
+					ldopts+=("\$1")
+					;;
+				-Wl,*)
+					for linkarg in \`echo '\$1' | sed -e 's/-Wl,//' -e 's/,/ /'\`; do
+						ldopts+=("\${linkarg}")
+					done
+					;;
+				*.lib)
+					ldopts+=("\$1")
+					;;
+				-o)
+					shift
+					ldopts+=("-out:\$1")
+					;;
+				*)
+					clopts+=("\$1")
+					ldopts+=("\$1")
+					;;
+			esac
+			shift
+		done
+		if [ "\$isdll" -ne 0 ]; then
+			for lib in \${libs[*]}; do
+				ldopts+=("\$lib.dll.lib")
+			done
+		else
+			for lib in \${libs[*]}; do
+				ldopts+=("\$lib.lib")
+			done
+		fi
+		cat <<-EOF
+		Creating program
+		** ld options:   "\${ldopts[@]}"
+EOF
+		exec \$LD \${ldopts[@]}
+CF_EOF
+		chmod +x mk_prog.sh
+		LINK_PROGS="$SHELL ${rel_builddir}/mk_prog.sh"
+		LINK_TESTS="$SHELL ${rel_builddir}/mk_prog.sh"
 		;;
 	(mingw*)
 		cf_cv_shlib_version=mingw
@@ -6229,12 +6948,12 @@
 		** SHARED_LIB \$SHARED_LIB
 		** IMPORT_LIB \$IMPORT_LIB
 EOF
-		exec \$* -shared -Wl,--enable-auto-import,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
+		exec \$* ${LDFLAGS} -shared -Wl,--enable-auto-import,--out-implib=\${IMPORT_LIB} -Wl,--export-all-symbols -o \${SHARED_LIB}
 CF_EOF
 		chmod +x mk_shared_lib.sh
 		;;
 	(openbsd[2-9].*|mirbsd*)
-		if test "$DFT_LWR_MODEL" = "shared" ; then
+		if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then
 			LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
 			LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
 		fi
@@ -6250,11 +6969,19 @@
 		cf_cv_shared_soname='`basename $@`'
 	fi
 
-		MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
+		MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-Bshareable,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
+		;;
+	(nskJ*)
+		CC_SHARED_OPTS=
+		MK_SHARED_LIB='${LD} -Wshared -Weld=-export_all -o $@'
+		;;
+	(nskL*)
+		CC_SHARED_OPTS=
+		MK_SHARED_LIB='${LD} -Wshared -Wxld=-export_all -o $@'
 		;;
 	(nto-qnx*|openbsd*|freebsd[12].*)
 		CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
-		MK_SHARED_LIB='${LD} -Bshareable -o $@'
+		MK_SHARED_LIB='${LD} ${LDFLAGS} -Bshareable -o $@'
 		test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
 		;;
 	(dragonfly*|freebsd*)
@@ -6272,7 +6999,7 @@
 		cf_cv_shared_soname='`basename $@`'
 	fi
 
-		MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
+		MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname',-stats,-lc -o $@'
 		;;
 	(netbsd*)
 		CC_SHARED_OPTS="$CC_SHARED_OPTS -DPIC"
@@ -6295,23 +7022,23 @@
 		cf_cv_shared_soname='`basename $@`'
 	fi
 
-			MK_SHARED_LIB='${CC} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $@'
+			MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,'$cf_cv_shared_soname' -o $@'
 		else
-			MK_SHARED_LIB='${CC} -Wl,-shared -Wl,-Bshareable -o $@'
+			MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -o $@'
 		fi
 		;;
 	(osf*|mls+*)
 		# tested with OSF/1 V3.2 and 'cc'
 		# tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't
 		# link with shared libs).
-		MK_SHARED_LIB='${LD} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $@`'
-		case $host_os in
+		MK_SHARED_LIB='${LD} ${LDFLAGS} -set_version ${REL_VERSION}:${ABI_VERSION} -expect_unresolved "*" -shared -soname `basename $@`'
+		case "$host_os" in
 		(osf4*)
 			MK_SHARED_LIB="${MK_SHARED_LIB} -msym"
 			;;
 		esac
 		MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $@'
-		if test "$DFT_LWR_MODEL" = "shared" ; then
+		if test "$DFT_LWR_MODEL" = "shared" && test -n "$LD_RPATH_OPT" ; then
 			LOCAL_LDFLAGS="${LD_RPATH_OPT}\$(LOCAL_LIBDIR)"
 			LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
 		fi
@@ -6322,7 +7049,7 @@
 		if test "$GCC" != yes; then
 			CC_SHARED_OPTS='-belf -KPIC'
 		fi
-		MK_SHARED_LIB='${LD} -dy -G -h `basename $@ .${REL_VERSION}`.${ABI_VERSION} -o $@'
+		MK_SHARED_LIB='${LD} ${LDFLAGS} -dy -G -h `basename $@ .${REL_VERSION}`.${ABI_VERSION} -o $@'
 		if test "$cf_cv_enable_rpath" = yes ; then
 			# only way is to set LD_RUN_PATH but no switch for it
 			RUN_PATH=$libdir
@@ -6336,18 +7063,18 @@
 		if test "$GCC" != yes; then
 			CC_SHARED_OPTS='-KPIC'
 		fi
-		MK_SHARED_LIB='${LD} -assert pure-text -o $@'
+		MK_SHARED_LIB='${LD} ${LDFLAGS} -assert pure-text -o $@'
 		test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
 		;;
 	(solaris2*)
 		# tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2
 		# tested with SunOS 5.10 (solaris 10) and gcc 3.4.3
 		if test "$DFT_LWR_MODEL" = "shared" ; then
-			LOCAL_LDFLAGS="-R \$(LOCAL_LIBDIR):\${libdir}"
+			LOCAL_LDFLAGS="-R\$(LOCAL_LIBDIR):\${libdir}"
 			LOCAL_LDFLAGS2="$LOCAL_LDFLAGS"
 		fi
 		if test "$cf_cv_enable_rpath" = yes ; then
-			EXTRA_LDFLAGS="-R \${libdir} $EXTRA_LDFLAGS"
+			EXTRA_LDFLAGS="-R\${libdir} $EXTRA_LDFLAGS"
 		fi
 
 	test "$cf_cv_shlib_version" = auto && cf_cv_shlib_version=rel
@@ -6362,42 +7089,42 @@
 			for cf_shared_opts in -xcode=pic32 -xcode=pic13 -KPIC -Kpic -O
 			do
 				CFLAGS="$cf_shared_opts $cf_save_CFLAGS"
-				cat >conftest.$ac_ext <<_ACEOF
-#line 6366 "configure"
+				cat >"conftest.$ac_ext" <<_ACEOF
+#line 7093 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int
-main ()
+main (void)
 {
-printf("Hello\n");
+printf("Hello\\n");
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:6378: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:7105: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:6381: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:6384: \"$ac_try\"") >&5
+  echo "$as_me:7108: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:7111: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:6387: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:7114: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 			done
 			CFLAGS="$cf_save_CFLAGS"
 			CC_SHARED_OPTS=$cf_shared_opts
-			MK_SHARED_LIB='${CC} -dy -G -h '$cf_cv_shared_soname' -o $@'
+			MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -dy -G -Wl,-h,'$cf_cv_shared_soname' -o $@'
 		else
-			MK_SHARED_LIB='${CC} -shared -dy -G -h '$cf_cv_shared_soname' -o $@'
+			MK_SHARED_LIB='${CC} ${LDFLAGS} ${CFLAGS} -shared -dy -G -Wl,-h,'$cf_cv_shared_soname' -o $@'
 		fi
 		;;
 	(sysv5uw7*|unix_sv*)
@@ -6405,7 +7132,7 @@
 		if test "$GCC" != yes; then
 			CC_SHARED_OPTS='-KPIC'
 		fi
-		MK_SHARED_LIB='${LD} -d y -G -o $@'
+		MK_SHARED_LIB='${LD} ${LDFLAGS} -d y -G -o $@'
 		;;
 	(*)
 		CC_SHARED_OPTS='unknown'
@@ -6421,7 +7148,7 @@
 			test "$cf_cv_do_symlinks" = no && cf_cv_do_symlinks=yes
 			;;
 		(*)
-			{ echo "$as_me:6424: WARNING: ignored --with-shlib-version" >&5
+			{ echo "$as_me:7151: WARNING: ignored --with-shlib-version" >&5
 echo "$as_me: WARNING: ignored --with-shlib-version" >&2;}
 			;;
 		esac
@@ -6431,11 +7158,11 @@
 	if test -n "$cf_try_cflags"
 	then
 cat > conftest.$ac_ext <<EOF
-#line 6434 "${as_me:-configure}"
+#line 7161 "${as_me:-configure}"
 #include <stdio.h>
 int main(int argc, char *argv[])
 {
-	printf("hello\n");
+	printf("hello\\n");
 	return (argv[argc-1] == 0) ;
 }
 EOF
@@ -6443,18 +7170,18 @@
 		for cf_opt in $cf_try_cflags
 		do
 			CFLAGS="$cf_save_CFLAGS -$cf_opt"
-			echo "$as_me:6446: checking if CFLAGS option -$cf_opt works" >&5
+			echo "$as_me:7173: checking if CFLAGS option -$cf_opt works" >&5
 echo $ECHO_N "checking if CFLAGS option -$cf_opt works... $ECHO_C" >&6
-			if { (eval echo "$as_me:6448: \"$ac_compile\"") >&5
+			if { (eval echo "$as_me:7175: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:6451: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-				echo "$as_me:6453: result: yes" >&5
+  echo "$as_me:7178: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
+				echo "$as_me:7180: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 				cf_save_CFLAGS="$CFLAGS"
 			else
-				echo "$as_me:6457: result: no" >&5
+				echo "$as_me:7184: result: no" >&5
 echo "${ECHO_T}no" >&6
 			fi
 		done
@@ -6465,21 +7192,21 @@
 	test -n "$cf_ld_rpath_opt" && MK_SHARED_LIB="$MK_SHARED_LIB $cf_ld_rpath_opt\${RPATH_LIST}"
 	test -z "$RPATH_LIST" && RPATH_LIST="\${libdir}"
 
-	test $cf_cv_rm_so_locs = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations"
+	test "$cf_cv_rm_so_locs" = yes && RM_SHARED_OPTS="$RM_SHARED_OPTS so_locations"
 
 	test -n "$verbose" && echo "	CC_SHARED_OPTS: $CC_SHARED_OPTS" 1>&6
 
-echo "${as_me:-configure}:6472: testing CC_SHARED_OPTS: $CC_SHARED_OPTS ..." 1>&5
+echo "${as_me:-configure}:7199: testing CC_SHARED_OPTS: $CC_SHARED_OPTS ..." 1>&5
 
 	test -n "$verbose" && echo "	MK_SHARED_LIB:  $MK_SHARED_LIB" 1>&6
 
-echo "${as_me:-configure}:6476: testing MK_SHARED_LIB:  $MK_SHARED_LIB ..." 1>&5
+echo "${as_me:-configure}:7203: testing MK_SHARED_LIB:  $MK_SHARED_LIB ..." 1>&5
 
-for model in $cf_list_models; do
-	case $model in
+for model in $cf_list_models ; do
+	case "$model" in
 	(libtool)
 
-echo "$as_me:6482: checking for additional libtool options" >&5
+echo "$as_me:7209: checking for additional libtool options" >&5
 echo $ECHO_N "checking for additional libtool options... $ECHO_C" >&6
 
 # Check whether --with-libtool-opts or --without-libtool-opts was given.
@@ -6489,7 +7216,7 @@
 else
   with_libtool_opts=no
 fi;
-echo "$as_me:6492: result: $with_libtool_opts" >&5
+echo "$as_me:7219: result: $with_libtool_opts" >&5
 echo "${ECHO_T}$with_libtool_opts" >&6
 
 case .$with_libtool_opts in
@@ -6500,7 +7227,7 @@
 	;;
 esac
 
-echo "$as_me:6503: checking if exported-symbols file should be used" >&5
+echo "$as_me:7230: checking if exported-symbols file should be used" >&5
 echo $ECHO_N "checking if exported-symbols file should be used... $ECHO_C" >&6
 
 # Check whether --with-export-syms or --without-export-syms was given.
@@ -6515,7 +7242,7 @@
 	with_export_syms='${top_srcdir}/package/${PACKAGE}.sym'
 
 fi
-echo "$as_me:6518: result: $with_export_syms" >&5
+echo "$as_me:7245: result: $with_export_syms" >&5
 echo "${ECHO_T}$with_export_syms" >&6
 if test "x$with_export_syms" != xno
 then
@@ -6526,12 +7253,56 @@
 		;;
 	(shared)
 		if test "$CC_SHARED_OPTS" = "unknown"; then
-			{ { echo "$as_me:6529: error: Shared libraries are not supported in this version" >&5
+			{ { echo "$as_me:7256: error: Shared libraries are not supported in this version" >&5
 echo "$as_me: error: Shared libraries are not supported in this version" >&2;}
    { (exit 1); exit 1; }; }
 		fi
+		# workaround for inept transition to PIE vs PIC...
+		echo "$as_me:7261: checking if current CFLAGS link properly" >&5
+echo $ECHO_N "checking if current CFLAGS link properly... $ECHO_C" >&6
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 7264 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main (void)
+{
+printf("Hello work\\n");
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7276: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:7279: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:7282: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:7285: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cflags_work=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cflags_work=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+		echo "$as_me:7294: result: $cf_cflags_work" >&5
+echo "${ECHO_T}$cf_cflags_work" >&6
+		if test "$cf_cflags_work" = no
+		then
+			test -n "$verbose" && echo "	try to work around by appending shared-options" 1>&6
 
-echo "$as_me:6534: checking if versioned-symbols file should be used" >&5
+echo "${as_me:-configure}:7300: testing try to work around by appending shared-options ..." 1>&5
+
+			CFLAGS="$CFLAGS $CC_SHARED_OPTS"
+		fi
+
+echo "$as_me:7305: checking if versioned-symbols file should be used" >&5
 echo $ECHO_N "checking if versioned-symbols file should be used... $ECHO_C" >&6
 
 # Check whether --with-versioned-syms or --without-versioned-syms was given.
@@ -6541,12 +7312,26 @@
 else
   with_versioned_syms=no
 fi;
-if test "x$with_versioned_syms" = xyes
-then
+case "x$with_versioned_syms" in
+(xyes)
 	with_versioned_syms='${top_srcdir}/package/${PACKAGE}.map'
 
-fi
-echo "$as_me:6549: result: $with_versioned_syms" >&5
+	;;
+(xno)
+	;;
+(x/*)
+	test -f "$with_versioned_syms" || { { echo "$as_me:7323: error: expected a filename: $with_versioned_syms" >&5
+echo "$as_me: error: expected a filename: $with_versioned_syms" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+(*)
+	test -f "$with_versioned_syms" || { { echo "$as_me:7328: error: expected a filename: $with_versioned_syms" >&5
+echo "$as_me: error: expected a filename: $with_versioned_syms" >&2;}
+   { (exit 1); exit 1; }; }
+	with_versioned_syms=`pwd`/"$with_versioned_syms"
+	;;
+esac
+echo "$as_me:7334: result: $with_versioned_syms" >&5
 echo "${ECHO_T}$with_versioned_syms" >&6
 
 RESULTING_SYMS=
@@ -6562,7 +7347,7 @@
 		MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-Wl,%\\${VERSIONED_SYMS} -Wl,%"`
 		test -n "$verbose" && echo "	MK_SHARED_LIB:  $MK_SHARED_LIB" 1>&6
 
-echo "${as_me:-configure}:6565: testing MK_SHARED_LIB:  $MK_SHARED_LIB ..." 1>&5
+echo "${as_me:-configure}:7350: testing MK_SHARED_LIB:  $MK_SHARED_LIB ..." 1>&5
 
 		;;
 	(*-dy\ *)
@@ -6570,11 +7355,11 @@
 		MK_SHARED_LIB=`echo "$MK_SHARED_LIB" | sed -e "s%-dy%\\${VERSIONED_SYMS} -dy%"`
 		test -n "$verbose" && echo "	MK_SHARED_LIB:  $MK_SHARED_LIB" 1>&6
 
-echo "${as_me:-configure}:6573: testing MK_SHARED_LIB:  $MK_SHARED_LIB ..." 1>&5
+echo "${as_me:-configure}:7358: testing MK_SHARED_LIB:  $MK_SHARED_LIB ..." 1>&5
 
 		;;
 	(*)
-		{ echo "$as_me:6577: WARNING: this system does not support versioned-symbols" >&5
+		{ echo "$as_me:7362: WARNING: this system does not support versioned-symbols" >&5
 echo "$as_me: WARNING: this system does not support versioned-symbols" >&2;}
 		;;
 	esac
@@ -6586,7 +7371,7 @@
 	# symbols.
 	if test "x$VERSIONED_SYMS" != "x"
 	then
-		echo "$as_me:6589: checking if wildcards can be used to selectively omit symbols" >&5
+		echo "$as_me:7374: checking if wildcards can be used to selectively omit symbols" >&5
 echo $ECHO_N "checking if wildcards can be used to selectively omit symbols... $ECHO_C" >&6
 		WILDCARD_SYMS=no
 
@@ -6623,16 +7408,16 @@
 } submodule_1.0;
 EOF
 		cat >conftest.$ac_ext <<EOF
-#line 6626 "configure"
-int	_ismissing(void) { return 1; }
-int	_localf1(void) { return 1; }
-int	_localf2(void) { return 2; }
-int	globalf1(void) { return 1; }
-int	globalf2(void) { return 2; }
-int	_sublocalf1(void) { return 1; }
-int	_sublocalf2(void) { return 2; }
-int	subglobalf1(void) { return 1; }
-int	subglobalf2(void) { return 2; }
+#line 7411 "configure"
+extern int _ismissing(void);    int _ismissing(void)  { return 1; }
+extern int _localf1(void);      int _localf1(void)    { return 1; }
+extern int _localf2(void);      int _localf2(void)    { return 2; }
+extern int globalf1(void);      int globalf1(void)    { return 1; }
+extern int globalf2(void);      int globalf2(void)    { return 2; }
+extern int _sublocalf1(void);   int _sublocalf1(void) { return 1; }
+extern int _sublocalf2(void);   int _sublocalf2(void) { return 2; }
+extern int subglobalf1(void);   int subglobalf1(void) { return 1; }
+extern int subglobalf2(void);   int subglobalf2(void) { return 2; }
 EOF
 		cat >conftest.mk <<EOF
 CC=${CC}
@@ -6650,11 +7435,11 @@
 		# compile source, make library
 		if make -f conftest.mk 2>&5 >/dev/null
 		then
-			# test for missing symbol
-			cf_missing=`nm -P conftest.so 2>&5 |fgrep _ismissing | egrep '[ 	]T[ 	]'`
+			# test for missing symbol in either Data or Text section
+			cf_missing="`nm -P conftest.so 2>&5 |${FGREP-fgrep} _ismissing | ${EGREP-egrep} '[ 	][DT][ 	]'`"
 			test -n "$cf_missing" && WILDCARD_SYMS=yes
 		fi
-		echo "$as_me:6657: result: $WILDCARD_SYMS" >&5
+		echo "$as_me:7442: result: $WILDCARD_SYMS" >&5
 echo "${ECHO_T}$WILDCARD_SYMS" >&6
 		rm -f conftest.*
 	fi
@@ -6664,8 +7449,1100 @@
 	esac
 done
 
+### Checks for special libraries, must be done up-front.
+SHLIB_LIST=""
+
+echo "$as_me:7455: checking if you want to link with the GPM mouse library" >&5
+echo $ECHO_N "checking if you want to link with the GPM mouse library... $ECHO_C" >&6
+
+# Check whether --with-gpm or --without-gpm was given.
+if test "${with_gpm+set}" = set; then
+  withval="$with_gpm"
+  with_gpm=$withval
+else
+  with_gpm=maybe
+fi;
+echo "$as_me:7465: result: $with_gpm" >&5
+echo "${ECHO_T}$with_gpm" >&6
+
+if test "$with_gpm" != no ; then
+	echo "$as_me:7469: checking for gpm.h" >&5
+echo $ECHO_N "checking for gpm.h... $ECHO_C" >&6
+if test "${ac_cv_header_gpm_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 7475 "configure"
+#include "confdefs.h"
+#include <gpm.h>
+_ACEOF
+if { (eval echo "$as_me:7479: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:7485: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_cv_header_gpm_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+  cat "conftest.$ac_ext" >&5
+  ac_cv_header_gpm_h=no
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:7504: result: $ac_cv_header_gpm_h" >&5
+echo "${ECHO_T}$ac_cv_header_gpm_h" >&6
+if test "$ac_cv_header_gpm_h" = yes; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_GPM_H 1
+EOF
+
+		if test "$with_gpm" != yes && test "$with_gpm" != maybe ; then
+			test -n "$verbose" && echo "	assuming we really have GPM library" 1>&6
+
+echo "${as_me:-configure}:7515: testing assuming we really have GPM library ..." 1>&5
+
+cat >>confdefs.h <<\EOF
+#define HAVE_LIBGPM 1
+EOF
+
+			with_gpm=yes
+		else
+			echo "$as_me:7523: checking for Gpm_Open in -lgpm" >&5
+echo $ECHO_N "checking for Gpm_Open in -lgpm... $ECHO_C" >&6
+if test "${ac_cv_lib_gpm_Gpm_Open+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgpm  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 7531 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char Gpm_Open (void);
+int
+main (void)
+{
+Gpm_Open ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7550: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:7553: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:7556: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:7559: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_gpm_Gpm_Open=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_gpm_Gpm_Open=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:7570: result: $ac_cv_lib_gpm_Gpm_Open" >&5
+echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Open" >&6
+if test "$ac_cv_lib_gpm_Gpm_Open" = yes; then
+  with_gpm=yes
+else
+
+				if test "$with_gpm" = maybe; then
+					{ echo "$as_me:7577: WARNING: Cannot link with GPM library" >&5
+echo "$as_me: WARNING: Cannot link with GPM library" >&2;}
+					with_gpm=no
+				else
+					{ { echo "$as_me:7581: error: Cannot link with GPM library" >&5
+echo "$as_me: error: Cannot link with GPM library" >&2;}
+   { (exit 1); exit 1; }; }
+				fi
+
+fi
+
+		fi
+
+else
+
+		test "$with_gpm" != maybe && { echo "$as_me:7592: WARNING: Cannot find GPM header" >&5
+echo "$as_me: WARNING: Cannot find GPM header" >&2;}
+		with_gpm=no
+
+fi
+
+fi
+
+if test "$with_gpm" != no ; then
+	echo "$as_me:7601: checking if you want to load GPM dynamically" >&5
+echo $ECHO_N "checking if you want to load GPM dynamically... $ECHO_C" >&6
+
+# Check whether --with-dlsym or --without-dlsym was given.
+if test "${with_dlsym+set}" = set; then
+  withval="$with_dlsym"
+  with_dlsym=$withval
+else
+  with_dlsym=yes
+fi;
+	echo "$as_me:7611: result: $with_dlsym" >&5
+echo "${ECHO_T}$with_dlsym" >&6
+	if test "x$with_dlsym" = xyes ; then
+
+cf_have_dlsym=no
+echo "$as_me:7616: checking for dlsym" >&5
+echo $ECHO_N "checking for dlsym... $ECHO_C" >&6
+if test "${ac_cv_func_dlsym+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 7622 "configure"
+#include "confdefs.h"
+#define dlsym autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef dlsym
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlsym (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlsym) || defined (__stub___dlsym)
+#error found stub for dlsym
+#endif
+
+	return dlsym ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7653: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:7656: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:7659: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:7662: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_func_dlsym=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_func_dlsym=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:7672: result: $ac_cv_func_dlsym" >&5
+echo "${ECHO_T}$ac_cv_func_dlsym" >&6
+if test "$ac_cv_func_dlsym" = yes; then
+  cf_have_dlsym=yes
+else
+
+cf_have_libdl=no
+echo "$as_me:7679: checking for dlsym in -ldl" >&5
+echo $ECHO_N "checking for dlsym in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlsym+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 7687 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlsym (void);
+int
+main (void)
+{
+dlsym ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7706: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:7709: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:7712: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:7715: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_dl_dlsym=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_dl_dlsym=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:7726: result: $ac_cv_lib_dl_dlsym" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlsym" >&6
+if test "$ac_cv_lib_dl_dlsym" = yes; then
+
+	cf_have_dlsym=yes
+	cf_have_libdl=yes
+fi
+
+fi
+
+if test "$cf_have_dlsym" = yes ; then
+	test "$cf_have_libdl" = yes && {
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -ldl; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+ }
+
+	echo "$as_me:7755: checking whether able to link to dl*() functions" >&5
+echo $ECHO_N "checking whether able to link to dl*() functions... $ECHO_C" >&6
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 7758 "configure"
+#include "confdefs.h"
+#include <dlfcn.h>
+int
+main (void)
+{
+
+		void *obj;
+		if ((obj = dlopen("filename", 0)) != 0) {
+			if (dlsym(obj, "symbolname") == 0) {
+			dlclose(obj);
+			}
+		}
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7776: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:7779: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:7782: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:7785: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_LIBDL 1
+EOF
+
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+
+		{ { echo "$as_me:7796: error: Cannot link test program for libdl" >&5
+echo "$as_me: error: Cannot link test program for libdl" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+	echo "$as_me:7801: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+else
+	{ { echo "$as_me:7804: error: Cannot find dlsym function" >&5
+echo "$as_me: error: Cannot find dlsym function" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+		if test "x$with_gpm" != xyes ; then
+			test -n "$verbose" && echo "	assuming soname for gpm is $with_gpm" 1>&6
+
+echo "${as_me:-configure}:7812: testing assuming soname for gpm is $with_gpm ..." 1>&5
+
+			cf_cv_gpm_soname="$with_gpm"
+		else
+
+echo "$as_me:7817: checking for soname of gpm library" >&5
+echo $ECHO_N "checking for soname of gpm library... $ECHO_C" >&6
+if test "${cf_cv_gpm_soname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cf_cv_gpm_soname=unknown
+if test "$cross_compiling" != yes ; then
+cat >conftest.$ac_ext <<CF_EOF
+#include <gpm.h>
+int main(void)
+{
+if (Gpm_Open(0,0)) Gpm_Close();
+	${cf_cv_main_return:-return}(0);
+}
+CF_EOF
+cf_save_LIBS="$LIBS"
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lgpm; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+	if { (eval echo "$as_me:7851: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:7854: \$? = $ac_status" >&5
+  (exit "$ac_status"); } ; then
+		if { (eval echo "$as_me:7856: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:7859: \$? = $ac_status" >&5
+  (exit "$ac_status"); } ; then
+			cf_cv_gpm_soname="`ldd \"conftest$ac_exeext\" 2>/dev/null | sed -e 's,^.*/,,' -e 's, .*$,,' | ${FGREP-fgrep} libgpm.`"
+			test -z "$cf_cv_gpm_soname" && cf_cv_gpm_soname=unknown
+		fi
+	fi
+rm -rf ./conftest*
+LIBS="$cf_save_LIBS"
+fi
+
+fi
+echo "$as_me:7870: result: $cf_cv_gpm_soname" >&5
+echo "${ECHO_T}$cf_cv_gpm_soname" >&6
+
+		fi
+		test "$cf_cv_gpm_soname" != "unknown" &&
+cat >>confdefs.h <<EOF
+#define LIBGPM_SONAME "$cf_cv_gpm_soname"
+EOF
+
+		SHLIB_LIST="-ldl $SHLIB_LIST"
+
+cf_add_libs="$PRIVATE_LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -ldl; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+PRIVATE_LIBS="$cf_add_libs"
+
+	else
+		SHLIB_LIST="-lgpm $SHLIB_LIST"
+
+cf_add_libs="$TEST_LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lgpm; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+TEST_LIBS="$cf_add_libs"
+
+cf_add_libs="$PRIVATE_LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lgpm; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+PRIVATE_LIBS="$cf_add_libs"
+
+	fi
+
+cat >>confdefs.h <<\EOF
+#define HAVE_LIBGPM 1
+EOF
+
+echo "$as_me:7938: checking for Gpm_Wgetch in -lgpm" >&5
+echo $ECHO_N "checking for Gpm_Wgetch in -lgpm... $ECHO_C" >&6
+if test "${ac_cv_lib_gpm_Gpm_Wgetch+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgpm  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 7946 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char Gpm_Wgetch (void);
+int
+main (void)
+{
+Gpm_Wgetch ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:7965: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:7968: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:7971: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:7974: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_gpm_Gpm_Wgetch=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_gpm_Gpm_Wgetch=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:7985: result: $ac_cv_lib_gpm_Gpm_Wgetch" >&5
+echo "${ECHO_T}$ac_cv_lib_gpm_Gpm_Wgetch" >&6
+if test "$ac_cv_lib_gpm_Gpm_Wgetch" = yes; then
+
+echo "$as_me:7989: checking if GPM is weakly bound to curses library" >&5
+echo $ECHO_N "checking if GPM is weakly bound to curses library... $ECHO_C" >&6
+if test "${cf_cv_check_gpm_wgetch+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cf_cv_check_gpm_wgetch=unknown
+if test "$cross_compiling" != yes ; then
+
+cat >conftest.$ac_ext <<CF_EOF
+#include <gpm.h>
+int main(void)
+{
+	Gpm_Wgetch();
+	${cf_cv_main_return:-return}(0);
+}
+CF_EOF
+
+	cf_save_LIBS="$LIBS"
+	# This only works if we can look at the symbol table.  If a shared
+	# library is stripped for install, we cannot use that.  So we're forced
+	# to rely on the static library, noting that some packagers may not
+	# include it.
+	LIBS="-static -lgpm -dynamic $LIBS"
+	if { (eval echo "$as_me:8013: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:8016: \$? = $ac_status" >&5
+  (exit "$ac_status"); } ; then
+		if { (eval echo "$as_me:8018: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:8021: \$? = $ac_status" >&5
+  (exit "$ac_status"); } ; then
+			cf_cv_check_gpm_wgetch="`nm \"conftest$ac_exeext\" | ${EGREP-egrep} '\<wgetch\>' | ${EGREP-egrep} '\<[vVwW]\>'`"
+			test -n "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=yes
+			test -z "$cf_cv_check_gpm_wgetch" && cf_cv_check_gpm_wgetch=no
+		fi
+	fi
+	rm -rf ./conftest*
+	LIBS="$cf_save_LIBS"
+fi
+
+fi
+echo "$as_me:8033: result: $cf_cv_check_gpm_wgetch" >&5
+echo "${ECHO_T}$cf_cv_check_gpm_wgetch" >&6
+
+if test "$cf_cv_check_gpm_wgetch" != yes ; then
+	{ echo "$as_me:8037: WARNING: GPM library is already linked with curses - read the FAQ" >&5
+echo "$as_me: WARNING: GPM library is already linked with curses - read the FAQ" >&2;}
+fi
+
+fi
+
+fi
+
+echo "$as_me:8045: checking if you want to use PCRE2 for regular-expressions" >&5
+echo $ECHO_N "checking if you want to use PCRE2 for regular-expressions... $ECHO_C" >&6
+
+# Check whether --with-pcre2 or --without-pcre2 was given.
+if test "${with_pcre2+set}" = set; then
+  withval="$with_pcre2"
+
+fi;
+test -z "$with_pcre2" && with_pcre2=no
+echo "$as_me:8054: result: $with_pcre2" >&5
+echo "${ECHO_T}$with_pcre2" >&6
+
+if test "x$with_pcre2" != xno ; then
+	cf_with_pcre2_ok=no
+	for cf_with_pcre2 in libpcre2 libpcre2-posix libpcre
+	do
+
+if test "$PKG_CONFIG" != none && "$PKG_CONFIG" --exists "$cf_with_pcre2"; then
+	test -n "$verbose" && echo "	found package $cf_with_pcre2" 1>&6
+
+echo "${as_me:-configure}:8065: testing found package $cf_with_pcre2 ..." 1>&5
+
+	cf_pkgconfig_incs="`$PKG_CONFIG --cflags "$cf_with_pcre2" 2>/dev/null`"
+	cf_pkgconfig_libs="`$PKG_CONFIG --libs   "$cf_with_pcre2" 2>/dev/null`"
+	test -n "$verbose" && echo "	package $cf_with_pcre2 CFLAGS: $cf_pkgconfig_incs" 1>&6
+
+echo "${as_me:-configure}:8071: testing package $cf_with_pcre2 CFLAGS: $cf_pkgconfig_incs ..." 1>&5
+
+	test -n "$verbose" && echo "	package $cf_with_pcre2 LIBS: $cf_pkgconfig_libs" 1>&6
+
+echo "${as_me:-configure}:8075: testing package $cf_with_pcre2 LIBS: $cf_pkgconfig_libs ..." 1>&5
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in $cf_pkgconfig_incs
+do
+case "$cf_fix_cppflags" in
+(no)
+	case "$cf_add_cflags" in
+	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+		case "$cf_add_cflags" in
+		(-D*)
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+				&& test -z "${cf_tst_cflags}" \
+				&& cf_fix_cppflags=yes
+
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			fi
+			;;
+		esac
+		case "$CPPFLAGS" in
+		(*$cf_add_cflags)
+			;;
+		(*)
+			case "$cf_add_cflags" in
+			(-D*)
+				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+	sed	-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?[ 	]/ /g' \
+		-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?$//g'`
+
+				;;
+			esac
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+			;;
+		esac
+		;;
+	(*)
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+		;;
+	esac
+	;;
+(yes)
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+		&& test -z "${cf_tst_cflags}" \
+		&& cf_fix_cppflags=no
+	;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
+fi
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in $cf_pkgconfig_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+	cf_with_pcre2_ok=yes; break
+else
+	cf_pkgconfig_incs=
+	cf_pkgconfig_libs=
+	:
+fi
+
+	done
+	cf_with_pcre2_ok=yes || { { echo "$as_me:8199: error: Cannot find PCRE2 library" >&5
+echo "$as_me: error: Cannot find PCRE2 library" >&2;}
+   { (exit 1); exit 1; }; }
+
+cat >>confdefs.h <<\EOF
+#define HAVE_LIB_PCRE2 1
+EOF
+
+	# if pkgconfig gave no results, look for the libraries directly
+	case "$LIBS" in
+	(*pcre2-posix*|*pcreposix*)
+		;;
+	(*)
+		echo "$as_me:8212: checking for regcomp in -lpcre2-posix" >&5
+echo $ECHO_N "checking for regcomp in -lpcre2-posix... $ECHO_C" >&6
+if test "${ac_cv_lib_pcre2_posix_regcomp+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcre2-posix  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 8220 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char regcomp (void);
+int
+main (void)
+{
+regcomp ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:8239: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:8242: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:8245: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:8248: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_pcre2_posix_regcomp=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_pcre2_posix_regcomp=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:8259: result: $ac_cv_lib_pcre2_posix_regcomp" >&5
+echo "${ECHO_T}$ac_cv_lib_pcre2_posix_regcomp" >&6
+if test "$ac_cv_lib_pcre2_posix_regcomp" = yes; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lpcre2-posix; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+else
+  echo "$as_me:8280: checking for regcomp in -lpcreposix" >&5
+echo $ECHO_N "checking for regcomp in -lpcreposix... $ECHO_C" >&6
+if test "${ac_cv_lib_pcreposix_regcomp+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpcreposix  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 8288 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char regcomp (void);
+int
+main (void)
+{
+regcomp ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:8307: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:8310: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:8313: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:8316: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_pcreposix_regcomp=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_pcreposix_regcomp=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:8327: result: $ac_cv_lib_pcreposix_regcomp" >&5
+echo "${ECHO_T}$ac_cv_lib_pcreposix_regcomp" >&6
+if test "$ac_cv_lib_pcreposix_regcomp" = yes; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lpcreposix; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+else
+  { { echo "$as_me:8348: error: Cannot find PCRE2 POSIX library" >&5
+echo "$as_me: error: Cannot find PCRE2 POSIX library" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+
+		;;
+	esac
+
+	# either way, check for the library header files
+
+for ac_header in pcre2posix.h pcreposix.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:8363: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 8369 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:8373: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:8379: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+  cat "conftest.$ac_ext" >&5
+  eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:8398: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+for ac_func in PCRE2regcomp
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:8411: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 8417 "configure"
+#include "confdefs.h"
+#define $ac_func autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#error found stub for $ac_func
+#endif
+
+	return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:8448: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:8451: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:8454: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:8457: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_var=no"
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:8467: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+fi
+
+# not everyone has "test -c"
+if test -c /dev/sysmouse 2>/dev/null ; then
+echo "$as_me:8481: checking if you want to use sysmouse" >&5
+echo $ECHO_N "checking if you want to use sysmouse... $ECHO_C" >&6
+
+# Check whether --with-sysmouse or --without-sysmouse was given.
+if test "${with_sysmouse+set}" = set; then
+  withval="$with_sysmouse"
+  cf_with_sysmouse=$withval
+else
+  cf_with_sysmouse=maybe
+fi;
+	if test "$cf_with_sysmouse" != no ; then
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 8493 "configure"
+#include "confdefs.h"
+
+#include <osreldate.h>
+#if (__FreeBSD_version >= 400017)
+#include <sys/consio.h>
+#include <sys/fbio.h>
+#else
+#include <machine/console.h>
+#endif
+
+int
+main (void)
+{
+
+	struct mouse_info the_mouse;
+	ioctl(0, CONS_MOUSECTL, &the_mouse);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:8516: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:8519: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:8522: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:8525: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_with_sysmouse=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_with_sysmouse=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+	fi
+echo "$as_me:8535: result: $cf_with_sysmouse" >&5
+echo "${ECHO_T}$cf_with_sysmouse" >&6
+test "$cf_with_sysmouse" = yes &&
+cat >>confdefs.h <<\EOF
+#define USE_SYSMOUSE 1
+EOF
+
+fi
+
 # pretend that ncurses==ncursesw==ncursest
-echo "$as_me:6668: checking if you want to disable library suffixes" >&5
+echo "$as_me:8545: checking if you want to disable library suffixes" >&5
 echo $ECHO_N "checking if you want to disable library suffixes... $ECHO_C" >&6
 
 # Check whether --enable-lib-suffixes or --disable-lib-suffixes was given.
@@ -6682,13 +8559,13 @@
 	disable_lib_suffixes=no
 
 fi;
-echo "$as_me:6685: result: $disable_lib_suffixes" >&5
+echo "$as_me:8562: result: $disable_lib_suffixes" >&5
 echo "${ECHO_T}$disable_lib_suffixes" >&6
 
 ### If we're building with rpath, try to link non-standard libs that way too.
-if test "$DFT_LWR_MODEL" = "shared"; then
+if test "$DFT_LWR_MODEL" = "shared" && test "x$cf_cv_enable_rpath" != xno; then
 
-echo "$as_me:6691: checking if rpath-hack should be disabled" >&5
+echo "$as_me:8568: checking if rpath-hack should be disabled" >&5
 echo $ECHO_N "checking if rpath-hack should be disabled... $ECHO_C" >&6
 
 # Check whether --enable-rpath-hack or --disable-rpath-hack was given.
@@ -6696,30 +8573,32 @@
   enableval="$enable_rpath_hack"
   test "$enableval" != no && enableval=yes
 	if test "$enableval" != "yes" ; then
-    cf_disable_rpath_hack=yes
+    enable_rpath_hack=no
 	else
-		cf_disable_rpath_hack=no
+		enable_rpath_hack=yes
 	fi
 else
   enableval=yes
-	cf_disable_rpath_hack=no
+	enable_rpath_hack=yes
 
 fi;
-echo "$as_me:6708: result: $cf_disable_rpath_hack" >&5
+if test "x$enable_rpath_hack" = xno; then cf_disable_rpath_hack=yes; else cf_disable_rpath_hack=no; fi
+echo "$as_me:8586: result: $cf_disable_rpath_hack" >&5
 echo "${ECHO_T}$cf_disable_rpath_hack" >&6
-if test "$cf_disable_rpath_hack" = no ; then
 
-echo "$as_me:6712: checking for updated LDFLAGS" >&5
+if test "$enable_rpath_hack" = yes ; then
+
+echo "$as_me:8591: checking for updated LDFLAGS" >&5
 echo $ECHO_N "checking for updated LDFLAGS... $ECHO_C" >&6
 if test -n "$LD_RPATH_OPT" ; then
-	echo "$as_me:6715: result: maybe" >&5
+	echo "$as_me:8594: result: maybe" >&5
 echo "${ECHO_T}maybe" >&6
 
 	for ac_prog in ldd
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-echo "$as_me:6722: checking for $ac_word" >&5
+echo "$as_me:8601: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_cf_ldd_prog+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -6734,7 +8613,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_cf_ldd_prog="$ac_prog"
-echo "$as_me:6737: found $ac_dir/$ac_word" >&5
+echo "$as_me:8616: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -6742,10 +8621,10 @@
 fi
 cf_ldd_prog=$ac_cv_prog_cf_ldd_prog
 if test -n "$cf_ldd_prog"; then
-  echo "$as_me:6745: result: $cf_ldd_prog" >&5
+  echo "$as_me:8624: result: $cf_ldd_prog" >&5
 echo "${ECHO_T}$cf_ldd_prog" >&6
 else
-  echo "$as_me:6748: result: no" >&5
+  echo "$as_me:8627: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -6758,37 +8637,37 @@
 	then
 		cf_rpath_oops=
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 6762 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 8641 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int
-main ()
+main (void)
 {
 printf("Hello");
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:6774: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:8653: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:6777: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:6780: \"$ac_try\"") >&5
+  echo "$as_me:8656: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:8659: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:6783: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  cf_rpath_oops=`$cf_ldd_prog conftest$ac_exeext | fgrep ' not found' | sed -e 's% =>.*$%%' |sort | uniq`
-		 cf_rpath_list=`$cf_ldd_prog conftest$ac_exeext | fgrep / | sed -e 's%^.*[ 	]/%/%' -e 's%/[^/][^/]*$%%' |sort | uniq`
+  echo "$as_me:8662: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_rpath_oops=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} ' not found' | sed -e 's% =>.*$%%' |sort | uniq`
+		 cf_rpath_list=`"$cf_ldd_prog" "conftest$ac_exeext" | ${FGREP-fgrep} / | sed -e 's%^.*[ 	]/%/%' -e 's%/[^/][^/]*$%%' |sort | uniq`
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 
 		# If we passed the link-test, but get a "not found" on a given library,
 		# this could be due to inept reconfiguration of gcc to make it only
@@ -6804,11 +8683,11 @@
 					/usr/pkg \
 					/opt/sfw
 				do
-					if test -f $cf_rpath_dir/lib/$cf_rpath_src
+					if test -f "$cf_rpath_dir/lib/$cf_rpath_src"
 					then
 						test -n "$verbose" && echo "	...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src" 1>&6
 
-echo "${as_me:-configure}:6811: testing ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src ..." 1>&5
+echo "${as_me:-configure}:8690: testing ...adding -L$cf_rpath_dir/lib to LDFLAGS for $cf_rpath_src ..." 1>&5
 
 						LDFLAGS="$LDFLAGS -L$cf_rpath_dir/lib"
 						break
@@ -6820,16 +8699,16 @@
 
 	test -n "$verbose" && echo "	...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6
 
-echo "${as_me:-configure}:6823: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5
+echo "${as_me:-configure}:8702: testing ...checking EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5
 
 test -n "$verbose" && echo "	...checking LDFLAGS $LDFLAGS" 1>&6
 
-echo "${as_me:-configure}:6827: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5
+echo "${as_me:-configure}:8706: testing ...checking LDFLAGS $LDFLAGS ..." 1>&5
 
 cf_rpath_dst=
 for cf_rpath_src in $LDFLAGS
 do
-	case $cf_rpath_src in
+	case "$cf_rpath_src" in
 	(-L*)
 
 		# check if this refers to a directory which we will ignore
@@ -6861,7 +8740,7 @@
 			then
 				test -n "$verbose" && echo "	...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6
 
-echo "${as_me:-configure}:6864: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5
+echo "${as_me:-configure}:8743: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5
 
 				EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS"
 			fi
@@ -6874,16 +8753,16 @@
 
 test -n "$verbose" && echo "	...checked LDFLAGS $LDFLAGS" 1>&6
 
-echo "${as_me:-configure}:6877: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5
+echo "${as_me:-configure}:8756: testing ...checked LDFLAGS $LDFLAGS ..." 1>&5
 
 test -n "$verbose" && echo "	...checking LIBS $LIBS" 1>&6
 
-echo "${as_me:-configure}:6881: testing ...checking LIBS $LIBS ..." 1>&5
+echo "${as_me:-configure}:8760: testing ...checking LIBS $LIBS ..." 1>&5
 
 cf_rpath_dst=
 for cf_rpath_src in $LIBS
 do
-	case $cf_rpath_src in
+	case "$cf_rpath_src" in
 	(-L*)
 
 		# check if this refers to a directory which we will ignore
@@ -6915,7 +8794,7 @@
 			then
 				test -n "$verbose" && echo "	...Filter $cf_rpath_src ->$cf_rpath_tmp" 1>&6
 
-echo "${as_me:-configure}:6918: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5
+echo "${as_me:-configure}:8797: testing ...Filter $cf_rpath_src ->$cf_rpath_tmp ..." 1>&5
 
 				EXTRA_LDFLAGS="$cf_rpath_tmp $EXTRA_LDFLAGS"
 			fi
@@ -6928,14 +8807,14 @@
 
 test -n "$verbose" && echo "	...checked LIBS $LIBS" 1>&6
 
-echo "${as_me:-configure}:6931: testing ...checked LIBS $LIBS ..." 1>&5
+echo "${as_me:-configure}:8810: testing ...checked LIBS $LIBS ..." 1>&5
 
 	test -n "$verbose" && echo "	...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS" 1>&6
 
-echo "${as_me:-configure}:6935: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5
+echo "${as_me:-configure}:8814: testing ...checked EXTRA_LDFLAGS $EXTRA_LDFLAGS ..." 1>&5
 
 else
-	echo "$as_me:6938: result: no" >&5
+	echo "$as_me:8817: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -6943,18 +8822,46 @@
 
 fi
 
+### Depending on the system, someone may use rpath to build ncurses but not
+# want users of the package to rely upon that feature.  Give those people an
+# option to suppress that detail from EXTRA_LDFLAGS.
+EXTRA_PKG_LDFLAGS="$LDFLAGS $EXTRA_LDFLAGS"
+if test -n "$EXTRA_PKG_LDFLAGS"
+then
+	echo "$as_me:8831: checking if you want to disable extra LDFLAGS for package-scripts" >&5
+echo $ECHO_N "checking if you want to disable extra LDFLAGS for package-scripts... $ECHO_C" >&6
+
+# Check whether --enable-pkg-ldflags or --disable-pkg-ldflags was given.
+if test "${enable_pkg_ldflags+set}" = set; then
+  enableval="$enable_pkg_ldflags"
+  test "$enableval" != no && enableval=yes
+	if test "$enableval" != "yes" ; then
+    disable_pkg_ldflags=yes
+	else
+		disable_pkg_ldflags=no
+	fi
+else
+  enableval=yes
+	disable_pkg_ldflags=no
+
+fi;
+	echo "$as_me:8848: result: $disable_pkg_ldflags" >&5
+echo "${ECHO_T}$disable_pkg_ldflags" >&6
+	test "$disable_pkg_ldflags" = yes && EXTRA_PKG_LDFLAGS=
+fi
+
 ###############################################################################
 
 ###	use option --with-extra-suffix to append suffix to headers and libraries
-echo "$as_me:6949: checking if you wish to append extra suffix to header/library paths" >&5
-echo $ECHO_N "checking if you wish to append extra suffix to header/library paths... $ECHO_C" >&6
+echo "$as_me:8856: checking for extra suffix to append to header/library paths" >&5
+echo $ECHO_N "checking for extra suffix to append to header/library paths... $ECHO_C" >&6
 EXTRA_SUFFIX=
 
 # Check whether --with-extra-suffix or --without-extra-suffix was given.
 if test "${with_extra_suffix+set}" = set; then
   withval="$with_extra_suffix"
   case x$withval in
-	(no)
+	(xno)
 		;;
 	(xyes|x)
 		EXTRA_SUFFIX=$cf_cv_abi_version
@@ -6965,11 +8872,11 @@
 	esac
 
 fi;
-echo "$as_me:6968: result: $EXTRA_SUFFIX" >&5
-echo "${ECHO_T}$EXTRA_SUFFIX" >&6
+echo "$as_me:8875: result: ${EXTRA_SUFFIX:-(none)}" >&5
+echo "${ECHO_T}${EXTRA_SUFFIX:-(none)}" >&6
 
 ###	use option --disable-overwrite to leave out the link to -lcurses
-echo "$as_me:6972: checking if you wish to install ncurses overwriting curses" >&5
+echo "$as_me:8879: checking if you wish to install ncurses overwriting curses" >&5
 echo $ECHO_N "checking if you wish to install ncurses overwriting curses... $ECHO_C" >&6
 
 # Check whether --enable-overwrite or --disable-overwrite was given.
@@ -6979,10 +8886,10 @@
 else
   if test "$prefix" = "/usr" ; then with_overwrite=yes; else with_overwrite=no; fi
 fi;
-echo "$as_me:6982: result: $with_overwrite" >&5
+echo "$as_me:8889: result: $with_overwrite" >&5
 echo "${ECHO_T}$with_overwrite" >&6
 
-echo "$as_me:6985: checking if external terminfo-database is used" >&5
+echo "$as_me:8892: checking if external terminfo-database is used" >&5
 echo $ECHO_N "checking if external terminfo-database is used... $ECHO_C" >&6
 
 # Check whether --enable-database or --disable-database was given.
@@ -6992,10 +8899,10 @@
 else
   use_database=yes
 fi;
-echo "$as_me:6995: result: $use_database" >&5
+echo "$as_me:8902: result: $use_database" >&5
 echo "${ECHO_T}$use_database" >&6
 
-case $host_os in
+case "$host_os" in
 (os2*)
 	TERMINFO_SRC='${top_srcdir}/misc/emx.src'
 	;;
@@ -7008,7 +8915,7 @@
 if test "$use_database" != no ; then
 	NCURSES_USE_DATABASE=1
 
-	echo "$as_me:7011: checking which terminfo source-file will be installed" >&5
+	echo "$as_me:8918: checking which terminfo source-file will be installed" >&5
 echo $ECHO_N "checking which terminfo source-file will be installed... $ECHO_C" >&6
 
 # Check whether --with-database or --without-database was given.
@@ -7016,10 +8923,10 @@
   withval="$with_database"
   TERMINFO_SRC=$withval
 fi;
-	echo "$as_me:7019: result: $TERMINFO_SRC" >&5
+	echo "$as_me:8926: result: $TERMINFO_SRC" >&5
 echo "${ECHO_T}$TERMINFO_SRC" >&6
 
-	echo "$as_me:7022: checking whether to use hashed database instead of directory/tree" >&5
+	echo "$as_me:8929: checking whether to use hashed database instead of directory/tree" >&5
 echo $ECHO_N "checking whether to use hashed database instead of directory/tree... $ECHO_C" >&6
 
 # Check whether --with-hashed-db or --without-hashed-db was given.
@@ -7029,14 +8936,14 @@
 else
   with_hashed_db=no
 fi;
-	echo "$as_me:7032: result: $with_hashed_db" >&5
+	echo "$as_me:8939: result: $with_hashed_db" >&5
 echo "${ECHO_T}$with_hashed_db" >&6
 else
 	with_hashed_db=no
 fi
 
-echo "$as_me:7038: checking for list of fallback descriptions" >&5
-echo $ECHO_N "checking for list of fallback descriptions... $ECHO_C" >&6
+echo "$as_me:8945: checking for list of fallback terminal descriptions" >&5
+echo $ECHO_N "checking for list of fallback terminal descriptions... $ECHO_C" >&6
 
 # Check whether --with-fallbacks or --without-fallbacks was given.
 if test "${with_fallbacks+set}" = set; then
@@ -7045,11 +8952,505 @@
 else
   with_fallback=
 fi;
-echo "$as_me:7048: result: $with_fallback" >&5
-echo "${ECHO_T}$with_fallback" >&6
-FALLBACK_LIST=`echo "$with_fallback" | sed -e 's/,/ /g'`
+echo "$as_me:8955: result: ${with_fallback:-(none)}" >&5
+echo "${ECHO_T}${with_fallback:-(none)}" >&6
 
-echo "$as_me:7052: checking if you want modern xterm or antique" >&5
+case ".$with_fallback" in
+(.|.no)
+	FALLBACK_LIST=
+	;;
+(.yes)
+	{ echo "$as_me:8963: WARNING: expected a list of terminal descriptions" >&5
+echo "$as_me: WARNING: expected a list of terminal descriptions" >&2;}
+	;;
+(*)
+	FALLBACK_LIST=`echo "$with_fallback" | sed -e 's/,/ /g'`
+	;;
+esac
+
+# The fallback feature in ncurses relies upon tic/infocmp outside the build
+# tree for generating the terminal descriptions that will be compiled into the
+# library.  If your toolchain is old, it may not handle current terminal
+# databases.  Use configure-options to point to the tools which will be used,
+# rather than the first ones found on the $PATH.
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}tic", so it can be a program name with args.
+set dummy ${ac_tool_prefix}tic; ac_word=$2
+echo "$as_me:8979: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_TIC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$TIC"; then
+  ac_cv_prog_TIC="$TIC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_TIC="${ac_tool_prefix}tic"
+echo "$as_me:8994: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+TIC=$ac_cv_prog_TIC
+if test -n "$TIC"; then
+  echo "$as_me:9002: result: $TIC" >&5
+echo "${ECHO_T}$TIC" >&6
+else
+  echo "$as_me:9005: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_TIC"; then
+  ac_ct_TIC=$TIC
+  # Extract the first word of "tic", so it can be a program name with args.
+set dummy tic; ac_word=$2
+echo "$as_me:9014: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_TIC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_TIC"; then
+  ac_cv_prog_ac_ct_TIC="$ac_ct_TIC" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_TIC="tic"
+echo "$as_me:9029: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_TIC=$ac_cv_prog_ac_ct_TIC
+if test -n "$ac_ct_TIC"; then
+  echo "$as_me:9037: result: $ac_ct_TIC" >&5
+echo "${ECHO_T}$ac_ct_TIC" >&6
+else
+  echo "$as_me:9040: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  TIC=$ac_ct_TIC
+else
+  TIC="$ac_cv_prog_TIC"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}infocmp", so it can be a program name with args.
+set dummy ${ac_tool_prefix}infocmp; ac_word=$2
+echo "$as_me:9052: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_INFOCMP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$INFOCMP"; then
+  ac_cv_prog_INFOCMP="$INFOCMP" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_INFOCMP="${ac_tool_prefix}infocmp"
+echo "$as_me:9067: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+INFOCMP=$ac_cv_prog_INFOCMP
+if test -n "$INFOCMP"; then
+  echo "$as_me:9075: result: $INFOCMP" >&5
+echo "${ECHO_T}$INFOCMP" >&6
+else
+  echo "$as_me:9078: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_INFOCMP"; then
+  ac_ct_INFOCMP=$INFOCMP
+  # Extract the first word of "infocmp", so it can be a program name with args.
+set dummy infocmp; ac_word=$2
+echo "$as_me:9087: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_INFOCMP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_INFOCMP"; then
+  ac_cv_prog_ac_ct_INFOCMP="$ac_ct_INFOCMP" # Let the user override the test.
+else
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_INFOCMP="infocmp"
+echo "$as_me:9102: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_INFOCMP=$ac_cv_prog_ac_ct_INFOCMP
+if test -n "$ac_ct_INFOCMP"; then
+  echo "$as_me:9110: result: $ac_ct_INFOCMP" >&5
+echo "${ECHO_T}$ac_ct_INFOCMP" >&6
+else
+  echo "$as_me:9113: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  INFOCMP=$ac_ct_INFOCMP
+else
+  INFOCMP="$ac_cv_prog_INFOCMP"
+fi
+
+if test -n "$FALLBACK_LIST"
+then
+
+# Check whether --with-tic-path or --without-tic-path was given.
+if test "${with_tic_path+set}" = set; then
+  withval="$with_tic_path"
+  echo "$as_me:9128: checking for tic program for fallbacks" >&5
+echo $ECHO_N "checking for tic program for fallbacks... $ECHO_C" >&6
+		TIC=$withval
+		echo "$as_me:9131: result: $TIC" >&5
+echo "${ECHO_T}$TIC" >&6
+
+if test "x$prefix" != xNONE; then
+	cf_path_syntax="$prefix"
+else
+	cf_path_syntax="$ac_default_prefix"
+fi
+
+case ".$TIC" in
+(.\$\(*\)*|.\'*\'*)
+	;;
+(..|./*|.\\*)
+	;;
+(.[a-zA-Z]:[\\/]*) # OS/2 EMX
+	;;
+(.\$\{*prefix\}*|.\$\{*dir\}*)
+	eval TIC="$TIC"
+	case ".$TIC" in
+	(.NONE/*)
+		TIC=`echo "$TIC" | sed -e s%NONE%$cf_path_syntax%`
+		;;
+	esac
+	;;
+(.no|.NONE/*)
+	TIC=`echo "$TIC" | sed -e s%NONE%$cf_path_syntax%`
+	;;
+(*)
+	{ { echo "$as_me:9159: error: expected a pathname, not \"$TIC\"" >&5
+echo "$as_me: error: expected a pathname, not \"$TIC\"" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+esac
+
+else
+
+test -z "$TIC" && TIC="tic"
+for ac_prog in $TIC tic
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:9172: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_TIC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $TIC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_TIC="$TIC" # Let the user override the test with a path.
+  ;;
+  *)
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH:/usr/local/ncurses/bin"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  if $as_executable_p "$ac_dir/$ac_word"; then
+   ac_cv_path_TIC="$ac_dir/$ac_word"
+   echo "$as_me:9189: found $ac_dir/$ac_word" >&5
+   break
+fi
+done
+
+  ;;
+esac
+fi
+TIC=$ac_cv_path_TIC
+
+if test -n "$TIC"; then
+  echo "$as_me:9200: result: $TIC" >&5
+echo "${ECHO_T}$TIC" >&6
+else
+  echo "$as_me:9203: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$TIC" && break
+done
+test -n "$TIC" || TIC="$TIC"
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS:- 	}"; cf_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR"
+for cf_temp in $ac_cv_path_TIC
+do
+	if test -z "$cf_path_prog" ; then
+		if test "$with_full_paths" = yes ; then
+
+if test "x$prefix" != xNONE; then
+	cf_path_syntax="$prefix"
+else
+	cf_path_syntax="$ac_default_prefix"
+fi
+
+case ".$cf_temp" in
+(.\$\(*\)*|.\'*\'*)
+	;;
+(..|./*|.\\*)
+	;;
+(.[a-zA-Z]:[\\/]*) # OS/2 EMX
+	;;
+(.\$\{*prefix\}*|.\$\{*dir\}*)
+	eval cf_temp="$cf_temp"
+	case ".$cf_temp" in
+	(.NONE/*)
+		cf_temp=`echo "$cf_temp" | sed -e s%NONE%$cf_path_syntax%`
+		;;
+	esac
+	;;
+(.no|.NONE/*)
+	cf_temp=`echo "$cf_temp" | sed -e s%NONE%$cf_path_syntax%`
+	;;
+(*)
+	break
+	;;
+esac
+
+			cf_path_prog="$cf_temp"
+		else
+			cf_path_prog="`basename "$cf_temp"`"
+		fi
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+if test -n "$cf_path_prog" ; then
+
+echo "${as_me:-configure}:9262: testing defining path for ${cf_path_prog} ..." 1>&5
+
+cat >>confdefs.h <<EOF
+#define TIC_PATH "$cf_path_prog"
+EOF
+
+	test -n "$cf_path_args" &&
+cat >>confdefs.h <<EOF
+#define TIC_ARGS "$cf_path_args"
+EOF
+
+fi
+
+		if test -z "$TIC"
+		then
+			{ echo "$as_me:9277: WARNING: no tic program found for fallbacks" >&5
+echo "$as_me: WARNING: no tic program found for fallbacks" >&2;}
+		fi
+
+fi;
+
+# Check whether --with-infocmp-path or --without-infocmp-path was given.
+if test "${with_infocmp_path+set}" = set; then
+  withval="$with_infocmp_path"
+  echo "$as_me:9286: checking for infocmp program for fallbacks" >&5
+echo $ECHO_N "checking for infocmp program for fallbacks... $ECHO_C" >&6
+		INFOCMP=$withval
+		echo "$as_me:9289: result: $INFOCMP" >&5
+echo "${ECHO_T}$INFOCMP" >&6
+
+if test "x$prefix" != xNONE; then
+	cf_path_syntax="$prefix"
+else
+	cf_path_syntax="$ac_default_prefix"
+fi
+
+case ".$INFOCMP" in
+(.\$\(*\)*|.\'*\'*)
+	;;
+(..|./*|.\\*)
+	;;
+(.[a-zA-Z]:[\\/]*) # OS/2 EMX
+	;;
+(.\$\{*prefix\}*|.\$\{*dir\}*)
+	eval INFOCMP="$INFOCMP"
+	case ".$INFOCMP" in
+	(.NONE/*)
+		INFOCMP=`echo "$INFOCMP" | sed -e s%NONE%$cf_path_syntax%`
+		;;
+	esac
+	;;
+(.no|.NONE/*)
+	INFOCMP=`echo "$INFOCMP" | sed -e s%NONE%$cf_path_syntax%`
+	;;
+(*)
+	{ { echo "$as_me:9317: error: expected a pathname, not \"$INFOCMP\"" >&5
+echo "$as_me: error: expected a pathname, not \"$INFOCMP\"" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+esac
+
+else
+
+test -z "$INFOCMP" && INFOCMP="infocmp"
+for ac_prog in $INFOCMP infocmp
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:9330: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_INFOCMP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $INFOCMP in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_INFOCMP="$INFOCMP" # Let the user override the test with a path.
+  ;;
+  *)
+  ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH:/usr/local/ncurses/bin"
+for ac_dir in $ac_dummy; do
+  IFS=$ac_save_IFS
+  test -z "$ac_dir" && ac_dir=.
+  if $as_executable_p "$ac_dir/$ac_word"; then
+   ac_cv_path_INFOCMP="$ac_dir/$ac_word"
+   echo "$as_me:9347: found $ac_dir/$ac_word" >&5
+   break
+fi
+done
+
+  ;;
+esac
+fi
+INFOCMP=$ac_cv_path_INFOCMP
+
+if test -n "$INFOCMP"; then
+  echo "$as_me:9358: result: $INFOCMP" >&5
+echo "${ECHO_T}$INFOCMP" >&6
+else
+  echo "$as_me:9361: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$INFOCMP" && break
+done
+test -n "$INFOCMP" || INFOCMP="$INFOCMP"
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS:- 	}"; cf_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR"
+for cf_temp in $ac_cv_path_INFOCMP
+do
+	if test -z "$cf_path_prog" ; then
+		if test "$with_full_paths" = yes ; then
+
+if test "x$prefix" != xNONE; then
+	cf_path_syntax="$prefix"
+else
+	cf_path_syntax="$ac_default_prefix"
+fi
+
+case ".$cf_temp" in
+(.\$\(*\)*|.\'*\'*)
+	;;
+(..|./*|.\\*)
+	;;
+(.[a-zA-Z]:[\\/]*) # OS/2 EMX
+	;;
+(.\$\{*prefix\}*|.\$\{*dir\}*)
+	eval cf_temp="$cf_temp"
+	case ".$cf_temp" in
+	(.NONE/*)
+		cf_temp=`echo "$cf_temp" | sed -e s%NONE%$cf_path_syntax%`
+		;;
+	esac
+	;;
+(.no|.NONE/*)
+	cf_temp=`echo "$cf_temp" | sed -e s%NONE%$cf_path_syntax%`
+	;;
+(*)
+	break
+	;;
+esac
+
+			cf_path_prog="$cf_temp"
+		else
+			cf_path_prog="`basename "$cf_temp"`"
+		fi
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+if test -n "$cf_path_prog" ; then
+
+echo "${as_me:-configure}:9420: testing defining path for ${cf_path_prog} ..." 1>&5
+
+cat >>confdefs.h <<EOF
+#define INFOCMP_PATH "$cf_path_prog"
+EOF
+
+	test -n "$cf_path_args" &&
+cat >>confdefs.h <<EOF
+#define INFOCMP_ARGS "$cf_path_args"
+EOF
+
+fi
+
+		if test -z "$INFOCMP"
+		then
+			{ echo "$as_me:9435: WARNING: no infocmp program found for fallbacks" >&5
+echo "$as_me: WARNING: no infocmp program found for fallbacks" >&2;}
+		fi
+
+fi;
+
+	test -z "$TIC" && FALLBACK_LIST=
+	test -z "$INFOCMP" && FALLBACK_LIST=
+	if test -z "$FALLBACK_LIST"
+	then
+		{ echo "$as_me:9445: WARNING: ignoring fallback option because tic/infocmp are not available" >&5
+echo "$as_me: WARNING: ignoring fallback option because tic/infocmp are not available" >&2;}
+	fi
+fi
+
+USE_FALLBACKS=
+test -z "$FALLBACK_LIST" && USE_FALLBACKS="#"
+
+echo "$as_me:9453: checking if you want modern xterm or antique" >&5
 echo $ECHO_N "checking if you want modern xterm or antique... $ECHO_C" >&6
 
 # Check whether --with-xterm-new or --without-xterm-new was given.
@@ -7059,15 +9460,24 @@
 else
   with_xterm_new=yes
 fi;
-case $with_xterm_new in
+case "$with_xterm_new" in
 (no) with_xterm_new=xterm-old;;
 (*)	 with_xterm_new=xterm-new;;
 esac
-echo "$as_me:7066: result: $with_xterm_new" >&5
+echo "$as_me:9467: result: $with_xterm_new" >&5
 echo "${ECHO_T}$with_xterm_new" >&6
 WHICH_XTERM=$with_xterm_new
 
-echo "$as_me:7070: checking if xterm backspace sends BS or DEL" >&5
+case $host_os in
+(*linux-gnu|*cygwin|*mingw32|*msys)
+	want_xterm_kbs=DEL
+	;;
+(*)
+	want_xterm_kbs=BS
+	;;
+esac
+
+echo "$as_me:9480: checking if xterm backspace sends BS or DEL" >&5
 echo $ECHO_N "checking if xterm backspace sends BS or DEL... $ECHO_C" >&6
 
 # Check whether --with-xterm-kbs or --without-xterm-kbs was given.
@@ -7075,7 +9485,7 @@
   withval="$with_xterm_kbs"
   with_xterm_kbs=$withval
 else
-  with_xterm_kbs=BS
+  with_xterm_kbs=auto
 fi;
 case x$with_xterm_kbs in
 (xyes|xno|xBS|xbs|x8)
@@ -7084,21 +9494,30 @@
 (xDEL|xdel|x127)
 	with_xterm_kbs=DEL
 	;;
+(xauto)
+	with_xterm_kbs=$want_xterm_kbs
+	;;
 (*)
 	with_xterm_kbs=$withval
 	;;
 esac
-echo "$as_me:7091: result: $with_xterm_kbs" >&5
+echo "$as_me:9504: result: $with_xterm_kbs" >&5
 echo "${ECHO_T}$with_xterm_kbs" >&6
 XTERM_KBS=$with_xterm_kbs
 
+if test "x$with_xterm_kbs" != "x$want_xterm_kbs"
+then
+	{ echo "$as_me:9510: WARNING: expected --with-xterm-kbs=$want_xterm_kbs for $host_os, have $with_xterm_kbs" >&5
+echo "$as_me: WARNING: expected --with-xterm-kbs=$want_xterm_kbs for $host_os, have $with_xterm_kbs" >&2;}
+fi
+
 MAKE_TERMINFO=
 if test "$use_database" = no ; then
 	TERMINFO="${datadir}/terminfo"
 	MAKE_TERMINFO="#"
 else
 
-echo "$as_me:7101: checking for list of terminfo directories" >&5
+echo "$as_me:9520: checking for list of terminfo directories" >&5
 echo $ECHO_N "checking for list of terminfo directories... $ECHO_C" >&6
 
 # Check whether --with-terminfo-dirs or --without-terminfo-dirs was given.
@@ -7126,19 +9545,19 @@
 	;;
 (.[a-zA-Z]:[\\/]*) # OS/2 EMX
 	;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
 	eval cf_src_path="$cf_src_path"
 	case ".$cf_src_path" in
 	(.NONE/*)
-		cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%`
+		cf_src_path=`echo "$cf_src_path" | sed -e s%NONE%$cf_path_syntax%`
 		;;
 	esac
 	;;
 (.no|.NONE/*)
-	cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%`
+	cf_src_path=`echo "$cf_src_path" | sed -e s%NONE%$cf_path_syntax%`
 	;;
 (*)
-	{ { echo "$as_me:7141: error: expected a pathname, not \"$cf_src_path\"" >&5
+	{ { echo "$as_me:9560: error: expected a pathname, not \"$cf_src_path\"" >&5
 echo "$as_me: error: expected a pathname, not \"$cf_src_path\"" >&2;}
    { (exit 1); exit 1; }; }
 	;;
@@ -7161,14 +9580,22 @@
 	;;
 esac
 
-echo "$as_me:7164: result: $TERMINFO_DIRS" >&5
+echo "$as_me:9583: result: $TERMINFO_DIRS" >&5
 echo "${ECHO_T}$TERMINFO_DIRS" >&6
 test -n "$TERMINFO_DIRS" &&
 cat >>confdefs.h <<EOF
 #define TERMINFO_DIRS "$TERMINFO_DIRS"
 EOF
 
-echo "$as_me:7171: checking for default terminfo directory" >&5
+case "x$TERMINFO" in
+x???:*)
+	{ echo "$as_me:9592: WARNING: ignoring non-directory/file TERMINFO value" >&5
+echo "$as_me: WARNING: ignoring non-directory/file TERMINFO value" >&2;}
+	unset TERMINFO
+	;;
+esac
+
+echo "$as_me:9598: checking for default terminfo directory" >&5
 echo $ECHO_N "checking for default terminfo directory... $ECHO_C" >&6
 
 # Check whether --with-default-terminfo-dir or --without-default-terminfo-dir was given.
@@ -7192,19 +9619,19 @@
 	;;
 (.[a-zA-Z]:[\\/]*) # OS/2 EMX
 	;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
 	eval withval="$withval"
 	case ".$withval" in
 	(.NONE/*)
-		withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+		withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
 		;;
 	esac
 	;;
 (.no|.NONE/*)
-	withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+	withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
 	;;
 (*)
-	{ { echo "$as_me:7207: error: expected a pathname, not \"$withval\"" >&5
+	{ { echo "$as_me:9634: error: expected a pathname, not \"$withval\"" >&5
 echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;}
    { (exit 1); exit 1; }; }
 	;;
@@ -7213,7 +9640,7 @@
 fi
 eval TERMINFO="$withval"
 
-echo "$as_me:7216: result: $TERMINFO" >&5
+echo "$as_me:9643: result: $TERMINFO" >&5
 echo "${ECHO_T}$TERMINFO" >&6
 
 cat >>confdefs.h <<EOF
@@ -7224,7 +9651,7 @@
 
 ###	use option --disable-big-core to make tic run on small machines
 ###	We need 4Mb, check if we can allocate 50% more than that.
-echo "$as_me:7227: checking if big-core option selected" >&5
+echo "$as_me:9654: checking if big-core option selected" >&5
 echo $ECHO_N "checking if big-core option selected... $ECHO_C" >&6
 
 # Check whether --enable-big-core or --disable-big-core was given.
@@ -7235,13 +9662,13 @@
   if test "$cross_compiling" = yes; then
   with_big_core=no
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 7239 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 9666 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
 #include <string.h>
-int main() {
+int main(void) {
 	unsigned long n = 6000000L;
 	char *s = malloc(n);
 	if (s != 0)
@@ -7249,28 +9676,28 @@
 	${cf_cv_main_return:-return}(s == 0);
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:7253: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:9680: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:7256: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:7258: \"$ac_try\"") >&5
+  echo "$as_me:9683: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:9685: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:7261: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:9688: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   with_big_core=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 with_big_core=no
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 fi;
-echo "$as_me:7273: result: $with_big_core" >&5
+echo "$as_me:9700: result: $with_big_core" >&5
 echo "${ECHO_T}$with_big_core" >&6
 test "x$with_big_core" = "xyes" &&
 cat >>confdefs.h <<\EOF
@@ -7280,7 +9707,7 @@
 ### ISO C only guarantees 512-char strings, we have tables which load faster
 ### when constructed using "big" strings.  More than the C compiler, the awk
 ### program is a limit on most vendor UNIX systems.  Check that we can build.
-echo "$as_me:7283: checking if big-strings option selected" >&5
+echo "$as_me:9710: checking if big-strings option selected" >&5
 echo $ECHO_N "checking if big-strings option selected... $ECHO_C" >&6
 
 # Check whether --enable-big-strings or --disable-big-strings was given.
@@ -7304,14 +9731,14 @@
 	esac
 
 fi;
-echo "$as_me:7307: result: $with_big_strings" >&5
+echo "$as_me:9734: result: $with_big_strings" >&5
 echo "${ECHO_T}$with_big_strings" >&6
 
 USE_BIG_STRINGS=0
 test "x$with_big_strings" = "xyes" && USE_BIG_STRINGS=1
 
 ###	use option --enable-termcap to compile in the termcap fallback support
-echo "$as_me:7314: checking if you want termcap-fallback support" >&5
+echo "$as_me:9741: checking if you want termcap-fallback support" >&5
 echo $ECHO_N "checking if you want termcap-fallback support... $ECHO_C" >&6
 
 # Check whether --enable-termcap or --disable-termcap was given.
@@ -7321,14 +9748,14 @@
 else
   with_termcap=no
 fi;
-echo "$as_me:7324: result: $with_termcap" >&5
+echo "$as_me:9751: result: $with_termcap" >&5
 echo "${ECHO_T}$with_termcap" >&6
 
 NCURSES_USE_TERMCAP=0
 if test "x$with_termcap" != "xyes" ; then
 	if test "$use_database" = no ; then
 		if test -z "$with_fallback" ; then
-			{ { echo "$as_me:7331: error: You have disabled the database w/o specifying fallbacks" >&5
+			{ { echo "$as_me:9758: error: You have disabled the database w/o specifying fallbacks" >&5
 echo "$as_me: error: You have disabled the database w/o specifying fallbacks" >&2;}
    { (exit 1); exit 1; }; }
 		fi
@@ -7341,13 +9768,13 @@
 else
 
 	if test "$with_ticlib" != no ; then
-		{ { echo "$as_me:7344: error: Options --with-ticlib and --enable-termcap cannot be combined" >&5
+		{ { echo "$as_me:9771: error: Options --with-ticlib and --enable-termcap cannot be combined" >&5
 echo "$as_me: error: Options --with-ticlib and --enable-termcap cannot be combined" >&2;}
    { (exit 1); exit 1; }; }
 	fi
 
 	NCURSES_USE_TERMCAP=1
-	echo "$as_me:7350: checking for list of termcap files" >&5
+	echo "$as_me:9777: checking for list of termcap files" >&5
 echo $ECHO_N "checking for list of termcap files... $ECHO_C" >&6
 
 # Check whether --with-termpath or --without-termpath was given.
@@ -7375,19 +9802,19 @@
 	;;
 (.[a-zA-Z]:[\\/]*) # OS/2 EMX
 	;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
 	eval cf_src_path="$cf_src_path"
 	case ".$cf_src_path" in
 	(.NONE/*)
-		cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%`
+		cf_src_path=`echo "$cf_src_path" | sed -e s%NONE%$cf_path_syntax%`
 		;;
 	esac
 	;;
 (.no|.NONE/*)
-	cf_src_path=`echo $cf_src_path | sed -e s%NONE%$cf_path_syntax%`
+	cf_src_path=`echo "$cf_src_path" | sed -e s%NONE%$cf_path_syntax%`
 	;;
 (*)
-	{ { echo "$as_me:7390: error: expected a pathname, not \"$cf_src_path\"" >&5
+	{ { echo "$as_me:9817: error: expected a pathname, not \"$cf_src_path\"" >&5
 echo "$as_me: error: expected a pathname, not \"$cf_src_path\"" >&2;}
    { (exit 1); exit 1; }; }
 	;;
@@ -7410,7 +9837,7 @@
 	;;
 esac
 
-	echo "$as_me:7413: result: $TERMPATH" >&5
+	echo "$as_me:9840: result: $TERMPATH" >&5
 echo "${ECHO_T}$TERMPATH" >&6
 	test -n "$TERMPATH" &&
 cat >>confdefs.h <<EOF
@@ -7418,7 +9845,7 @@
 EOF
 
 	###	use option --enable-getcap to use a hacked getcap for reading termcaps
-	echo "$as_me:7421: checking if fast termcap-loader is needed" >&5
+	echo "$as_me:9848: checking if fast termcap-loader is needed" >&5
 echo $ECHO_N "checking if fast termcap-loader is needed... $ECHO_C" >&6
 
 # Check whether --enable-getcap or --disable-getcap was given.
@@ -7428,14 +9855,14 @@
 else
   with_getcap=no
 fi;
-	echo "$as_me:7431: result: $with_getcap" >&5
+	echo "$as_me:9858: result: $with_getcap" >&5
 echo "${ECHO_T}$with_getcap" >&6
 	test "x$with_getcap" = "xyes" &&
 cat >>confdefs.h <<\EOF
 #define USE_GETCAP 1
 EOF
 
-	echo "$as_me:7438: checking if translated termcaps will be cached in ~/.terminfo" >&5
+	echo "$as_me:9865: checking if translated termcaps will be cached in ~/.terminfo" >&5
 echo $ECHO_N "checking if translated termcaps will be cached in ~/.terminfo... $ECHO_C" >&6
 
 # Check whether --enable-getcap-cache or --disable-getcap-cache was given.
@@ -7445,7 +9872,7 @@
 else
   with_getcap_cache=no
 fi;
-	echo "$as_me:7448: result: $with_getcap_cache" >&5
+	echo "$as_me:9875: result: $with_getcap_cache" >&5
 echo "${ECHO_T}$with_getcap_cache" >&6
 	test "x$with_getcap_cache" = "xyes" &&
 cat >>confdefs.h <<\EOF
@@ -7455,7 +9882,7 @@
 fi
 
 ###   Use option --disable-home-terminfo to completely remove ~/.terminfo
-echo "$as_me:7458: checking if ~/.terminfo is wanted" >&5
+echo "$as_me:9885: checking if ~/.terminfo is wanted" >&5
 echo $ECHO_N "checking if ~/.terminfo is wanted... $ECHO_C" >&6
 
 # Check whether --enable-home-terminfo or --disable-home-terminfo was given.
@@ -7465,15 +9892,15 @@
 else
   with_home_terminfo=yes
 fi;
-echo "$as_me:7468: result: $with_home_terminfo" >&5
+echo "$as_me:9895: result: $with_home_terminfo" >&5
 echo "${ECHO_T}$with_home_terminfo" >&6
 test "x$with_home_terminfo" = "xyes" &&
 cat >>confdefs.h <<\EOF
 #define USE_HOME_TERMINFO 1
 EOF
 
-echo "$as_me:7475: checking if you want to use restricted environment when running as root" >&5
-echo $ECHO_N "checking if you want to use restricted environment when running as root... $ECHO_C" >&6
+echo "$as_me:9902: checking if you want to permit root to use ncurses environment variables" >&5
+echo $ECHO_N "checking if you want to permit root to use ncurses environment variables... $ECHO_C" >&6
 
 # Check whether --enable-root-environ or --disable-root-environ was given.
 if test "${enable_root_environ+set}" = set; then
@@ -7482,80 +9909,164 @@
 else
   with_root_environ=yes
 fi;
-echo "$as_me:7485: result: $with_root_environ" >&5
+echo "$as_me:9912: result: $with_root_environ" >&5
 echo "${ECHO_T}$with_root_environ" >&6
 test "x$with_root_environ" = xyes &&
 cat >>confdefs.h <<\EOF
 #define USE_ROOT_ENVIRON 1
 EOF
 
+echo "$as_me:9919: checking if you want to permit setuid programs to access all files" >&5
+echo $ECHO_N "checking if you want to permit setuid programs to access all files... $ECHO_C" >&6
+
+# Check whether --enable-root-access or --disable-root-access was given.
+if test "${enable_root_access+set}" = set; then
+  enableval="$enable_root_access"
+  with_root_access=$enableval
+else
+  with_root_access=yes
+fi;
+echo "$as_me:9929: result: $with_root_access" >&5
+echo "${ECHO_T}$with_root_access" >&6
+test "x$with_root_access" = xyes &&
+cat >>confdefs.h <<\EOF
+#define USE_ROOT_ACCESS 1
+EOF
+
+echo "$as_me:9936: checking if you want to permit setuid use of ncurses environment variables" >&5
+echo $ECHO_N "checking if you want to permit setuid use of ncurses environment variables... $ECHO_C" >&6
+
+# Check whether --enable-setuid-environ or --disable-setuid-environ was given.
+if test "${enable_setuid_environ+set}" = set; then
+  enableval="$enable_setuid_environ"
+  with_setuid_environ=$enableval
+else
+  with_setuid_environ=$with_root_environ
+fi;
+echo "$as_me:9946: result: $with_setuid_environ" >&5
+echo "${ECHO_T}$with_setuid_environ" >&6
+test "x$with_setuid_environ" = xyes &&
+cat >>confdefs.h <<\EOF
+#define USE_SETUID_ENVIRON 1
+EOF
+
 ###   Use option --enable-symlinks to make tic use symlinks, not hard links
 ###   to reduce storage requirements for the terminfo database.
 
+for ac_header in \
+unistd.h \
+
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:9961: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 9967 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:9971: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:9977: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+  cat "conftest.$ac_ext" >&5
+  eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:9996: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
 for ac_func in \
 	remove \
 	unlink
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:7500: checking for $ac_func" >&5
+echo "$as_me:10011: checking for $ac_func" >&5
 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
 if eval "test \"\${$as_ac_var+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 7506 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 10017 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
+#define $ac_func autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
+
 #ifdef __cplusplus
 extern "C"
 #endif
+
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-char (*f) ();
+char $ac_func (void);
 
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
+
+/* The GNU C library defines stubs for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#error found stub for $ac_func
 #endif
 
+	return $ac_func ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7537: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:10048: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:7540: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:7543: \"$ac_try\"") >&5
+  echo "$as_me:10051: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:10054: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:7546: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:10057: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 eval "$as_ac_var=no"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:7556: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+echo "$as_me:10067: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
 EOF
@@ -7570,65 +10081,65 @@
 		symlink
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:7573: checking for $ac_func" >&5
+echo "$as_me:10084: checking for $ac_func" >&5
 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
 if eval "test \"\${$as_ac_var+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 7579 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 10090 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
+#define $ac_func autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
+
 #ifdef __cplusplus
 extern "C"
 #endif
+
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-char (*f) ();
+char $ac_func (void);
 
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
+
+/* The GNU C library defines stubs for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#error found stub for $ac_func
 #endif
 
+	return $ac_func ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:7610: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:10121: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:7613: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:7616: \"$ac_try\"") >&5
+  echo "$as_me:10124: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:10127: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:7619: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:10130: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 eval "$as_ac_var=no"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:7629: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+echo "$as_me:10140: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
 EOF
@@ -7637,7 +10148,7 @@
 done
 
 else
-	echo "$as_me:7640: checking if link/symlink functions work" >&5
+	echo "$as_me:10151: checking if link/symlink functions work" >&5
 echo $ECHO_N "checking if link/symlink functions work... $ECHO_C" >&6
 if test "${cf_cv_link_funcs+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -7649,64 +10160,68 @@
 
 			eval 'ac_cv_func_'$cf_func'=error'
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 7653 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 10164 "configure"
 #include "confdefs.h"
 
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-int main()
+$ac_includes_default
+
+int main(void)
 {
 	int fail = 0;
-	char *src = "config.log";
-	char *dst = "conftest.chk";
-	struct stat src_sb;
-	struct stat dst_sb;
-
-	stat(src, &src_sb);
-	fail = ($cf_func("config.log", "conftest.chk") < 0)
-	    || (stat(dst, &dst_sb) < 0)
-	    || (dst_sb.st_mtime != src_sb.st_mtime);
+	char src[] = "conftest.tmp";
+	char dst[] = "conftest.chk";
+	struct stat src_sb, dst_sb;
+	FILE *fp = fopen(src, "w");
+	if (fp == 0) { fail = 3; } else {
+		fclose(fp); stat(src, &src_sb);
+		if ($cf_func(src, dst) < 0) {
+			fail = 1;
+		} else if (stat(dst, &dst_sb) < 0) {
+			fail = 2;
+		} else {
+			long diff = (dst_sb.st_mtime - src_sb.st_mtime);
+			if (diff < 0) diff = -diff;
+			if (diff > 2) fail = 3;
+		}
+	}
 #ifdef HAVE_UNLINK
-	unlink(dst);
+	unlink(dst); unlink(src);
 #else
-	remove(dst);
+	remove(dst); remove(src);
 #endif
 	${cf_cv_main_return:-return} (fail);
 }
 
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:7683: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:10198: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:7686: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:7688: \"$ac_try\"") >&5
+  echo "$as_me:10201: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:10203: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:7691: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:10206: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 			cf_cv_link_funcs="$cf_cv_link_funcs $cf_func"
 			eval 'ac_cv_func_'$cf_func'=yes'
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
 			eval 'ac_cv_func_'$cf_func'=no'
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 		done
 		test -z "$cf_cv_link_funcs" && cf_cv_link_funcs=no
 
 fi
-echo "$as_me:7709: result: $cf_cv_link_funcs" >&5
+echo "$as_me:10224: result: $cf_cv_link_funcs" >&5
 echo "${ECHO_T}$cf_cv_link_funcs" >&6
 	test "$ac_cv_func_link"    = yes &&
 cat >>confdefs.h <<\EOF
@@ -7726,7 +10241,7 @@
 # soft links (symbolic links) are useful for some systems where hard links do
 # not work, or to make it simpler to copy terminfo trees around.
 if test "x$ac_cv_func_symlink" = xyes ; then
-	echo "$as_me:7729: checking if tic should use symbolic links" >&5
+	echo "$as_me:10244: checking if tic should use symbolic links" >&5
 echo $ECHO_N "checking if tic should use symbolic links... $ECHO_C" >&6
 
 # Check whether --enable-symlinks or --disable-symlinks was given.
@@ -7736,21 +10251,21 @@
 else
   with_symlinks=no
 fi;
-	echo "$as_me:7739: result: $with_symlinks" >&5
+	echo "$as_me:10254: result: $with_symlinks" >&5
 echo "${ECHO_T}$with_symlinks" >&6
 fi
 
 # If we have hard links and did not choose to use soft links instead, there is
 # no reason to make this choice optional - use the hard links.
 if test "$with_symlinks" = no ; then
-	echo "$as_me:7746: checking if tic should use hard links" >&5
+	echo "$as_me:10261: checking if tic should use hard links" >&5
 echo $ECHO_N "checking if tic should use hard links... $ECHO_C" >&6
 	if test "x$ac_cv_func_link" = xyes ; then
 		with_links=yes
 	else
 		with_links=no
 	fi
-	echo "$as_me:7753: result: $with_links" >&5
+	echo "$as_me:10268: result: $with_links" >&5
 echo "${ECHO_T}$with_links" >&6
 fi
 
@@ -7765,7 +10280,8 @@
 EOF
 
 ###   use option --enable-broken-linker to force on use of broken-linker support
-echo "$as_me:7768: checking if you want broken-linker support code" >&5
+
+echo "$as_me:10284: checking if you want broken-linker support code" >&5
 echo $ECHO_N "checking if you want broken-linker support code... $ECHO_C" >&6
 
 # Check whether --enable-broken_linker or --disable-broken_linker was given.
@@ -7773,12 +10289,12 @@
   enableval="$enable_broken_linker"
   with_broken_linker=$enableval
 else
-  with_broken_linker=${BROKEN_LINKER:-no}
+  with_broken_linker=no
 fi;
-echo "$as_me:7778: result: $with_broken_linker" >&5
+echo "$as_me:10294: result: $with_broken_linker" >&5
 echo "${ECHO_T}$with_broken_linker" >&6
 
-BROKEN_LINKER=0
+: "${BROKEN_LINKER:=0}"
 if test "x$with_broken_linker" = xyes ; then
 
 cat >>confdefs.h <<\EOF
@@ -7786,25 +10302,10 @@
 EOF
 
 	BROKEN_LINKER=1
-elif test "$DFT_LWR_MODEL" = shared ; then
-	case $cf_cv_system_name in
-	(cygwin*)
-
-cat >>confdefs.h <<\EOF
-#define BROKEN_LINKER 1
-EOF
-
-		BROKEN_LINKER=1
-		test -n "$verbose" && echo "	cygwin linker is broken anyway" 1>&6
-
-echo "${as_me:-configure}:7800: testing cygwin linker is broken anyway ..." 1>&5
-
-		;;
-	esac
 fi
 
 ###   use option --enable-bsdpad to have tputs process BSD-style prefix padding
-echo "$as_me:7807: checking if tputs should process BSD-style prefix padding" >&5
+echo "$as_me:10308: checking if tputs should process BSD-style prefix padding" >&5
 echo $ECHO_N "checking if tputs should process BSD-style prefix padding... $ECHO_C" >&6
 
 # Check whether --enable-bsdpad or --disable-bsdpad was given.
@@ -7814,7 +10315,7 @@
 else
   with_bsdpad=no
 fi;
-echo "$as_me:7817: result: $with_bsdpad" >&5
+echo "$as_me:10318: result: $with_bsdpad" >&5
 echo "${ECHO_T}$with_bsdpad" >&6
 test "x$with_bsdpad" = xyes &&
 cat >>confdefs.h <<\EOF
@@ -7833,17 +10334,65 @@
 # Check to define _XOPEN_SOURCE "automatically"
 CPPFLAGS_before_XOPEN="$CPPFLAGS"
 
-cf_XOPEN_SOURCE=500
+echo "$as_me:10337: checking if the POSIX test-macros are already defined" >&5
+echo $ECHO_N "checking if the POSIX test-macros are already defined... $ECHO_C" >&6
+if test "${cf_cv_posix_visible+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 10344 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int
+main (void)
+{
+
+#if defined(__POSIX_VISIBLE) && ((__POSIX_VISIBLE - 0L) > 0) \
+	&& defined(__XSI_VISIBLE) && ((__XSI_VISIBLE - 0L) > 0) \
+	&& defined(__BSD_VISIBLE) && ((__BSD_VISIBLE - 0L) > 0) \
+	&& defined(__ISO_C_VISIBLE) && ((__ISO_C_VISIBLE - 0L) > 0)
+#error conflicting symbols found
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10363: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:10366: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:10369: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:10372: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_posix_visible=no
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_posix_visible=yes
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
+fi
+echo "$as_me:10383: result: $cf_cv_posix_visible" >&5
+echo "${ECHO_T}$cf_cv_posix_visible" >&6
+
+if test "$cf_cv_posix_visible" = no; then
+
+cf_XOPEN_SOURCE=600
 cf_POSIX_C_SOURCE=199506L
 cf_xopen_source=
 
-case $host_os in
+case "$host_os" in
 (aix[4-7]*)
 	cf_xopen_source="-D_ALL_SOURCE"
 	;;
-(cygwin|msys)
-	cf_XOPEN_SOURCE=600
-	;;
 (darwin[0-8].*)
 	cf_xopen_source="-D_APPLE_C_SOURCE"
 	;;
@@ -7851,7 +10400,7 @@
 	cf_xopen_source="-D_DARWIN_C_SOURCE"
 	cf_XOPEN_SOURCE=
 	;;
-(freebsd*|dragonfly*)
+(freebsd*|dragonfly*|midnightbsd*)
 	# 5.x headers associate
 	#	_XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
 	#	_XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
@@ -7869,90 +10418,515 @@
 	cf_xopen_source="-D_SGI_SOURCE"
 	cf_XOPEN_SOURCE=
 	;;
-(linux*|gnu*|mint*|k*bsd*-gnu)
+(linux*gnu|linux*gnuabi64|linux*gnuabin32|linux*gnueabi|linux*gnueabihf|linux*gnux32|uclinux*|gnu*|mint*|k*bsd*-gnu|cygwin|msys|mingw*|linux*uclibc)
 
-echo "$as_me:7874: checking if we must define _GNU_SOURCE" >&5
+cf_gnu_xopen_source=$cf_XOPEN_SOURCE
+
+echo "$as_me:10425: checking if this is the GNU C library" >&5
+echo $ECHO_N "checking if this is the GNU C library... $ECHO_C" >&6
+if test "${cf_cv_gnu_library+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 10432 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main (void)
+{
+
+	#if __GLIBC__ > 0 && __GLIBC_MINOR__ >= 0
+		return 0;
+	#elif __NEWLIB__ > 0 && __NEWLIB_MINOR__ >= 0
+		return 0;
+	#else
+	#	error not GNU C library
+	#endif
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10451: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:10454: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:10457: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:10460: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_gnu_library=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_gnu_library=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
+fi
+echo "$as_me:10471: result: $cf_cv_gnu_library" >&5
+echo "${ECHO_T}$cf_cv_gnu_library" >&6
+
+if test x$cf_cv_gnu_library = xyes; then
+
+	# With glibc 2.19 (13 years after this check was begun), _DEFAULT_SOURCE
+	# was changed to help a little.  newlib incorporated the change about 4
+	# years later.
+	echo "$as_me:10479: checking if _DEFAULT_SOURCE can be used as a basis" >&5
+echo $ECHO_N "checking if _DEFAULT_SOURCE can be used as a basis... $ECHO_C" >&6
+if test "${cf_cv_gnu_library_219+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+		cf_save="$CPPFLAGS"
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-D_DEFAULT_SOURCE"
+
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 10491 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main (void)
+{
+
+			#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 19) || (__GLIBC__ > 2)
+				return 0;
+			#elif (__NEWLIB__ == 2 && __NEWLIB_MINOR__ >= 4) || (__GLIBC__ > 3)
+				return 0;
+			#else
+			#	error GNU C library __GLIBC__.__GLIBC_MINOR__ is too old
+			#endif
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10510: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:10513: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:10516: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:10519: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_gnu_library_219=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_gnu_library_219=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+		CPPFLAGS="$cf_save"
+
+fi
+echo "$as_me:10531: result: $cf_cv_gnu_library_219" >&5
+echo "${ECHO_T}$cf_cv_gnu_library_219" >&6
+
+	if test "x$cf_cv_gnu_library_219" = xyes; then
+		cf_save="$CPPFLAGS"
+		echo "$as_me:10536: checking if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE" >&5
+echo $ECHO_N "checking if _XOPEN_SOURCE=$cf_gnu_xopen_source works with _DEFAULT_SOURCE... $ECHO_C" >&6
+if test "${cf_cv_gnu_dftsrc_219+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=$cf_gnu_xopen_source
+do
+case "$cf_fix_cppflags" in
+(no)
+	case "$cf_add_cflags" in
+	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+		case "$cf_add_cflags" in
+		(-D*)
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+				&& test -z "${cf_tst_cflags}" \
+				&& cf_fix_cppflags=yes
+
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			fi
+			;;
+		esac
+		case "$CPPFLAGS" in
+		(*$cf_add_cflags)
+			;;
+		(*)
+			case "$cf_add_cflags" in
+			(-D*)
+				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+	sed	-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?[ 	]/ /g' \
+		-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?$//g'`
+
+				;;
+			esac
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+			;;
+		esac
+		;;
+	(*)
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+		;;
+	esac
+	;;
+(yes)
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+		&& test -z "${cf_tst_cflags}" \
+		&& cf_fix_cppflags=no
+	;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
+fi
+
+			cat >"conftest.$ac_ext" <<_ACEOF
+#line 10641 "configure"
+#include "confdefs.h"
+
+				#include <limits.h>
+				#include <sys/types.h>
+
+int
+main (void)
+{
+
+				#if (_XOPEN_SOURCE >= $cf_gnu_xopen_source) && (MB_LEN_MAX > 1)
+					return 0;
+				#else
+				#	error GNU C library is too old
+				#endif
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10661: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:10664: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:10667: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:10670: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_gnu_dftsrc_219=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_gnu_dftsrc_219=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
+fi
+echo "$as_me:10681: result: $cf_cv_gnu_dftsrc_219" >&5
+echo "${ECHO_T}$cf_cv_gnu_dftsrc_219" >&6
+		test "x$cf_cv_gnu_dftsrc_219" = "xyes" || CPPFLAGS="$cf_save"
+	else
+		cf_cv_gnu_dftsrc_219=maybe
+	fi
+
+	if test "x$cf_cv_gnu_dftsrc_219" != xyes; then
+
+		echo "$as_me:10690: checking if we must define _GNU_SOURCE" >&5
 echo $ECHO_N "checking if we must define _GNU_SOURCE... $ECHO_C" >&6
 if test "${cf_cv_gnu_source+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 7881 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 10697 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 int
-main ()
+main (void)
 {
 
-#ifndef _XOPEN_SOURCE
-make an error
-#endif
+			#ifndef _XOPEN_SOURCE
+			#error	expected _XOPEN_SOURCE to be defined
+			#endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:7896: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10712: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:7899: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:7902: \"$ac_try\"") >&5
+  echo "$as_me:10715: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:10718: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:7905: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:10721: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_gnu_source=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_save="$CPPFLAGS"
-	 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
-	 cat >conftest.$ac_ext <<_ACEOF
-#line 7914 "configure"
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -D_GNU_SOURCE
+do
+case "$cf_fix_cppflags" in
+(no)
+	case "$cf_add_cflags" in
+	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+		case "$cf_add_cflags" in
+		(-D*)
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+				&& test -z "${cf_tst_cflags}" \
+				&& cf_fix_cppflags=yes
+
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			fi
+			;;
+		esac
+		case "$CPPFLAGS" in
+		(*$cf_add_cflags)
+			;;
+		(*)
+			case "$cf_add_cflags" in
+			(-D*)
+				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+	sed	-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?[ 	]/ /g' \
+		-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?$//g'`
+
+				;;
+			esac
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+			;;
+		esac
+		;;
+	(*)
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+		;;
+	esac
+	;;
+(yes)
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+		&& test -z "${cf_tst_cflags}" \
+		&& cf_fix_cppflags=no
+	;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
+fi
+
+			 cat >"conftest.$ac_ext" <<_ACEOF
+#line 10828 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 int
-main ()
+main (void)
 {
 
-#ifdef _XOPEN_SOURCE
-make an error
-#endif
+				#ifdef _XOPEN_SOURCE
+				#error	expected _XOPEN_SOURCE to be undefined
+				#endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:7929: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10843: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:7932: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:7935: \"$ac_try\"") >&5
+  echo "$as_me:10846: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:10849: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:7938: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:10852: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_gnu_source=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_gnu_source=yes
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-	CPPFLAGS="$cf_save"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+			CPPFLAGS="$cf_save"
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:7953: result: $cf_cv_gnu_source" >&5
+echo "$as_me:10867: result: $cf_cv_gnu_source" >&5
 echo "${ECHO_T}$cf_cv_gnu_source" >&6
-test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+
+		if test "$cf_cv_gnu_source" = yes
+		then
+		echo "$as_me:10872: checking if we should also define _DEFAULT_SOURCE" >&5
+echo $ECHO_N "checking if we should also define _DEFAULT_SOURCE... $ECHO_C" >&6
+if test "${cf_cv_default_source+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-D_GNU_SOURCE"
+
+			cat >"conftest.$ac_ext" <<_ACEOF
+#line 10882 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int
+main (void)
+{
+
+				#ifdef _DEFAULT_SOURCE
+				#error	expected _DEFAULT_SOURCE to be undefined
+				#endif
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10897: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:10900: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:10903: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:10906: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_default_source=no
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_default_source=yes
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
+fi
+echo "$as_me:10917: result: $cf_cv_default_source" >&5
+echo "${ECHO_T}$cf_cv_default_source" >&6
+			if test "$cf_cv_default_source" = yes
+			then
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-D_DEFAULT_SOURCE"
+
+			fi
+		fi
+	fi
+
+fi
 
 	;;
 (minix*)
@@ -7962,6 +10936,8 @@
 	# setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <sys/select.h> and other headers which use u_int / u_short types
 	cf_XOPEN_SOURCE=
 
+if test "$cf_cv_posix_visible" = no; then
+
 cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE
 
 cf_save_CFLAGS="$CFLAGS"
@@ -7975,45 +10951,45 @@
 	sed	-e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ 	]*\)\?[ 	]/ /g' \
 		-e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ 	]*\)\?$//g'`
 
-echo "$as_me:7978: checking if we should define _POSIX_C_SOURCE" >&5
+echo "$as_me:10954: checking if we should define _POSIX_C_SOURCE" >&5
 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6
 if test "${cf_cv_posix_c_source+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-echo "${as_me:-configure}:7984: testing if the symbol is already defined go no further ..." 1>&5
+echo "${as_me:-configure}:10960: testing if the symbol is already defined go no further ..." 1>&5
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 7987 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 10963 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 int
-main ()
+main (void)
 {
 
 #ifndef _POSIX_C_SOURCE
-make an error
+#error _POSIX_C_SOURCE is not defined
 #endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8002: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:10978: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8005: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8008: \"$ac_try\"") >&5
+  echo "$as_me:10981: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:10984: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8011: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:10987: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_posix_c_source=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_want_posix_source=no
 	 case .$cf_POSIX_C_SOURCE in
 	 (.[12]??*)
@@ -8028,91 +11004,94 @@
 		;;
 	 esac
 	 if test "$cf_want_posix_source" = yes ; then
-		cat >conftest.$ac_ext <<_ACEOF
-#line 8032 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 11008 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 int
-main ()
+main (void)
 {
 
 #ifdef _POSIX_SOURCE
-make an error
+#error _POSIX_SOURCE is defined
 #endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8047: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11023: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8050: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8053: \"$ac_try\"") >&5
+  echo "$as_me:11026: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:11029: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8056: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:11032: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   :
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE"
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 	 fi
 
-echo "${as_me:-configure}:8067: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
+echo "${as_me:-configure}:11043: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
 
 	 CFLAGS="$cf_trim_CFLAGS"
-	 CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
+	 CPPFLAGS="$cf_trim_CPPFLAGS"
 
-echo "${as_me:-configure}:8072: testing if the second compile does not leave our definition intact error ..." 1>&5
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_cv_posix_c_source"
 
-	 cat >conftest.$ac_ext <<_ACEOF
-#line 8075 "configure"
+echo "${as_me:-configure}:11051: testing if the second compile does not leave our definition intact error ..." 1>&5
+
+	 cat >"conftest.$ac_ext" <<_ACEOF
+#line 11054 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 int
-main ()
+main (void)
 {
 
 #ifndef _POSIX_C_SOURCE
-make an error
+#error _POSIX_C_SOURCE is not defined
 #endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8090: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11069: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8093: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8096: \"$ac_try\"") >&5
+  echo "$as_me:11072: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:11075: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8099: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:11078: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   :
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_posix_c_source=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 	 CFLAGS="$cf_save_CFLAGS"
 	 CPPFLAGS="$cf_save_CPPFLAGS"
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:8115: result: $cf_cv_posix_c_source" >&5
+echo "$as_me:11094: result: $cf_cv_posix_c_source" >&5
 echo "${ECHO_T}$cf_cv_posix_c_source" >&6
 
 if test "$cf_cv_posix_c_source" != no ; then
@@ -8126,23 +11105,29 @@
 
 for cf_add_cflags in $cf_cv_posix_c_source
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -8151,7 +11136,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -8161,19 +11146,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -8184,26 +11177,43 @@
 
 if test -n "$cf_new_cflags" ; then
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
 fi
 
 fi
 
+fi # cf_cv_posix_visible
+
 	;;
 (netbsd*)
 	cf_xopen_source="-D_NETBSD_SOURCE" # setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
 	;;
-(openbsd[4-9]*)
+(openbsd[6-9]*)
+	# OpenBSD 6.x has broken locale support, both compile-time and runtime.
+	# see https://www.mail-archive.com/bugs@openbsd.org/msg13200.html
+	# Abusing the conformance level is a workaround.
+	{ echo "$as_me:11211: WARNING: this system does not provide usable locale support" >&5
+echo "$as_me: WARNING: this system does not provide usable locale support" >&2;}
+	cf_xopen_source="-D_BSD_SOURCE"
+	cf_XOPEN_SOURCE=700
+	;;
+(openbsd[4-5]*)
 	# setting _XOPEN_SOURCE lower than 500 breaks g++ compile with wchar.h, needed for ncursesw
 	cf_xopen_source="-D_BSD_SOURCE"
 	cf_XOPEN_SOURCE=600
@@ -8230,94 +11240,95 @@
 	;;
 (*)
 
-echo "$as_me:8233: checking if we should define _XOPEN_SOURCE" >&5
+echo "$as_me:11243: checking if we should define _XOPEN_SOURCE" >&5
 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6
 if test "${cf_cv_xopen_source+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 8240 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 11250 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
+$ac_includes_default
 
 int
-main ()
+main (void)
 {
 
 #ifndef _XOPEN_SOURCE
-make an error
+#error _XOPEN_SOURCE is not defined
 #endif
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8259: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11268: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8262: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8265: \"$ac_try\"") >&5
+  echo "$as_me:11271: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:11274: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8268: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:11277: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_xopen_source=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_save="$CPPFLAGS"
-	 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
-	 cat >conftest.$ac_ext <<_ACEOF
-#line 8277 "configure"
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+
+	 cat >"conftest.$ac_ext" <<_ACEOF
+#line 11289 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
+$ac_includes_default
 
 int
-main ()
+main (void)
 {
 
-#ifdef _XOPEN_SOURCE
-make an error
+#ifndef _XOPEN_SOURCE
+#error _XOPEN_SOURCE is not defined
 #endif
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8296: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11307: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8299: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8302: \"$ac_try\"") >&5
+  echo "$as_me:11310: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:11313: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8305: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:11316: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_xopen_source=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_xopen_source=$cf_XOPEN_SOURCE
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-	CPPFLAGS="$cf_save"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+		CPPFLAGS="$cf_save"
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:8320: result: $cf_cv_xopen_source" >&5
+echo "$as_me:11331: result: $cf_cv_xopen_source" >&5
 echo "${ECHO_T}$cf_cv_xopen_source" >&6
 
 if test "$cf_cv_xopen_source" != no ; then
@@ -8332,30 +11343,62 @@
 
 	cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
 
+for cf_add_cflags in $cf_temp_xopen_source
+do
+	case "x$cf_add_cflags" in
+	(x-[DU]*)
+
+cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'`
+while true
+do
+	cf_old_cflag=`echo "x$CFLAGS" | sed -e 's/^.//' -e 's/[ 	][ 	]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ 	][^ 	]*\\)\?%%" -e 's/^[ 	]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'`
+	test "$CFLAGS" != "$cf_old_cflag" || break
+
+	CFLAGS="$cf_old_cflag"
+done
+
+cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'`
+while true
+do
+	cf_old_cflag=`echo "x$CPPFLAGS" | sed -e 's/^.//' -e 's/[ 	][ 	]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ 	][^ 	]*\\)\?%%" -e 's/^[ 	]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'`
+	test "$CPPFLAGS" != "$cf_old_cflag" || break
+
+	CPPFLAGS="$cf_old_cflag"
+done
+
+		;;
+	esac
+
 cf_fix_cppflags=no
 cf_new_cflags=
 cf_new_cppflags=
 cf_new_extra_cppflags=
 
-for cf_add_cflags in $cf_temp_xopen_source
+for cf_add_cflags in $cf_add_cflags
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -8364,7 +11407,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -8374,19 +11417,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -8397,21 +11448,33 @@
 
 if test -n "$cf_new_cflags" ; then
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
-fi
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
 
 fi
 
+done
+
+fi
+
+	cf_save_xopen_cppflags="$CPPFLAGS"
+
+if test "$cf_cv_posix_visible" = no; then
+
 cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE
 
 cf_save_CFLAGS="$CFLAGS"
@@ -8425,45 +11488,45 @@
 	sed	-e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ 	]*\)\?[ 	]/ /g' \
 		-e 's/-[UD]'"_POSIX_C_SOURCE"'\(=[^ 	]*\)\?$//g'`
 
-echo "$as_me:8428: checking if we should define _POSIX_C_SOURCE" >&5
+echo "$as_me:11491: checking if we should define _POSIX_C_SOURCE" >&5
 echo $ECHO_N "checking if we should define _POSIX_C_SOURCE... $ECHO_C" >&6
 if test "${cf_cv_posix_c_source+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-echo "${as_me:-configure}:8434: testing if the symbol is already defined go no further ..." 1>&5
+echo "${as_me:-configure}:11497: testing if the symbol is already defined go no further ..." 1>&5
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 8437 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 11500 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 int
-main ()
+main (void)
 {
 
 #ifndef _POSIX_C_SOURCE
-make an error
+#error _POSIX_C_SOURCE is not defined
 #endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8452: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11515: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8455: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8458: \"$ac_try\"") >&5
+  echo "$as_me:11518: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:11521: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8461: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:11524: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_posix_c_source=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_want_posix_source=no
 	 case .$cf_POSIX_C_SOURCE in
 	 (.[12]??*)
@@ -8478,91 +11541,94 @@
 		;;
 	 esac
 	 if test "$cf_want_posix_source" = yes ; then
-		cat >conftest.$ac_ext <<_ACEOF
-#line 8482 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 11545 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 int
-main ()
+main (void)
 {
 
 #ifdef _POSIX_SOURCE
-make an error
+#error _POSIX_SOURCE is defined
 #endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8497: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11560: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8500: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8503: \"$ac_try\"") >&5
+  echo "$as_me:11563: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:11566: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8506: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:11569: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   :
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_posix_c_source="$cf_cv_posix_c_source -D_POSIX_SOURCE"
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 	 fi
 
-echo "${as_me:-configure}:8517: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
+echo "${as_me:-configure}:11580: testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
 
 	 CFLAGS="$cf_trim_CFLAGS"
-	 CPPFLAGS="$cf_trim_CPPFLAGS $cf_cv_posix_c_source"
+	 CPPFLAGS="$cf_trim_CPPFLAGS"
 
-echo "${as_me:-configure}:8522: testing if the second compile does not leave our definition intact error ..." 1>&5
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_cv_posix_c_source"
 
-	 cat >conftest.$ac_ext <<_ACEOF
-#line 8525 "configure"
+echo "${as_me:-configure}:11588: testing if the second compile does not leave our definition intact error ..." 1>&5
+
+	 cat >"conftest.$ac_ext" <<_ACEOF
+#line 11591 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 int
-main ()
+main (void)
 {
 
 #ifndef _POSIX_C_SOURCE
-make an error
+#error _POSIX_C_SOURCE is not defined
 #endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8540: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11606: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8543: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8546: \"$ac_try\"") >&5
+  echo "$as_me:11609: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:11612: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8549: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:11615: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   :
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_posix_c_source=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 	 CFLAGS="$cf_save_CFLAGS"
 	 CPPFLAGS="$cf_save_CPPFLAGS"
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:8565: result: $cf_cv_posix_c_source" >&5
+echo "$as_me:11631: result: $cf_cv_posix_c_source" >&5
 echo "${ECHO_T}$cf_cv_posix_c_source" >&6
 
 if test "$cf_cv_posix_c_source" != no ; then
@@ -8576,23 +11642,29 @@
 
 for cf_add_cflags in $cf_cv_posix_c_source
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -8601,7 +11673,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -8611,19 +11683,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -8634,50 +11714,143 @@
 
 if test -n "$cf_new_cflags" ; then
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
 fi
 
 fi
 
+fi # cf_cv_posix_visible
+
+	# Some of these niche implementations use copy/paste, double-check...
+	if test "$cf_cv_xopen_source" = no ; then
+		test -n "$verbose" && echo "	checking if _POSIX_C_SOURCE interferes with _XOPEN_SOURCE" 1>&6
+
+echo "${as_me:-configure}:11744: testing checking if _POSIX_C_SOURCE interferes with _XOPEN_SOURCE ..." 1>&5
+
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 11747 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+int
+main (void)
+{
+
+#ifndef _XOPEN_SOURCE
+#error _XOPEN_SOURCE is not defined
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11765: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:11768: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:11771: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:11774: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+
+			{ echo "$as_me:11781: WARNING: _POSIX_C_SOURCE definition is not usable" >&5
+echo "$as_me: WARNING: _POSIX_C_SOURCE definition is not usable" >&2;}
+			CPPFLAGS="$cf_save_xopen_cppflags"
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+	fi
 	;;
 esac
 
 if test -n "$cf_xopen_source" ; then
 
+for cf_add_cflags in $cf_xopen_source
+do
+	case "x$cf_add_cflags" in
+	(x-[DU]*)
+
+cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'`
+while true
+do
+	cf_old_cflag=`echo "x$CFLAGS" | sed -e 's/^.//' -e 's/[ 	][ 	]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ 	][^ 	]*\\)\?%%" -e 's/^[ 	]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'`
+	test "$CFLAGS" != "$cf_old_cflag" || break
+	test -n "$verbose" && echo "	removing old option $cf_add_cflags from CFLAGS" 1>&6
+
+echo "${as_me:-configure}:11804: testing removing old option $cf_add_cflags from CFLAGS ..." 1>&5
+
+	CFLAGS="$cf_old_cflag"
+done
+
+cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'`
+while true
+do
+	cf_old_cflag=`echo "x$CPPFLAGS" | sed -e 's/^.//' -e 's/[ 	][ 	]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ 	][^ 	]*\\)\?%%" -e 's/^[ 	]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'`
+	test "$CPPFLAGS" != "$cf_old_cflag" || break
+	test -n "$verbose" && echo "	removing old option $cf_add_cflags from CPPFLAGS" 1>&6
+
+echo "${as_me:-configure}:11816: testing removing old option $cf_add_cflags from CPPFLAGS ..." 1>&5
+
+	CPPFLAGS="$cf_old_cflag"
+done
+
+		;;
+	esac
+
 cf_fix_cppflags=no
 cf_new_cflags=
 cf_new_cppflags=
 cf_new_extra_cppflags=
 
-for cf_add_cflags in $cf_xopen_source
+for cf_add_cflags in $cf_add_cflags
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -8686,7 +11859,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -8696,19 +11869,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -8720,199 +11901,208 @@
 if test -n "$cf_new_cflags" ; then
 	test -n "$verbose" && echo "	add to \$CFLAGS $cf_new_cflags" 1>&6
 
-echo "${as_me:-configure}:8723: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5
+echo "${as_me:-configure}:11904: testing add to \$CFLAGS $cf_new_cflags ..." 1>&5
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 	test -n "$verbose" && echo "	add to \$CPPFLAGS $cf_new_cppflags" 1>&6
 
-echo "${as_me:-configure}:8731: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5
+echo "${as_me:-configure}:11914: testing add to \$CPPFLAGS $cf_new_cppflags ..." 1>&5
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 	test -n "$verbose" && echo "	add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6
 
-echo "${as_me:-configure}:8739: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5
+echo "${as_me:-configure}:11924: testing add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags ..." 1>&5
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
 fi
 
+done
+
 fi
 
 if test -n "$cf_XOPEN_SOURCE" && test -z "$cf_cv_xopen_source" ; then
-	echo "$as_me:8747: checking if _XOPEN_SOURCE really is set" >&5
+	echo "$as_me:11936: checking if _XOPEN_SOURCE really is set" >&5
 echo $ECHO_N "checking if _XOPEN_SOURCE really is set... $ECHO_C" >&6
-	cat >conftest.$ac_ext <<_ACEOF
-#line 8750 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 11939 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 int
-main ()
+main (void)
 {
 
 #ifndef _XOPEN_SOURCE
-make an error
+#error _XOPEN_SOURCE is not defined
 #endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8765: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11954: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8768: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8771: \"$ac_try\"") >&5
+  echo "$as_me:11957: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:11960: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8774: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:11963: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_XOPEN_SOURCE_set=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_XOPEN_SOURCE_set=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-	echo "$as_me:8783: result: $cf_XOPEN_SOURCE_set" >&5
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+	echo "$as_me:11972: result: $cf_XOPEN_SOURCE_set" >&5
 echo "${ECHO_T}$cf_XOPEN_SOURCE_set" >&6
-	if test $cf_XOPEN_SOURCE_set = yes
+	if test "$cf_XOPEN_SOURCE_set" = yes
 	then
-		cat >conftest.$ac_ext <<_ACEOF
-#line 8788 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 11977 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 int
-main ()
+main (void)
 {
 
 #if (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
-make an error
+#error (_XOPEN_SOURCE - 0) < $cf_XOPEN_SOURCE
 #endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8803: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:11992: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8806: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8809: \"$ac_try\"") >&5
+  echo "$as_me:11995: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:11998: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8812: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12001: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_XOPEN_SOURCE_set_ok=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_XOPEN_SOURCE_set_ok=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-		if test $cf_XOPEN_SOURCE_set_ok = no
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+		if test "$cf_XOPEN_SOURCE_set_ok" = no
 		then
-			{ echo "$as_me:8823: WARNING: _XOPEN_SOURCE is lower than requested" >&5
+			{ echo "$as_me:12012: WARNING: _XOPEN_SOURCE is lower than requested" >&5
 echo "$as_me: WARNING: _XOPEN_SOURCE is lower than requested" >&2;}
 		fi
 	else
 
-echo "$as_me:8828: checking if we should define _XOPEN_SOURCE" >&5
+echo "$as_me:12017: checking if we should define _XOPEN_SOURCE" >&5
 echo $ECHO_N "checking if we should define _XOPEN_SOURCE... $ECHO_C" >&6
 if test "${cf_cv_xopen_source+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 8835 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 12024 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
+$ac_includes_default
 
 int
-main ()
+main (void)
 {
 
 #ifndef _XOPEN_SOURCE
-make an error
+#error _XOPEN_SOURCE is not defined
 #endif
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8854: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12042: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8857: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8860: \"$ac_try\"") >&5
+  echo "$as_me:12045: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:12048: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8863: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12051: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_xopen_source=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_save="$CPPFLAGS"
-	 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
-	 cat >conftest.$ac_ext <<_ACEOF
-#line 8872 "configure"
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+
+	 cat >"conftest.$ac_ext" <<_ACEOF
+#line 12063 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
-#include <string.h>
-#include <sys/types.h>
+$ac_includes_default
 
 int
-main ()
+main (void)
 {
 
-#ifdef _XOPEN_SOURCE
-make an error
+#ifndef _XOPEN_SOURCE
+#error _XOPEN_SOURCE is not defined
 #endif
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:8891: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12081: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:8894: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:8897: \"$ac_try\"") >&5
+  echo "$as_me:12084: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:12087: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:8900: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12090: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_xopen_source=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_xopen_source=$cf_XOPEN_SOURCE
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-	CPPFLAGS="$cf_save"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+		CPPFLAGS="$cf_save"
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:8915: result: $cf_cv_xopen_source" >&5
+echo "$as_me:12105: result: $cf_cv_xopen_source" >&5
 echo "${ECHO_T}$cf_cv_xopen_source" >&6
 
 if test "$cf_cv_xopen_source" != no ; then
@@ -8927,30 +12117,62 @@
 
 	cf_temp_xopen_source="-D_XOPEN_SOURCE=$cf_cv_xopen_source"
 
+for cf_add_cflags in $cf_temp_xopen_source
+do
+	case "x$cf_add_cflags" in
+	(x-[DU]*)
+
+cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'`
+while true
+do
+	cf_old_cflag=`echo "x$CFLAGS" | sed -e 's/^.//' -e 's/[ 	][ 	]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ 	][^ 	]*\\)\?%%" -e 's/^[ 	]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'`
+	test "$CFLAGS" != "$cf_old_cflag" || break
+
+	CFLAGS="$cf_old_cflag"
+done
+
+cf_tmp_cflag=`echo "x$cf_add_cflags" | sed -e 's/^.//' -e 's/=.*//'`
+while true
+do
+	cf_old_cflag=`echo "x$CPPFLAGS" | sed -e 's/^.//' -e 's/[ 	][ 	]*-/ -/g' -e "s%$cf_tmp_cflag\\(=[^ 	][^ 	]*\\)\?%%" -e 's/^[ 	]*//' -e 's%[ ][ ]*-D% -D%g' -e 's%[ ][ ]*-I% -I%g'`
+	test "$CPPFLAGS" != "$cf_old_cflag" || break
+
+	CPPFLAGS="$cf_old_cflag"
+done
+
+		;;
+	esac
+
 cf_fix_cppflags=no
 cf_new_cflags=
 cf_new_cppflags=
 cf_new_extra_cppflags=
 
-for cf_add_cflags in $cf_temp_xopen_source
+for cf_add_cflags in $cf_add_cflags
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -8959,7 +12181,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -8969,19 +12191,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -8992,67 +12222,76 @@
 
 if test -n "$cf_new_cflags" ; then
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
 fi
 
+done
+
 fi
 
 	fi
 fi
+fi # cf_cv_posix_visible
 
 CPPFLAGS_after_XOPEN="$CPPFLAGS"
 
 # Work around breakage on OS X
 
-echo "$as_me:9017: checking if SIGWINCH is defined" >&5
+echo "$as_me:12256: checking if SIGWINCH is defined" >&5
 echo $ECHO_N "checking if SIGWINCH is defined... $ECHO_C" >&6
 if test "${cf_cv_define_sigwinch+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 9024 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 12263 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
 #include <sys/signal.h>
 
 int
-main ()
+main (void)
 {
-int x = SIGWINCH
+int x = SIGWINCH; (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9039: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12278: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:9042: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:9045: \"$ac_try\"") >&5
+  echo "$as_me:12281: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:12284: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9048: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12287: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_define_sigwinch=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 9055 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12294 "configure"
 #include "confdefs.h"
 
 #undef _XOPEN_SOURCE
@@ -9062,42 +12301,42 @@
 #include <sys/signal.h>
 
 int
-main ()
+main (void)
 {
-int x = SIGWINCH
+int x = SIGWINCH; (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9073: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12312: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:9076: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:9079: \"$ac_try\"") >&5
+  echo "$as_me:12315: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:12318: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9082: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12321: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_define_sigwinch=maybe
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_define_sigwinch=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:9096: result: $cf_cv_define_sigwinch" >&5
+echo "$as_me:12335: result: $cf_cv_define_sigwinch" >&5
 echo "${ECHO_T}$cf_cv_define_sigwinch" >&6
 
 if test "$cf_cv_define_sigwinch" = maybe ; then
-echo "$as_me:9100: checking for actual SIGWINCH definition" >&5
+echo "$as_me:12339: checking for actual SIGWINCH definition" >&5
 echo $ECHO_N "checking for actual SIGWINCH definition... $ECHO_C" >&6
 if test "${cf_cv_fixup_sigwinch+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -9105,10 +12344,10 @@
 
 cf_cv_fixup_sigwinch=unknown
 cf_sigwinch=32
-while test $cf_sigwinch != 1
+while test "$cf_sigwinch" != 1
 do
-	cat >conftest.$ac_ext <<_ACEOF
-#line 9111 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 12350 "configure"
 #include "confdefs.h"
 
 #undef _XOPEN_SOURCE
@@ -9118,42 +12357,42 @@
 #include <sys/signal.h>
 
 int
-main ()
+main (void)
 {
 
 #if SIGWINCH != $cf_sigwinch
-make an error
+#error SIGWINCH is not $cf_sigwinch
 #endif
-int x = SIGWINCH
+int x = SIGWINCH; (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9133: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12372: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:9136: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:9139: \"$ac_try\"") >&5
+  echo "$as_me:12375: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:12378: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9142: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12381: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_fixup_sigwinch=$cf_sigwinch
 	 break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
-cf_sigwinch=`expr $cf_sigwinch - 1`
+cf_sigwinch="`expr "$cf_sigwinch" - 1`"
 done
 
 fi
-echo "$as_me:9156: result: $cf_cv_fixup_sigwinch" >&5
+echo "$as_me:12395: result: $cf_cv_fixup_sigwinch" >&5
 echo "${ECHO_T}$cf_cv_fixup_sigwinch" >&6
 
 	if test "$cf_cv_fixup_sigwinch" != unknown ; then
@@ -9163,47 +12402,49 @@
 
 # Checks for CODESET support.
 
-echo "$as_me:9166: checking for nl_langinfo and CODESET" >&5
+echo "$as_me:12405: checking for nl_langinfo and CODESET" >&5
 echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6
 if test "${am_cv_langinfo_codeset+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 9172 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 12411 "configure"
 #include "confdefs.h"
+
+$ac_includes_default
 #include <langinfo.h>
 int
-main ()
+main (void)
 {
-char* cs = nl_langinfo(CODESET);
+char* cs = nl_langinfo(CODESET); (void)cs
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9184: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:12425: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9187: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9190: \"$ac_try\"") >&5
+  echo "$as_me:12428: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:12431: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9193: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12434: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   am_cv_langinfo_codeset=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 am_cv_langinfo_codeset=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:9204: result: $am_cv_langinfo_codeset" >&5
+echo "$as_me:12445: result: $am_cv_langinfo_codeset" >&5
 echo "${ECHO_T}$am_cv_langinfo_codeset" >&6
-	if test $am_cv_langinfo_codeset = yes; then
+	if test "$am_cv_langinfo_codeset" = yes; then
 
 cat >>confdefs.h <<\EOF
 #define HAVE_LANGINFO_CODESET 1
@@ -9215,7 +12456,7 @@
 NCURSES_OK_WCHAR_T=
 NCURSES_OK_WINT_T=
 
-echo "$as_me:9218: checking if you want wide-character code" >&5
+echo "$as_me:12459: checking if you want wide-character code" >&5
 echo $ECHO_N "checking if you want wide-character code... $ECHO_C" >&6
 
 # Check whether --enable-widec or --disable-widec was given.
@@ -9223,10 +12464,13 @@
   enableval="$enable_widec"
   with_widec=$enableval
 else
-  with_widec=no
+  with_widec=$cf_dft_widec
 fi;
-echo "$as_me:9228: result: $with_widec" >&5
+echo "$as_me:12469: result: $with_widec" >&5
 echo "${ECHO_T}$with_widec" >&6
+
+NCURSES_WCWIDTH_GRAPHICS=1
+
 if test "x$with_widec" = xyes ; then
 	if test "x$disable_lib_suffixes" = xno ; then
 		LIB_SUFFIX="w${LIB_SUFFIX}"
@@ -9240,136 +12484,203 @@
 #define NCURSES_WIDECHAR 1
 EOF
 
-echo "$as_me:9243: checking if wchar.h can be used as is" >&5
+	case "$CPPFLAGS" in
+	(*_XOPEN_SOURCE=*)
+		;;
+	(*)
+		{ echo "$as_me:12491: WARNING: _XOPEN_SOURCE feature test macro appears to be predefined" >&5
+echo "$as_me: WARNING: _XOPEN_SOURCE feature test macro appears to be predefined" >&2;}
+		# CPPFLAGS="$CPPFLAGS -DNCURSES_WIDECHAR"
+		CPPFLAGS_after_XOPEN="$CPPFLAGS_after_XOPEN -DNCURSES_WIDECHAR"
+		;;
+	esac
+
+for ac_header in \
+wchar.h \
+wctype.h \
+
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:12504: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 12510 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:12514: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:12520: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+  cat "conftest.$ac_ext" >&5
+  eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:12539: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+echo "$as_me:12549: checking if wchar.h can be used as is" >&5
 echo $ECHO_N "checking if wchar.h can be used as is... $ECHO_C" >&6
 if test "${cf_cv_wchar_h_okay+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 9250 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12556 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
+$ac_includes_default
+#ifdef HAVE_WCHAR_H
 #include <wchar.h>
+#endif
+#ifdef HAVE_WCTYPE_H
+#include <wctype.h>
+#endif
 
 int
-main ()
+main (void)
 {
 
 	wint_t foo = 0;
-	int bar = iswpunct(foo)
+	int bar = iswpunct(foo); (void) bar
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9267: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12578: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:9270: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:9273: \"$ac_try\"") >&5
+  echo "$as_me:12581: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:12584: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9276: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12587: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_wchar_h_okay=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_wchar_h_okay=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:9286: result: $cf_cv_wchar_h_okay" >&5
+echo "$as_me:12597: result: $cf_cv_wchar_h_okay" >&5
 echo "${ECHO_T}$cf_cv_wchar_h_okay" >&6
 
-if test $cf_cv_wchar_h_okay = no
+if test "$cf_cv_wchar_h_okay" = no
 then
 
-echo "$as_me:9292: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
+echo "$as_me:12603: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
 echo $ECHO_N "checking if we must define _XOPEN_SOURCE_EXTENDED... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line 9295 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 12606 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 
 int
-main ()
+main (void)
 {
 
 #ifndef _XOPEN_SOURCE_EXTENDED
-make an error
+#error _XOPEN_SOURCE_EXTENDED is not defined
 #endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9311: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12622: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:9314: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:9317: \"$ac_try\"") >&5
+  echo "$as_me:12625: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:12628: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9320: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12631: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_result=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_result=yes
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:9329: result: $cf_result" >&5
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+echo "$as_me:12640: result: $cf_result" >&5
 echo "${ECHO_T}$cf_result" >&6
 
 if test "$cf_result" = yes ; then
 	CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
 elif test "x" != "x" ; then
-	echo "$as_me:9335: checking checking for compatible value versus " >&5
+	echo "$as_me:12646: checking checking for compatible value versus " >&5
 echo $ECHO_N "checking checking for compatible value versus ... $ECHO_C" >&6
-	cat >conftest.$ac_ext <<_ACEOF
-#line 9338 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 12649 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 
 int
-main ()
+main (void)
 {
 
 #if _XOPEN_SOURCE_EXTENDED- < 0
-make an error
+#error _XOPEN_SOURCE_EXTENDED- is negative
 #endif
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9354: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:12665: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:9357: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:9360: \"$ac_try\"") >&5
+  echo "$as_me:12668: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:12671: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9363: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12674: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_result=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_result=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-	echo "$as_me:9372: result: $cf_result" >&5
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+	echo "$as_me:12683: result: $cf_result" >&5
 echo "${ECHO_T}$cf_result" >&6
 	if test "$cf_result" = no ; then
 		# perhaps we can override it - try...
@@ -9379,71 +12690,213 @@
 
 fi
 
+echo "$as_me:12693: checking if wcwidth agrees graphics are single-width" >&5
+echo $ECHO_N "checking if wcwidth agrees graphics are single-width... $ECHO_C" >&6
+if test "${cf_cv_wcwidth_graphics+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >conftest.in <<CF_EOF
+-	VT100 symbols
+0x250c	upper left corner
+0x2514	lower left corner
+0x2510	upper right corner
+0x2518	lower right corner
+0x251c	tee pointing left
+0x2524	tee pointing right
+0x2534	tee pointing up
+0x252c	tee pointing down
+0x2500	horizontal line
+0x2502	vertical line
+0x253c	large plus or crossover
+0x23ba	scan line 1
+0x23bd	scan line 9
+0x25c6	diamond
+0x2592	checker board (stipple)
+0x00b0	degree symbol
+0x00b1	plus/minus
+0x00b7	bullet
+-	Teletype 5410v1 symbols
+0x2190	arrow pointing left
+0x2192	arrow pointing right
+0x2193	arrow pointing down
+0x2191	arrow pointing up
+0x2592	board of squares
+0x2603	lantern symbol
+0x25ae	solid square block
+-	these defaults were invented for ncurses
+0x23bb	scan line 3
+0x23bc	scan line 7
+0x2264	less-than-or-equal-to
+0x2265	greater-than-or-equal-to
+0x03c0	greek pi
+0x2260	not-equal
+0x00a3	pound-sterling symbol
+-	thick-line-drawing
+0x250f	upper left corner
+0x2517	lower left corner
+0x2513	upper right corner
+0x251b	lower right corner
+0x2523	tee pointing left
+0x252b	tee pointing right
+0x253b	tee pointing up
+0x2533	tee pointing down
+0x2501	horizontal line
+0x2503	vertical line
+0x254b	large plus or crossover
+-	double-line-drawing
+0x2554	upper left corner
+0x255a	lower left corner
+0x2557	upper right corner
+0x255d	lower right corner
+0x2563	tee pointing left
+0x2560	tee pointing right
+0x2569	tee pointing up
+0x2566	tee pointing down
+0x2550	horizontal line
+0x2551	vertical line
+0x256c	large plus or crossover
+CF_EOF
+if test "$cross_compiling" = yes; then
+  cf_cv_wcwidth_graphics=unknown
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 12764 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#include <locale.h>
+#include <wchar.h>
+
+#define MY_LEN 80
+
+int
+main(void)
+{
+	FILE *fp;
+	unsigned value;
+	char buffer[MY_LEN + 1];
+	char notes[MY_LEN + 1];
+	int totals = 0;
+	int passed = 0;
+
+	if (setlocale(LC_ALL, "en_US.UTF8") ||
+		setlocale(LC_ALL, "en_US.UTF-8") ||
+		setlocale(LC_ALL, "en_US.utf8") ||
+		setlocale(LC_ALL, "en_US.utf-8")) {
+		if ((fp = fopen("conftest.in", "r")) != 0) {
+			while (fgets(buffer, MY_LEN, fp) != 0) {
+				if (*buffer == '-') {
+					fprintf(stderr, "\\t%s", buffer);
+				} else if (sscanf(buffer, "%x %s", &value, notes) == 2) {
+					++totals;
+					if (wcwidth((int)value) == 1)
+						++passed;
+					fprintf(stderr, "%d\\t%s", wcwidth((int)value), buffer);
+				} else {
+					fprintf(stderr, "?\\t%s", buffer);
+				}
+			}
+		}
+	}
+	fprintf(stderr, "%d/%d passed wcwidth/graphics check\\n", passed, totals);
+	return (totals == passed) ? 0 : 1;
+}
+
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:12809: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:12812: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:12814: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:12817: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_wcwidth_graphics=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_wcwidth_graphics=no
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+
+fi
+echo "$as_me:12830: result: $cf_cv_wcwidth_graphics" >&5
+echo "${ECHO_T}$cf_cv_wcwidth_graphics" >&6
+
+	test "$cf_cv_wcwidth_graphics" = no && NCURSES_WCWIDTH_GRAPHICS=0
+
 	# with_overwrite=no
 	NCURSES_CH_T=cchar_t
 
-for ac_func in putwc btowc wctob mbtowc wctomb mblen mbrlen mbrtowc wcsrtombs mbsrtowcs wcstombs mbstowcs
+for ac_func in putwc btowc wctob wmemchr mbtowc wctomb mblen mbrlen mbrtowc wcsrtombs mbsrtowcs wcstombs mbstowcs
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:9388: checking for $ac_func" >&5
+echo "$as_me:12841: checking for $ac_func" >&5
 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
 if eval "test \"\${$as_ac_var+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 9394 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 12847 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
+#define $ac_func autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
+
 #ifdef __cplusplus
 extern "C"
 #endif
+
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-char (*f) ();
+char $ac_func (void);
 
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
+
+/* The GNU C library defines stubs for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#error found stub for $ac_func
 #endif
 
+	return $ac_func ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9425: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:12878: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9428: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9431: \"$ac_try\"") >&5
+  echo "$as_me:12881: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:12884: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9434: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12887: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 eval "$as_ac_var=no"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:9444: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+echo "$as_me:12897: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
 EOF
@@ -9453,77 +12906,129 @@
 
 	if test "x$ac_cv_func_putwc" != xyes ; then
 
-echo "$as_me:9456: checking for multibyte character support" >&5
+for ac_header in wchar.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:12912: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 12918 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:12922: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:12928: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+  cat "conftest.$ac_ext" >&5
+  eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:12947: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+echo "$as_me:12957: checking for multibyte character support" >&5
 echo $ECHO_N "checking for multibyte character support... $ECHO_C" >&6
 if test "${cf_cv_utf8_lib+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
 	cf_save_LIBS="$LIBS"
-	cat >conftest.$ac_ext <<_ACEOF
-#line 9464 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 12965 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
+$ac_includes_default
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+
 int
-main ()
+main (void)
 {
 putwc(0,0);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9477: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:12982: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9480: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9483: \"$ac_try\"") >&5
+  echo "$as_me:12985: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:12988: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9486: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:12991: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_utf8_lib=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
 # If the linkage is not already in the $CPPFLAGS/$LDFLAGS configuration, these
 # will be set on completion of the AC_TRY_LINK below.
 cf_cv_header_path_utf8=
 cf_cv_library_path_utf8=
 
-echo "${as_me:-configure}:9498: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5
+echo "${as_me:-configure}:13003: testing Starting FIND_LINKAGE(utf8,) ..." 1>&5
 
 cf_save_LIBS="$LIBS"
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 9503 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 13008 "configure"
 #include "confdefs.h"
 
 #include <libutf8.h>
 int
-main ()
+main (void)
 {
 putwc(0,0);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9516: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:13021: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9519: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9522: \"$ac_try\"") >&5
+  echo "$as_me:13024: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:13027: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9525: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13030: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 	cf_cv_find_linkage_utf8=yes
 	cf_cv_header_path_utf8=/usr/include
@@ -9531,35 +13036,35 @@
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
 LIBS="-lutf8  $cf_save_LIBS"
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 9539 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 13044 "configure"
 #include "confdefs.h"
 
 #include <libutf8.h>
 int
-main ()
+main (void)
 {
 putwc(0,0);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9552: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:13057: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9555: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9558: \"$ac_try\"") >&5
+  echo "$as_me:13060: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:13063: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9561: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13066: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 	cf_cv_find_linkage_utf8=yes
 	cf_cv_header_path_utf8=/usr/include
@@ -9568,16 +13073,16 @@
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
 	cf_cv_find_linkage_utf8=no
 	LIBS="$cf_save_LIBS"
 
 	test -n "$verbose" && echo "	find linkage for utf8 library" 1>&6
 
-echo "${as_me:-configure}:9578: testing find linkage for utf8 library ..." 1>&5
+echo "${as_me:-configure}:13083: testing find linkage for utf8 library ..." 1>&5
 
-echo "${as_me:-configure}:9580: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5
+echo "${as_me:-configure}:13085: testing Searching for headers in FIND_LINKAGE(utf8,) ..." 1>&5
 
 	cf_save_CPPFLAGS="$CPPFLAGS"
 	cf_test_CPPFLAGS="$CPPFLAGS"
@@ -9589,7 +13094,7 @@
 if test -n "${CFLAGS}${CPPFLAGS}" ; then
 	for cf_header_path in $CPPFLAGS $CFLAGS
 	do
-		case $cf_header_path in
+		case "$cf_header_path" in
 		(-I*)
 			cf_header_path=`echo ".$cf_header_path" |sed -e 's/^...//' -e 's,/include$,,'`
 
@@ -9597,11 +13102,11 @@
 test -d "$cf_header_path" && \
  {
 	test -n "$verbose" && echo "	... testing for include-directories under $cf_header_path"
-	test -d $cf_header_path/include &&          cf_search="$cf_search $cf_header_path/include"
-	test -d $cf_header_path/include/utf8 &&       cf_search="$cf_search $cf_header_path/include/utf8"
-	test -d $cf_header_path/include/utf8/include &&    cf_search="$cf_search $cf_header_path/include/utf8/include"
-	test -d $cf_header_path/utf8/include &&       cf_search="$cf_search $cf_header_path/utf8/include"
-	test -d $cf_header_path/utf8/include/utf8 &&    cf_search="$cf_search $cf_header_path/utf8/include/utf8"
+	test -d "$cf_header_path/include" &&          cf_search="$cf_search $cf_header_path/include"
+	test -d "$cf_header_path/include/utf8" &&       cf_search="$cf_search $cf_header_path/include/utf8"
+	test -d "$cf_header_path/include/utf8/include" &&    cf_search="$cf_search $cf_header_path/include/utf8/include"
+	test -d "$cf_header_path/utf8/include" &&       cf_search="$cf_search $cf_header_path/utf8/include"
+	test -d "$cf_header_path/utf8/include/utf8" &&    cf_search="$cf_search $cf_header_path/utf8/include/utf8"
 }
 
 			cf_header_path_list="$cf_header_path_list $cf_search"
@@ -9618,11 +13123,11 @@
 test -d "$prefix" && \
  {
 	test -n "$verbose" && echo "	... testing for include-directories under $prefix"
-	test -d $prefix/include &&          cf_search="$cf_search $prefix/include"
-	test -d $prefix/include/utf8 &&       cf_search="$cf_search $prefix/include/utf8"
-	test -d $prefix/include/utf8/include &&    cf_search="$cf_search $prefix/include/utf8/include"
-	test -d $prefix/utf8/include &&       cf_search="$cf_search $prefix/utf8/include"
-	test -d $prefix/utf8/include/utf8 &&    cf_search="$cf_search $prefix/utf8/include/utf8"
+	test -d "$prefix/include" &&          cf_search="$cf_search $prefix/include"
+	test -d "$prefix/include/utf8" &&       cf_search="$cf_search $prefix/include/utf8"
+	test -d "$prefix/include/utf8/include" &&    cf_search="$cf_search $prefix/include/utf8/include"
+	test -d "$prefix/utf8/include" &&       cf_search="$cf_search $prefix/utf8/include"
+	test -d "$prefix/utf8/include/utf8" &&    cf_search="$cf_search $prefix/utf8/include/utf8"
 }
 
 for cf_subdir_prefix in \
@@ -9636,13 +13141,13 @@
 
 test "x$cf_subdir_prefix" != "x$prefix" && \
 test -d "$cf_subdir_prefix" && \
-(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && {
+{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && {
 	test -n "$verbose" && echo "	... testing for include-directories under $cf_subdir_prefix"
-	test -d $cf_subdir_prefix/include &&          cf_search="$cf_search $cf_subdir_prefix/include"
-	test -d $cf_subdir_prefix/include/utf8 &&       cf_search="$cf_search $cf_subdir_prefix/include/utf8"
-	test -d $cf_subdir_prefix/include/utf8/include &&    cf_search="$cf_search $cf_subdir_prefix/include/utf8/include"
-	test -d $cf_subdir_prefix/utf8/include &&       cf_search="$cf_search $cf_subdir_prefix/utf8/include"
-	test -d $cf_subdir_prefix/utf8/include/utf8 &&    cf_search="$cf_search $cf_subdir_prefix/utf8/include/utf8"
+	test -d "$cf_subdir_prefix/include" &&          cf_search="$cf_search $cf_subdir_prefix/include"
+	test -d "$cf_subdir_prefix/include/utf8" &&       cf_search="$cf_search $cf_subdir_prefix/include/utf8"
+	test -d "$cf_subdir_prefix/include/utf8/include" &&    cf_search="$cf_search $cf_subdir_prefix/include/utf8/include"
+	test -d "$cf_subdir_prefix/utf8/include" &&       cf_search="$cf_search $cf_subdir_prefix/utf8/include"
+	test -d "$cf_subdir_prefix/utf8/include/utf8" &&    cf_search="$cf_search $cf_subdir_prefix/utf8/include/utf8"
 }
 
 done
@@ -9650,74 +13155,78 @@
 test "$includedir" != NONE && \
 test "$includedir" != "/usr/include" && \
 test -d "$includedir" && {
-	test -d $includedir &&    cf_search="$cf_search $includedir"
-	test -d $includedir/utf8 && cf_search="$cf_search $includedir/utf8"
+	test -d "$includedir" &&    cf_search="$cf_search $includedir"
+	test -d "$includedir/utf8" && cf_search="$cf_search $includedir/utf8"
 }
 
 test "$oldincludedir" != NONE && \
 test "$oldincludedir" != "/usr/include" && \
 test -d "$oldincludedir" && {
-	test -d $oldincludedir    && cf_search="$cf_search $oldincludedir"
-	test -d $oldincludedir/utf8 && cf_search="$cf_search $oldincludedir/utf8"
+	test -d "$oldincludedir"    && cf_search="$cf_search $oldincludedir"
+	test -d "$oldincludedir/utf8" && cf_search="$cf_search $oldincludedir/utf8"
 }
 
 cf_search="$cf_search $cf_header_path_list"
 
 	for cf_cv_header_path_utf8 in $cf_search
 	do
-		if test -d $cf_cv_header_path_utf8 ; then
+		if test -d "$cf_cv_header_path_utf8" ; then
 			test -n "$verbose" && echo "	... testing $cf_cv_header_path_utf8" 1>&6
 
-echo "${as_me:-configure}:9671: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5
+echo "${as_me:-configure}:13176: testing ... testing $cf_cv_header_path_utf8 ..." 1>&5
 
-			CPPFLAGS="$cf_save_CPPFLAGS -I$cf_cv_header_path_utf8"
-			cat >conftest.$ac_ext <<_ACEOF
-#line 9675 "configure"
+			CPPFLAGS="$cf_save_CPPFLAGS"
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-I$cf_cv_header_path_utf8"
+
+			cat >"conftest.$ac_ext" <<_ACEOF
+#line 13184 "configure"
 #include "confdefs.h"
 
 #include <libutf8.h>
 int
-main ()
+main (void)
 {
 putwc(0,0);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9688: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13197: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:9691: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:9694: \"$ac_try\"") >&5
+  echo "$as_me:13200: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13203: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9697: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13206: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 				test -n "$verbose" && echo "	... found utf8 headers in $cf_cv_header_path_utf8" 1>&6
 
-echo "${as_me:-configure}:9702: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5
+echo "${as_me:-configure}:13211: testing ... found utf8 headers in $cf_cv_header_path_utf8 ..." 1>&5
 
 				cf_cv_find_linkage_utf8=maybe
 				cf_test_CPPFLAGS="$CPPFLAGS"
 				break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
 				CPPFLAGS="$cf_save_CPPFLAGS"
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 		fi
 	done
 
 	if test "$cf_cv_find_linkage_utf8" = maybe ; then
 
-echo "${as_me:-configure}:9720: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5
+echo "${as_me:-configure}:13229: testing Searching for utf8 library in FIND_LINKAGE(utf8,) ..." 1>&5
 
 		cf_save_LIBS="$LIBS"
 		cf_save_LDFLAGS="$LDFLAGS"
@@ -9729,7 +13238,7 @@
 if test -n "${LDFLAGS}${LIBS}" ; then
 	for cf_library_path in $LDFLAGS $LIBS
 	do
-		case $cf_library_path in
+		case "$cf_library_path" in
 		(-L*)
 			cf_library_path=`echo ".$cf_library_path" |sed -e 's/^...//' -e 's,/lib$,,'`
 
@@ -9737,11 +13246,11 @@
 test -d "$cf_library_path" && \
  {
 	test -n "$verbose" && echo "	... testing for lib-directories under $cf_library_path"
-	test -d $cf_library_path/lib &&          cf_search="$cf_search $cf_library_path/lib"
-	test -d $cf_library_path/lib/utf8 &&       cf_search="$cf_search $cf_library_path/lib/utf8"
-	test -d $cf_library_path/lib/utf8/lib &&    cf_search="$cf_search $cf_library_path/lib/utf8/lib"
-	test -d $cf_library_path/utf8/lib &&       cf_search="$cf_search $cf_library_path/utf8/lib"
-	test -d $cf_library_path/utf8/lib/utf8 &&    cf_search="$cf_search $cf_library_path/utf8/lib/utf8"
+	test -d "$cf_library_path/lib" &&          cf_search="$cf_search $cf_library_path/lib"
+	test -d "$cf_library_path/lib/utf8" &&       cf_search="$cf_search $cf_library_path/lib/utf8"
+	test -d "$cf_library_path/lib/utf8/lib" &&    cf_search="$cf_search $cf_library_path/lib/utf8/lib"
+	test -d "$cf_library_path/utf8/lib" &&       cf_search="$cf_search $cf_library_path/utf8/lib"
+	test -d "$cf_library_path/utf8/lib/utf8" &&    cf_search="$cf_search $cf_library_path/utf8/lib/utf8"
 }
 
 			cf_library_path_list="$cf_library_path_list $cf_search"
@@ -9756,11 +13265,11 @@
 test -d "$prefix" && \
  {
 	test -n "$verbose" && echo "	... testing for lib-directories under $prefix"
-	test -d $prefix/lib &&          cf_search="$cf_search $prefix/lib"
-	test -d $prefix/lib/utf8 &&       cf_search="$cf_search $prefix/lib/utf8"
-	test -d $prefix/lib/utf8/lib &&    cf_search="$cf_search $prefix/lib/utf8/lib"
-	test -d $prefix/utf8/lib &&       cf_search="$cf_search $prefix/utf8/lib"
-	test -d $prefix/utf8/lib/utf8 &&    cf_search="$cf_search $prefix/utf8/lib/utf8"
+	test -d "$prefix/lib" &&          cf_search="$cf_search $prefix/lib"
+	test -d "$prefix/lib/utf8" &&       cf_search="$cf_search $prefix/lib/utf8"
+	test -d "$prefix/lib/utf8/lib" &&    cf_search="$cf_search $prefix/lib/utf8/lib"
+	test -d "$prefix/utf8/lib" &&       cf_search="$cf_search $prefix/utf8/lib"
+	test -d "$prefix/utf8/lib/utf8" &&    cf_search="$cf_search $prefix/utf8/lib/utf8"
 }
 
 for cf_subdir_prefix in \
@@ -9774,13 +13283,13 @@
 
 test "x$cf_subdir_prefix" != "x$prefix" && \
 test -d "$cf_subdir_prefix" && \
-(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && {
+{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && {
 	test -n "$verbose" && echo "	... testing for lib-directories under $cf_subdir_prefix"
-	test -d $cf_subdir_prefix/lib &&          cf_search="$cf_search $cf_subdir_prefix/lib"
-	test -d $cf_subdir_prefix/lib/utf8 &&       cf_search="$cf_search $cf_subdir_prefix/lib/utf8"
-	test -d $cf_subdir_prefix/lib/utf8/lib &&    cf_search="$cf_search $cf_subdir_prefix/lib/utf8/lib"
-	test -d $cf_subdir_prefix/utf8/lib &&       cf_search="$cf_search $cf_subdir_prefix/utf8/lib"
-	test -d $cf_subdir_prefix/utf8/lib/utf8 &&    cf_search="$cf_search $cf_subdir_prefix/utf8/lib/utf8"
+	test -d "$cf_subdir_prefix/lib" &&          cf_search="$cf_search $cf_subdir_prefix/lib"
+	test -d "$cf_subdir_prefix/lib/utf8" &&       cf_search="$cf_search $cf_subdir_prefix/lib/utf8"
+	test -d "$cf_subdir_prefix/lib/utf8/lib" &&    cf_search="$cf_search $cf_subdir_prefix/lib/utf8/lib"
+	test -d "$cf_subdir_prefix/utf8/lib" &&       cf_search="$cf_search $cf_subdir_prefix/utf8/lib"
+	test -d "$cf_subdir_prefix/utf8/lib/utf8" &&    cf_search="$cf_search $cf_subdir_prefix/utf8/lib/utf8"
 }
 
 done
@@ -9789,57 +13298,57 @@
 
 			for cf_cv_library_path_utf8 in $cf_search
 			do
-				if test -d $cf_cv_library_path_utf8 ; then
+				if test -d "$cf_cv_library_path_utf8" ; then
 					test -n "$verbose" && echo "	... testing $cf_cv_library_path_utf8" 1>&6
 
-echo "${as_me:-configure}:9795: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5
+echo "${as_me:-configure}:13304: testing ... testing $cf_cv_library_path_utf8 ..." 1>&5
 
 					CPPFLAGS="$cf_test_CPPFLAGS"
 					LIBS="-lutf8  $cf_save_LIBS"
 					LDFLAGS="$cf_save_LDFLAGS -L$cf_cv_library_path_utf8"
-					cat >conftest.$ac_ext <<_ACEOF
-#line 9801 "configure"
+					cat >"conftest.$ac_ext" <<_ACEOF
+#line 13310 "configure"
 #include "confdefs.h"
 
 #include <libutf8.h>
 int
-main ()
+main (void)
 {
 putwc(0,0);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:9814: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:13323: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:9817: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:9820: \"$ac_try\"") >&5
+  echo "$as_me:13326: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:13329: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9823: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13332: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 					test -n "$verbose" && echo "	... found utf8 library in $cf_cv_library_path_utf8" 1>&6
 
-echo "${as_me:-configure}:9828: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5
+echo "${as_me:-configure}:13337: testing ... found utf8 library in $cf_cv_library_path_utf8 ..." 1>&5
 
 					cf_cv_find_linkage_utf8=yes
 					cf_cv_library_file_utf8="-lutf8"
 					break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
 					CPPFLAGS="$cf_save_CPPFLAGS"
 					LIBS="$cf_save_LIBS"
 					LDFLAGS="$cf_save_LDFLAGS"
 
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 				fi
 			done
 			CPPFLAGS="$cf_save_CPPFLAGS"
@@ -9851,10 +13360,10 @@
 	fi
 
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 
 LIBS="$cf_save_LIBS"
 
@@ -9865,9 +13374,9 @@
 fi
 
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:9870: result: $cf_cv_utf8_lib" >&5
+echo "$as_me:13379: result: $cf_cv_utf8_lib" >&5
 echo "${ECHO_T}$cf_cv_utf8_lib" >&6
 
 # HAVE_LIBUTF8_H is used by ncurses if curses.h is shared between
@@ -9881,9 +13390,9 @@
 if test -n "$cf_cv_header_path_utf8" ; then
   for cf_add_incdir in $cf_cv_header_path_utf8
   do
-	while test $cf_add_incdir != /usr/include
+	while test "$cf_add_incdir" != /usr/include
 	do
-	  if test -d $cf_add_incdir
+	  if test -d "$cf_add_incdir"
 	  then
 		cf_have_incdir=no
 		if test -n "$CFLAGS$CPPFLAGS" ; then
@@ -9900,38 +13409,41 @@
 			if test "$GCC" = yes
 			then
 			  cf_save_CPPFLAGS=$CPPFLAGS
-			  CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
-			  cat >conftest.$ac_ext <<_ACEOF
-#line 9905 "configure"
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir"
+
+			  cat >"conftest.$ac_ext" <<_ACEOF
+#line 13417 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int
-main ()
+main (void)
 {
 printf("Hello")
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:9917: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13429: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:9920: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:9923: \"$ac_try\"") >&5
+  echo "$as_me:13432: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13435: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:9926: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13438: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   :
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_have_incdir=yes
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 			  CPPFLAGS=$cf_save_CPPFLAGS
 			fi
 		  fi
@@ -9940,11 +13452,11 @@
 		if test "$cf_have_incdir" = no ; then
 		  test -n "$verbose" && echo "	adding $cf_add_incdir to include-path" 1>&6
 
-echo "${as_me:-configure}:9943: testing adding $cf_add_incdir to include-path ..." 1>&5
+echo "${as_me:-configure}:13455: testing adding $cf_add_incdir to include-path ..." 1>&5
 
 		  CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
 
-		  cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'`
+		  cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'`
 		  test "$cf_top_incdir" = "$cf_add_incdir" && break
 		  cf_add_incdir="$cf_top_incdir"
 		else
@@ -9960,9 +13472,9 @@
 if test -n "$cf_cv_library_path_utf8" ; then
 	for cf_add_libdir in $cf_cv_library_path_utf8
 	do
-		if test $cf_add_libdir = /usr/lib ; then
+		if test "$cf_add_libdir" = /usr/lib ; then
 			:
-		elif test -d $cf_add_libdir
+		elif test -d "$cf_add_libdir"
 		then
 			cf_have_libdir=no
 			if test -n "$LDFLAGS$LIBS" ; then
@@ -9976,7 +13488,7 @@
 			if test "$cf_have_libdir" = no ; then
 				test -n "$verbose" && echo "	adding $cf_add_libdir to library-path" 1>&6
 
-echo "${as_me:-configure}:9979: testing adding $cf_add_libdir to library-path ..." 1>&5
+echo "${as_me:-configure}:13491: testing adding $cf_add_libdir to library-path ..." 1>&5
 
 				LDFLAGS="-L$cf_add_libdir $LDFLAGS"
 			fi
@@ -9984,19 +13496,19 @@
 	done
 fi
 
-cf_add_libs="$cf_cv_library_file_utf8"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in $cf_cv_library_file_utf8; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
 
@@ -10008,14 +13520,14 @@
 	fi
 
 # This is needed on Tru64 5.0 to declare mbstate_t
-echo "$as_me:10011: checking if we must include wchar.h to declare mbstate_t" >&5
+echo "$as_me:13523: checking if we must include wchar.h to declare mbstate_t" >&5
 echo $ECHO_N "checking if we must include wchar.h to declare mbstate_t... $ECHO_C" >&6
 if test "${cf_cv_mbstate_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 10018 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 13530 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -10025,31 +13537,31 @@
 #include <libutf8.h>
 #endif
 int
-main ()
+main (void)
 {
-mbstate_t state
+mbstate_t state; (void)state
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10036: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13548: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10039: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10042: \"$ac_try\"") >&5
+  echo "$as_me:13551: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13554: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10045: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13557: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_mbstate_t=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 10052 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 13564 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -10060,36 +13572,36 @@
 #include <libutf8.h>
 #endif
 int
-main ()
+main (void)
 {
-mbstate_t value
+mbstate_t value; (void) value
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10071: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13583: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10074: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10077: \"$ac_try\"") >&5
+  echo "$as_me:13586: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13589: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10080: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13592: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_mbstate_t=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_mbstate_t=unknown
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:10092: result: $cf_cv_mbstate_t" >&5
+echo "$as_me:13604: result: $cf_cv_mbstate_t" >&5
 echo "${ECHO_T}$cf_cv_mbstate_t" >&6
 
 if test "$cf_cv_mbstate_t" = yes ; then
@@ -10107,14 +13619,14 @@
 fi
 
 # This is needed on Tru64 5.0 to declare wchar_t
-echo "$as_me:10110: checking if we must include wchar.h to declare wchar_t" >&5
+echo "$as_me:13622: checking if we must include wchar.h to declare wchar_t" >&5
 echo $ECHO_N "checking if we must include wchar.h to declare wchar_t... $ECHO_C" >&6
 if test "${cf_cv_wchar_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 10117 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 13629 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -10124,31 +13636,31 @@
 #include <libutf8.h>
 #endif
 int
-main ()
+main (void)
 {
-wchar_t state
+wchar_t state; (void)state
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10135: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13647: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10138: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10141: \"$ac_try\"") >&5
+  echo "$as_me:13650: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13653: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10144: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13656: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_wchar_t=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 10151 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 13663 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -10159,36 +13671,36 @@
 #include <libutf8.h>
 #endif
 int
-main ()
+main (void)
 {
-wchar_t value
+wchar_t value; (void) value
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10170: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13682: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10173: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10176: \"$ac_try\"") >&5
+  echo "$as_me:13685: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13688: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10179: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13691: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_wchar_t=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_wchar_t=unknown
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:10191: result: $cf_cv_wchar_t" >&5
+echo "$as_me:13703: result: $cf_cv_wchar_t" >&5
 echo "${ECHO_T}$cf_cv_wchar_t" >&6
 
 if test "$cf_cv_wchar_t" = yes ; then
@@ -10211,14 +13723,14 @@
 fi
 
 # This is needed on Tru64 5.0 to declare wint_t
-echo "$as_me:10214: checking if we must include wchar.h to declare wint_t" >&5
+echo "$as_me:13726: checking if we must include wchar.h to declare wint_t" >&5
 echo $ECHO_N "checking if we must include wchar.h to declare wint_t... $ECHO_C" >&6
 if test "${cf_cv_wint_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 10221 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 13733 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -10228,31 +13740,31 @@
 #include <libutf8.h>
 #endif
 int
-main ()
+main (void)
 {
-wint_t state
+wint_t state; (void)state
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10239: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13751: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10242: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10245: \"$ac_try\"") >&5
+  echo "$as_me:13754: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13757: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10248: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13760: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_wint_t=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 10255 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 13767 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -10263,36 +13775,36 @@
 #include <libutf8.h>
 #endif
 int
-main ()
+main (void)
 {
-wint_t value
+wint_t value; (void) value
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10274: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13786: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10277: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10280: \"$ac_try\"") >&5
+  echo "$as_me:13789: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13792: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10283: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13795: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_wint_t=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_wint_t=unknown
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:10295: result: $cf_cv_wint_t" >&5
+echo "$as_me:13807: result: $cf_cv_wint_t" >&5
 echo "${ECHO_T}$cf_cv_wint_t" >&6
 
 if test "$cf_cv_wint_t" = yes ; then
@@ -10324,7 +13836,7 @@
 fi
 
 ###   use option --disable-lp64 to allow long chtype
-echo "$as_me:10327: checking whether to enable _LP64 definition in curses.h" >&5
+echo "$as_me:13839: checking whether to enable _LP64 definition in curses.h" >&5
 echo $ECHO_N "checking whether to enable _LP64 definition in curses.h... $ECHO_C" >&6
 
 # Check whether --enable-lp64 or --disable-lp64 was given.
@@ -10334,7 +13846,7 @@
 else
   with_lp64=$cf_dft_with_lp64
 fi;
-echo "$as_me:10337: result: $with_lp64" >&5
+echo "$as_me:13849: result: $with_lp64" >&5
 echo "${ECHO_T}$with_lp64" >&6
 
 if test "x$with_lp64" = xyes ; then
@@ -10350,7 +13862,7 @@
 fi;
 if test "$enable_largefile" != no; then
 
-  echo "$as_me:10353: checking for special C compiler options needed for large files" >&5
+  echo "$as_me:13865: checking for special C compiler options needed for large files" >&5
 echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6
 if test "${ac_cv_sys_largefile_CC+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -10361,8 +13873,8 @@
        while :; do
      	 # IRIX 6.2 and later do not support large files by default,
      	 # so use the C compiler's -n32 option if that helps.
-         cat >conftest.$ac_ext <<_ACEOF
-#line 10365 "configure"
+         cat >"conftest.$ac_ext" <<_ACEOF
+#line 13877 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
  /* Check that off_t can represent 2**63 - 1 correctly.
@@ -10374,71 +13886,71 @@
 		       && LARGE_OFF_T % 2147483647 == 1)
 		      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-     	 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10385: \"$ac_compile\"") >&5
+     	 rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13897: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10388: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10391: \"$ac_try\"") >&5
+  echo "$as_me:13900: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13903: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10394: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13906: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext
+rm -f "conftest.$ac_objext"
      	 CC="$CC -n32"
-     	 rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10404: \"$ac_compile\"") >&5
+     	 rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13916: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10407: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10410: \"$ac_try\"") >&5
+  echo "$as_me:13919: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13922: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10413: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13925: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_sys_largefile_CC=' -n32'; break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext
+rm -f "conftest.$ac_objext"
          break
        done
        CC=$ac_save_CC
-       rm -f conftest.$ac_ext
+       rm -f "conftest.$ac_ext"
     fi
 fi
-echo "$as_me:10427: result: $ac_cv_sys_largefile_CC" >&5
+echo "$as_me:13939: result: $ac_cv_sys_largefile_CC" >&5
 echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6
   if test "$ac_cv_sys_largefile_CC" != no; then
     CC=$CC$ac_cv_sys_largefile_CC
   fi
 
-  echo "$as_me:10433: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+  echo "$as_me:13945: checking for _FILE_OFFSET_BITS value needed for large files" >&5
 echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6
 if test "${ac_cv_sys_file_offset_bits+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   while :; do
   ac_cv_sys_file_offset_bits=no
-  cat >conftest.$ac_ext <<_ACEOF
-#line 10441 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 13953 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
  /* Check that off_t can represent 2**63 - 1 correctly.
@@ -10450,33 +13962,33 @@
 		       && LARGE_OFF_T % 2147483647 == 1)
 		      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10461: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:13973: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10464: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10467: \"$ac_try\"") >&5
+  echo "$as_me:13976: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:13979: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10470: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:13982: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-#line 10479 "configure"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 13991 "configure"
 #include "confdefs.h"
 #define _FILE_OFFSET_BITS 64
 #include <sys/types.h>
@@ -10489,35 +14001,35 @@
 		       && LARGE_OFF_T % 2147483647 == 1)
 		      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10500: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14012: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10503: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10506: \"$ac_try\"") >&5
+  echo "$as_me:14015: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14018: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10509: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:14021: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_sys_file_offset_bits=64; break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
   break
 done
 fi
-echo "$as_me:10520: result: $ac_cv_sys_file_offset_bits" >&5
+echo "$as_me:14032: result: $ac_cv_sys_file_offset_bits" >&5
 echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6
 if test "$ac_cv_sys_file_offset_bits" != no; then
 
@@ -10527,15 +14039,15 @@
 
 fi
 rm -rf conftest*
-  echo "$as_me:10530: checking for _LARGE_FILES value needed for large files" >&5
+  echo "$as_me:14042: checking for _LARGE_FILES value needed for large files" >&5
 echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6
 if test "${ac_cv_sys_large_files+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   while :; do
   ac_cv_sys_large_files=no
-  cat >conftest.$ac_ext <<_ACEOF
-#line 10538 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 14050 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
  /* Check that off_t can represent 2**63 - 1 correctly.
@@ -10547,33 +14059,33 @@
 		       && LARGE_OFF_T % 2147483647 == 1)
 		      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10558: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14070: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10561: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10564: \"$ac_try\"") >&5
+  echo "$as_me:14073: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14076: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10567: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:14079: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-#line 10576 "configure"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 14088 "configure"
 #include "confdefs.h"
 #define _LARGE_FILES 1
 #include <sys/types.h>
@@ -10586,35 +14098,35 @@
 		       && LARGE_OFF_T % 2147483647 == 1)
 		      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10597: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14109: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10600: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10603: \"$ac_try\"") >&5
+  echo "$as_me:14112: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14115: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10606: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:14118: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_sys_large_files=1; break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
   break
 done
 fi
-echo "$as_me:10617: result: $ac_cv_sys_large_files" >&5
+echo "$as_me:14129: result: $ac_cv_sys_large_files" >&5
 echo "${ECHO_T}$ac_cv_sys_large_files" >&6
 if test "$ac_cv_sys_large_files" != no; then
 
@@ -10627,78 +14139,84 @@
 fi
 
 	if test "$enable_largefile" != no ; then
-	echo "$as_me:10630: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+	echo "$as_me:14142: checking for _LARGEFILE_SOURCE value needed for large files" >&5
 echo $ECHO_N "checking for _LARGEFILE_SOURCE value needed for large files... $ECHO_C" >&6
 if test "${ac_cv_sys_largefile_source+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   while :; do
   ac_cv_sys_largefile_source=no
-  cat >conftest.$ac_ext <<_ACEOF
-#line 10638 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 14150 "configure"
 #include "confdefs.h"
 #include <stdio.h>
+    #include <sys/types.h>
 int
-main ()
+main (void)
 {
-return !fseeko;
+
+    int (*my_fseeko)(FILE *, off_t, int) = fseeko;
+    return my_fseeko(stdin, 0, 0);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10650: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14165: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10653: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10656: \"$ac_try\"") >&5
+  echo "$as_me:14168: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14171: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10659: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:14174: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  cat >conftest.$ac_ext <<_ACEOF
-#line 10668 "configure"
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 14183 "configure"
 #include "confdefs.h"
 #define _LARGEFILE_SOURCE 1
 #include <stdio.h>
+    #include <sys/types.h>
 int
-main ()
+main (void)
 {
-return !fseeko;
+
+    int (*my_fseeko)(FILE *, off_t, int) = fseeko;
+    return my_fseeko(stdin, 0, 0);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10681: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14199: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10684: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10687: \"$ac_try\"") >&5
+  echo "$as_me:14202: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14205: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10690: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:14208: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_sys_largefile_source=1; break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
   break
 done
 fi
-echo "$as_me:10701: result: $ac_cv_sys_largefile_source" >&5
+echo "$as_me:14219: result: $ac_cv_sys_largefile_source" >&5
 echo "${ECHO_T}$ac_cv_sys_largefile_source" >&6
 if test "$ac_cv_sys_largefile_source" != no; then
 
@@ -10712,44 +14230,46 @@
 # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug
 # in glibc 2.1.3, but that breaks too many other things.
 # If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
-echo "$as_me:10715: checking for fseeko" >&5
+echo "$as_me:14233: checking for fseeko" >&5
 echo $ECHO_N "checking for fseeko... $ECHO_C" >&6
 if test "${ac_cv_func_fseeko+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 10721 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 14239 "configure"
 #include "confdefs.h"
 #include <stdio.h>
+                             #include <sys/types.h>
 int
-main ()
+main (void)
 {
-return fseeko && fseeko (stdin, 0, 0);
+int (*my_fseeko)(FILE *, off_t, int) = fseeko;
+                            return my_fseeko && my_fseeko (stdin, 0, 0);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:10733: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:14253: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:10736: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:10739: \"$ac_try\"") >&5
+  echo "$as_me:14256: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:14259: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10742: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:14262: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_func_fseeko=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_func_fseeko=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:10752: result: $ac_cv_func_fseeko" >&5
+echo "$as_me:14272: result: $ac_cv_func_fseeko" >&5
 echo "${ECHO_T}$ac_cv_func_fseeko" >&6
 if test $ac_cv_func_fseeko = yes; then
 
@@ -10766,59 +14286,83 @@
 	# header files by themselves before looking at the body files it is
 	# told to compile.  For ncurses, those header files do not include
 	# the config.h
-	test "$ac_cv_sys_large_files"      != no && CPPFLAGS="$CPPFLAGS -D_LARGE_FILES "
-	test "$ac_cv_sys_largefile_source" != no && CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE "
-	test "$ac_cv_sys_file_offset_bits" != no && CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits "
+	if test "$ac_cv_sys_large_files" != no
+	then
 
-	echo "$as_me:10773: checking whether to use struct dirent64" >&5
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-D_LARGE_FILES"
+
+	fi
+	if test "$ac_cv_sys_largefile_source" != no
+	then
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-D_LARGEFILE_SOURCE"
+
+	fi
+	if test "$ac_cv_sys_file_offset_bits" != no
+	then
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
+
+	fi
+
+	echo "$as_me:14311: checking whether to use struct dirent64" >&5
 echo $ECHO_N "checking whether to use struct dirent64... $ECHO_C" >&6
 if test "${cf_cv_struct_dirent64+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-		cat >conftest.$ac_ext <<_ACEOF
-#line 10780 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 14318 "configure"
 #include "confdefs.h"
 
+#pragma GCC diagnostic error "-Wincompatible-pointer-types"
 #include <sys/types.h>
 #include <dirent.h>
 
+#ifndef __REDIRECT
+/* if transitional largefile support is setup, this is true */
+extern struct dirent64 * readdir(DIR *);
+#endif
+
 int
-main ()
+main (void)
 {
 
-		/* if transitional largefile support is setup, this is true */
-		extern struct dirent64 * readdir(DIR *);
-		struct dirent64 *x = readdir((DIR *)0);
-		struct dirent *y = readdir((DIR *)0);
+		DIR *dp = opendir(".");
+		struct dirent64 *x = readdir(dp);
+		struct dirent *y = readdir(dp);
 		int z = x - y;
+		(void)z;
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:10801: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14345: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:10804: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:10807: \"$ac_try\"") >&5
+  echo "$as_me:14348: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14351: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:10810: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:14354: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_struct_dirent64=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_struct_dirent64=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:10821: result: $cf_cv_struct_dirent64" >&5
+echo "$as_me:14365: result: $cf_cv_struct_dirent64" >&5
 echo "${ECHO_T}$cf_cv_struct_dirent64" >&6
 	test "$cf_cv_struct_dirent64" = yes &&
 cat >>confdefs.h <<\EOF
@@ -10828,7 +14372,7 @@
 	fi
 
 ###   use option --disable-tparm-varargs to make tparm() conform to X/Open
-echo "$as_me:10831: checking if you want tparm not to use X/Open fixed-parameter list" >&5
+echo "$as_me:14375: checking if you want tparm not to use X/Open fixed-parameter list" >&5
 echo $ECHO_N "checking if you want tparm not to use X/Open fixed-parameter list... $ECHO_C" >&6
 
 # Check whether --enable-tparm-varargs or --disable-tparm-varargs was given.
@@ -10838,14 +14382,14 @@
 else
   with_tparm_varargs=yes
 fi;
-echo "$as_me:10841: result: $with_tparm_varargs" >&5
+echo "$as_me:14385: result: $with_tparm_varargs" >&5
 echo "${ECHO_T}$with_tparm_varargs" >&6
 NCURSES_TPARM_VARARGS=0
 test "x$with_tparm_varargs" = xyes && NCURSES_TPARM_VARARGS=1
 
 ###   use option --disable-tic-depends to make libtic not explicitly depend on ncurses/ncursesw
 if test "$with_ticlib" != no ; then
-echo "$as_me:10848: checking if you want tic library to use explicit dependency on ncurses$LIB_SUFFIX library" >&5
+echo "$as_me:14392: checking if you want tic library to use explicit dependency on ncurses$LIB_SUFFIX library" >&5
 echo $ECHO_N "checking if you want tic library to use explicit dependency on ncurses$LIB_SUFFIX library... $ECHO_C" >&6
 
 # Check whether --enable-tic-depends or --disable-tic-depends was given.
@@ -10855,14 +14399,121 @@
 else
   with_tic_depends=yes
 fi;
-echo "$as_me:10858: result: $with_tic_depends" >&5
+echo "$as_me:14402: result: $with_tic_depends" >&5
 echo "${ECHO_T}$with_tic_depends" >&6
 else
 	with_tic_depends=no
 fi
 
+###   use option --enable-wattr-macros to enable wattr* macros in curses.h
+echo "$as_me:14409: checking if you want to enable wattr* macros" >&5
+echo $ECHO_N "checking if you want to enable wattr* macros... $ECHO_C" >&6
+
+# Check whether --enable-wattr-macros or --disable-wattr-macros was given.
+if test "${enable_wattr_macros+set}" = set; then
+  enableval="$enable_wattr_macros"
+  with_wattr_macros=$enableval
+else
+  with_wattr_macros=no
+fi;
+if [ "x$with_wattr_macros" != xyes ]; then
+	NCURSES_WATTR_MACROS=0
+	echo "$as_me:14421: result: no" >&5
+echo "${ECHO_T}no" >&6
+else
+	NCURSES_WATTR_MACROS=1
+	echo "$as_me:14425: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+fi
+
+echo "$as_me:14429: checking for X11 rgb file" >&5
+echo $ECHO_N "checking for X11 rgb file... $ECHO_C" >&6
+
+# Check whether --with-x11-rgb or --without-x11-rgb was given.
+if test "${with_x11_rgb+set}" = set; then
+  withval="$with_x11_rgb"
+  RGB_PATH=$withval
+else
+  RGB_PATH=auto
+fi;
+
+if test "x$RGB_PATH" = xauto
+then
+	RGB_PATH='${exec_prefix}/lib/X11/rgb.txt'
+	for cf_path in \
+		/opt/local/share/X11/rgb.txt \
+		/opt/X11/share/X11/rgb.txt \
+		/usr/share/X11/rgb.txt \
+		/usr/X11/share/X11/rgb.txt \
+		/usr/X11/lib/X11/rgb.txt \
+		/usr/lib/X11/rgb.txt \
+		/etc/X11/rgb.txt \
+		/usr/pkg/lib/X11/rgb.txt \
+		/usr/X11R7/lib/X11/rgb.txt \
+		/usr/X11R6/lib/X11/rgb.txt \
+		/usr/X11R5/lib/X11/rgb.txt \
+		/usr/X11R4/lib/X11/rgb.txt \
+		/usr/local/lib/X11/rgb.txt \
+		/usr/local/share/X11/rgb.txt \
+		/usr/lib64/X11/rgb.txt
+	do
+		if test -f "$cf_path" ; then
+			RGB_PATH="$cf_path"
+			break
+		fi
+	done
+else
+	cf_path=$RGB_PATH
+
+if test "x$prefix" != xNONE; then
+	cf_path_syntax="$prefix"
+else
+	cf_path_syntax="$ac_default_prefix"
+fi
+
+case ".$cf_path" in
+(.\$\(*\)*|.\'*\'*)
+	;;
+(..|./*|.\\*)
+	;;
+(.[a-zA-Z]:[\\/]*) # OS/2 EMX
+	;;
+(.\$\{*prefix\}*|.\$\{*dir\}*)
+	eval cf_path="$cf_path"
+	case ".$cf_path" in
+	(.NONE/*)
+		cf_path=`echo "$cf_path" | sed -e s%NONE%$cf_path_syntax%`
+		;;
+	esac
+	;;
+(.no|.NONE/*)
+	cf_path=`echo "$cf_path" | sed -e s%NONE%$cf_path_syntax%`
+	;;
+(*)
+	{ { echo "$as_me:14493: error: expected a pathname, not \"$cf_path\"" >&5
+echo "$as_me: error: expected a pathname, not \"$cf_path\"" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+esac
+
+fi
+
+echo "$as_me:14501: result: $RGB_PATH" >&5
+echo "${ECHO_T}$RGB_PATH" >&6
+
+cat >>confdefs.h <<EOF
+#define RGB_PATH "$cf_path"
+EOF
+
+no_x11_rgb=
+if test "$RGB_PATH" = no
+then
+	no_x11_rgb="#"
+fi
+
 ###   use option --with-bool to override bool's type
-echo "$as_me:10865: checking for type of bool" >&5
+
+echo "$as_me:14516: checking for type of bool" >&5
 echo $ECHO_N "checking for type of bool... $ECHO_C" >&6
 
 # Check whether --with-bool or --without-bool was given.
@@ -10872,10 +14523,17 @@
 else
   NCURSES_BOOL=auto
 fi;
-echo "$as_me:10875: result: $NCURSES_BOOL" >&5
+echo "$as_me:14526: result: $NCURSES_BOOL" >&5
 echo "${ECHO_T}$NCURSES_BOOL" >&6
+case x$NCURSES_BOOL in
+(x|xyes|xno)
+	{ { echo "$as_me:14530: error: expected a type name for bool" >&5
+echo "$as_me: error: expected a type name for bool" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+esac
 
-echo "$as_me:10878: checking for alternate terminal capabilities file" >&5
+echo "$as_me:14536: checking for alternate terminal capabilities file" >&5
 echo $ECHO_N "checking for alternate terminal capabilities file... $ECHO_C" >&6
 
 # Check whether --with-caps or --without-caps was given.
@@ -10885,12 +14543,18 @@
 else
   TERMINFO_CAPS=Caps
 fi;
-test -f "${srcdir}/include/${TERMINFO_CAPS}" || TERMINFO_CAPS=Caps
-echo "$as_me:10889: result: $TERMINFO_CAPS" >&5
+if test ! -f "${srcdir}/include/${TERMINFO_CAPS}"
+then
+	{ echo "$as_me:14548: WARNING: file not found: \"${srcdir}/include/${TERMINFO_CAPS}\"" >&5
+echo "$as_me: WARNING: file not found: \"${srcdir}/include/${TERMINFO_CAPS}\"" >&2;}
+	TERMINFO_CAPS=Caps
+fi
+echo "$as_me:14552: result: $TERMINFO_CAPS" >&5
 echo "${ECHO_T}$TERMINFO_CAPS" >&6
 
 ###   use option --with-chtype to override chtype's type
-echo "$as_me:10893: checking for type of chtype" >&5
+
+echo "$as_me:14557: checking for type of chtype" >&5
 echo $ECHO_N "checking for type of chtype... $ECHO_C" >&6
 
 # Check whether --with-chtype or --without-chtype was given.
@@ -10900,11 +14564,19 @@
 else
   NCURSES_CHTYPE=$cf_dft_chtype
 fi;
-echo "$as_me:10903: result: $NCURSES_CHTYPE" >&5
+echo "$as_me:14567: result: $NCURSES_CHTYPE" >&5
 echo "${ECHO_T}$NCURSES_CHTYPE" >&6
+case x$NCURSES_CHTYPE in
+(x|xyes|xno)
+	{ { echo "$as_me:14571: error: expected a type name for chtype" >&5
+echo "$as_me: error: expected a type name for chtype" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+esac
 
 ###   use option --with-ospeed to override ospeed's type
-echo "$as_me:10907: checking for type of ospeed" >&5
+
+echo "$as_me:14579: checking for type of ospeed" >&5
 echo $ECHO_N "checking for type of ospeed... $ECHO_C" >&6
 
 # Check whether --with-ospeed or --without-ospeed was given.
@@ -10914,12 +14586,20 @@
 else
   NCURSES_OSPEED=short
 fi;
-echo "$as_me:10917: result: $NCURSES_OSPEED" >&5
+echo "$as_me:14589: result: $NCURSES_OSPEED" >&5
 echo "${ECHO_T}$NCURSES_OSPEED" >&6
+case x$NCURSES_OSPEED in
+(x|xyes|xno)
+	{ { echo "$as_me:14593: error: expected a type name for ospeed" >&5
+echo "$as_me: error: expected a type name for ospeed" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+esac
 
 ###   use option --with-mmask-t to override mmask_t's type
-echo "$as_me:10921: checking for type of mmask_t" >&5
-echo $ECHO_N "checking for type of mmask_t... $ECHO_C" >&6
+
+echo "$as_me:14601: checking for type of mmask-t" >&5
+echo $ECHO_N "checking for type of mmask-t... $ECHO_C" >&6
 
 # Check whether --with-mmask-t or --without-mmask-t was given.
 if test "${with_mmask_t+set}" = set; then
@@ -10928,11 +14608,18 @@
 else
   NCURSES_MMASK_T=$cf_dft_mmask_t
 fi;
-echo "$as_me:10931: result: $NCURSES_MMASK_T" >&5
+echo "$as_me:14611: result: $NCURSES_MMASK_T" >&5
 echo "${ECHO_T}$NCURSES_MMASK_T" >&6
+case x$NCURSES_MMASK_T in
+(x|xyes|xno)
+	{ { echo "$as_me:14615: error: expected a type name for mmask-t" >&5
+echo "$as_me: error: expected a type name for mmask-t" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+esac
 
 ###   use option --with-ccharw-max to override CCHARW_MAX size
-echo "$as_me:10935: checking for size CCHARW_MAX" >&5
+echo "$as_me:14622: checking for size CCHARW_MAX" >&5
 echo $ECHO_N "checking for size CCHARW_MAX... $ECHO_C" >&6
 
 # Check whether --with-ccharw-max or --without-ccharw-max was given.
@@ -10940,14 +14627,271 @@
   withval="$with_ccharw_max"
   NCURSES_CCHARW_MAX="$withval"
 else
-  NCURSES_CCHARW_MAX=5
+  NCURSES_CCHARW_MAX=$cf_dft_ccharw_max
 fi;
-echo "$as_me:10945: result: $NCURSES_CCHARW_MAX" >&5
+echo "$as_me:14632: result: $NCURSES_CCHARW_MAX" >&5
 echo "${ECHO_T}$NCURSES_CCHARW_MAX" >&6
 
+echo "$as_me:14635: checking for signed char" >&5
+echo $ECHO_N "checking for signed char... $ECHO_C" >&6
+if test "${ac_cv_type_signed_char+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 14641 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main (void)
+{
+if ((signed char *) 0)
+  return 0;
+if (sizeof (signed char))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14656: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:14659: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14662: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:14665: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_type_signed_char=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_type_signed_char=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:14675: result: $ac_cv_type_signed_char" >&5
+echo "${ECHO_T}$ac_cv_type_signed_char" >&6
+
+echo "$as_me:14678: checking size of signed char" >&5
+echo $ECHO_N "checking size of signed char... $ECHO_C" >&6
+if test "${ac_cv_sizeof_signed_char+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_signed_char" = yes; then
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 14687 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (signed char)) >= 0)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14699: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:14702: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14705: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:14708: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 14713 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (signed char)) <= $ac_mid)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14725: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:14728: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14731: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:14734: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`; ac_mid=`expr 2 '*' "$ac_mid" + 1`
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  done
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 14750 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (signed char)) >= $ac_mid)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14762: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:14765: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14768: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:14771: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_hi=`expr "$ac_mid" - 1`; ac_mid=`expr 2 '*' "$ac_mid"`
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  done
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' "$ac_hi" - "$ac_lo" ')' / 2 + "$ac_lo"`
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 14787 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (signed char)) <= $ac_mid)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:14799: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:14802: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:14805: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:14808: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+done
+ac_cv_sizeof_signed_char=$ac_lo
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:14821: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 14826 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main (void)
+{
+FILE *f = fopen ("conftest.val", "w");
+if (!f)
+  $ac_main_return (1);
+fprintf (f, "%ld", (long)(sizeof (signed char)));
+fclose (f);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:14842: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:14845: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:14847: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:14850: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_sizeof_signed_char=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_signed_char=0
+fi
+fi
+echo "$as_me:14866: result: $ac_cv_sizeof_signed_char" >&5
+echo "${ECHO_T}$ac_cv_sizeof_signed_char" >&6
+cat >>confdefs.h <<EOF
+#define SIZEOF_SIGNED_CHAR $ac_cv_sizeof_signed_char
+EOF
+
+if test "$ac_cv_sizeof_signed_char" = 1 ; then
+	NCURSES_SBOOL="signed char"
+else
+	NCURSES_SBOOL="char"
+fi
+echo "$as_me:14877: checking whether to use signed chars for Boolean array in term.h" >&5
+echo $ECHO_N "checking whether to use signed chars for Boolean array in term.h... $ECHO_C" >&6
+
+# Check whether --enable-signed-char or --disable-signed-char was given.
+if test "${enable_signed_char+set}" = set; then
+  enableval="$enable_signed_char"
+  with_signed_char=$enableval
+else
+  with_signed_char=$cf_dft_signed_char
+fi;
+echo "$as_me:14887: result: $with_signed_char" >&5
+echo "${ECHO_T}$with_signed_char" >&6
+test "x$with_signed_char" != xyes && NCURSES_SBOOL="char"
+
 ###   use option --with-tparm-arg to override tparm's argument type
-echo "$as_me:10949: checking for type of tparm args" >&5
-echo $ECHO_N "checking for type of tparm args... $ECHO_C" >&6
+
+echo "$as_me:14893: checking for type of tparm-arg" >&5
+echo $ECHO_N "checking for type of tparm-arg... $ECHO_C" >&6
 
 # Check whether --with-tparm-arg or --without-tparm-arg was given.
 if test "${with_tparm_arg+set}" = set; then
@@ -10956,11 +14900,18 @@
 else
   NCURSES_TPARM_ARG=$cf_dft_tparm_arg
 fi;
-echo "$as_me:10959: result: $NCURSES_TPARM_ARG" >&5
+echo "$as_me:14903: result: $NCURSES_TPARM_ARG" >&5
 echo "${ECHO_T}$NCURSES_TPARM_ARG" >&6
+case x$NCURSES_TPARM_ARG in
+(x|xyes|xno)
+	{ { echo "$as_me:14907: error: expected a type name for tparm-arg" >&5
+echo "$as_me: error: expected a type name for tparm-arg" >&2;}
+   { (exit 1); exit 1; }; }
+	;;
+esac
 
 ### Enable compiling-in rcs id's
-echo "$as_me:10963: checking if RCS identifiers should be compiled-in" >&5
+echo "$as_me:14914: checking if RCS identifiers should be compiled-in" >&5
 echo $ECHO_N "checking if RCS identifiers should be compiled-in... $ECHO_C" >&6
 
 # Check whether --with-rcs-ids or --without-rcs-ids was given.
@@ -10970,7 +14921,7 @@
 else
   with_rcs_ids=no
 fi;
-echo "$as_me:10973: result: $with_rcs_ids" >&5
+echo "$as_me:14924: result: $with_rcs_ids" >&5
 echo "${ECHO_T}$with_rcs_ids" >&6
 test "x$with_rcs_ids" = xyes &&
 cat >>confdefs.h <<\EOF
@@ -10979,7 +14930,7 @@
 
 ###############################################################################
 
-echo "$as_me:10982: checking format of man-pages" >&5
+echo "$as_me:14933: checking format of man-pages" >&5
 echo $ECHO_N "checking format of man-pages... $ECHO_C" >&6
 
 # Check whether --with-manpage-format or --without-manpage-format was given.
@@ -10995,31 +14946,33 @@
 
 cf_unknown=
 
-case $MANPAGE_FORMAT in
+case "$MANPAGE_FORMAT" in
 (unknown)
 	if test -z "$MANPATH" ; then
 		MANPATH="/usr/man:/usr/share/man"
 	fi
 
-	# look for the 'date' man-page (it's most likely to be installed!)
+	# look for the 'date' man-page (it is most likely to be installed!)
 	MANPAGE_FORMAT=
-	cf_preform=no
-	cf_catonly=yes
-	cf_example=date
+	cf_preform="no"
+	cf_catonly="yes"
+	cf_example="date"
 
 	IFS="${IFS:- 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
 	for cf_dir in $MANPATH; do
 		test -z "$cf_dir" && cf_dir=/usr/man
 		for cf_name in $cf_dir/man*/$cf_example.[01]* $cf_dir/cat*/$cf_example.[01]* $cf_dir/man*/$cf_example $cf_dir/cat*/$cf_example
 		do
-			cf_test=`echo $cf_name | sed -e 's/*//'`
+			cf_test=`echo "$cf_name" | sed -e 's/*//'`
 			if test "x$cf_test" = "x$cf_name" ; then
 
 				case "$cf_name" in
-				(*.gz) MANPAGE_FORMAT="$MANPAGE_FORMAT gzip";;
-				(*.Z)  MANPAGE_FORMAT="$MANPAGE_FORMAT compress";;
-				(*.0)  MANPAGE_FORMAT="$MANPAGE_FORMAT BSDI";;
-				(*)    MANPAGE_FORMAT="$MANPAGE_FORMAT normal";;
+				(*.bz2) MANPAGE_FORMAT="$MANPAGE_FORMAT bzip2";;
+				(*.xz)  MANPAGE_FORMAT="$MANPAGE_FORMAT xz";;
+				(*.gz)  MANPAGE_FORMAT="$MANPAGE_FORMAT gzip";;
+				(*.Z)   MANPAGE_FORMAT="$MANPAGE_FORMAT compress";;
+				(*.0)   MANPAGE_FORMAT="$MANPAGE_FORMAT BSDI";;
+				(*)     MANPAGE_FORMAT="$MANPAGE_FORMAT normal";;
 				esac
 
 				case "$cf_name" in
@@ -11043,7 +14996,7 @@
 					cf_found=yes
 					;;
 				esac
-				test $cf_found=yes && break
+				test "$cf_found" = yes && break
 			fi
 		done
 		# only check the first directory in $MANPATH where we find manpages
@@ -11057,8 +15010,8 @@
 	;;
 (*)
 	for cf_option in $MANPAGE_FORMAT; do
-	case $cf_option in
-	(gzip|compress|BSDI|normal|formatted|catonly)
+	case "$cf_option" in
+	(xz|bzip2|gzip|compress|BSDI|normal|formatted|catonly)
 		;;
 	(*)
 		cf_unknown="$cf_unknown $cf_option"
@@ -11068,14 +15021,51 @@
 	;;
 esac
 
-echo "$as_me:11071: result: $MANPAGE_FORMAT" >&5
+echo "$as_me:15024: result: $MANPAGE_FORMAT" >&5
 echo "${ECHO_T}$MANPAGE_FORMAT" >&6
 if test -n "$cf_unknown" ; then
-	{ echo "$as_me:11074: WARNING: Unexpected manpage-format $cf_unknown" >&5
+	{ echo "$as_me:15027: WARNING: Unexpected manpage-format $cf_unknown" >&5
 echo "$as_me: WARNING: Unexpected manpage-format $cf_unknown" >&2;}
 fi
 
-echo "$as_me:11078: checking for manpage renaming" >&5
+cf_manpage_format=no
+cf_manpage_inboth=no
+cf_manpage_so_strip=
+cf_manpage_compress=
+cf_manpage_coptions=
+
+for cf_item in $MANPAGE_FORMAT
+do
+case "$cf_item" in
+(catonly)
+	cf_manpage_format=yes
+	cf_manpage_inboth=no
+	;;
+(formatted)
+	cf_manpage_format=yes
+	cf_manpage_inboth=yes
+	;;
+(compress)
+	cf_manpage_so_strip="Z"
+	cf_manpage_compress=compress
+	;;
+(gzip)
+	cf_manpage_so_strip="gz"
+	cf_manpage_compress=gzip
+	cf_manpage_coptions=-n
+	;;
+(bzip2)
+	cf_manpage_so_strip="bz2"
+	cf_manpage_compress=bzip2
+	;;
+(xz)
+	cf_manpage_so_strip="xz"
+	cf_manpage_compress=xz
+	;;
+esac
+done
+
+echo "$as_me:15068: checking for manpage renaming" >&5
 echo $ECHO_N "checking for manpage renaming... $ECHO_C" >&6
 
 # Check whether --with-manpage-renames or --without-manpage-renames was given.
@@ -11092,35 +15082,27 @@
 (.|.yes)
 	# Debian 'man' program?
 	if test -f /etc/debian_version ; then
-		MANPAGE_RENAMES=`cd $srcdir && pwd`/man/man_db.renames
+		MANPAGE_RENAMES=man/man_db.renames
 	else
 		MANPAGE_RENAMES=no
 	fi
 	;;
 esac
 
-if test "$MANPAGE_RENAMES" != no ; then
-	if test -f $srcdir/man/$MANPAGE_RENAMES ; then
-		MANPAGE_RENAMES=`cd $srcdir/man && pwd`/$MANPAGE_RENAMES
-	elif test ! -f $MANPAGE_RENAMES ; then
-		{ { echo "$as_me:11106: error: not a filename: $MANPAGE_RENAMES" >&5
+if test "$MANPAGE_RENAMES" = man/man_db.renames ; then
+	MANPAGE_RENAMES=`pwd`/$MANPAGE_RENAMES
+elif test "$MANPAGE_RENAMES" = no ; then
+	:
+elif test ! -f "$MANPAGE_RENAMES" ; then
+	{ { echo "$as_me:15097: error: not a filename: $MANPAGE_RENAMES" >&5
 echo "$as_me: error: not a filename: $MANPAGE_RENAMES" >&2;}
    { (exit 1); exit 1; }; }
-	fi
-
-	test ! -d man && mkdir man
-
-	# Construct a sed-script to perform renaming within man-pages
-	if test -n "$MANPAGE_RENAMES" ; then
-		test ! -d man && mkdir man
-		$SHELL $srcdir/man/make_sed.sh $MANPAGE_RENAMES >./edit_man.sed
-	fi
 fi
 
-echo "$as_me:11120: result: $MANPAGE_RENAMES" >&5
+echo "$as_me:15102: result: $MANPAGE_RENAMES" >&5
 echo "${ECHO_T}$MANPAGE_RENAMES" >&6
 
-echo "$as_me:11123: checking if manpage aliases will be installed" >&5
+echo "$as_me:15105: checking if manpage aliases will be installed" >&5
 echo $ECHO_N "checking if manpage aliases will be installed... $ECHO_C" >&6
 
 # Check whether --with-manpage-aliases or --without-manpage-aliases was given.
@@ -11131,7 +15113,7 @@
   MANPAGE_ALIASES=yes
 fi;
 
-echo "$as_me:11134: result: $MANPAGE_ALIASES" >&5
+echo "$as_me:15116: result: $MANPAGE_ALIASES" >&5
 echo "${ECHO_T}$MANPAGE_ALIASES" >&6
 
 case "x$LN_S" in
@@ -11145,7 +15127,7 @@
 
 MANPAGE_SYMLINKS=no
 if test "$MANPAGE_ALIASES" = yes ; then
-echo "$as_me:11148: checking if manpage symlinks should be used" >&5
+echo "$as_me:15130: checking if manpage symlinks should be used" >&5
 echo $ECHO_N "checking if manpage symlinks should be used... $ECHO_C" >&6
 
 # Check whether --with-manpage-symlinks or --without-manpage-symlinks was given.
@@ -11156,19 +15138,19 @@
   MANPAGE_SYMLINKS=$cf_use_symlinks
 fi;
 
-if test "$$cf_use_symlinks" = no; then
+if test "$cf_use_symlinks" = no; then
 if test "$MANPAGE_SYMLINKS" = yes ; then
-	{ echo "$as_me:11161: WARNING: cannot make symlinks" >&5
+	{ echo "$as_me:15143: WARNING: cannot make symlinks" >&5
 echo "$as_me: WARNING: cannot make symlinks" >&2;}
 	MANPAGE_SYMLINKS=no
 fi
 fi
 
-echo "$as_me:11167: result: $MANPAGE_SYMLINKS" >&5
+echo "$as_me:15149: result: $MANPAGE_SYMLINKS" >&5
 echo "${ECHO_T}$MANPAGE_SYMLINKS" >&6
 fi
 
-echo "$as_me:11171: checking for manpage tbl" >&5
+echo "$as_me:15153: checking for manpage tbl" >&5
 echo $ECHO_N "checking for manpage tbl... $ECHO_C" >&6
 
 # Check whether --with-manpage-tbl or --without-manpage-tbl was given.
@@ -11179,7 +15161,7 @@
   MANPAGE_TBL=no
 fi;
 
-echo "$as_me:11182: result: $MANPAGE_TBL" >&5
+echo "$as_me:15164: result: $MANPAGE_TBL" >&5
 echo "${ECHO_T}$MANPAGE_TBL" >&6
 
 if test "$prefix" = "NONE" ; then
@@ -11188,36 +15170,8 @@
 	cf_prefix="$prefix"
 fi
 
-case "$MANPAGE_FORMAT" in
-(*catonly*)
-	cf_format=yes
-	cf_inboth=no
-	;;
-(*formatted*)
-	cf_format=yes
-	cf_inboth=yes
-	;;
-(*)
-	cf_format=no
-	cf_inboth=no
-	;;
-esac
-
 test ! -d man && mkdir man
 
-cf_so_strip=
-cf_compress=
-case "$MANPAGE_FORMAT" in
-(*compress*)
-	cf_so_strip="Z"
-	cf_compress=compress
-	;;
-(*gzip*)
-	cf_so_strip="gz"
-	cf_compress=gzip
-	;;
-esac
-
 cf_edit_man=./edit_man.sh
 cf_man_alias=`pwd`/man_alias.sed
 
@@ -11235,6 +15189,7 @@
 
 NCURSES_OSPEED="$NCURSES_OSPEED"
 TERMINFO="$TERMINFO"
+TERMINFO_DIRS="$TERMINFO_DIRS"
 
 INSTALL="$INSTALL"
 INSTALL_DATA="$INSTALL_DATA"
@@ -11242,7 +15197,8 @@
 transform="$program_transform_name"
 
 TMP=\${TMPDIR:=/tmp}/man\$\$
-trap "rm -f \$TMP" 0 1 2 5 15
+trap "rm -f \$TMP; exit 1" 1 2 3 15
+trap "rm -f \$TMP" 0
 
 form=\$1
 shift || exit 1
@@ -11258,9 +15214,9 @@
 shift || exit 1
 
 if test "\$form" = normal ; then
-	if test "$cf_format" = yes ; then
-	if test "$cf_inboth" = no ; then
-		$SHELL \$0 format \$verb \$mandir \$srcdir \$*
+	if test "$cf_manpage_format" = yes ; then
+	if test "$cf_manpage_inboth" = no ; then
+		$SHELL "\$0" format "\$verb" "\$mandir" "\$srcdir" "\$@"
 		exit $?
 	fi
 	fi
@@ -11272,19 +15228,19 @@
 fi
 
 # process the list of source-files
-for i in \$* ; do
+for i in "\$@" ; do
 case \$i in
 (*.orig|*.rej) ;;
 (*.[0-9]*)
 	section=\`expr "\$i" : '.*\\.\\([0-9]\\)[xm]*'\`;
-	if test \$verb = installing ; then
-	if test ! -d \$cf_subdir\${section} ; then
-		mkdir -p \$cf_subdir\$section
+	if test "\$verb" = installing ; then
+	if test ! -d "\$cf_subdir\${section}" ; then
+		mkdir -p "\$cf_subdir\$section"
 	fi
 	fi
 
 	# replace variables in man page
-	if test ! -f $cf_man_alias ; then
+	if test ! -f "$cf_man_alias" ; then
 cat >>$cf_man_alias <<-CF_EOF2
 		s,@DATADIR@,\$datadir,g
 		s,@TERMINFO@,\${TERMINFO:="no default value"},g
@@ -11295,10 +15251,10 @@
 		s,@NCURSES_OSPEED@,\${NCURSES_OSPEED:="no default value"},g
 CF_EOF
 
-	for cf_name in  captoinfo clear infocmp infotocap tabs tic toe tput tset
+	for cf_name in  captoinfo clear infocmp infotocap reset tabs tic toe tput tset
 	do
 		cf_NAME=`echo "$cf_name" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
-		cf_name=`echo $cf_name|sed "$program_transform_name"`
+		cf_name=`echo "$cf_name" | sed "$program_transform_name"`
 cat >>$cf_edit_man <<-CF_EOF
 		s,@$cf_NAME@,$cf_name,g
 CF_EOF
@@ -11310,11 +15266,11 @@
 	fi
 
 	aliases=
-	cf_source=\`basename \$i\`
-	inalias=\$cf_source
-	test ! -f \$inalias && inalias="\$srcdir/\$inalias"
-	if test ! -f \$inalias ; then
-		echo .. skipped \$cf_source
+	cf_source=\`basename "\$i"\`
+	cf_full_alias=\$cf_source
+	test ! -f "\$cf_full_alias" && cf_full_alias="\$srcdir/\$cf_full_alias"
+	if test ! -f "\$cf_full_alias" ; then
+		echo ".. skipped \$cf_source"
 		continue
 	fi
 CF_EOF
@@ -11322,8 +15278,9 @@
 if test "$MANPAGE_ALIASES" != no ; then
 cat >>$cf_edit_man <<CF_EOF
 	nCurses=ignore.3x
-	test $with_curses_h = yes && nCurses=ncurses.3x
-	aliases=\`sed -f \$top_srcdir/man/manlinks.sed \$inalias |sed -f $cf_man_alias | sort -u; test \$inalias = \$nCurses && echo curses\`
+	cf_part_alias=\`echo \$cf_full_alias| sed -e 's,^.*/,,'\`
+	test "$with_curses_h" = yes && nCurses=ncurses.3x
+	aliases=\`sed -f "\$top_srcdir/man/manlinks.sed" "\$cf_full_alias" |sed -f "$cf_man_alias" | sort -u; test "\$cf_part_alias" = "\$nCurses" && echo curses\`
 CF_EOF
 fi
 
@@ -11340,7 +15297,7 @@
 cat >>$cf_edit_man <<CF_EOF
 	cf_target=\`grep "^\$cf_source" $MANPAGE_RENAMES | $AWK '{print \$2}'\`
 	if test -z "\$cf_target" ; then
-		echo '? missing rename for '\$cf_source
+		echo "? missing rename for \$cf_source"
 		cf_target="\$cf_source"
 	fi
 	cf_target="\$cf_subdir\${section}/\${cf_target}"
@@ -11349,16 +15306,16 @@
 fi
 
 cat >>$cf_edit_man <<CF_EOF
-	sed	-f $cf_man_alias \\
+	sed	-f "$cf_man_alias" \\
 CF_EOF
 
-if test -f $MANPAGE_RENAMES ; then
+if test "$MANPAGE_RENAMES" != no ; then
 cat >>$cf_edit_man <<CF_EOF
-		< \$i | sed -f `pwd`/edit_man.sed >\$TMP
+		< "\$i" | sed -f `pwd`/edit_man.sed >\$TMP
 CF_EOF
 else
 cat >>$cf_edit_man <<CF_EOF
-		< \$i >\$TMP
+		< "\$i" >\$TMP
 CF_EOF
 fi
 
@@ -11369,86 +15326,95 @@
 fi
 CF_EOF
 
-if test $with_overwrite != yes ; then
+if test "$with_overwrite" != yes ; then
 cat >>$cf_edit_man <<CF_EOF
-	sed -e "/\#[    ]*include/s,<curses.h,<ncurses$LIB_SUFFIX/curses.h," < \$TMP >\$TMP.out
+	sed -e "/\\#[    ]*include/s,<curses.h,<ncurses$LIB_SUFFIX/curses.h," < \$TMP >\$TMP.out
 	mv \$TMP.out \$TMP
 CF_EOF
 fi
 
-if test $with_curses_h != yes ; then
+if test "$with_curses_h" != yes ; then
 cat >>$cf_edit_man <<CF_EOF
-	sed -e "/\#[    ]*include/s,curses.h,ncurses.h," < \$TMP >\$TMP.out
+	sed -e "/\\#[    ]*include/s,curses.h,ncurses.h," < \$TMP >\$TMP.out
 	mv \$TMP.out \$TMP
 CF_EOF
 fi
 
 cat >>$cf_edit_man <<CF_EOF
-	if test \$form = format ; then
+	if test "\$form" = format ; then
 		nroff -man \$TMP >\$TMP.out
 		mv \$TMP.out \$TMP
 	fi
 CF_EOF
 
-if test -n "$cf_compress" ; then
+if test -n "$cf_manpage_compress" ; then
 cat >>$cf_edit_man <<CF_EOF
-	if test \$verb = installing ; then
-	if ( $cf_compress -f \$TMP )
+	if test "\$verb" = installing ; then
+	if ( "$cf_manpage_compress" -f \$TMP )
 	then
-		mv \$TMP.$cf_so_strip \$TMP
+		mv \$TMP.$cf_manpage_so_strip \$TMP
 	fi
 	fi
-	cf_target="\$cf_target.$cf_so_strip"
+	cf_target="\$cf_target.$cf_manpage_so_strip"
 CF_EOF
 fi
 
 case "$MANPAGE_FORMAT" in
 (*BSDI*)
 cat >>$cf_edit_man <<CF_EOF
-	if test \$form = format ; then
+	if test "\$form" = format ; then
 		# BSDI installs only .0 suffixes in the cat directories
-		cf_target="\`echo \$cf_target|sed -e 's/\.[1-9]\+[a-z]*/.0/'\`"
+		cf_target="\`echo \$cf_target|sed -e 's/\\.[1-9]\\+[a-z]*/.0/'\`"
 	fi
 CF_EOF
   ;;
 esac
 
 cat >>$cf_edit_man <<CF_EOF
-	suffix=\`basename \$cf_target | sed -e 's%^[^.]*%%'\`
-	if test \$verb = installing ; then
-		echo \$verb \$cf_target
-		\$INSTALL_DATA \$TMP \$cf_target
-		test -d \$cf_subdir\${section} &&
+	suffix=\`basename "\$cf_target" | sed -e 's%^[^.]*%%'\`
+	extra_suffix=
+	if test -n "$EXTRA_SUFFIX" ; then
+		case \$cf_target in
+		(*${EXTRA_SUFFIX}\$suffix)
+			extra_suffix="$EXTRA_SUFFIX"
+			;;
+		esac
+	fi
+	if test "\$verb" = installing ; then
+		echo "\$verb \$cf_target"
+		\$INSTALL_DATA \$TMP "\$cf_target"
+		test -d "\$cf_subdir\${section}" &&
 		test -n "\$aliases" && (
-			cd \$cf_subdir\${section} && (
-				cf_source=\`echo \$cf_target |sed -e 's%^.*/\([^/][^/]*/[^/][^/]*$\)%\1%'\`
-				test -n "$cf_so_strip" && cf_source=\`echo \$cf_source |sed -e 's%\.$cf_so_strip\$%%'\`
-				cf_target=\`basename \$cf_target\`
+			cd "\$cf_subdir\${section}" && (
+				cf_source=\`echo "\$cf_target" |sed -e 's%^.*/\\([^/][^/]*/[^/][^/]*$\\)%\\1%'\`
+				test -n "$cf_manpage_so_strip" && cf_source=\`echo "\$cf_source" |sed -e 's%\\.$cf_manpage_so_strip\$%%'\`
+				cf_target=\`basename "\$cf_target"\`
 				for cf_alias in \$aliases
 				do
-					if test \$section = 1 ; then
-						cf_alias=\`echo \$cf_alias|sed "\${transform}"\`
+					if test "\$section" = 1 ; then
+						cf_alias=\`echo "\$cf_alias" |sed "\${transform}"\`
 					fi
+					cf_alias="\${cf_alias}\${extra_suffix}"
 
 					if test "$MANPAGE_SYMLINKS" = yes ; then
-						if test -f \$cf_alias\${suffix} ; then
-							if ( cmp -s \$cf_target \$cf_alias\${suffix} )
+						if test -f "\$cf_alias\${suffix}" ; then
+							if ( cmp -s "\$cf_target" "\$cf_alias\${suffix}" )
 							then
 								continue
 							fi
 						fi
-						echo .. \$verb alias \$cf_alias\${suffix}
+						echo ".. \$verb alias \$cf_alias\${suffix}"
 CF_EOF
 case "x$LN_S" in
 (*-f)
 cat >>$cf_edit_man <<CF_EOF
-						$LN_S \$cf_target \$cf_alias\${suffix}
+						$LN_S "\$cf_target" "\$cf_alias\${suffix}"
 CF_EOF
 	;;
 (*)
 cat >>$cf_edit_man <<CF_EOF
-						rm -f \$cf_alias\${suffix}
-						$LN_S \$cf_target \$cf_alias\${suffix}
+						rm -f "\$cf_alias\${suffix}"
+						$LN_S "\$cf_target" "\$cf_alias\${suffix}"
 CF_EOF
 	;;
 esac
@@ -11456,38 +15422,39 @@
 					elif test "\$cf_target" != "\$cf_alias\${suffix}" ; then
 						echo ".so \$cf_source" >\$TMP
 CF_EOF
-if test -n "$cf_compress" ; then
+if test -n "$cf_manpage_compress" ; then
 cat >>$cf_edit_man <<CF_EOF
-						if test -n "$cf_so_strip" ; then
-							$cf_compress -f \$TMP
-							mv \$TMP.$cf_so_strip \$TMP
+						if test -n "$cf_manpage_so_strip" ; then
+							"$cf_manpage_compress" $cf_manpage_coptions -f \$TMP
+							mv \$TMP.$cf_manpage_so_strip \$TMP
 						fi
 CF_EOF
 fi
 cat >>$cf_edit_man <<CF_EOF
-						echo .. \$verb alias \$cf_alias\${suffix}
-						rm -f \$cf_alias\${suffix}
-						\$INSTALL_DATA \$TMP \$cf_alias\${suffix}
+						echo ".. \$verb alias \$cf_alias\${suffix}"
+						rm -f "\$cf_alias\${suffix}"
+						\$INSTALL_DATA \$TMP "\$cf_alias\${suffix}"
 					fi
 				done
 			)
 		)
-	elif test \$verb = removing ; then
-		test -f \$cf_target && (
-			echo \$verb \$cf_target
-			rm -f \$cf_target
+	elif test "\$verb" = removing ; then
+		test -f "\$cf_target" && (
+			echo "\$verb \$cf_target"
+			rm -f "\$cf_target"
 		)
-		test -d \$cf_subdir\${section} &&
+		test -d "\$cf_subdir\${section}" &&
 		test -n "\$aliases" && (
-			cd \$cf_subdir\${section} && (
+			cd "\$cf_subdir\${section}" && (
 				for cf_alias in \$aliases
 				do
-					if test \$section = 1 ; then
-						cf_alias=\`echo \$cf_alias|sed "\${transform}"\`
+					if test "\$section" = 1 ; then
+						cf_alias=\`echo "\$cf_alias" |sed "\${transform}"\`
 					fi
+					cf_alias="\${cf_alias}\${extra_suffix}"
 
-					echo .. \$verb alias \$cf_alias\${suffix}
-					rm -f \$cf_alias\${suffix}
+					echo ".. \$verb alias \$cf_alias\${suffix}"
+					rm -f "\$cf_alias\${suffix}"
 				done
 			)
 		)
@@ -11499,20 +15466,20 @@
 esac
 done
 
-if test $cf_inboth = yes ; then
-if test \$form != format ; then
-	$SHELL \$0 format \$verb \$mandir \$srcdir \$*
+if test "$cf_manpage_inboth" = yes ; then
+if test "\$form" != format ; then
+	$SHELL "\$0" format "\$verb" "\$mandir" "\$srcdir" "\$@"
 fi
 fi
 
 exit 0
 CF_EOF
-chmod 755 $cf_edit_man
+chmod 755 "$cf_edit_man"
 
 ###############################################################################
 
 ### Note that some functions (such as const) are normally disabled anyway.
-echo "$as_me:11515: checking if you want to build with function extensions" >&5
+echo "$as_me:15482: checking if you want to build with function extensions" >&5
 echo $ECHO_N "checking if you want to build with function extensions... $ECHO_C" >&6
 
 # Check whether --enable-ext-funcs or --disable-ext-funcs was given.
@@ -11522,12 +15489,16 @@
 else
   with_ext_funcs=yes
 fi;
-echo "$as_me:11525: result: $with_ext_funcs" >&5
+echo "$as_me:15492: result: $with_ext_funcs" >&5
 echo "${ECHO_T}$with_ext_funcs" >&6
 if test "x$with_ext_funcs" = xyes ; then
 	NCURSES_EXT_FUNCS=1
 
 cat >>confdefs.h <<\EOF
+#define NCURSES_EXT_FUNCS 1
+EOF
+
+cat >>confdefs.h <<\EOF
 #define HAVE_ASSUME_DEFAULT_COLORS 1
 EOF
 
@@ -11567,17 +15538,14 @@
 #define HAVE_WRESIZE 1
 EOF
 
-cat >>confdefs.h <<\EOF
-#define NCURSES_EXT_FUNCS 1
-EOF
-
 	GENERATED_EXT_FUNCS=generated
+	test "x$with_ext_funcs" = xyes || cf_dft_ext_spfuncs=no
 else
 	NCURSES_EXT_FUNCS=0
 	GENERATED_EXT_FUNCS=
 fi
 
-echo "$as_me:11580: checking if you want to build with SCREEN extensions" >&5
+echo "$as_me:15548: checking if you want to build with SCREEN extensions" >&5
 echo $ECHO_N "checking if you want to build with SCREEN extensions... $ECHO_C" >&6
 
 # Check whether --enable-sp-funcs or --disable-sp-funcs was given.
@@ -11587,7 +15555,7 @@
 else
   with_sp_funcs=$cf_dft_ext_spfuncs
 fi;
-echo "$as_me:11590: result: $with_sp_funcs" >&5
+echo "$as_me:15558: result: $with_sp_funcs" >&5
 echo "${ECHO_T}$with_sp_funcs" >&6
 if test "x$with_sp_funcs" = xyes ; then
 	NCURSES_SP_FUNCS=1
@@ -11596,13 +15564,17 @@
 #define NCURSES_SP_FUNCS 1
 EOF
 
+cat >>confdefs.h <<\EOF
+#define HAVE_TPUTS_SP 1
+EOF
+
 	GENERATED_SP_FUNCS=generated
 else
 	NCURSES_SP_FUNCS=0
 	GENERATED_SP_FUNCS=
 fi
 
-echo "$as_me:11605: checking if you want to build with terminal-driver" >&5
+echo "$as_me:15577: checking if you want to build with terminal-driver" >&5
 echo $ECHO_N "checking if you want to build with terminal-driver... $ECHO_C" >&6
 
 # Check whether --enable-term-driver or --disable-term-driver was given.
@@ -11612,7 +15584,7 @@
 else
   with_term_driver=no
 fi;
-echo "$as_me:11615: result: $with_term_driver" >&5
+echo "$as_me:15587: result: $with_term_driver" >&5
 echo "${ECHO_T}$with_term_driver" >&6
 if test "x$with_term_driver" = xyes ; then
 
@@ -11621,19 +15593,19 @@
 EOF
 
 	if test "x$with_termlib" != xno ; then
-		{ { echo "$as_me:11624: error: The term-driver option conflicts with the termlib option" >&5
+		{ { echo "$as_me:15596: error: The term-driver option conflicts with the termlib option" >&5
 echo "$as_me: error: The term-driver option conflicts with the termlib option" >&2;}
    { (exit 1); exit 1; }; }
 	fi
 	if test "x$with_sp_funcs" != xyes ; then
-		{ { echo "$as_me:11629: error: The term-driver option relies upon sp-funcs" >&5
+		{ { echo "$as_me:15601: error: The term-driver option relies upon sp-funcs" >&5
 echo "$as_me: error: The term-driver option relies upon sp-funcs" >&2;}
    { (exit 1); exit 1; }; }
 	fi
 fi
 
 ###   use option --enable-const to turn on use of const beyond that in XSI.
-echo "$as_me:11636: checking for extended use of const keyword" >&5
+echo "$as_me:15608: checking for extended use of const keyword" >&5
 echo $ECHO_N "checking for extended use of const keyword... $ECHO_C" >&6
 
 # Check whether --enable-const or --disable-const was given.
@@ -11643,7 +15615,7 @@
 else
   with_ext_const=$cf_dft_ext_const
 fi;
-echo "$as_me:11646: result: $with_ext_const" >&5
+echo "$as_me:15618: result: $with_ext_const" >&5
 echo "${ECHO_T}$with_ext_const" >&6
 NCURSES_CONST='/*nothing*/'
 if test "x$with_ext_const" = xyes ; then
@@ -11651,7 +15623,7 @@
 fi
 
 ###   use option --enable-ext-colors to turn on use of colors beyond 16.
-echo "$as_me:11654: checking if you want to use extended colors" >&5
+echo "$as_me:15626: checking if you want to use extended colors" >&5
 echo $ECHO_N "checking if you want to use extended colors... $ECHO_C" >&6
 
 # Check whether --enable-ext-colors or --disable-ext-colors was given.
@@ -11661,23 +15633,24 @@
 else
   with_ext_colors=$cf_dft_ext_colors
 fi;
-echo "$as_me:11664: result: $with_ext_colors" >&5
+echo "$as_me:15636: result: $with_ext_colors" >&5
 echo "${ECHO_T}$with_ext_colors" >&6
 NCURSES_EXT_COLORS=0
 if test "x$with_ext_colors" = xyes ; then
 	if test "x$with_widec" != xyes ; then
-		{ echo "$as_me:11669: WARNING: This option applies only to wide-character library" >&5
+		{ echo "$as_me:15641: WARNING: This option applies only to wide-character library" >&5
 echo "$as_me: WARNING: This option applies only to wide-character library" >&2;}
 	else
 		# cannot be ABI 5 since it changes sizeof(cchar_t)
 
 if test "${with_abi_version+set}" != set; then
-	case $cf_cv_rel_version in
+	case "$cf_cv_rel_version" in
 	(5.*)
 		cf_cv_rel_version=6.0
 		cf_cv_abi_version=6
-		{ echo "$as_me:11679: WARNING: overriding ABI version to $cf_cv_abi_version" >&5
-echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_version" >&2;}
+		cf_cv_abi_default=6
+		{ echo "$as_me:15652: WARNING: overriding ABI version to $cf_cv_abi_default" >&5
+echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_default" >&2;}
 		;;
 	esac
 fi
@@ -11688,11 +15661,23 @@
 #define NCURSES_EXT_COLORS 1
 EOF
 
+cat >>confdefs.h <<\EOF
+#define HAVE_ALLOC_PAIR 1
+EOF
+
+cat >>confdefs.h <<\EOF
+#define HAVE_INIT_EXTENDED_COLOR 1
+EOF
+
+cat >>confdefs.h <<\EOF
+#define HAVE_RESET_COLOR_PAIRS 1
+EOF
+
 	fi
 fi
 
 ###   use option --enable-ext-mouse to modify coding to support 5-button mice
-echo "$as_me:11695: checking if you want to use extended mouse encoding" >&5
+echo "$as_me:15680: checking if you want to use extended mouse encoding" >&5
 echo $ECHO_N "checking if you want to use extended mouse encoding... $ECHO_C" >&6
 
 # Check whether --enable-ext-mouse or --disable-ext-mouse was given.
@@ -11702,27 +15687,34 @@
 else
   with_ext_mouse=$cf_dft_ext_mouse
 fi;
-echo "$as_me:11705: result: $with_ext_mouse" >&5
+echo "$as_me:15690: result: $with_ext_mouse" >&5
 echo "${ECHO_T}$with_ext_mouse" >&6
-NCURSES_MOUSE_VERSION=1
 if test "x$with_ext_mouse" = xyes ; then
-	NCURSES_MOUSE_VERSION=2
 
 if test "${with_abi_version+set}" != set; then
-	case $cf_cv_rel_version in
+	case "$cf_cv_rel_version" in
 	(5.*)
 		cf_cv_rel_version=6.0
 		cf_cv_abi_version=6
-		{ echo "$as_me:11716: WARNING: overriding ABI version to $cf_cv_abi_version" >&5
-echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_version" >&2;}
+		cf_cv_abi_default=6
+		{ echo "$as_me:15700: WARNING: overriding ABI version to $cf_cv_abi_default" >&5
+echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_default" >&2;}
 		;;
 	esac
 fi
 
 fi
 
+if test $cf_cv_abi_default -le 5 ; then
+	NCURSES_MOUSE_VERSION=1
+elif test $cf_cv_abi_default -le 6 ; then
+	NCURSES_MOUSE_VERSION=2
+else
+	NCURSES_MOUSE_VERSION=3
+fi
+
 ###   use option --enable-ext-putwin to turn on extended screendumps
-echo "$as_me:11725: checking if you want to use extended putwin/screendump" >&5
+echo "$as_me:15717: checking if you want to use extended putwin/screendump" >&5
 echo $ECHO_N "checking if you want to use extended putwin/screendump... $ECHO_C" >&6
 
 # Check whether --enable-ext-putwin or --disable-ext-putwin was given.
@@ -11732,7 +15724,7 @@
 else
   with_ext_putwin=$cf_dft_ext_putwin
 fi;
-echo "$as_me:11735: result: $with_ext_putwin" >&5
+echo "$as_me:15727: result: $with_ext_putwin" >&5
 echo "${ECHO_T}$with_ext_putwin" >&6
 if test "x$with_ext_putwin" = xyes ; then
 
@@ -11742,7 +15734,7 @@
 
 fi
 
-echo "$as_me:11745: checking if you want \$NCURSES_NO_PADDING code" >&5
+echo "$as_me:15737: checking if you want \$NCURSES_NO_PADDING code" >&5
 echo $ECHO_N "checking if you want \$NCURSES_NO_PADDING code... $ECHO_C" >&6
 
 # Check whether --enable-no-padding or --disable-no-padding was given.
@@ -11752,456 +15744,15 @@
 else
   with_no_padding=$with_ext_funcs
 fi;
-echo "$as_me:11755: result: $with_no_padding" >&5
+echo "$as_me:15747: result: $with_no_padding" >&5
 echo "${ECHO_T}$with_no_padding" >&6
 test "x$with_no_padding" = xyes &&
 cat >>confdefs.h <<\EOF
 #define NCURSES_NO_PADDING 1
 EOF
 
-echo "$as_me:11762: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 11768 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-_ACEOF
-if { (eval echo "$as_me:11776: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:11782: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 11804 "configure"
-#include "confdefs.h"
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "memchr" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -rf conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 11822 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "free" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -rf conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 11843 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
-                     || ('j' <= (c) && (c) <= 'r') \
-                     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-        || toupper (i) != TOUPPER (i))
-      $ac_main_return(2);
-  $ac_main_return (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:11869: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:11872: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:11874: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:11877: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_header_stdc=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:11890: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\EOF
-#define STDC_HEADERS 1
-EOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-                  inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:11906: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 11912 "configure"
-#include "confdefs.h"
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:11918: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:11921: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:11924: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:11927: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:11937: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-
-fi
-done
-
-echo "$as_me:11947: checking for signed char" >&5
-echo $ECHO_N "checking for signed char... $ECHO_C" >&6
-if test "${ac_cv_type_signed_char+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 11953 "configure"
-#include "confdefs.h"
-$ac_includes_default
-int
-main ()
-{
-if ((signed char *) 0)
-  return 0;
-if (sizeof (signed char))
-  return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:11968: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:11971: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:11974: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:11977: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_type_signed_char=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_type_signed_char=no
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:11987: result: $ac_cv_type_signed_char" >&5
-echo "${ECHO_T}$ac_cv_type_signed_char" >&6
-
-echo "$as_me:11990: checking size of signed char" >&5
-echo $ECHO_N "checking size of signed char... $ECHO_C" >&6
-if test "${ac_cv_sizeof_signed_char+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test "$ac_cv_type_signed_char" = yes; then
-  if test "$cross_compiling" = yes; then
-  # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-#line 11999 "configure"
-#include "confdefs.h"
-$ac_includes_default
-int
-main ()
-{
-int _array_ [1 - 2 * !((sizeof (signed char)) >= 0)]
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12011: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:12014: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:12017: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:12020: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-#line 12025 "configure"
-#include "confdefs.h"
-$ac_includes_default
-int
-main ()
-{
-int _array_ [1 - 2 * !((sizeof (signed char)) <= $ac_mid)]
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12037: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:12040: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:12043: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:12046: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_hi=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1`
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_hi=-1 ac_mid=-1
-  while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-#line 12062 "configure"
-#include "confdefs.h"
-$ac_includes_default
-int
-main ()
-{
-int _array_ [1 - 2 * !((sizeof (signed char)) >= $ac_mid)]
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12074: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:12077: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:12080: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:12083: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_lo=$ac_mid; break
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid`
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-  done
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-#line 12099 "configure"
-#include "confdefs.h"
-$ac_includes_default
-int
-main ()
-{
-int _array_ [1 - 2 * !((sizeof (signed char)) <= $ac_mid)]
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12111: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:12114: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:12117: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:12120: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_hi=$ac_mid
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-done
-ac_cv_sizeof_signed_char=$ac_lo
-else
-  if test "$cross_compiling" = yes; then
-  { { echo "$as_me:12133: error: cannot run test program while cross compiling" >&5
-echo "$as_me: error: cannot run test program while cross compiling" >&2;}
-   { (exit 1); exit 1; }; }
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 12138 "configure"
-#include "confdefs.h"
-$ac_includes_default
-int
-main ()
-{
-FILE *f = fopen ("conftest.val", "w");
-if (!f)
-  $ac_main_return (1);
-fprintf (f, "%d", (sizeof (signed char)));
-fclose (f);
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:12154: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:12157: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:12159: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:12162: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_sizeof_signed_char=`cat conftest.val`
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-rm -f conftest.val
-else
-  ac_cv_sizeof_signed_char=0
-fi
-fi
-echo "$as_me:12178: result: $ac_cv_sizeof_signed_char" >&5
-echo "${ECHO_T}$ac_cv_sizeof_signed_char" >&6
-cat >>confdefs.h <<EOF
-#define SIZEOF_SIGNED_CHAR $ac_cv_sizeof_signed_char
-EOF
-
-if test "$ac_cv_sizeof_signed_char" = 1 ; then
-	NCURSES_SBOOL="signed char"
-else
-	NCURSES_SBOOL="char"
-fi
-echo "$as_me:12189: checking if you want to use signed Boolean array in term.h" >&5
-echo $ECHO_N "checking if you want to use signed Boolean array in term.h... $ECHO_C" >&6
-
-# Check whether --enable-signed-char or --disable-signed-char was given.
-if test "${enable_signed_char+set}" = set; then
-  enableval="$enable_signed_char"
-  with_signed_char=$enableval
-else
-  with_signed_char=no
-fi;
-echo "$as_me:12199: result: $with_signed_char" >&5
-echo "${ECHO_T}$with_signed_char" >&6
-test "x$with_signed_char" != xyes && NCURSES_SBOOL="char"
-
 ###   use option --enable-sigwinch to turn on use of SIGWINCH logic
-echo "$as_me:12204: checking if you want SIGWINCH handler" >&5
+echo "$as_me:15755: checking if you want SIGWINCH handler" >&5
 echo $ECHO_N "checking if you want SIGWINCH handler... $ECHO_C" >&6
 
 # Check whether --enable-sigwinch or --disable-sigwinch was given.
@@ -12211,15 +15762,22 @@
 else
   with_sigwinch=$with_ext_funcs
 fi;
-echo "$as_me:12214: result: $with_sigwinch" >&5
+echo "$as_me:15765: result: $with_sigwinch" >&5
 echo "${ECHO_T}$with_sigwinch" >&6
-test "x$with_sigwinch" = xyes &&
+if test "x$with_sigwinch" = xyes
+then
+
 cat >>confdefs.h <<\EOF
 #define USE_SIGWINCH 1
 EOF
 
+	cf_cv_enable_sigwinch=1
+else
+	cf_cv_enable_sigwinch=0
+fi
+
 ###   use option --enable-tcap-names to allow user to define new capabilities
-echo "$as_me:12222: checking if you want user-definable terminal capabilities like termcap" >&5
+echo "$as_me:15780: checking if you want user-definable terminal capabilities like termcap" >&5
 echo $ECHO_N "checking if you want user-definable terminal capabilities like termcap... $ECHO_C" >&6
 
 # Check whether --enable-tcap-names or --disable-tcap-names was given.
@@ -12229,140 +15787,21 @@
 else
   with_tcap_names=$with_ext_funcs
 fi;
-echo "$as_me:12232: result: $with_tcap_names" >&5
+echo "$as_me:15790: result: $with_tcap_names" >&5
 echo "${ECHO_T}$with_tcap_names" >&6
 NCURSES_XNAMES=0
-test "x$with_tcap_names" = xyes && NCURSES_XNAMES=1
+if test "x$with_tcap_names" = xyes; then
+	NCURSES_XNAMES=1
 
-###############################################################################
-# These options are relatively safe to experiment with.
-
-echo "$as_me:12240: checking if you want all development code" >&5
-echo $ECHO_N "checking if you want all development code... $ECHO_C" >&6
-
-# Check whether --with-develop or --without-develop was given.
-if test "${with_develop+set}" = set; then
-  withval="$with_develop"
-  with_develop=$withval
-else
-  with_develop=no
-fi;
-echo "$as_me:12250: result: $with_develop" >&5
-echo "${ECHO_T}$with_develop" >&6
-
-###   use option --enable-hard-tabs to turn on use of hard-tabs optimize
-echo "$as_me:12254: checking if you want hard-tabs code" >&5
-echo $ECHO_N "checking if you want hard-tabs code... $ECHO_C" >&6
-
-# Check whether --enable-hard-tabs or --disable-hard-tabs was given.
-if test "${enable_hard_tabs+set}" = set; then
-  enableval="$enable_hard_tabs"
-
-else
-  enable_hard_tabs=$with_develop
-fi;
-echo "$as_me:12264: result: $enable_hard_tabs" >&5
-echo "${ECHO_T}$enable_hard_tabs" >&6
-test "x$enable_hard_tabs" = xyes &&
 cat >>confdefs.h <<\EOF
-#define USE_HARD_TABS 1
+#define NCURSES_XNAMES 1
 EOF
 
-###   use option --enable-xmc-glitch to turn on use of magic-cookie optimize
-echo "$as_me:12272: checking if you want limited support for xmc" >&5
-echo $ECHO_N "checking if you want limited support for xmc... $ECHO_C" >&6
+fi
 
-# Check whether --enable-xmc-glitch or --disable-xmc-glitch was given.
-if test "${enable_xmc_glitch+set}" = set; then
-  enableval="$enable_xmc_glitch"
+##############################################################################
 
-else
-  enable_xmc_glitch=$with_develop
-fi;
-echo "$as_me:12282: result: $enable_xmc_glitch" >&5
-echo "${ECHO_T}$enable_xmc_glitch" >&6
-test "x$enable_xmc_glitch" = xyes &&
-cat >>confdefs.h <<\EOF
-#define USE_XMC_SUPPORT 1
-EOF
-
-###############################################################################
-# These are just experimental, probably should not be in a package:
-
-echo "$as_me:12292: checking if you do not want to assume colors are white-on-black" >&5
-echo $ECHO_N "checking if you do not want to assume colors are white-on-black... $ECHO_C" >&6
-
-# Check whether --enable-assumed-color or --disable-assumed-color was given.
-if test "${enable_assumed_color+set}" = set; then
-  enableval="$enable_assumed_color"
-  with_assumed_color=$enableval
-else
-  with_assumed_color=yes
-fi;
-echo "$as_me:12302: result: $with_assumed_color" >&5
-echo "${ECHO_T}$with_assumed_color" >&6
-test "x$with_assumed_color" = xyes &&
-cat >>confdefs.h <<\EOF
-#define USE_ASSUMED_COLOR 1
-EOF
-
-###   use option --enable-hashmap to turn on use of hashmap scrolling logic
-echo "$as_me:12310: checking if you want hashmap scrolling-optimization code" >&5
-echo $ECHO_N "checking if you want hashmap scrolling-optimization code... $ECHO_C" >&6
-
-# Check whether --enable-hashmap or --disable-hashmap was given.
-if test "${enable_hashmap+set}" = set; then
-  enableval="$enable_hashmap"
-  with_hashmap=$enableval
-else
-  with_hashmap=yes
-fi;
-echo "$as_me:12320: result: $with_hashmap" >&5
-echo "${ECHO_T}$with_hashmap" >&6
-test "x$with_hashmap" = xyes &&
-cat >>confdefs.h <<\EOF
-#define USE_HASHMAP 1
-EOF
-
-###   use option --enable-colorfgbg to turn on use of $COLORFGBG environment
-echo "$as_me:12328: checking if you want colorfgbg code" >&5
-echo $ECHO_N "checking if you want colorfgbg code... $ECHO_C" >&6
-
-# Check whether --enable-colorfgbg or --disable-colorfgbg was given.
-if test "${enable_colorfgbg+set}" = set; then
-  enableval="$enable_colorfgbg"
-  with_colorfgbg=$enableval
-else
-  with_colorfgbg=no
-fi;
-echo "$as_me:12338: result: $with_colorfgbg" >&5
-echo "${ECHO_T}$with_colorfgbg" >&6
-test "x$with_colorfgbg" = xyes &&
-cat >>confdefs.h <<\EOF
-#define USE_COLORFGBG 1
-EOF
-
-###   use option --enable-interop to turn on use of bindings used for interop
-echo "$as_me:12346: checking if you want interop bindings" >&5
-echo $ECHO_N "checking if you want interop bindings... $ECHO_C" >&6
-
-# Check whether --enable-interop or --disable-interop was given.
-if test "${enable_interop+set}" = set; then
-  enableval="$enable_interop"
-  with_exp_interop=$enableval
-else
-  with_exp_interop=$cf_dft_interop
-fi;
-echo "$as_me:12356: result: $with_exp_interop" >&5
-echo "${ECHO_T}$with_exp_interop" >&6
-
-NCURSES_INTEROP_FUNCS=0
-test "x$with_exp_interop" = xyes && NCURSES_INTEROP_FUNCS=1
-
-# This is still experimental (20080329), but should ultimately be moved to
-# the script-block --with-normal, etc.
-
-echo "$as_me:12365: checking if you want to link with the pthread library" >&5
+echo "$as_me:15804: checking if you want to link with the pthread library" >&5
 echo $ECHO_N "checking if you want to link with the pthread library... $ECHO_C" >&6
 
 # Check whether --with-pthread or --without-pthread was given.
@@ -12372,28 +15811,28 @@
 else
   with_pthread=no
 fi;
-echo "$as_me:12375: result: $with_pthread" >&5
+echo "$as_me:15814: result: $with_pthread" >&5
 echo "${ECHO_T}$with_pthread" >&6
 
 if test "$with_pthread" != no ; then
-	echo "$as_me:12379: checking for pthread.h" >&5
+	echo "$as_me:15818: checking for pthread.h" >&5
 echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6
 if test "${ac_cv_header_pthread_h+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 12385 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 15824 "configure"
 #include "confdefs.h"
 #include <pthread.h>
 _ACEOF
-if { (eval echo "$as_me:12389: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:15828: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:12395: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:15834: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -12406,14 +15845,14 @@
   ac_cv_header_pthread_h=yes
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   ac_cv_header_pthread_h=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 fi
-echo "$as_me:12414: result: $ac_cv_header_pthread_h" >&5
+echo "$as_me:15853: result: $ac_cv_header_pthread_h" >&5
 echo "${ECHO_T}$ac_cv_header_pthread_h" >&6
-if test $ac_cv_header_pthread_h = yes; then
+if test "$ac_cv_header_pthread_h" = yes; then
 
 cat >>confdefs.h <<\EOF
 #define HAVE_PTHREADS_H 1
@@ -12421,34 +15860,34 @@
 
 	for cf_lib_pthread in pthread c_r
 	do
-	    echo "$as_me:12424: checking if we can link with the $cf_lib_pthread library" >&5
+	    echo "$as_me:15863: checking if we can link with the $cf_lib_pthread library" >&5
 echo $ECHO_N "checking if we can link with the $cf_lib_pthread library... $ECHO_C" >&6
 	    cf_save_LIBS="$LIBS"
 
-cf_add_libs="-l$cf_lib_pthread"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_lib_pthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
 
-	    cat >conftest.$ac_ext <<_ACEOF
-#line 12445 "configure"
+	    cat >"conftest.$ac_ext" <<_ACEOF
+#line 15884 "configure"
 #include "confdefs.h"
 
 #include <pthread.h>
 
 int
-main ()
+main (void)
 {
 
 		int rc = pthread_create(0,0,0,0);
@@ -12458,46 +15897,46 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:12462: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:15901: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:12465: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:12468: \"$ac_try\"") >&5
+  echo "$as_me:15904: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:15907: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:12471: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:15910: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   with_pthread=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 with_pthread=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 	    LIBS="$cf_save_LIBS"
-	    echo "$as_me:12481: result: $with_pthread" >&5
+	    echo "$as_me:15920: result: $with_pthread" >&5
 echo "${ECHO_T}$with_pthread" >&6
 	    test "$with_pthread" = yes && break
 	done
 
 	if test "$with_pthread" = yes ; then
 
-cf_add_libs="-l$cf_lib_pthread"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_lib_pthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
 
@@ -12506,7 +15945,7 @@
 EOF
 
 	else
-	    { { echo "$as_me:12509: error: Cannot link with pthread library" >&5
+	    { { echo "$as_me:15948: error: Cannot link with pthread library" >&5
 echo "$as_me: error: Cannot link with pthread library" >&2;}
    { (exit 1); exit 1; }; }
 	fi
@@ -12516,67 +15955,67 @@
 fi
 
 if test "x$with_pthread" != xno; then
-	echo "$as_me:12519: checking for pthread_kill" >&5
+	echo "$as_me:15958: checking for pthread_kill" >&5
 echo $ECHO_N "checking for pthread_kill... $ECHO_C" >&6
 if test "${ac_cv_func_pthread_kill+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 12525 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 15964 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char pthread_kill (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
+#define pthread_kill autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef pthread_kill
+
 #ifdef __cplusplus
 extern "C"
 #endif
+
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char pthread_kill ();
-char (*f) ();
+char pthread_kill (void);
 
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
+
+/* The GNU C library defines stubs for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_pthread_kill) || defined (__stub___pthread_kill)
-choke me
-#else
-f = pthread_kill; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#error found stub for pthread_kill
 #endif
 
+	return pthread_kill ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:12556: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:15995: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:12559: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:12562: \"$ac_try\"") >&5
+  echo "$as_me:15998: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:16001: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:12565: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:16004: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_func_pthread_kill=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_func_pthread_kill=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:12575: result: $ac_cv_func_pthread_kill" >&5
+echo "$as_me:16014: result: $ac_cv_func_pthread_kill" >&5
 echo "${ECHO_T}$ac_cv_func_pthread_kill" >&6
-if test $ac_cv_func_pthread_kill = yes; then
+if test "$ac_cv_func_pthread_kill" = yes; then
 
-		echo "$as_me:12579: checking if you want to allow EINTR in wgetch with pthreads" >&5
+		echo "$as_me:16018: checking if you want to allow EINTR in wgetch with pthreads" >&5
 echo $ECHO_N "checking if you want to allow EINTR in wgetch with pthreads... $ECHO_C" >&6
 
 # Check whether --enable-pthreads-eintr or --disable-pthreads-eintr was given.
@@ -12586,7 +16025,7 @@
 else
   use_pthreads_eintr=no
 fi;
-		echo "$as_me:12589: result: $use_pthreads_eintr" >&5
+		echo "$as_me:16028: result: $use_pthreads_eintr" >&5
 echo "${ECHO_T}$use_pthreads_eintr" >&6
 		if test "x$use_pthreads_eintr" = xyes ; then
 
@@ -12597,7 +16036,7 @@
 		fi
 fi
 
-	echo "$as_me:12600: checking if you want to use weak-symbols for pthreads" >&5
+	echo "$as_me:16039: checking if you want to use weak-symbols for pthreads" >&5
 echo $ECHO_N "checking if you want to use weak-symbols for pthreads... $ECHO_C" >&6
 
 # Check whether --enable-weak-symbols or --disable-weak-symbols was given.
@@ -12607,23 +16046,23 @@
 else
   use_weak_symbols=no
 fi;
-	echo "$as_me:12610: result: $use_weak_symbols" >&5
+	echo "$as_me:16049: result: $use_weak_symbols" >&5
 echo "${ECHO_T}$use_weak_symbols" >&6
 	if test "x$use_weak_symbols" = xyes ; then
 
-echo "$as_me:12614: checking if $CC supports weak symbols" >&5
+echo "$as_me:16053: checking if $CC supports weak symbols" >&5
 echo $ECHO_N "checking if $CC supports weak symbols... $ECHO_C" >&6
 if test "${cf_cv_weak_symbols+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 12621 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 16060 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
 int
-main ()
+main (void)
 {
 
 #if defined(__GNUC__)
@@ -12643,28 +16082,28 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12647: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:16086: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:12650: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:12653: \"$ac_try\"") >&5
+  echo "$as_me:16089: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:16092: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:12656: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:16095: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_weak_symbols=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_weak_symbols=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:12667: result: $cf_cv_weak_symbols" >&5
+echo "$as_me:16106: result: $cf_cv_weak_symbols" >&5
 echo "${ECHO_T}$cf_cv_weak_symbols" >&6
 
 	else
@@ -12690,6 +16129,23 @@
 	enable_reentrant=yes
 	if test "x$cf_cv_weak_symbols" = xyes ; then
 		PTHREAD=-lpthread
+
+cf_add_libs="$PRIVATE_LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lpthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+PRIVATE_LIBS="$cf_add_libs"
+
 	fi
 fi
 
@@ -12697,7 +16153,7 @@
 # opaque outside of that, so there is no --enable-opaque option.  We can use
 # this option without --with-pthreads, but this will be always set for
 # pthreads.
-echo "$as_me:12700: checking if you want reentrant code" >&5
+echo "$as_me:16156: checking if you want reentrant code" >&5
 echo $ECHO_N "checking if you want reentrant code... $ECHO_C" >&6
 
 # Check whether --enable-reentrant or --disable-reentrant was given.
@@ -12707,50 +16163,65 @@
 else
   with_reentrant=no
 fi;
-echo "$as_me:12710: result: $with_reentrant" >&5
+echo "$as_me:16166: result: $with_reentrant" >&5
 echo "${ECHO_T}$with_reentrant" >&6
 if test "x$with_reentrant" = xyes ; then
 	cf_cv_enable_reentrant=1
 	cf_cv_enable_opaque="NCURSES_INTERNALS"
-	NCURSES_OPAQUE=1
 	NCURSES_SIZE_T=int
 	if test "x$cf_cv_weak_symbols" = xyes ; then
 
 # remove pthread library from $LIBS
 LIBS=`echo "$LIBS" | sed -e 's/-lpthread[ 	]//g' -e 's/-lpthread$//'`
 
-cf_add_libs="-lpthread"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $TEST_LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$TEST_LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lpthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 TEST_LIBS="$cf_add_libs"
 
-cf_add_libs="-lpthread"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $TEST_LIBS2
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$TEST_LIBS2"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lpthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 TEST_LIBS2="$cf_add_libs"
 
+cf_add_libs="$PRIVATE_LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lpthread; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+PRIVATE_LIBS="$cf_add_libs"
+
 	else
 		# when not using weak symbols but with_reentrant,
 		# add 't' to the library suffix on all platforms
@@ -12776,12 +16247,13 @@
 EOF
 
 if test "${with_abi_version+set}" != set; then
-	case $cf_cv_rel_version in
+	case "$cf_cv_rel_version" in
 	(5.*)
 		cf_cv_rel_version=6.0
 		cf_cv_abi_version=6
-		{ echo "$as_me:12783: WARNING: overriding ABI version to $cf_cv_abi_version" >&5
-echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_version" >&2;}
+		cf_cv_abi_default=6
+		{ echo "$as_me:16255: WARNING: overriding ABI version to $cf_cv_abi_default" >&5
+echo "$as_me: WARNING: overriding ABI version to $cf_cv_abi_default" >&2;}
 		;;
 	esac
 fi
@@ -12789,13 +16261,108 @@
 else
 	cf_cv_enable_reentrant=0
 	cf_cv_enable_opaque="NCURSES_OPAQUE"
-	NCURSES_OPAQUE=0
-	NCURSES_SIZE_T=short
+	NCURSES_SIZE_T=$cf_dft_ordinate_type
 fi
 
+echo "$as_me:16267: checking whether curses library structures should be opaque" >&5
+echo $ECHO_N "checking whether curses library structures should be opaque... $ECHO_C" >&6
+
+# Check whether --enable-opaque-curses or --disable-opaque-curses was given.
+if test "${enable_opaque_curses+set}" = set; then
+  enableval="$enable_opaque_curses"
+  test "$enableval" != no && enableval=yes
+	if test "$enableval" != "yes" ; then
+    enable_opaque_curses=no
+	else
+
+	 test "$cf_cv_enable_reentrant" = 1 && enable_opaque_curses=yes
+	 test "$cf_cv_enable_reentrant" = 1 || enable_opaque_curses=$cf_dft_opaque_curses
+
+	fi
+else
+  enableval=yes
+
+	 test "$cf_cv_enable_reentrant" = 1 && enable_opaque_curses=yes
+	 test "$cf_cv_enable_reentrant" = 1 || enable_opaque_curses=$cf_dft_opaque_curses
+
+fi;
+echo "$as_me:16289: result: $enable_opaque_curses" >&5
+echo "${ECHO_T}$enable_opaque_curses" >&6
+
+test "$cf_cv_enable_reentrant" = 1 && \
+test "$enable_opaque_curses" = no && \
+{ { echo "$as_me:16294: error: reentrant configuration requires opaque library" >&5
+echo "$as_me: error: reentrant configuration requires opaque library" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:16298: checking whether form library structures should be opaque" >&5
+echo $ECHO_N "checking whether form library structures should be opaque... $ECHO_C" >&6
+
+# Check whether --enable-opaque-form or --disable-opaque-form was given.
+if test "${enable_opaque_form+set}" = set; then
+  enableval="$enable_opaque_form"
+  test "$enableval" != no && enableval=yes
+	if test "$enableval" != "yes" ; then
+    enable_opaque_form=no
+	else
+		enable_opaque_form=$cf_dft_opaque_curses
+	fi
+else
+  enableval=yes
+	enable_opaque_form=$cf_dft_opaque_curses
+
+fi;
+echo "$as_me:16315: result: $enable_opaque_form" >&5
+echo "${ECHO_T}$enable_opaque_form" >&6
+
+echo "$as_me:16318: checking whether menu library structures should be opaque" >&5
+echo $ECHO_N "checking whether menu library structures should be opaque... $ECHO_C" >&6
+
+# Check whether --enable-opaque-menu or --disable-opaque-menu was given.
+if test "${enable_opaque_menu+set}" = set; then
+  enableval="$enable_opaque_menu"
+  test "$enableval" != no && enableval=yes
+	if test "$enableval" != "yes" ; then
+    enable_opaque_menu=no
+	else
+		enable_opaque_menu=$cf_dft_opaque_curses
+	fi
+else
+  enableval=yes
+	enable_opaque_menu=$cf_dft_opaque_curses
+
+fi;
+echo "$as_me:16335: result: $enable_opaque_menu" >&5
+echo "${ECHO_T}$enable_opaque_menu" >&6
+
+echo "$as_me:16338: checking whether panel library structures should be opaque" >&5
+echo $ECHO_N "checking whether panel library structures should be opaque... $ECHO_C" >&6
+
+# Check whether --enable-opaque-panel or --disable-opaque-panel was given.
+if test "${enable_opaque_panel+set}" = set; then
+  enableval="$enable_opaque_panel"
+  test "$enableval" != no && enableval=yes
+	if test "$enableval" != "yes" ; then
+    enable_opaque_panel=no
+	else
+		enable_opaque_panel=$cf_dft_opaque_curses
+	fi
+else
+  enableval=yes
+	enable_opaque_panel=$cf_dft_opaque_curses
+
+fi;
+echo "$as_me:16355: result: $enable_opaque_panel" >&5
+echo "${ECHO_T}$enable_opaque_panel" >&6
+
+NCURSES_OPAQUE=0;		test "$enable_opaque_curses" = yes && NCURSES_OPAQUE=1
+NCURSES_OPAQUE_FORM=0;	test "$enable_opaque_form"   = yes && NCURSES_OPAQUE_FORM=1
+NCURSES_OPAQUE_MENU=0;	test "$enable_opaque_menu"   = yes && NCURSES_OPAQUE_MENU=1
+NCURSES_OPAQUE_PANEL=0;	test "$enable_opaque_panel"  = yes && NCURSES_OPAQUE_PANEL=1
+
 ### Allow using a different wrap-prefix
 if test "$cf_cv_enable_reentrant" != 0 || test "$BROKEN_LINKER" = 1 ; then
-	echo "$as_me:12798: checking for prefix used to wrap public variables" >&5
+	echo "$as_me:16365: checking for prefix used to wrap public variables" >&5
 echo $ECHO_N "checking for prefix used to wrap public variables... $ECHO_C" >&6
 
 # Check whether --with-wrap-prefix or --without-wrap-prefix was given.
@@ -12805,7 +16372,7 @@
 else
   NCURSES_WRAP_PREFIX=_nc_
 fi;
-	echo "$as_me:12808: result: $NCURSES_WRAP_PREFIX" >&5
+	echo "$as_me:16375: result: $NCURSES_WRAP_PREFIX" >&5
 echo "${ECHO_T}$NCURSES_WRAP_PREFIX" >&6
 else
 	NCURSES_WRAP_PREFIX=_nc_
@@ -12815,7 +16382,497 @@
 #define NCURSES_WRAP_PREFIX "$NCURSES_WRAP_PREFIX"
 EOF
 
-echo "$as_me:12818: checking if you want experimental safe-sprintf code" >&5
+###############################################################################
+# These options are relatively safe to experiment with.
+
+echo "$as_me:16388: checking if you want all development code" >&5
+echo $ECHO_N "checking if you want all development code... $ECHO_C" >&6
+
+# Check whether --with-develop or --without-develop was given.
+if test "${with_develop+set}" = set; then
+  withval="$with_develop"
+  with_develop=$withval
+else
+  with_develop=no
+fi;
+echo "$as_me:16398: result: $with_develop" >&5
+echo "${ECHO_T}$with_develop" >&6
+
+###   use option --enable-check-size to detect screensize with CPR
+echo "$as_me:16402: checking if you want to check screensize of serial terminals" >&5
+echo $ECHO_N "checking if you want to check screensize of serial terminals... $ECHO_C" >&6
+
+# Check whether --enable-check-size or --disable-check-size was given.
+if test "${enable_check_size+set}" = set; then
+  enableval="$enable_check_size"
+
+else
+  enable_check_size=$with_develop
+fi;
+echo "$as_me:16412: result: $enable_check_size" >&5
+echo "${ECHO_T}$enable_check_size" >&6
+test "x$enable_check_size" = xyes &&
+cat >>confdefs.h <<\EOF
+#define USE_CHECK_SIZE 1
+EOF
+
+###   use option --enable-hard-tabs to turn on use of hard-tabs optimize
+echo "$as_me:16420: checking if you want hard-tabs code" >&5
+echo $ECHO_N "checking if you want hard-tabs code... $ECHO_C" >&6
+
+# Check whether --enable-hard-tabs or --disable-hard-tabs was given.
+if test "${enable_hard_tabs+set}" = set; then
+  enableval="$enable_hard_tabs"
+
+else
+  enable_hard_tabs=$with_develop
+fi;
+echo "$as_me:16430: result: $enable_hard_tabs" >&5
+echo "${ECHO_T}$enable_hard_tabs" >&6
+test "x$enable_hard_tabs" = xyes &&
+cat >>confdefs.h <<\EOF
+#define USE_HARD_TABS 1
+EOF
+
+###   use option --enable-xmc-glitch to turn on use of magic-cookie optimize
+echo "$as_me:16438: checking if you want limited support for xmc" >&5
+echo $ECHO_N "checking if you want limited support for xmc... $ECHO_C" >&6
+
+# Check whether --enable-xmc-glitch or --disable-xmc-glitch was given.
+if test "${enable_xmc_glitch+set}" = set; then
+  enableval="$enable_xmc_glitch"
+
+else
+  enable_xmc_glitch=$with_develop
+fi;
+echo "$as_me:16448: result: $enable_xmc_glitch" >&5
+echo "${ECHO_T}$enable_xmc_glitch" >&6
+test "x$enable_xmc_glitch" = xyes &&
+cat >>confdefs.h <<\EOF
+#define USE_XMC_SUPPORT 1
+EOF
+
+###############################################################################
+# These are just experimental, probably should not be in a package:
+
+echo "$as_me:16458: checking if you do not want to assume colors are white-on-black" >&5
+echo $ECHO_N "checking if you do not want to assume colors are white-on-black... $ECHO_C" >&6
+
+# Check whether --enable-assumed-color or --disable-assumed-color was given.
+if test "${enable_assumed_color+set}" = set; then
+  enableval="$enable_assumed_color"
+  with_assumed_color=$enableval
+else
+  with_assumed_color=yes
+fi;
+echo "$as_me:16468: result: $with_assumed_color" >&5
+echo "${ECHO_T}$with_assumed_color" >&6
+test "x$with_assumed_color" = xyes &&
+cat >>confdefs.h <<\EOF
+#define USE_ASSUMED_COLOR 1
+EOF
+
+###   use option --enable-hashmap to turn on use of hashmap scrolling logic
+echo "$as_me:16476: checking if you want hashmap scrolling-optimization code" >&5
+echo $ECHO_N "checking if you want hashmap scrolling-optimization code... $ECHO_C" >&6
+
+# Check whether --enable-hashmap or --disable-hashmap was given.
+if test "${enable_hashmap+set}" = set; then
+  enableval="$enable_hashmap"
+  with_hashmap=$enableval
+else
+  with_hashmap=yes
+fi;
+echo "$as_me:16486: result: $with_hashmap" >&5
+echo "${ECHO_T}$with_hashmap" >&6
+test "x$with_hashmap" = xyes &&
+cat >>confdefs.h <<\EOF
+#define USE_HASHMAP 1
+EOF
+
+###   use option --enable-colorfgbg to turn on use of $COLORFGBG environment
+echo "$as_me:16494: checking if you want colorfgbg code" >&5
+echo $ECHO_N "checking if you want colorfgbg code... $ECHO_C" >&6
+
+# Check whether --enable-colorfgbg or --disable-colorfgbg was given.
+if test "${enable_colorfgbg+set}" = set; then
+  enableval="$enable_colorfgbg"
+  with_colorfgbg=$enableval
+else
+  with_colorfgbg=no
+fi;
+echo "$as_me:16504: result: $with_colorfgbg" >&5
+echo "${ECHO_T}$with_colorfgbg" >&6
+test "x$with_colorfgbg" = xyes &&
+cat >>confdefs.h <<\EOF
+#define USE_COLORFGBG 1
+EOF
+
+###   use option --enable-fvisibility to turn on use of gcc-specific feature
+echo "$as_me:16512: checking if you want to use gcc -fvisibility option" >&5
+echo $ECHO_N "checking if you want to use gcc -fvisibility option... $ECHO_C" >&6
+
+# Check whether --enable-fvisibility or --disable-fvisibility was given.
+if test "${enable_fvisibility+set}" = set; then
+  enableval="$enable_fvisibility"
+  cf_with_fvisibility=$enableval
+else
+  cf_with_fvisibility=no
+fi;
+echo "$as_me:16522: result: $cf_with_fvisibility" >&5
+echo "${ECHO_T}$cf_with_fvisibility" >&6
+
+NCURSES_IMPEXP=
+NCURSES_CXX_IMPEXP=
+if test "x$cf_with_fvisibility" = xyes; then
+
+echo "$as_me:16529: checking if $CC -fvisibility=hidden option works" >&5
+echo $ECHO_N "checking if $CC -fvisibility=hidden option works... $ECHO_C" >&6
+if test "${cf_cv_fvisibility_hidden+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    cf_save_cflags="$CFLAGS"
+    CFLAGS="$CFLAGS -fvisibility=hidden"
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 16538 "configure"
+#include "confdefs.h"
+
+__attribute__ ((visibility("default"))) int somefunc() {return 42;}
+
+int
+main (void)
+{
+
+	if (somefunc()) return 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:16554: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:16557: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:16560: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:16563: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_fvisibility_hidden=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_fvisibility_hidden=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+    CFLAGS=$cf_save_cflags
+
+fi
+echo "$as_me:16575: result: $cf_cv_fvisibility_hidden" >&5
+echo "${ECHO_T}$cf_cv_fvisibility_hidden" >&6
+
+	if test "x$cf_cv_fvisibility_hidden" = xyes
+	then
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -fvisibility=hidden
+do
+case "$cf_fix_cppflags" in
+(no)
+	case "$cf_add_cflags" in
+	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+		case "$cf_add_cflags" in
+		(-D*)
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+				&& test -z "${cf_tst_cflags}" \
+				&& cf_fix_cppflags=yes
+
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			fi
+			;;
+		esac
+		case "$CPPFLAGS" in
+		(*$cf_add_cflags)
+			;;
+		(*)
+			case "$cf_add_cflags" in
+			(-D*)
+				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+	sed	-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?[ 	]/ /g' \
+		-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?$//g'`
+
+				;;
+			esac
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+			;;
+		esac
+		;;
+	(*)
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+		;;
+	esac
+	;;
+(yes)
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+		&& test -z "${cf_tst_cflags}" \
+		&& cf_fix_cppflags=no
+	;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
+fi
+
+		NCURSES_IMPEXP="__attribute__ ((visibility(\"default\")))"
+	fi
+	if test -n "$CXX"
+	then
+		ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
+
+echo "$as_me:16690: checking if $CXX -fvisibility=hidden option works" >&5
+echo $ECHO_N "checking if $CXX -fvisibility=hidden option works... $ECHO_C" >&6
+if test "${cf_cv_fvisibility_hidden2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    cf_save_cflags="$CXXFLAGS"
+    CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 16699 "configure"
+#include "confdefs.h"
+
+__attribute__ ((visibility("default"))) int somefunc() {return 42;}
+
+int
+main (void)
+{
+
+	if (somefunc()) return 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:16715: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:16718: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:16721: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:16724: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_fvisibility_hidden2=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_fvisibility_hidden2=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+    CXXFLAGS=$cf_save_cflags
+
+fi
+echo "$as_me:16736: result: $cf_cv_fvisibility_hidden2" >&5
+echo "${ECHO_T}$cf_cv_fvisibility_hidden2" >&6
+
+		if test "x$cf_cv_fvisibility_hidden2" = xyes
+		then
+
+cf_save_CXXFLAGS="$CFLAGS"
+CFLAGS="$CXXFLAGS"
+
+cf_fix_cppflags=no
+cf_new_cflags=
+cf_new_cppflags=
+cf_new_extra_cppflags=
+
+for cf_add_cflags in -fvisibility=hidden
+do
+case "$cf_fix_cppflags" in
+(no)
+	case "$cf_add_cflags" in
+	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
+		case "$cf_add_cflags" in
+		(-D*)
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+				&& test -z "${cf_tst_cflags}" \
+				&& cf_fix_cppflags=yes
+
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+				continue
+			fi
+			;;
+		esac
+		case "$CPPFLAGS" in
+		(*$cf_add_cflags)
+			;;
+		(*)
+			case "$cf_add_cflags" in
+			(-D*)
+				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
+
+CPPFLAGS=`echo "$CPPFLAGS" | \
+	sed	-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?[ 	]/ /g' \
+		-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?$//g'`
+
+				;;
+			esac
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
+			;;
+		esac
+		;;
+	(*)
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
+		;;
+	esac
+	;;
+(yes)
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
+
+	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
+		&& test -z "${cf_tst_cflags}" \
+		&& cf_fix_cppflags=no
+	;;
+esac
+done
+
+if test -n "$cf_new_cflags" ; then
+
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
+fi
+
+if test -n "$cf_new_cppflags" ; then
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
+fi
+
+if test -n "$cf_new_extra_cppflags" ; then
+
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
+fi
+
+CXXFLAGS="$CFLAGS"
+CFLAGS="$cf_save_CXXFLAGS"
+
+			NCURSES_CXX_IMPEXP="__attribute__ ((visibility(\"default\")))"
+		fi
+		ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ac_main_return="return"
+
+	fi
+fi
+
+###   use option --enable-interop to turn on use of bindings used for interop
+echo "$as_me:16859: checking if you want interop bindings" >&5
+echo $ECHO_N "checking if you want interop bindings... $ECHO_C" >&6
+
+# Check whether --enable-interop or --disable-interop was given.
+if test "${enable_interop+set}" = set; then
+  enableval="$enable_interop"
+  with_exp_interop=$enableval
+else
+  with_exp_interop=$cf_dft_interop
+fi;
+echo "$as_me:16869: result: $with_exp_interop" >&5
+echo "${ECHO_T}$with_exp_interop" >&6
+
+NCURSES_INTEROP_FUNCS=0
+test "x$with_exp_interop" = xyes && NCURSES_INTEROP_FUNCS=1
+
+echo "$as_me:16875: checking if you want experimental safe-sprintf code" >&5
 echo $ECHO_N "checking if you want experimental safe-sprintf code... $ECHO_C" >&6
 
 # Check whether --enable-safe-sprintf or --disable-safe-sprintf was given.
@@ -12825,17 +16882,13 @@
 else
   with_safe_sprintf=no
 fi;
-echo "$as_me:12828: result: $with_safe_sprintf" >&5
+echo "$as_me:16885: result: $with_safe_sprintf" >&5
 echo "${ECHO_T}$with_safe_sprintf" >&6
-test "x$with_safe_sprintf" = xyes &&
-cat >>confdefs.h <<\EOF
-#define USE_SAFE_SPRINTF 1
-EOF
 
 ###   use option --disable-scroll-hints to turn off use of scroll-hints scrolling logic
 # when hashmap is used scroll hints are useless
 if test "$with_hashmap" = no ; then
-echo "$as_me:12838: checking if you want to experiment without scrolling-hints code" >&5
+echo "$as_me:16891: checking if you want to experiment without scrolling-hints code" >&5
 echo $ECHO_N "checking if you want to experiment without scrolling-hints code... $ECHO_C" >&6
 
 # Check whether --enable-scroll-hints or --disable-scroll-hints was given.
@@ -12845,7 +16898,7 @@
 else
   with_scroll_hints=yes
 fi;
-echo "$as_me:12848: result: $with_scroll_hints" >&5
+echo "$as_me:16901: result: $with_scroll_hints" >&5
 echo "${ECHO_T}$with_scroll_hints" >&6
 test "x$with_scroll_hints" = xyes &&
 cat >>confdefs.h <<\EOF
@@ -12854,7 +16907,7 @@
 
 fi
 
-echo "$as_me:12857: checking if you want wgetch-events code" >&5
+echo "$as_me:16910: checking if you want wgetch-events code" >&5
 echo $ECHO_N "checking if you want wgetch-events code... $ECHO_C" >&6
 
 # Check whether --enable-wgetch-events or --disable-wgetch-events was given.
@@ -12864,18 +16917,58 @@
 else
   with_wgetch_events=no
 fi;
-echo "$as_me:12867: result: $with_wgetch_events" >&5
+echo "$as_me:16920: result: $with_wgetch_events" >&5
 echo "${ECHO_T}$with_wgetch_events" >&6
-test "x$with_wgetch_events" = xyes &&
+if test "x$with_wgetch_events" = xyes ; then
+
 cat >>confdefs.h <<\EOF
 #define NCURSES_WGETCH_EVENTS 1
 EOF
 
+	NCURSES_WGETCH_EVENTS=1
+else
+	NCURSES_WGETCH_EVENTS=0
+fi
+
+case "$cf_cv_system_name" in
+(*mingw32*|*mingw64*|*-msvc*)
+	echo "$as_me:16935: checking if you want experimental-Windows driver" >&5
+echo $ECHO_N "checking if you want experimental-Windows driver... $ECHO_C" >&6
+
+# Check whether --enable-exp-win32 or --disable-exp-win32 was given.
+if test "${enable_exp_win32+set}" = set; then
+  enableval="$enable_exp_win32"
+  with_exp_win32=$enableval
+else
+  with_exp_win32=no
+fi;
+	echo "$as_me:16945: result: $with_exp_win32" >&5
+echo "${ECHO_T}$with_exp_win32" >&6
+	if test "x$with_exp_win32" = xyes
+	then
+
+cat >>confdefs.h <<\EOF
+#define EXP_WIN32_DRIVER 1
+EOF
+
+		EXP_WIN32_DRIVER=1
+		INTERNALS_HDR='$(INCDIR)/nc_win32.h'
+	else
+		INTERNALS_HDR='$(INCDIR)/nc_mingw.h'
+		EXP_WIN32_DRIVER=0
+	fi
+	;;
+(*)
+	EXP_WIN32_DRIVER=0
+	INTERNALS_HDR=
+	;;
+esac
+
 ###############################################################################
 
 ###	use option --disable-echo to suppress full display compiling commands
 
-echo "$as_me:12878: checking if you want to see long compiling messages" >&5
+echo "$as_me:16971: checking if you want to see long compiling messages" >&5
 echo $ECHO_N "checking if you want to see long compiling messages... $ECHO_C" >&6
 
 # Check whether --enable-echo or --disable-echo was given.
@@ -12909,7 +17002,7 @@
 	ECHO_CC=''
 
 fi;
-echo "$as_me:12912: result: $enableval" >&5
+echo "$as_me:17005: result: $enableval" >&5
 echo "${ECHO_T}$enableval" >&6
 
 if test "x$enable_echo" = xyes; then
@@ -12920,129 +17013,552 @@
 	test -n "$LIBTOOL_CXX" && LIBTOOL_CXX="$LIBTOOL_CXX --silent"
 fi
 
-###	use option --enable-warnings to turn on all gcc warnings
-echo "$as_me:12924: checking if you want to see compiler warnings" >&5
-echo $ECHO_N "checking if you want to see compiler warnings... $ECHO_C" >&6
+# --disable-stripping is used for debugging
 
-# Check whether --enable-warnings or --disable-warnings was given.
-if test "${enable_warnings+set}" = set; then
-  enableval="$enable_warnings"
-  with_warnings=$enableval
+echo "$as_me:17018: checking if you want to install stripped executables" >&5
+echo $ECHO_N "checking if you want to install stripped executables... $ECHO_C" >&6
+
+# Check whether --enable-stripping or --disable-stripping was given.
+if test "${enable_stripping+set}" = set; then
+  enableval="$enable_stripping"
+  test "$enableval" != no && enableval=yes
+	if test "$enableval" != "yes" ; then
+    enable_stripping=no
+	else
+		enable_stripping=yes
+	fi
+else
+  enableval=yes
+	enable_stripping=yes
+
 fi;
-echo "$as_me:12932: result: $with_warnings" >&5
-echo "${ECHO_T}$with_warnings" >&6
+echo "$as_me:17035: result: $enable_stripping" >&5
+echo "${ECHO_T}$enable_stripping" >&6
 
-if test "x$with_warnings" = "xyes"; then
+if test "$enable_stripping" = yes
+then
+	INSTALL_OPT_S="-s"
+else
+	INSTALL_OPT_S=
+fi
 
- 	ADAFLAGS="$ADAFLAGS -gnatg"
+: "${INSTALL:=install}"
+echo "$as_me:17046: checking if install accepts -p option" >&5
+echo $ECHO_N "checking if install accepts -p option... $ECHO_C" >&6
+if test "${cf_cv_install_p+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
 
-INTEL_COMPILER=no
+	rm -rf ./conftest*
+	date >conftest.in
+	mkdir conftest.out
+	sleep 3
+	if $INSTALL -p conftest.in conftest.out 2>/dev/null
+	then
+		if test -f conftest.out/conftest.in
+		then
+			test conftest.in -nt conftest.out/conftest.in 2>conftest.err && \
+			test conftest.out/conftest.in -nt conftest.in 2>conftest.err
+			if test -s conftest.err
+			then
+				cf_cv_install_p=no
+			else
+				cf_cv_install_p=yes
+			fi
+		else
+			cf_cv_install_p=no
+		fi
+	else
+		cf_cv_install_p=no
+	fi
+	rm -rf ./conftest*
 
-if test "$GCC" = yes ; then
-	case $host_os in
-	(linux*|gnu*)
-		echo "$as_me:12944: checking if this is really Intel C compiler" >&5
-echo $ECHO_N "checking if this is really Intel C compiler... $ECHO_C" >&6
-		cf_save_CFLAGS="$CFLAGS"
-		CFLAGS="$CFLAGS -no-gcc"
-		cat >conftest.$ac_ext <<_ACEOF
-#line 12949 "configure"
+fi
+echo "$as_me:17077: result: $cf_cv_install_p" >&5
+echo "${ECHO_T}$cf_cv_install_p" >&6
+
+echo "$as_me:17080: checking if install needs to be told about ownership" >&5
+echo $ECHO_N "checking if install needs to be told about ownership... $ECHO_C" >&6
+case `$ac_config_guess` in
+(*minix)
+	with_install_o=yes
+	;;
+(*)
+	with_install_o=no
+	;;
+esac
+
+echo "$as_me:17091: result: $with_install_o" >&5
+echo "${ECHO_T}$with_install_o" >&6
+if test "x$with_install_o" = xyes
+then
+	INSTALL_OPT_O="`id root|sed -e 's/uid=[0-9]*(/ -o /' -e 's/gid=[0-9]*(/ -g /' -e 's/ [^=[:space:]][^=[:space:]]*=.*/ /' -e 's/)//g'`"
+else
+	INSTALL_OPT_O=
+fi
+
+if test -n "$INSTALL_OPT_S"
+then
+	echo "$as_me:17102: checking if you want to specify strip-program" >&5
+echo $ECHO_N "checking if you want to specify strip-program... $ECHO_C" >&6
+
+# Check whether --with-strip-program or --without-strip-program was given.
+if test "${with_strip_program+set}" = set; then
+  withval="$with_strip_program"
+  with_strip_program=$withval
+else
+  with_strip_program=no
+fi;
+	echo "$as_me:17112: result: $with_strip_program" >&5
+echo "${ECHO_T}$with_strip_program" >&6
+	if test "$with_strip_program" != no
+	then
+		echo "$as_me:17116: checking if strip-program is supported with this installer" >&5
+echo $ECHO_N "checking if strip-program is supported with this installer... $ECHO_C" >&6
+		cf_install_program=`echo "$INSTALL" | sed -e 's%[ ]*[ ]-.%%'`
+		check_install_strip=no
+		if test -f "$cf_install_program"
+		then
+			check_install_version=`"$cf_install_program" --version 2>/dev/null | head -n 1 | grep coreutils`
+			if test -n "$check_install_version"
+			then
+				check_install_strip="option"
+			else
+				for check_strip_variable in STRIPBIN STRIP
+				do
+					if strings "$cf_install_program" | grep "^$check_strip_variable$" >/dev/null
+					then
+						check_install_strip="environ"
+						break
+					fi
+				done
+			fi
+		fi
+		echo "$as_me:17137: result: $check_install_strip" >&5
+echo "${ECHO_T}$check_install_strip" >&6
+		case "$check_install_strip" in
+		(no)
+			{ echo "$as_me:17141: WARNING: $cf_install_program does not support strip program option" >&5
+echo "$as_me: WARNING: $cf_install_program does not support strip program option" >&2;}
+			with_strip_program=no
+			;;
+		(environ)
+			cat >install.tmp <<-CF_EOF
+			#! $SHELL
+			STRIPBIN="$with_strip_program" \\
+			STRIP="$with_strip_program" \\
+			$INSTALL "$@"
+			CF_EOF
+			INSTALL="`pwd`/install.tmp"
+			chmod +x "$INSTALL"
+			test -n "$verbose" && echo "	created $INSTALL" 1>&6
+
+echo "${as_me:-configure}:17156: testing created $INSTALL ..." 1>&5
+
+			;;
+		(option)
+			INSTALL_OPT_S="$INSTALL_OPT_S --strip-program=\"$with_strip_program\""
+			;;
+		esac
+	fi
+fi
+
+# If we're avoiding relinking of shared libraries during install, that is to
+# avoid modifying the build-tree.  For the same reason, avoid doing ranlib if
+# the install program has "-p" (for preserving timestamps).
+cf_cv_do_reranlib=yes
+if test "x$cf_cv_install_p" = xyes
+then
+	if test "x$cf_cv_do_relink" != xyes
+	then
+		cf_cv_do_reranlib=no
+		INSTALL_OPT_P="-p"
+		INSTALL_LIB="$INSTALL_LIB $INSTALL_OPT_P"
+	fi
+fi
+
+###	use option --enable-warnings to turn on all gcc warnings
+
+echo "$as_me:17182: checking if you want to use C11 _Noreturn feature" >&5
+echo $ECHO_N "checking if you want to use C11 _Noreturn feature... $ECHO_C" >&6
+
+# Check whether --enable-stdnoreturn or --disable-stdnoreturn was given.
+if test "${enable_stdnoreturn+set}" = set; then
+  enableval="$enable_stdnoreturn"
+  test "$enableval" != yes && enableval=no
+	if test "$enableval" != "no" ; then
+    enable_stdnoreturn=yes
+	else
+		enable_stdnoreturn=no
+	fi
+else
+  enableval=no
+	enable_stdnoreturn=no
+
+fi;
+echo "$as_me:17199: result: $enable_stdnoreturn" >&5
+echo "${ECHO_T}$enable_stdnoreturn" >&6
+
+if test $enable_stdnoreturn = yes; then
+echo "$as_me:17203: checking for C11 _Noreturn feature" >&5
+echo $ECHO_N "checking for C11 _Noreturn feature... $ECHO_C" >&6
+if test "${cf_cv_c11_noreturn+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 17209 "configure"
 #include "confdefs.h"
 
+$ac_includes_default
+#include <stdnoreturn.h>
+static _Noreturn void giveup(void) { exit(0); }
+
 int
-main ()
+main (void)
 {
-
-#ifdef __INTEL_COMPILER
-#else
-make an error
-#endif
-
+if (feof(stdin)) giveup()
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:12966: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:17225: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:12969: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:12972: \"$ac_try\"") >&5
+  echo "$as_me:17228: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:17231: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:12975: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  INTEL_COMPILER=yes
-cf_save_CFLAGS="$cf_save_CFLAGS -we147"
-
+  echo "$as_me:17234: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_c11_noreturn=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_c11_noreturn=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-		CFLAGS="$cf_save_CFLAGS"
-		echo "$as_me:12986: result: $INTEL_COMPILER" >&5
-echo "${ECHO_T}$INTEL_COMPILER" >&6
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
+fi
+echo "$as_me:17245: result: $cf_cv_c11_noreturn" >&5
+echo "${ECHO_T}$cf_cv_c11_noreturn" >&6
+else
+	cf_cv_c11_noreturn=no,
+fi
+
+if test "$cf_cv_c11_noreturn" = yes; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_STDNORETURN_H 1
+EOF
+
+cat >>confdefs.h <<EOF
+#define STDC_NORETURN _Noreturn
+EOF
+
+	HAVE_STDNORETURN_H=1
+else
+	HAVE_STDNORETURN_H=0
+fi
+
+if test "$GCC" = yes || test "$GXX" = yes
+then
+
+if test "$GCC" = yes || test "$GXX" = yes
+then
+	case $CFLAGS in
+	(*-Werror=*)
+		cf_temp_flags=
+		for cf_temp_scan in $CFLAGS
+		do
+			case "x$cf_temp_scan" in
+			(x-Werror=format*)
+
+	test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags "
+	cf_temp_flags="${cf_temp_flags}$cf_temp_scan"
+
+				;;
+			(x-Werror=*)
+
+	test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS "
+	EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan"
+
+				;;
+			(*)
+
+	test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags "
+	cf_temp_flags="${cf_temp_flags}$cf_temp_scan"
+
+				;;
+			esac
+		done
+		if test "x$CFLAGS" != "x$cf_temp_flags"
+		then
+			test -n "$verbose" && echo "	repairing CFLAGS: $CFLAGS" 1>&6
+
+echo "${as_me:-configure}:17301: testing repairing CFLAGS: $CFLAGS ..." 1>&5
+
+			CFLAGS="$cf_temp_flags"
+			test -n "$verbose" && echo "	... fixed $CFLAGS" 1>&6
+
+echo "${as_me:-configure}:17306: testing ... fixed $CFLAGS ..." 1>&5
+
+			test -n "$verbose" && echo "	... extra $EXTRA_CFLAGS" 1>&6
+
+echo "${as_me:-configure}:17310: testing ... extra $EXTRA_CFLAGS ..." 1>&5
+
+		fi
 		;;
 	esac
 fi
 
-CLANG_COMPILER=no
+if test "$GCC" = yes || test "$GXX" = yes
+then
+	case $CPPFLAGS in
+	(*-Werror=*)
+		cf_temp_flags=
+		for cf_temp_scan in $CPPFLAGS
+		do
+			case "x$cf_temp_scan" in
+			(x-Werror=format*)
 
-if test "$GCC" = yes ; then
-	echo "$as_me:12995: checking if this is really Clang C compiler" >&5
-echo $ECHO_N "checking if this is really Clang C compiler... $ECHO_C" >&6
-	cf_save_CFLAGS="$CFLAGS"
-	CFLAGS="$CFLAGS -Qunused-arguments"
-	cat >conftest.$ac_ext <<_ACEOF
-#line 13000 "configure"
+	test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags "
+	cf_temp_flags="${cf_temp_flags}$cf_temp_scan"
+
+				;;
+			(x-Werror=*)
+
+	test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS "
+	EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan"
+
+				;;
+			(*)
+
+	test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags "
+	cf_temp_flags="${cf_temp_flags}$cf_temp_scan"
+
+				;;
+			esac
+		done
+		if test "x$CPPFLAGS" != "x$cf_temp_flags"
+		then
+			test -n "$verbose" && echo "	repairing CPPFLAGS: $CPPFLAGS" 1>&6
+
+echo "${as_me:-configure}:17349: testing repairing CPPFLAGS: $CPPFLAGS ..." 1>&5
+
+			CPPFLAGS="$cf_temp_flags"
+			test -n "$verbose" && echo "	... fixed $CPPFLAGS" 1>&6
+
+echo "${as_me:-configure}:17354: testing ... fixed $CPPFLAGS ..." 1>&5
+
+			test -n "$verbose" && echo "	... extra $EXTRA_CFLAGS" 1>&6
+
+echo "${as_me:-configure}:17358: testing ... extra $EXTRA_CFLAGS ..." 1>&5
+
+		fi
+		;;
+	esac
+fi
+
+if test "$GCC" = yes || test "$GXX" = yes
+then
+	case $LDFLAGS in
+	(*-Werror=*)
+		cf_temp_flags=
+		for cf_temp_scan in $LDFLAGS
+		do
+			case "x$cf_temp_scan" in
+			(x-Werror=format*)
+
+	test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags "
+	cf_temp_flags="${cf_temp_flags}$cf_temp_scan"
+
+				;;
+			(x-Werror=*)
+
+	test -n "$EXTRA_CFLAGS" && EXTRA_CFLAGS="$EXTRA_CFLAGS "
+	EXTRA_CFLAGS="${EXTRA_CFLAGS}$cf_temp_scan"
+
+				;;
+			(*)
+
+	test -n "$cf_temp_flags" && cf_temp_flags="$cf_temp_flags "
+	cf_temp_flags="${cf_temp_flags}$cf_temp_scan"
+
+				;;
+			esac
+		done
+		if test "x$LDFLAGS" != "x$cf_temp_flags"
+		then
+			test -n "$verbose" && echo "	repairing LDFLAGS: $LDFLAGS" 1>&6
+
+echo "${as_me:-configure}:17397: testing repairing LDFLAGS: $LDFLAGS ..." 1>&5
+
+			LDFLAGS="$cf_temp_flags"
+			test -n "$verbose" && echo "	... fixed $LDFLAGS" 1>&6
+
+echo "${as_me:-configure}:17402: testing ... fixed $LDFLAGS ..." 1>&5
+
+			test -n "$verbose" && echo "	... extra $EXTRA_CFLAGS" 1>&6
+
+echo "${as_me:-configure}:17406: testing ... extra $EXTRA_CFLAGS ..." 1>&5
+
+		fi
+		;;
+	esac
+fi
+
+echo "$as_me:17413: checking if you want to turn on gcc warnings" >&5
+echo $ECHO_N "checking if you want to turn on gcc warnings... $ECHO_C" >&6
+
+# Check whether --enable-warnings or --disable-warnings was given.
+if test "${enable_warnings+set}" = set; then
+  enableval="$enable_warnings"
+  test "$enableval" != yes && enableval=no
+	if test "$enableval" != "no" ; then
+    enable_warnings=yes
+	else
+		enable_warnings=no
+	fi
+else
+  enableval=no
+	enable_warnings=no
+
+fi;
+echo "$as_me:17430: result: $enable_warnings" >&5
+echo "${ECHO_T}$enable_warnings" >&6
+if test "$enable_warnings" = "yes"
+then
+
+if test "x$have_x" = xyes; then
+
+cf_save_LIBS_CF_CONST_X_STRING="$LIBS"
+cf_save_CFLAGS_CF_CONST_X_STRING="$CFLAGS"
+cf_save_CPPFLAGS_CF_CONST_X_STRING="$CPPFLAGS"
+LIBS="$LIBS ${X_PRE_LIBS} ${X_LIBS} ${X_EXTRA_LIBS}"
+for cf_X_CFLAGS in $X_CFLAGS
+do
+	case "x$cf_X_CFLAGS" in
+	x-[IUD]*)
+		CPPFLAGS="$CPPFLAGS $cf_X_CFLAGS"
+		;;
+	*)
+		CFLAGS="$CFLAGS $cf_X_CFLAGS"
+		;;
+	esac
+done
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 17454 "configure"
 #include "confdefs.h"
 
+#include <stdlib.h>
+#include <X11/Intrinsic.h>
+
 int
-main ()
+main (void)
 {
-
-#ifdef __clang__
-#else
-make an error
-#endif
-
+String foo = malloc(1); free((void*)foo)
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:13017: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:17469: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:13020: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:13023: \"$ac_try\"") >&5
+  echo "$as_me:17472: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:17475: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:13026: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  CLANG_COMPILER=yes
-cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments"
+  echo "$as_me:17478: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+
+echo "$as_me:17481: checking for X11/Xt const-feature" >&5
+echo $ECHO_N "checking for X11/Xt const-feature... $ECHO_C" >&6
+if test "${cf_cv_const_x_string+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 17488 "configure"
+#include "confdefs.h"
+
+#undef  _CONST_X_STRING
+#define _CONST_X_STRING	/* X11R7.8 (perhaps) */
+#undef  XTSTRINGDEFINES	/* X11R5 and later */
+#include <stdlib.h>
+#include <X11/Intrinsic.h>
+
+int
+main (void)
+{
+String foo = malloc(1); *foo = 0
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:17506: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:17509: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:17512: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:17515: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+
+			cf_cv_const_x_string=no
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-	CFLAGS="$cf_save_CFLAGS"
-	echo "$as_me:13037: result: $CLANG_COMPILER" >&5
-echo "${ECHO_T}$CLANG_COMPILER" >&6
-fi
+cat "conftest.$ac_ext" >&5
 
-cat > conftest.$ac_ext <<EOF
-#line 13042 "${as_me:-configure}"
+			cf_cv_const_x_string=yes
+
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
+fi
+echo "$as_me:17530: result: $cf_cv_const_x_string" >&5
+echo "${ECHO_T}$cf_cv_const_x_string" >&6
+
+LIBS="$cf_save_LIBS_CF_CONST_X_STRING"
+CFLAGS="$cf_save_CFLAGS_CF_CONST_X_STRING"
+CPPFLAGS="$cf_save_CPPFLAGS_CF_CONST_X_STRING"
+
+case "$cf_cv_const_x_string" in
+(no)
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-DXTSTRINGDEFINES"
+
+	;;
+(*)
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-D_CONST_X_STRING"
+
+	;;
+esac
+
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+ fi
+cat > "conftest.$ac_ext" <<EOF
+#line 17559 "${as_me:-configure}"
 int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
 EOF
-
 if test "$INTEL_COMPILER" = yes
 then
 # The "-wdXXX" options suppress warnings:
@@ -13056,10 +17572,10 @@
 # remark #981: operands are evaluated in unspecified order
 # warning #279: controlling expression is constant
 
-	{ echo "$as_me:13059: checking for $CC warning options..." >&5
+	{ echo "$as_me:17575: checking for $CC warning options..." >&5
 echo "$as_me: checking for $CC warning options..." >&6;}
 	cf_save_CFLAGS="$CFLAGS"
-	EXTRA_CFLAGS="-Wall"
+	EXTRA_CFLAGS="$EXTRA_CFLAGS -Wall"
 	for cf_opt in \
 		wd1419 \
 		wd1683 \
@@ -13072,24 +17588,22 @@
 		wd981
 	do
 		CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
-		if { (eval echo "$as_me:13075: \"$ac_compile\"") >&5
+		if { (eval echo "$as_me:17591: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:13078: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-			test -n "$verbose" && echo "$as_me:13080: result: ... -$cf_opt" >&5
+  echo "$as_me:17594: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
+			test -n "$verbose" && echo "$as_me:17596: result: ... -$cf_opt" >&5
 echo "${ECHO_T}... -$cf_opt" >&6
 			EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
 		fi
 	done
 	CFLAGS="$cf_save_CFLAGS"
-
-elif test "$GCC" = yes
+elif test "$GCC" = yes && test "$GCC_VERSION" != "unknown"
 then
-	{ echo "$as_me:13089: checking for $CC warning options..." >&5
+	{ echo "$as_me:17604: checking for $CC warning options..." >&5
 echo "$as_me: checking for $CC warning options..." >&6;}
 	cf_save_CFLAGS="$CFLAGS"
-	EXTRA_CFLAGS=
 	cf_warn_CONST=""
 	test "$with_ext_const" = yes && cf_warn_CONST="Wwrite-strings"
 	cf_gcc_warnings="Wignored-qualifiers Wlogical-op Wvarargs"
@@ -13107,36 +17621,33 @@
 		Wpointer-arith \
 		Wshadow \
 		Wstrict-prototypes \
-		Wundef $cf_gcc_warnings $cf_warn_CONST Wno-unknown-pragmas Wswitch-enum
+		Wundef Wno-inline $cf_gcc_warnings $cf_warn_CONST Wno-unknown-pragmas Wswitch-enum
 	do
 		CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
-		if { (eval echo "$as_me:13113: \"$ac_compile\"") >&5
+		if { (eval echo "$as_me:17627: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:13116: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-			test -n "$verbose" && echo "$as_me:13118: result: ... -$cf_opt" >&5
+  echo "$as_me:17630: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
+			test -n "$verbose" && echo "$as_me:17632: result: ... -$cf_opt" >&5
 echo "${ECHO_T}... -$cf_opt" >&6
-			case $cf_opt in
-			(Wcast-qual)
-				CPPFLAGS="$CPPFLAGS -DXTSTRINGDEFINES"
-				;;
+			case "$cf_opt" in
 			(Winline)
-				case $GCC_VERSION in
+				case "$GCC_VERSION" in
 				([34].*)
 					test -n "$verbose" && echo "	feature is broken in gcc $GCC_VERSION" 1>&6
 
-echo "${as_me:-configure}:13129: testing feature is broken in gcc $GCC_VERSION ..." 1>&5
+echo "${as_me:-configure}:17640: testing feature is broken in gcc $GCC_VERSION ..." 1>&5
 
 					continue;;
 				esac
 				;;
 			(Wpointer-arith)
-				case $GCC_VERSION in
+				case "$GCC_VERSION" in
 				([12].*)
 					test -n "$verbose" && echo "	feature is broken in gcc $GCC_VERSION" 1>&6
 
-echo "${as_me:-configure}:13139: testing feature is broken in gcc $GCC_VERSION ..." 1>&5
+echo "${as_me:-configure}:17650: testing feature is broken in gcc $GCC_VERSION ..." 1>&5
 
 					continue;;
 				esac
@@ -13147,227 +17658,11 @@
 	done
 	CFLAGS="$cf_save_CFLAGS"
 fi
-rm -rf conftest*
+rm -rf ./conftest*
 
-	if test "x$cf_with_cxx" = xyes ; then
-
-INTEL_CPLUSPLUS=no
-
-if test "$GCC" = yes ; then
-	case $host_os in
-	(linux*|gnu*)
-		echo "$as_me:13159: checking if this is really Intel C++ compiler" >&5
-echo $ECHO_N "checking if this is really Intel C++ compiler... $ECHO_C" >&6
-		cf_save_CFLAGS="$CXXFLAGS"
-		CXXFLAGS="$CXXFLAGS -no-gcc"
-		cat >conftest.$ac_ext <<_ACEOF
-#line 13164 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
-#ifdef __INTEL_COMPILER
-#else
-make an error
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:13181: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:13184: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:13187: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:13190: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  INTEL_CPLUSPLUS=yes
-cf_save_CFLAGS="$cf_save_CFLAGS -we147"
-
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-		CXXFLAGS="$cf_save_CFLAGS"
-		echo "$as_me:13201: result: $INTEL_CPLUSPLUS" >&5
-echo "${ECHO_T}$INTEL_CPLUSPLUS" >&6
-		;;
-	esac
 fi
 
-CLANG_CPLUSPLUS=no
-
-if test "$GCC" = yes ; then
-	echo "$as_me:13210: checking if this is really Clang C++ compiler" >&5
-echo $ECHO_N "checking if this is really Clang C++ compiler... $ECHO_C" >&6
-	cf_save_CFLAGS="$CXXFLAGS"
-	CXXFLAGS="$CXXFLAGS -Qunused-arguments"
-	cat >conftest.$ac_ext <<_ACEOF
-#line 13215 "configure"
-#include "confdefs.h"
-
-int
-main ()
-{
-
-#ifdef __clang__
-#else
-make an error
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:13232: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:13235: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:13238: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:13241: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  CLANG_CPLUSPLUS=yes
-cf_save_CFLAGS="$cf_save_CFLAGS -Qunused-arguments"
-
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-	CXXFLAGS="$cf_save_CFLAGS"
-	echo "$as_me:13252: result: $CLANG_CPLUSPLUS" >&5
-echo "${ECHO_T}$CLANG_CPLUSPLUS" >&6
-fi
-
-ac_ext=cc
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
-
-cat > conftest.$ac_ext <<EOF
-#line 13264 "configure"
-int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
-EOF
-
-if test "$INTEL_CPLUSPLUS" = yes
-then
-# The "-wdXXX" options suppress warnings:
-# remark #1419: external declaration in primary source file
-# remark #1682: implicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
-# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
-# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
-# remark #193: zero used for undefined preprocessing identifier
-# remark #593: variable "curs_sb_left_arrow" was set but never used
-# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
-# remark #869: parameter "tw" was never referenced
-# remark #981: operands are evaluated in unspecified order
-# warning #269: invalid format string conversion
-
-	{ echo "$as_me:13282: checking for $CC warning options..." >&5
-echo "$as_me: checking for $CC warning options..." >&6;}
-	cf_save_CXXFLAGS="$CXXFLAGS"
-	EXTRA_CXXFLAGS="-Wall"
-	for cf_opt in \
-		wd1419 \
-		wd1682 \
-		wd1683 \
-		wd1684 \
-		wd193 \
-		wd279 \
-		wd593 \
-		wd810 \
-		wd869 \
-		wd981
-	do
-		CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -$cf_opt"
-		if { (eval echo "$as_me:13299: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:13302: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-			test -n "$verbose" && echo "$as_me:13304: result: ... -$cf_opt" >&5
-echo "${ECHO_T}... -$cf_opt" >&6
-			EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt"
-		fi
-	done
-	CXXFLAGS="$cf_save_CXXFLAGS"
-
-elif test "$GXX" = yes
-then
-	{ echo "$as_me:13313: checking for $CXX warning options..." >&5
-echo "$as_me: checking for $CXX warning options..." >&6;}
-	cf_save_CXXFLAGS="$CXXFLAGS"
-	EXTRA_CXXFLAGS="-W -Wall"
-	cf_gxx_extra_warnings=""
-	test "$with_ext_const" = yes && cf_gxx_extra_warnings="Wwrite-strings"
-	case "$GCC_VERSION" in
-	([1-2].*)
-		;;
-	(*)
-		cf_gxx_extra_warnings="$cf_gxx_extra_warnings Weffc++"
-		;;
-	esac
-	for cf_opt in \
-		Wabi \
-		fabi-version=0 \
-		Wextra \
-		Wignored-qualifiers \
-		Wlogical-op \
-		Woverloaded-virtual \
-		Wsign-promo \
-		Wsynth \
-		Wold-style-cast \
-		Wcast-align \
-		Wcast-qual \
-		Wpointer-arith \
-		Wshadow \
-		Wundef $cf_gxx_extra_warnings Wno-unused
-	do
-		CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -Werror -$cf_opt"
-		if { (eval echo "$as_me:13343: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:13346: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-			test -n "$verbose" && echo "$as_me:13348: result: ... -$cf_opt" >&5
-echo "${ECHO_T}... -$cf_opt" >&6
-			EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt"
-		else
-			test -n "$verbose" && echo "$as_me:13352: result: ... no -$cf_opt" >&5
-echo "${ECHO_T}... no -$cf_opt" >&6
-		fi
-	done
-	CXXFLAGS="$cf_save_CXXFLAGS"
-fi
-
-rm -rf conftest*
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
-
-	fi
-fi
-
-if test "$GCC" = yes
+if test "$GCC" = yes || test "$GXX" = yes
 then
 cat > conftest.i <<EOF
 #ifndef GCC_PRINTF
@@ -13385,10 +17680,11 @@
 EOF
 if test "$GCC" = yes
 then
-	{ echo "$as_me:13388: checking for $CC __attribute__ directives..." >&5
+	{ echo "$as_me:17683: checking for $CC __attribute__ directives..." >&5
 echo "$as_me: checking for $CC __attribute__ directives..." >&6;}
-cat > conftest.$ac_ext <<EOF
-#line 13391 "${as_me:-configure}"
+cat > "conftest.$ac_ext" <<EOF
+#line 17686 "${as_me:-configure}"
+#include <stdio.h>
 #include "confdefs.h"
 #include "conftest.h"
 #include "conftest.i"
@@ -13403,9 +17699,9 @@
 #define GCC_SCANFLIKE(fmt,var)  /*nothing*/
 #endif
 extern void wow(char *,...) GCC_SCANFLIKE(1,2);
-extern void oops(char *,...) GCC_PRINTFLIKE(1,2) GCC_NORETURN;
-extern void foo(void) GCC_NORETURN;
-int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { return 0; }
+extern GCC_NORETURN void oops(char *,...) GCC_PRINTFLIKE(1,2);
+extern GCC_NORETURN void foo(void);
+int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED) { (void)argc; (void)argv; return 0; }
 EOF
 	cf_printf_attribute=no
 	cf_scanf_attribute=no
@@ -13417,7 +17713,7 @@
 		cf_directive="__attribute__(($cf_attribute))"
 		echo "checking for $CC $cf_directive" 1>&5
 
-		case $cf_attribute in
+		case "$cf_attribute" in
 		(printf)
 			cf_printf_attribute=yes
 			cat >conftest.h <<EOF
@@ -13437,15 +17733,15 @@
 			;;
 		esac
 
-		if { (eval echo "$as_me:13440: \"$ac_compile\"") >&5
+		if { (eval echo "$as_me:17736: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:13443: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-			test -n "$verbose" && echo "$as_me:13445: result: ... $cf_attribute" >&5
+  echo "$as_me:17739: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
+			test -n "$verbose" && echo "$as_me:17741: result: ... $cf_attribute" >&5
 echo "${ECHO_T}... $cf_attribute" >&6
 			cat conftest.h >>confdefs.h
-			case $cf_attribute in
+			case "$cf_attribute" in
 			(noreturn)
 
 cat >>confdefs.h <<EOF
@@ -13496,95 +17792,582 @@
 		fi
 	done
 else
-	fgrep define conftest.i >>confdefs.h
+	${FGREP-fgrep} define conftest.i >>confdefs.h
 fi
-rm -rf conftest*
+rm -rf ./conftest*
 fi
 
-echo "$as_me:13504: checking if you want to work around bogus compiler/loader warnings" >&5
-echo $ECHO_N "checking if you want to work around bogus compiler/loader warnings... $ECHO_C" >&6
+fi
 
-# Check whether --enable-string-hacks or --disable-string-hacks was given.
-if test "${enable_string_hacks+set}" = set; then
-  enableval="$enable_string_hacks"
-  with_string_hacks=$enableval
-else
-  with_string_hacks=no
-fi;
-echo "$as_me:13514: result: $with_string_hacks" >&5
-echo "${ECHO_T}$with_string_hacks" >&6
+if test "x$enable_warnings" = "xyes"; then
 
-if test "x$with_string_hacks" = "xyes"; then
+ 	ADAFLAGS="$ADAFLAGS -gnatwa -gnatyg"
 
-cat >>confdefs.h <<\EOF
-#define USE_STRING_HACKS 1
-EOF
+	if test "x$cf_with_cxx" = xyes ; then
 
-	{ echo "$as_me:13523: WARNING: enabling string-hacks to work around bogus compiler/loader warnings" >&5
-echo "$as_me: WARNING: enabling string-hacks to work around bogus compiler/loader warnings" >&2;}
+INTEL_CPLUSPLUS=no
 
-for ac_func in strlcat strlcpy snprintf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:13529: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 13535 "configure"
+if test "$GCC" = yes ; then
+	case "$host_os" in
+	(linux*|gnu*)
+		echo "$as_me:17813: checking if this is really Intel C++ compiler" >&5
+echo $ECHO_N "checking if this is really Intel C++ compiler... $ECHO_C" >&6
+		cf_save_CFLAGS="$CXXFLAGS"
+		CXXFLAGS="$CXXFLAGS -no-gcc"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 17818 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-char (*f) ();
 
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
+
+#ifdef __INTEL_COMPILER
 #else
-f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#error __INTEL_COMPILER is not defined
 #endif
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:13566: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:17835: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:13569: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:13572: \"$ac_try\"") >&5
+  echo "$as_me:17838: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:17841: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:13575: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:17844: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  INTEL_CPLUSPLUS=yes
+cf_save_CFLAGS="$cf_save_CFLAGS -we147"
+
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+		CXXFLAGS="$cf_save_CFLAGS"
+		echo "$as_me:17855: result: $INTEL_CPLUSPLUS" >&5
+echo "${ECHO_T}$INTEL_CPLUSPLUS" >&6
+		;;
+	esac
+fi
+
+CLANG_CPLUSPLUS=no
+
+if test "$GCC" = yes ; then
+	echo "$as_me:17864: checking if this is really Clang C++ compiler" >&5
+echo $ECHO_N "checking if this is really Clang C++ compiler... $ECHO_C" >&6
+	cf_save_CFLAGS="$CXXFLAGS"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 17868 "configure"
+#include "confdefs.h"
+
+int
+main (void)
+{
+
+#ifdef __clang__
+#else
+#error __clang__ is not defined
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:17885: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:17888: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:17891: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:17894: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  CLANG_CPLUSPLUS=yes
+
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+	CXXFLAGS="$cf_save_CFLAGS"
+	echo "$as_me:17904: result: $CLANG_CPLUSPLUS" >&5
+echo "${ECHO_T}$CLANG_CPLUSPLUS" >&6
+fi
+
+CLANG_VERSION=none
+
+if test "x$CLANG_CPLUSPLUS" = "xyes" ; then
+	case "$CC" in
+	(c[1-9][0-9]|*/c[1-9][0-9])
+		{ echo "$as_me:17913: WARNING: replacing broken compiler alias $CC" >&5
+echo "$as_me: WARNING: replacing broken compiler alias $CC" >&2;}
+		CFLAGS="$CFLAGS -std=`echo "$CC" | sed -e 's%.*/%%'`"
+		CC=clang
+		;;
+	esac
+
+	echo "$as_me:17920: checking version of $CC" >&5
+echo $ECHO_N "checking version of $CC... $ECHO_C" >&6
+	CLANG_VERSION="`$CC --version 2>/dev/null | sed -e '2,$d' -e 's/^.*(CLANG[^)]*) //' -e 's/^.*(Debian[^)]*) //' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
+	test -z "$CLANG_VERSION" && CLANG_VERSION=unknown
+	echo "$as_me:17924: result: $CLANG_VERSION" >&5
+echo "${ECHO_T}$CLANG_VERSION" >&6
+
+	for cf_clang_opt in \
+		-Qunused-arguments \
+		-Wno-error=implicit-function-declaration
+	do
+		echo "$as_me:17931: checking if option $cf_clang_opt works" >&5
+echo $ECHO_N "checking if option $cf_clang_opt works... $ECHO_C" >&6
+		cf_save_CFLAGS="$CFLAGS"
+		CFLAGS="$CFLAGS $cf_clang_opt"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 17936 "configure"
+#include "confdefs.h"
+
+			#include <stdio.h>
+int
+main (void)
+{
+
+			printf("hello!\\n");
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:17950: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:17953: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:17956: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:17959: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+
+			cf_clang_optok=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+
+			cf_clang_optok=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+		echo "$as_me:17970: result: $cf_clang_optok" >&5
+echo "${ECHO_T}$cf_clang_optok" >&6
+		CFLAGS="$cf_save_CFLAGS"
+		if test "$cf_clang_optok" = yes; then
+			test -n "$verbose" && echo "	adding option $cf_clang_opt" 1>&6
+
+echo "${as_me:-configure}:17976: testing adding option $cf_clang_opt ..." 1>&5
+
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_clang_opt"
+
+		fi
+	done
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
+
+cat > conftest.$ac_ext <<EOF
+#line 17993 "configure"
+int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
+EOF
+
+if test "$INTEL_CPLUSPLUS" = yes
+then
+# The "-wdXXX" options suppress warnings:
+# remark #1419: external declaration in primary source file
+# remark #1682: implicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
+# remark #1683: explicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
+# remark #1684: conversion from pointer to same-sized integral type (potential portability problem)
+# remark #193: zero used for undefined preprocessing identifier
+# remark #593: variable "curs_sb_left_arrow" was set but never used
+# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
+# remark #869: parameter "tw" was never referenced
+# remark #981: operands are evaluated in unspecified order
+# warning #269: invalid format string conversion
+
+	{ echo "$as_me:18011: checking for $CC warning options..." >&5
+echo "$as_me: checking for $CC warning options..." >&6;}
+	cf_save_CXXFLAGS="$CXXFLAGS"
+	EXTRA_CXXFLAGS="-Wall"
+	for cf_opt in \
+		wd1419 \
+		wd1682 \
+		wd1683 \
+		wd1684 \
+		wd193 \
+		wd279 \
+		wd593 \
+		wd810 \
+		wd869 \
+		wd981
+	do
+		CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -$cf_opt"
+		if { (eval echo "$as_me:18028: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:18031: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
+			test -n "$verbose" && echo "$as_me:18033: result: ... -$cf_opt" >&5
+echo "${ECHO_T}... -$cf_opt" >&6
+			EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt"
+		fi
+	done
+	CXXFLAGS="$cf_save_CXXFLAGS"
+
+elif test "$GXX" = yes
+then
+	{ echo "$as_me:18042: checking for $CXX warning options..." >&5
+echo "$as_me: checking for $CXX warning options..." >&6;}
+	cf_save_CXXFLAGS="$CXXFLAGS"
+	EXTRA_CXXFLAGS="-W -Wall"
+	cf_gxx_extra_warnings=""
+	test "$with_ext_const" = yes && cf_gxx_extra_warnings="Wwrite-strings"
+	case "$GXX_VERSION" in
+	([1-2].*)
+		;;
+	(*)
+		cf_gxx_extra_warnings="$cf_gxx_extra_warnings Weffc++"
+		;;
+	esac
+	for cf_opt in \
+		Wabi \
+		fabi-version=0 \
+		Wextra \
+		Wignored-qualifiers \
+		Wlogical-op \
+		Woverloaded-virtual \
+		Wsign-promo \
+		Wsynth \
+		Wold-style-cast \
+		Wcast-align \
+		Wcast-qual \
+		Wpointer-arith \
+		Wshadow \
+		Wundef $cf_gxx_extra_warnings Wno-unused
+	do
+		CXXFLAGS="$cf_save_CXXFLAGS $EXTRA_CXXFLAGS -Werror -$cf_opt"
+		if { (eval echo "$as_me:18072: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:18075: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
+			test -n "$verbose" && echo "$as_me:18077: result: ... -$cf_opt" >&5
+echo "${ECHO_T}... -$cf_opt" >&6
+			EXTRA_CXXFLAGS="$EXTRA_CXXFLAGS -$cf_opt"
+		else
+			test -n "$verbose" && echo "$as_me:18081: result: ... no -$cf_opt" >&5
+echo "${ECHO_T}... no -$cf_opt" >&6
+		fi
+	done
+	CXXFLAGS="$cf_save_CXXFLAGS"
+fi
+
+rm -rf ./conftest*
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+ac_main_return="return"
+
+	fi
+fi
+
+echo "$as_me:18099: checking if you want to work around bogus compiler/loader warnings" >&5
+echo $ECHO_N "checking if you want to work around bogus compiler/loader warnings... $ECHO_C" >&6
+
+# Check whether --enable-string-hacks or --disable-string-hacks was given.
+if test "${enable_string_hacks+set}" = set; then
+  enableval="$enable_string_hacks"
+  enable_string_hacks=$enableval
+else
+  enable_string_hacks=no
+fi;
+echo "$as_me:18109: result: $enable_string_hacks" >&5
+echo "${ECHO_T}$enable_string_hacks" >&6
+
+if test "x$enable_string_hacks" = "xyes"; then
+
+cat >>confdefs.h <<\EOF
+#define USE_STRING_HACKS 1
+EOF
+
+	{ echo "$as_me:18118: WARNING: enabling string-hacks to work around bogus compiler/loader warnings" >&5
+echo "$as_me: WARNING: enabling string-hacks to work around bogus compiler/loader warnings" >&2;}
+	echo "$as_me:18120: checking for strlcat" >&5
+echo $ECHO_N "checking for strlcat... $ECHO_C" >&6
+if test "${ac_cv_func_strlcat+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 18126 "configure"
+#include "confdefs.h"
+#define strlcat autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef strlcat
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strlcat (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_strlcat) || defined (__stub___strlcat)
+#error found stub for strlcat
+#endif
+
+	return strlcat ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18157: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:18160: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:18163: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:18166: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_func_strlcat=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_func_strlcat=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:18176: result: $ac_cv_func_strlcat" >&5
+echo "${ECHO_T}$ac_cv_func_strlcat" >&6
+if test "$ac_cv_func_strlcat" = yes; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_STRLCAT 1
+EOF
+
+else
+
+		echo "$as_me:18186: checking for strlcat in -lbsd" >&5
+echo $ECHO_N "checking for strlcat in -lbsd... $ECHO_C" >&6
+if test "${ac_cv_lib_bsd_strlcat+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18194 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strlcat (void);
+int
+main (void)
+{
+strlcat ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18213: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:18216: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:18219: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:18222: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_bsd_strlcat=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_bsd_strlcat=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:18233: result: $ac_cv_lib_bsd_strlcat" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_strlcat" >&6
+if test "$ac_cv_lib_bsd_strlcat" = yes; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lbsd; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+for ac_header in bsd/string.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:18256: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 18262 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:18266: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:18272: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+  cat "conftest.$ac_ext" >&5
+  eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:18291: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+cat >>confdefs.h <<\EOF
+#define HAVE_STRLCAT 1
+EOF
+
+fi
+
+fi
+
+for ac_func in strlcpy snprintf
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:18312: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 18318 "configure"
+#include "confdefs.h"
+#define $ac_func autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#error found stub for $ac_func
+#endif
+
+	return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18349: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:18352: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:18355: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:18358: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 eval "$as_ac_var=no"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:13585: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+echo "$as_me:18368: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
 EOF
@@ -13595,7 +18378,7 @@
 fi
 
 ###	use option --enable-assertions to turn on generation of assertion code
-echo "$as_me:13598: checking if you want to enable runtime assertions" >&5
+echo "$as_me:18381: checking if you want to enable runtime assertions" >&5
 echo $ECHO_N "checking if you want to enable runtime assertions... $ECHO_C" >&6
 
 # Check whether --enable-assertions or --disable-assertions was given.
@@ -13605,7 +18388,7 @@
 else
   with_assertions=no
 fi;
-echo "$as_me:13608: result: $with_assertions" >&5
+echo "$as_me:18391: result: $with_assertions" >&5
 echo "${ECHO_T}$with_assertions" >&6
 if test -n "$GCC"
 then
@@ -13621,27 +18404,32 @@
 
 ###	use option --disable-leaks to suppress "permanent" leaks, for testing
 
-echo "$as_me:13624: checking if you want to use dmalloc for testing" >&5
+echo "$as_me:18407: checking if you want to use dmalloc for testing" >&5
 echo $ECHO_N "checking if you want to use dmalloc for testing... $ECHO_C" >&6
 
 # Check whether --with-dmalloc or --without-dmalloc was given.
 if test "${with_dmalloc+set}" = set; then
   withval="$with_dmalloc"
+  case "x$withval" in
+	(x|xno) ;;
+	(*)
+		: "${with_cflags:=-g}"
+		: "${enable_leaks:=no}"
+		with_dmalloc=yes
 
 cat >>confdefs.h <<EOF
 #define USE_DMALLOC 1
 EOF
 
-	: ${with_cflags:=-g}
-	: ${with_no_leaks:=yes}
-	 with_dmalloc=yes
+		;;
+	esac
 else
   with_dmalloc=
 fi;
-echo "$as_me:13641: result: ${with_dmalloc:-no}" >&5
+echo "$as_me:18429: result: ${with_dmalloc:-no}" >&5
 echo "${ECHO_T}${with_dmalloc:-no}" >&6
 
-case .$with_cflags in
+case ".$with_cflags" in
 (.*-g*)
 	case .$CFLAGS in
 	(.*-g*)
@@ -13655,23 +18443,29 @@
 
 for cf_add_cflags in -g
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -13680,7 +18474,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -13690,19 +18484,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -13713,17 +18515,23 @@
 
 if test -n "$cf_new_cflags" ; then
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
 fi
 
 		;;
@@ -13732,24 +18540,24 @@
 esac
 
 if test "$with_dmalloc" = yes ; then
-	echo "$as_me:13735: checking for dmalloc.h" >&5
+	echo "$as_me:18543: checking for dmalloc.h" >&5
 echo $ECHO_N "checking for dmalloc.h... $ECHO_C" >&6
 if test "${ac_cv_header_dmalloc_h+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 13741 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 18549 "configure"
 #include "confdefs.h"
 #include <dmalloc.h>
 _ACEOF
-if { (eval echo "$as_me:13745: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:18553: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:13751: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:18559: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -13762,24 +18570,24 @@
   ac_cv_header_dmalloc_h=yes
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   ac_cv_header_dmalloc_h=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 fi
-echo "$as_me:13770: result: $ac_cv_header_dmalloc_h" >&5
+echo "$as_me:18578: result: $ac_cv_header_dmalloc_h" >&5
 echo "${ECHO_T}$ac_cv_header_dmalloc_h" >&6
-if test $ac_cv_header_dmalloc_h = yes; then
+if test "$ac_cv_header_dmalloc_h" = yes; then
 
-echo "$as_me:13774: checking for dmalloc_debug in -ldmalloc" >&5
+echo "$as_me:18582: checking for dmalloc_debug in -ldmalloc" >&5
 echo $ECHO_N "checking for dmalloc_debug in -ldmalloc... $ECHO_C" >&6
 if test "${ac_cv_lib_dmalloc_dmalloc_debug+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldmalloc  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 13782 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18590 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -13788,39 +18596,39 @@
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char dmalloc_debug ();
+char dmalloc_debug (void);
 int
-main ()
+main (void)
 {
 dmalloc_debug ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:13801: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18609: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:13804: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:13807: \"$ac_try\"") >&5
+  echo "$as_me:18612: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:18615: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:13810: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:18618: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_lib_dmalloc_dmalloc_debug=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_lib_dmalloc_dmalloc_debug=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:13821: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5
+echo "$as_me:18629: result: $ac_cv_lib_dmalloc_dmalloc_debug" >&5
 echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_debug" >&6
-if test $ac_cv_lib_dmalloc_dmalloc_debug = yes; then
+if test "$ac_cv_lib_dmalloc_dmalloc_debug" = yes; then
   cat >>confdefs.h <<EOF
 #define HAVE_LIBDMALLOC 1
 EOF
@@ -13833,27 +18641,32 @@
 
 fi
 
-echo "$as_me:13836: checking if you want to use dbmalloc for testing" >&5
+echo "$as_me:18644: checking if you want to use dbmalloc for testing" >&5
 echo $ECHO_N "checking if you want to use dbmalloc for testing... $ECHO_C" >&6
 
 # Check whether --with-dbmalloc or --without-dbmalloc was given.
 if test "${with_dbmalloc+set}" = set; then
   withval="$with_dbmalloc"
+  case "x$withval" in
+	(x|xno) ;;
+	(*)
+		: "${with_cflags:=-g}"
+		: "${enable_leaks:=no}"
+		with_dbmalloc=yes
 
 cat >>confdefs.h <<EOF
 #define USE_DBMALLOC 1
 EOF
 
-	: ${with_cflags:=-g}
-	: ${with_no_leaks:=yes}
-	 with_dbmalloc=yes
+		;;
+	esac
 else
   with_dbmalloc=
 fi;
-echo "$as_me:13853: result: ${with_dbmalloc:-no}" >&5
+echo "$as_me:18666: result: ${with_dbmalloc:-no}" >&5
 echo "${ECHO_T}${with_dbmalloc:-no}" >&6
 
-case .$with_cflags in
+case ".$with_cflags" in
 (.*-g*)
 	case .$CFLAGS in
 	(.*-g*)
@@ -13867,23 +18680,29 @@
 
 for cf_add_cflags in -g
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -13892,7 +18711,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -13902,19 +18721,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -13925,17 +18752,23 @@
 
 if test -n "$cf_new_cflags" ; then
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
 fi
 
 		;;
@@ -13944,24 +18777,24 @@
 esac
 
 if test "$with_dbmalloc" = yes ; then
-	echo "$as_me:13947: checking for dbmalloc.h" >&5
+	echo "$as_me:18780: checking for dbmalloc.h" >&5
 echo $ECHO_N "checking for dbmalloc.h... $ECHO_C" >&6
 if test "${ac_cv_header_dbmalloc_h+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 13953 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 18786 "configure"
 #include "confdefs.h"
 #include <dbmalloc.h>
 _ACEOF
-if { (eval echo "$as_me:13957: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:18790: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:13963: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:18796: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -13974,24 +18807,24 @@
   ac_cv_header_dbmalloc_h=yes
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   ac_cv_header_dbmalloc_h=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 fi
-echo "$as_me:13982: result: $ac_cv_header_dbmalloc_h" >&5
+echo "$as_me:18815: result: $ac_cv_header_dbmalloc_h" >&5
 echo "${ECHO_T}$ac_cv_header_dbmalloc_h" >&6
-if test $ac_cv_header_dbmalloc_h = yes; then
+if test "$ac_cv_header_dbmalloc_h" = yes; then
 
-echo "$as_me:13986: checking for debug_malloc in -ldbmalloc" >&5
+echo "$as_me:18819: checking for debug_malloc in -ldbmalloc" >&5
 echo $ECHO_N "checking for debug_malloc in -ldbmalloc... $ECHO_C" >&6
 if test "${ac_cv_lib_dbmalloc_debug_malloc+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldbmalloc  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 13994 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 18827 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -14000,39 +18833,39 @@
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char debug_malloc ();
+char debug_malloc (void);
 int
-main ()
+main (void)
 {
 debug_malloc ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:14013: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:18846: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:14016: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:14019: \"$ac_try\"") >&5
+  echo "$as_me:18849: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:18852: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:14022: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:18855: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_lib_dbmalloc_debug_malloc=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_lib_dbmalloc_debug_malloc=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:14033: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5
+echo "$as_me:18866: result: $ac_cv_lib_dbmalloc_debug_malloc" >&5
 echo "${ECHO_T}$ac_cv_lib_dbmalloc_debug_malloc" >&6
-if test $ac_cv_lib_dbmalloc_debug_malloc = yes; then
+if test "$ac_cv_lib_dbmalloc_debug_malloc" = yes; then
   cat >>confdefs.h <<EOF
 #define HAVE_LIBDBMALLOC 1
 EOF
@@ -14045,27 +18878,32 @@
 
 fi
 
-echo "$as_me:14048: checking if you want to use valgrind for testing" >&5
+echo "$as_me:18881: checking if you want to use valgrind for testing" >&5
 echo $ECHO_N "checking if you want to use valgrind for testing... $ECHO_C" >&6
 
 # Check whether --with-valgrind or --without-valgrind was given.
 if test "${with_valgrind+set}" = set; then
   withval="$with_valgrind"
+  case "x$withval" in
+	(x|xno) ;;
+	(*)
+		: "${with_cflags:=-g}"
+		: "${enable_leaks:=no}"
+		with_valgrind=yes
 
 cat >>confdefs.h <<EOF
 #define USE_VALGRIND 1
 EOF
 
-	: ${with_cflags:=-g}
-	: ${with_no_leaks:=yes}
-	 with_valgrind=yes
+		;;
+	esac
 else
   with_valgrind=
 fi;
-echo "$as_me:14065: result: ${with_valgrind:-no}" >&5
+echo "$as_me:18903: result: ${with_valgrind:-no}" >&5
 echo "${ECHO_T}${with_valgrind:-no}" >&6
 
-case .$with_cflags in
+case ".$with_cflags" in
 (.*-g*)
 	case .$CFLAGS in
 	(.*-g*)
@@ -14079,23 +18917,29 @@
 
 for cf_add_cflags in -g
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -14104,7 +18948,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -14114,19 +18958,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -14137,17 +18989,23 @@
 
 if test -n "$cf_new_cflags" ; then
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
 fi
 
 		;;
@@ -14155,20 +19013,21 @@
 	;;
 esac
 
-echo "$as_me:14158: checking if you want to perform memory-leak testing" >&5
+echo "$as_me:19016: checking if you want to perform memory-leak testing" >&5
 echo $ECHO_N "checking if you want to perform memory-leak testing... $ECHO_C" >&6
 
 # Check whether --enable-leaks or --disable-leaks was given.
 if test "${enable_leaks+set}" = set; then
   enableval="$enable_leaks"
-  if test "x$enableval" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi
+  enable_leaks=$enableval
 else
-  : ${with_no_leaks:=no}
+  enable_leaks=yes
 fi;
-echo "$as_me:14168: result: $with_no_leaks" >&5
+if test "x$enable_leaks" = xno; then with_no_leaks=yes; else with_no_leaks=no; fi
+echo "$as_me:19027: result: $with_no_leaks" >&5
 echo "${ECHO_T}$with_no_leaks" >&6
 
-if test "$with_no_leaks" = yes ; then
+if test "$enable_leaks" = no ; then
 
 cat >>confdefs.h <<\EOF
 #define NO_LEAKS 1
@@ -14217,7 +19076,7 @@
 	;;
 esac
 
-echo "$as_me:14220: checking whether to add trace feature to all models" >&5
+echo "$as_me:19079: checking whether to add trace feature to all models" >&5
 echo $ECHO_N "checking whether to add trace feature to all models... $ECHO_C" >&6
 
 # Check whether --with-trace or --without-trace was given.
@@ -14227,7 +19086,7 @@
 else
   cf_with_trace=$cf_all_traces
 fi;
-echo "$as_me:14230: result: $cf_with_trace" >&5
+echo "$as_me:19089: result: $cf_with_trace" >&5
 echo "${ECHO_T}$cf_with_trace" >&6
 
 if test "x$cf_with_trace" = xyes ; then
@@ -14241,23 +19100,29 @@
 
 for cf_add_cflags in -DTRACE
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -14266,7 +19131,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -14276,19 +19141,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -14299,25 +19172,35 @@
 
 if test -n "$cf_new_cflags" ; then
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
 fi
 
+cat >>confdefs.h <<\EOF
+#define HAVE__TRACEF 1
+EOF
+
 else
 	LIB_TRACING=DEBUG
 	ADA_TRACE=FALSE
 fi
 
-echo "$as_me:14320: checking if we want to use GNAT projects" >&5
+echo "$as_me:19203: checking if we want to use GNAT projects" >&5
 echo $ECHO_N "checking if we want to use GNAT projects... $ECHO_C" >&6
 
 # Check whether --enable-gnat-projects or --disable-gnat-projects was given.
@@ -14334,525 +19217,259 @@
 	enable_gnat_projects=yes
 
 fi;
-echo "$as_me:14337: result: $enable_gnat_projects" >&5
+echo "$as_me:19220: result: $enable_gnat_projects" >&5
 echo "${ECHO_T}$enable_gnat_projects" >&6
 
 ###	Checks for libraries.
-case $cf_cv_system_name in
+case "$cf_cv_system_name" in
 (*mingw32*|*mingw64*)
-	CPPFLAGS="$CPPFLAGS -DWINVER=0x0501"
-	LIBS=" -lpsapi $LIBS"
-	;;
-(*)
-echo "$as_me:14347: checking for gettimeofday" >&5
-echo $ECHO_N "checking for gettimeofday... $ECHO_C" >&6
-if test "${ac_cv_func_gettimeofday+set}" = set; then
+	# Note: WINVER may be a problem with Windows 10
+	if test "x$with_exp_win32" = xyes ; then
+		CPPFLAGS="$CPPFLAGS -DWINVER=0x0600 -DWIN32_LEAN_AND_MEAN"
+	else
+		CPPFLAGS="$CPPFLAGS -DWINVER=0x0501 -DWIN32_LEAN_AND_MEAN"
+	fi
+
+echo "$as_me:19233: checking if ssp library is needed" >&5
+echo $ECHO_N "checking if ssp library is needed... $ECHO_C" >&6
+if test "${cf_cv_need_libssp+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 14353 "configure"
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 19240 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char gettimeofday (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char gettimeofday ();
-char (*f) ();
+
+#include <sys/types.h>
+#include <dirent.h>
 
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_gettimeofday) || defined (__stub___gettimeofday)
-choke me
-#else
-f = gettimeofday; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
-#endif
+
+       DIR *dp = opendir(".");
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:14384: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19257: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:14387: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:14390: \"$ac_try\"") >&5
+  echo "$as_me:19260: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19263: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:14393: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_gettimeofday=yes
+  echo "$as_me:19266: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_need_libssp=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_gettimeofday=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:14403: result: $ac_cv_func_gettimeofday" >&5
-echo "${ECHO_T}$ac_cv_func_gettimeofday" >&6
-if test $ac_cv_func_gettimeofday = yes; then
+cat "conftest.$ac_ext" >&5
 
-cat >>confdefs.h <<\EOF
-#define HAVE_GETTIMEOFDAY 1
-EOF
-
-else
-
-echo "$as_me:14413: checking for gettimeofday in -lbsd" >&5
-echo $ECHO_N "checking for gettimeofday in -lbsd... $ECHO_C" >&6
-if test "${ac_cv_lib_bsd_gettimeofday+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 14421 "configure"
+	cf_save_LIBS="$LIBS"
+	LIBS="$LIBS -lssp"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 19276 "configure"
 #include "confdefs.h"
 
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char gettimeofday ();
+#include <sys/types.h>
+#include <dirent.h>
+
 int
-main ()
+main (void)
 {
-gettimeofday ();
+
+		   DIR *dp = opendir(".");
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:14440: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19293: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:14443: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:14446: \"$ac_try\"") >&5
+  echo "$as_me:19296: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19299: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:14449: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_bsd_gettimeofday=yes
+  echo "$as_me:19302: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_need_libssp=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_bsd_gettimeofday=no
+cat "conftest.$ac_ext" >&5
+cf_cv_need_libssp=maybe
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+	LIBS="$cf_save_LIBS"
+
 fi
-echo "$as_me:14460: result: $ac_cv_lib_bsd_gettimeofday" >&5
-echo "${ECHO_T}$ac_cv_lib_bsd_gettimeofday" >&6
-if test $ac_cv_lib_bsd_gettimeofday = yes; then
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:19316: result: $cf_cv_need_libssp" >&5
+echo "${ECHO_T}$cf_cv_need_libssp" >&6
 
-cat >>confdefs.h <<\EOF
-#define HAVE_GETTIMEOFDAY 1
-EOF
+if test "x$cf_cv_need_libssp" = xyes
+then
 
-cf_add_libs="-lbsd"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lssp; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
 
 fi
 
-fi
+	;;
+(*)
 	;;
 esac
 
-echo "$as_me:14490: checking if -lm needed for math functions" >&5
+echo "$as_me:19345: checking if -lm needed for math functions" >&5
 echo $ECHO_N "checking if -lm needed for math functions... $ECHO_C" >&6
 if test "${cf_cv_need_libm+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 14497 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 19352 "configure"
 #include "confdefs.h"
 
-	#include <stdio.h>
-	#include <math.h>
+		#include <stdio.h>
+		#include <stdlib.h>
+		#include <math.h>
 
 int
-main ()
+main (void)
 {
-double x = rand(); printf("result = %g\n", pow(sin(x),x))
+double x = rand(); printf("result = %g\\n", pow(sin(x),x))
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:14512: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19368: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:14515: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:14518: \"$ac_try\"") >&5
+  echo "$as_me:19371: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19374: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:14521: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:19377: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_need_libm=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_need_libm=yes
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:14531: result: $cf_cv_need_libm" >&5
+echo "$as_me:19387: result: $cf_cv_need_libm" >&5
 echo "${ECHO_T}$cf_cv_need_libm" >&6
+
 if test "$cf_cv_need_libm" = yes
 then
-MATH_LIB=-lm
+
+	cf_save_LIBS="$LIBS"
+	LIBS="$LIBS -lm"
+	echo "$as_me:19395: checking if -lm is available for math functions" >&5
+echo $ECHO_N "checking if -lm is available for math functions... $ECHO_C" >&6
+if test "${cf_cv_have_libm+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 19402 "configure"
+#include "confdefs.h"
+
+		#include <stdio.h>
+		#include <stdlib.h>
+		#include <math.h>
+
+int
+main (void)
+{
+double x = rand(); printf("result = %g\\n", pow(sin(x),x))
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19418: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:19421: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19424: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:19427: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_have_libm=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_have_libm=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:19437: result: $cf_cv_have_libm" >&5
+echo "${ECHO_T}$cf_cv_have_libm" >&6
+	LIBS="$cf_save_LIBS"
+
+	if test "$cf_cv_have_libm" = yes
+	then
+		MATH_LIB=-lm
+	fi
+else
+	cf_cv_have_libm=yes
+fi
+
+if test "$cf_cv_have_libm" = yes
+then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_MATH_FUNCS 1
+EOF
+
 fi
 
 ###	Checks for header files.
-echo "$as_me:14539: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 14545 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-_ACEOF
-if { (eval echo "$as_me:14553: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:14559: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  ac_cv_header_stdc=no
-fi
-rm -f conftest.err conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 14581 "configure"
-#include "confdefs.h"
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "memchr" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -rf conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 14599 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "free" >/dev/null 2>&1; then
-  :
-else
-  ac_cv_header_stdc=no
-fi
-rm -rf conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then
-  :
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 14620 "configure"
-#include "confdefs.h"
-#include <ctype.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
-                     || ('j' <= (c) && (c) <= 'r') \
-                     || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-        || toupper (i) != TOUPPER (i))
-      $ac_main_return(2);
-  $ac_main_return (0);
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:14646: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:14649: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:14651: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:14654: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_header_stdc=no
-fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-fi
-fi
-echo "$as_me:14667: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\EOF
-#define STDC_HEADERS 1
-EOF
-
-fi
-
-ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
-  as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-echo "$as_me:14680: checking for $ac_hdr that defines DIR" >&5
-echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 14686 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-#include <$ac_hdr>
-
-int
-main ()
-{
-if ((DIR *) 0)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:14701: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:14704: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:14707: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:14710: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_Header=no"
-fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-fi
-echo "$as_me:14720: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
-EOF
-
-ac_header_dirent=$ac_hdr; break
-fi
-
-done
-# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
-if test $ac_header_dirent = dirent.h; then
-  echo "$as_me:14733: checking for opendir in -ldir" >&5
-echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6
-if test "${ac_cv_lib_dir_opendir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldir  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 14741 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char opendir ();
-int
-main ()
-{
-opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:14760: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:14763: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:14766: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:14769: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_dir_opendir=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_dir_opendir=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:14780: result: $ac_cv_lib_dir_opendir" >&5
-echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6
-if test $ac_cv_lib_dir_opendir = yes; then
-  LIBS="$LIBS -ldir"
-fi
-
-else
-  echo "$as_me:14787: checking for opendir in -lx" >&5
-echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6
-if test "${ac_cv_lib_x_opendir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lx  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 14795 "configure"
-#include "confdefs.h"
-
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char opendir ();
-int
-main ()
-{
-opendir ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:14814: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:14817: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:14820: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:14823: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_x_opendir=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_x_opendir=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-echo "$as_me:14834: result: $ac_cv_lib_x_opendir" >&5
-echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6
-if test $ac_cv_lib_x_opendir = yes; then
-  LIBS="$LIBS -lx"
-fi
-
-fi
-
-echo "$as_me:14842: checking whether time.h and sys/time.h may both be included" >&5
+echo "$as_me:19459: checking whether time.h and sys/time.h may both be included" >&5
 echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
 if test "${ac_cv_header_time+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 14848 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 19465 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
 #include <time.h>
 
 int
-main ()
+main (void)
 {
 if ((struct tm *) 0)
 return 0;
@@ -14860,27 +19477,27 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:14864: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:19481: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:14867: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:14870: \"$ac_try\"") >&5
+  echo "$as_me:19484: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:19487: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:14873: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:19490: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_header_time=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_header_time=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:14883: result: $ac_cv_header_time" >&5
+echo "$as_me:19500: result: $ac_cv_header_time" >&5
 echo "${ECHO_T}$ac_cv_header_time" >&6
 if test $ac_cv_header_time = yes; then
 
@@ -14891,88 +19508,19 @@
 fi
 
 cf_regex_func=no
-
-cf_regex_libs="regex re"
-case $host_os in
+cf_regex_libs=
+case "$host_os" in
 (mingw*)
-	cf_regex_libs="gnurx $cf_regex_libs"
-	;;
-esac
-
-echo "$as_me:14902: checking for regcomp" >&5
-echo $ECHO_N "checking for regcomp... $ECHO_C" >&6
-if test "${ac_cv_func_regcomp+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 14908 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char regcomp (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
-   builtin and then its argument prototype would still apply.  */
-char regcomp ();
-char (*f) ();
-
-int
-main ()
-{
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_regcomp) || defined (__stub___regcomp)
-choke me
-#else
-f = regcomp; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:14939: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:14942: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:14945: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:14948: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_func_regcomp=yes
-else
-  echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_func_regcomp=no
-fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-fi
-echo "$as_me:14958: result: $ac_cv_func_regcomp" >&5
-echo "${ECHO_T}$ac_cv_func_regcomp" >&6
-if test $ac_cv_func_regcomp = yes; then
-  cf_regex_func=regcomp
-else
-
-	for cf_regex_lib in $cf_regex_libs
-	do
-		as_ac_Lib=`echo "ac_cv_lib_$cf_regex_lib''_regcomp" | $as_tr_sh`
-echo "$as_me:14967: checking for regcomp in -l$cf_regex_lib" >&5
-echo $ECHO_N "checking for regcomp in -l$cf_regex_lib... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Lib+set}\" = set"; then
+	# -lsystre -ltre -lintl -liconv
+	echo "$as_me:19515: checking for regcomp in -lsystre" >&5
+echo $ECHO_N "checking for regcomp in -lsystre... $ECHO_C" >&6
+if test "${ac_cv_lib_systre_regcomp+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-l$cf_regex_lib  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 14975 "configure"
+LIBS="-lsystre  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 19523 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -14981,136 +19529,557 @@
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char regcomp ();
+char regcomp (void);
 int
-main ()
+main (void)
 {
 regcomp ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:14994: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19542: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:14997: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:15000: \"$ac_try\"") >&5
+  echo "$as_me:19545: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19548: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15003: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  eval "$as_ac_Lib=yes"
+  echo "$as_me:19551: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_systre_regcomp=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-eval "$as_ac_Lib=no"
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_systre_regcomp=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:15014: result: `eval echo '${'$as_ac_Lib'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6
-if test `eval echo '${'$as_ac_Lib'}'` = yes; then
+echo "$as_me:19562: result: $ac_cv_lib_systre_regcomp" >&5
+echo "${ECHO_T}$ac_cv_lib_systre_regcomp" >&6
+if test "$ac_cv_lib_systre_regcomp" = yes; then
 
-cf_add_libs="-l$cf_regex_lib"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
-			cf_add_1lib=
-			break
-		fi
-	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
-done
-LIBS="$cf_add_libs"
-
-				cf_regex_func=regcomp
-				break
-fi
-
-	done
-
-fi
-
-if test "$cf_regex_func" = no ; then
-	echo "$as_me:15043: checking for compile" >&5
-echo $ECHO_N "checking for compile... $ECHO_C" >&6
-if test "${ac_cv_func_compile+set}" = set; then
+		echo "$as_me:19566: checking for libiconv_open in -liconv" >&5
+echo $ECHO_N "checking for libiconv_open in -liconv... $ECHO_C" >&6
+if test "${ac_cv_lib_iconv_libiconv_open+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 15049 "configure"
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-liconv  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 19574 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char compile (); below.  */
-#include <assert.h>
+
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char compile ();
-char (*f) ();
-
+char libiconv_open (void);
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_compile) || defined (__stub___compile)
-choke me
-#else
-f = compile; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
-#endif
-
+libiconv_open ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:15080: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19593: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:15083: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:15086: \"$ac_try\"") >&5
+  echo "$as_me:19596: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19599: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15089: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:19602: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_iconv_libiconv_open=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_iconv_libiconv_open=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:19613: result: $ac_cv_lib_iconv_libiconv_open" >&5
+echo "${ECHO_T}$ac_cv_lib_iconv_libiconv_open" >&6
+if test "$ac_cv_lib_iconv_libiconv_open" = yes; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -liconv; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+fi
+
+		echo "$as_me:19635: checking for libintl_gettext in -lintl" >&5
+echo $ECHO_N "checking for libintl_gettext in -lintl... $ECHO_C" >&6
+if test "${ac_cv_lib_intl_libintl_gettext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lintl  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 19643 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char libintl_gettext (void);
+int
+main (void)
+{
+libintl_gettext ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19662: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:19665: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19668: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:19671: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_intl_libintl_gettext=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_intl_libintl_gettext=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:19682: result: $ac_cv_lib_intl_libintl_gettext" >&5
+echo "${ECHO_T}$ac_cv_lib_intl_libintl_gettext" >&6
+if test "$ac_cv_lib_intl_libintl_gettext" = yes; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lintl; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+fi
+
+		echo "$as_me:19704: checking for tre_regcomp in -ltre" >&5
+echo $ECHO_N "checking for tre_regcomp in -ltre... $ECHO_C" >&6
+if test "${ac_cv_lib_tre_tre_regcomp+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ltre  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 19712 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char tre_regcomp (void);
+int
+main (void)
+{
+tre_regcomp ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19731: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:19734: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19737: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:19740: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_tre_tre_regcomp=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_tre_tre_regcomp=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:19751: result: $ac_cv_lib_tre_tre_regcomp" >&5
+echo "${ECHO_T}$ac_cv_lib_tre_tre_regcomp" >&6
+if test "$ac_cv_lib_tre_tre_regcomp" = yes; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -ltre; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+fi
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lsystre; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+		cf_regex_func=regcomp
+
+else
+
+		echo "$as_me:19793: checking for regcomp in -lgnurx" >&5
+echo $ECHO_N "checking for regcomp in -lgnurx... $ECHO_C" >&6
+if test "${ac_cv_lib_gnurx_regcomp+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgnurx  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 19801 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char regcomp (void);
+int
+main (void)
+{
+regcomp ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19820: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:19823: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19826: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:19829: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_gnurx_regcomp=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_gnurx_regcomp=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:19840: result: $ac_cv_lib_gnurx_regcomp" >&5
+echo "${ECHO_T}$ac_cv_lib_gnurx_regcomp" >&6
+if test "$ac_cv_lib_gnurx_regcomp" = yes; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lgnurx; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+			cf_regex_func=regcomp
+fi
+
+fi
+
+	;;
+(*)
+	cf_regex_libs="regex re"
+	echo "$as_me:19868: checking for regcomp" >&5
+echo $ECHO_N "checking for regcomp... $ECHO_C" >&6
+if test "${ac_cv_func_regcomp+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 19874 "configure"
+#include "confdefs.h"
+#define regcomp autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef regcomp
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char regcomp (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_regcomp) || defined (__stub___regcomp)
+#error found stub for regcomp
+#endif
+
+	return regcomp ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19905: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:19908: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19911: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:19914: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_func_regcomp=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_func_regcomp=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:19924: result: $ac_cv_func_regcomp" >&5
+echo "${ECHO_T}$ac_cv_func_regcomp" >&6
+if test "$ac_cv_func_regcomp" = yes; then
+  cf_regex_func=regcomp
+else
+
+		for cf_regex_lib in $cf_regex_libs
+		do
+			as_ac_Lib=`echo "ac_cv_lib_$cf_regex_lib''_regcomp" | $as_tr_sh`
+echo "$as_me:19933: checking for regcomp in -l$cf_regex_lib" >&5
+echo $ECHO_N "checking for regcomp in -l$cf_regex_lib... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Lib+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-l$cf_regex_lib  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 19941 "configure"
+#include "confdefs.h"
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char regcomp (void);
+int
+main (void)
+{
+regcomp ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:19960: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:19963: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:19966: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:19969: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  eval "$as_ac_Lib=yes"
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_Lib=no"
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:19980: result: `eval echo '${'"$as_ac_Lib"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Lib"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Lib"'}'`" = yes; then
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_regex_lib; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+					cf_regex_func=regcomp
+					break
+fi
+
+		done
+
+fi
+
+	;;
+esac
+
+if test "$cf_regex_func" = no ; then
+	echo "$as_me:20012: checking for compile" >&5
+echo $ECHO_N "checking for compile... $ECHO_C" >&6
+if test "${ac_cv_func_compile+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 20018 "configure"
+#include "confdefs.h"
+#define compile autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef compile
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compile (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_compile) || defined (__stub___compile)
+#error found stub for compile
+#endif
+
+	return compile ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:20049: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:20052: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:20055: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:20058: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_func_compile=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_func_compile=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:15099: result: $ac_cv_func_compile" >&5
+echo "$as_me:20068: result: $ac_cv_func_compile" >&5
 echo "${ECHO_T}$ac_cv_func_compile" >&6
-if test $ac_cv_func_compile = yes; then
+if test "$ac_cv_func_compile" = yes; then
   cf_regex_func=compile
 else
 
-		echo "$as_me:15105: checking for compile in -lgen" >&5
+		echo "$as_me:20074: checking for compile in -lgen" >&5
 echo $ECHO_N "checking for compile in -lgen... $ECHO_C" >&6
 if test "${ac_cv_lib_gen_compile+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lgen  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 15113 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 20082 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -15119,53 +20088,53 @@
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char compile ();
+char compile (void);
 int
-main ()
+main (void)
 {
 compile ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:15132: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:20101: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:15135: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:15138: \"$ac_try\"") >&5
+  echo "$as_me:20104: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:20107: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15141: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:20110: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_lib_gen_compile=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_lib_gen_compile=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:15152: result: $ac_cv_lib_gen_compile" >&5
+echo "$as_me:20121: result: $ac_cv_lib_gen_compile" >&5
 echo "${ECHO_T}$ac_cv_lib_gen_compile" >&6
-if test $ac_cv_lib_gen_compile = yes; then
+if test "$ac_cv_lib_gen_compile" = yes; then
 
-cf_add_libs="-lgen"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lgen; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
 
@@ -15177,111 +20146,115 @@
 fi
 
 if test "$cf_regex_func" = no ; then
-	{ echo "$as_me:15180: WARNING: cannot find regular expression library" >&5
+	{ echo "$as_me:20149: WARNING: cannot find regular expression library" >&5
 echo "$as_me: WARNING: cannot find regular expression library" >&2;}
 fi
 
-echo "$as_me:15184: checking for regular-expression headers" >&5
+echo "$as_me:20153: checking for regular-expression headers" >&5
 echo $ECHO_N "checking for regular-expression headers... $ECHO_C" >&6
 if test "${cf_cv_regex_hdrs+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
 cf_cv_regex_hdrs=no
-case $cf_regex_func in
+case "$cf_regex_func" in
 (compile)
 	for cf_regex_hdr in regexp.h regexpr.h
 	do
-		cat >conftest.$ac_ext <<_ACEOF
-#line 15196 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 20165 "configure"
 #include "confdefs.h"
 #include <$cf_regex_hdr>
 int
-main ()
+main (void)
 {
 
 			char *p = compile("", "", "", 0);
 			int x = step("", "");
+			(void)p;
+			(void)x;
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:15211: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:20182: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:15214: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:15217: \"$ac_try\"") >&5
+  echo "$as_me:20185: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:20188: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15220: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:20191: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 			cf_cv_regex_hdrs=$cf_regex_hdr
 			break
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 	done
 	;;
 (*)
 	for cf_regex_hdr in regex.h
 	do
-		cat >conftest.$ac_ext <<_ACEOF
-#line 15237 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 20208 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$cf_regex_hdr>
 int
-main ()
+main (void)
 {
 
-			regex_t *p;
+			regex_t *p = 0;
 			int x = regcomp(p, "", 0);
 			int y = regexec(p, "", 0, 0, 0);
+			(void)x;
+			(void)y;
 			regfree(p);
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:15255: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:20228: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:15258: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:15261: \"$ac_try\"") >&5
+  echo "$as_me:20231: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:20234: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15264: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:20237: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 			cf_cv_regex_hdrs=$cf_regex_hdr
 			break
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 	done
 	;;
 esac
 
 fi
-echo "$as_me:15280: result: $cf_cv_regex_hdrs" >&5
+echo "$as_me:20253: result: $cf_cv_regex_hdrs" >&5
 echo "${ECHO_T}$cf_cv_regex_hdrs" >&6
 
-case $cf_cv_regex_hdrs in
-	(no)		{ echo "$as_me:15284: WARNING: no regular expression header found" >&5
+case "$cf_cv_regex_hdrs" in
+	(no)		{ echo "$as_me:20257: WARNING: no regular expression header found" >&5
 echo "$as_me: WARNING: no regular expression header found" >&2;} ;;
 	(regex.h)
 cat >>confdefs.h <<\EOF
@@ -15307,37 +20280,36 @@
 locale.h \
 math.h \
 poll.h \
-sys/bsdtypes.h \
+sys/auxv.h \
 sys/ioctl.h \
 sys/param.h \
 sys/poll.h \
 sys/select.h \
 sys/time.h \
 sys/times.h \
-ttyent.h \
 unistd.h \
 wctype.h \
 
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:15323: checking for $ac_header" >&5
+echo "$as_me:20295: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 15329 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 20301 "configure"
 #include "confdefs.h"
 #include <$ac_header>
 _ACEOF
-if { (eval echo "$as_me:15333: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:20305: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:15339: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:20311: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -15350,14 +20322,14 @@
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   eval "$as_ac_Header=no"
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 fi
-echo "$as_me:15358: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+echo "$as_me:20330: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 EOF
@@ -15368,24 +20340,24 @@
 for ac_header in unistd.h getopt.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:15371: checking for $ac_header" >&5
+echo "$as_me:20343: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 15377 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 20349 "configure"
 #include "confdefs.h"
 #include <$ac_header>
 _ACEOF
-if { (eval echo "$as_me:15381: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:20353: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:15387: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:20359: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -15398,14 +20370,14 @@
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   eval "$as_ac_Header=no"
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 fi
-echo "$as_me:15406: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+echo "$as_me:20378: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 EOF
@@ -15413,7 +20385,7 @@
 fi
 done
 
-echo "$as_me:15416: checking for header declaring getopt variables" >&5
+echo "$as_me:20388: checking for header declaring getopt variables" >&5
 echo $ECHO_N "checking for header declaring getopt variables... $ECHO_C" >&6
 if test "${cf_cv_getopt_header+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -15422,51 +20394,51 @@
 cf_cv_getopt_header=none
 for cf_header in stdio.h stdlib.h unistd.h getopt.h
 do
-cat >conftest.$ac_ext <<_ACEOF
-#line 15426 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 20398 "configure"
 #include "confdefs.h"
 
 #include <$cf_header>
 int
-main ()
+main (void)
 {
-int x = optind; char *y = optarg
+int x = optind; char *y = optarg; (void)x; (void)y
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:15439: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20411: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:15442: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:15445: \"$ac_try\"") >&5
+  echo "$as_me:20414: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:20417: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15448: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:20420: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_getopt_header=$cf_header
  break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 done
 
 fi
-echo "$as_me:15460: result: $cf_cv_getopt_header" >&5
+echo "$as_me:20432: result: $cf_cv_getopt_header" >&5
 echo "${ECHO_T}$cf_cv_getopt_header" >&6
-if test $cf_cv_getopt_header != none ; then
+if test "$cf_cv_getopt_header" != none ; then
 
 cat >>confdefs.h <<\EOF
 #define HAVE_GETOPT_HEADER 1
 EOF
 
 fi
-if test $cf_cv_getopt_header = getopt.h ; then
+if test "$cf_cv_getopt_header" = getopt.h ; then
 
 cat >>confdefs.h <<\EOF
 #define NEED_GETOPT_H 1
@@ -15474,139 +20446,407 @@
 
 fi
 
-# check for ISC (this may also define _POSIX_SOURCE)
-# Note: even non-Posix ISC needs <sys/bsdtypes.h> to declare fd_set
-if test "x$ISC" = xyes ; then
-
-echo "$as_me:15481: checking for main in -lcposix" >&5
-echo $ECHO_N "checking for main in -lcposix... $ECHO_C" >&6
-if test "${ac_cv_lib_cposix_main+set}" = set; then
+echo "$as_me:20449: checking if external environ is declared" >&5
+echo $ECHO_N "checking if external environ is declared... $ECHO_C" >&6
+if test "${cf_cv_dcl_environ+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcposix  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 15489 "configure"
+
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 20456 "configure"
 #include "confdefs.h"
 
+$ac_includes_default
 int
-main ()
+main (void)
 {
-main ();
+void* x = (void*) environ; (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:15501: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20469: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:15504: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:15507: \"$ac_try\"") >&5
+  echo "$as_me:20472: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:20475: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15510: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_cposix_main=yes
+  echo "$as_me:20478: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_dcl_environ=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_cposix_main=no
+cat "conftest.$ac_ext" >&5
+cf_cv_dcl_environ=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+
 fi
-echo "$as_me:15521: result: $ac_cv_lib_cposix_main" >&5
-echo "${ECHO_T}$ac_cv_lib_cposix_main" >&6
-if test $ac_cv_lib_cposix_main = yes; then
-  cat >>confdefs.h <<EOF
-#define HAVE_LIBCPOSIX 1
+echo "$as_me:20489: result: $cf_cv_dcl_environ" >&5
+echo "${ECHO_T}$cf_cv_dcl_environ" >&6
+
+if test "$cf_cv_dcl_environ" = no ; then
+
+cf_result=`echo "decl_environ" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+    cat >>confdefs.h <<EOF
+#define $cf_result 1
 EOF
 
-  LIBS="-lcposix $LIBS"
+fi
+
+# It's possible (for near-UNIX clones) that the data doesn't exist
+
+echo "$as_me:20504: checking if external environ exists" >&5
+echo $ECHO_N "checking if external environ exists... $ECHO_C" >&6
+if test "${cf_cv_have_environ+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 20511 "configure"
+#include "confdefs.h"
+
+#undef environ
+extern int environ;
+
+int
+main (void)
+{
+environ = 2
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:20526: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:20529: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:20532: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:20535: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_have_environ=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_have_environ=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+
+fi
+echo "$as_me:20546: result: $cf_cv_have_environ" >&5
+echo "${ECHO_T}$cf_cv_have_environ" >&6
+
+if test "$cf_cv_have_environ" = yes ; then
+
+cf_result=`echo "have_environ" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+	cat >>confdefs.h <<EOF
+#define $cf_result 1
+EOF
 
 fi
 
-	echo "$as_me:15532: checking for bzero in -linet" >&5
-echo $ECHO_N "checking for bzero in -linet... $ECHO_C" >&6
-if test "${ac_cv_lib_inet_bzero+set}" = set; then
+echo "$as_me:20559: checking for getenv" >&5
+echo $ECHO_N "checking for getenv... $ECHO_C" >&6
+if test "${ac_cv_func_getenv+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-linet  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 15540 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 20565 "configure"
 #include "confdefs.h"
+#define getenv autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef getenv
 
-/* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
 #endif
+
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char bzero ();
+char getenv (void);
+
 int
-main ()
+main (void)
 {
-bzero ();
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_getenv) || defined (__stub___getenv)
+#error found stub for getenv
+#endif
+
+	return getenv ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:15559: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:20596: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:15562: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:15565: \"$ac_try\"") >&5
+  echo "$as_me:20599: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:20602: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15568: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  ac_cv_lib_inet_bzero=yes
+  echo "$as_me:20605: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_func_getenv=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_cv_lib_inet_bzero=no
+cat "conftest.$ac_ext" >&5
+ac_cv_func_getenv=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:15579: result: $ac_cv_lib_inet_bzero" >&5
-echo "${ECHO_T}$ac_cv_lib_inet_bzero" >&6
-if test $ac_cv_lib_inet_bzero = yes; then
+echo "$as_me:20615: result: $ac_cv_func_getenv" >&5
+echo "${ECHO_T}$ac_cv_func_getenv" >&6
 
-cf_add_libs="-linet"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
+for ac_func in putenv setenv strdup
 do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
-			cf_add_1lib=
-			break
-		fi
-	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:20621: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 20627 "configure"
+#include "confdefs.h"
+#define $ac_func autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#error found stub for $ac_func
+#endif
+
+	return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:20658: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:20661: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:20664: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:20667: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_var=no"
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:20677: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+EOF
+
+fi
 done
-LIBS="$cf_add_libs"
 
+echo "$as_me:20687: checking if getenv returns consistent values" >&5
+echo $ECHO_N "checking if getenv returns consistent values... $ECHO_C" >&6
+if test "${cf_cv_consistent_getenv+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+if test "$cross_compiling" = yes; then
+  cf_cv_consistent_getenv=unknown
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 20697 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(HAVE_ENVIRON) && defined(DECL_ENVIRON) && !defined(environ)
+extern char **environ;	/* POSIX, but some systems are not... */
+#endif
+
+#if defined(HAVE_STRDUP)
+#define str_alloc(s) strdup(s)
+#else
+#define str_alloc(s) strcpy(malloc(strlen(s) + 1, s))
+#endif
+
+static void set_value(const char *name, const char *value)
+{
+#if defined(HAVE_SETENV)
+	setenv(name, value, 1);
+#elif defined(HAVE_PUTENV)
+	char buffer[1024];
+	sprintf(buffer, "%s=%s", name, value);
+	putenv(str_alloc(buffer));
+#else
+#error neither putenv/setenv found
+#endif
+}
+int main(void)
+{
+	int pass;
+	size_t numenv, limit, j;
+	char **mynames;
+	char **myvalues;
+	char **mypointer;
+	char *equals;
+	for (numenv = 0; environ[numenv]; ++numenv) ;
+	limit = numenv + 10;
+	mynames = (char **) calloc(limit + 1, sizeof(char *));
+	myvalues = (char **) calloc(limit + 1, sizeof(char *));
+	mypointer = (char **) calloc(limit + 1, sizeof(char *));
+#if defined(HAVE_ENVIRON)
+	for (j = 0; environ[j]; ++j) {
+		mynames[j] = str_alloc(environ[j]);
+		equals = strchr(mynames[j], '=');
+		if (equals != 0) {
+			*equals++ = '\\0';
+			myvalues[j] = str_alloc(equals);
+		} else {
+			myvalues[j] = str_alloc("");
+		}
+	}
+#endif
+	for (j = numenv; j < limit; ++j) {
+		char name[80];
+		char value[80];
+		size_t found;
+		size_t k = 0;
+		do {
+			size_t jk;
+			found = 0;
+			sprintf(name, "TERM%lu", (unsigned long) k);
+			for (jk = 0; jk < j; ++jk) {
+				if (!strcmp(name, mynames[jk])) {
+					found = 1;
+					++k;
+					break;
+				}
+			}
+		} while (found);
+		sprintf(value, "%lu:%p", (unsigned long) k, (void*)&mynames[j]);
+		set_value(name, value);
+		mynames[j] = str_alloc(name);
+		myvalues[j] = str_alloc(value);
+	}
+	for (pass = 0; pass < 3; ++pass) {
+		for (j = 0; j < limit; ++j) {
+			char *value = getenv(mynames[j]);
+			if (pass) {
+				if (value == 0) {
+					fprintf(stderr, "getenv returned null for %s\\n", mynames[j]);
+					${cf_cv_main_return:-return}(1);
+				} else if (value != mypointer[j]) {
+					fprintf(stderr, "getenv returned different pointer for %s\\n", mynames[j]);
+					${cf_cv_main_return:-return}(1);
+				} else if (strcmp(value, myvalues[j])) {
+					fprintf(stderr, "getenv returned different value for %s\\n", mynames[j]);
+					${cf_cv_main_return:-return}(1);
+				}
+			} else {
+				size_t k;
+				mypointer[j] = value;
+				for (k = 0; k < j; ++k) {
+					if (mypointer[j] == mypointer[k]) {
+						fprintf(stderr, "getenv returned same pointer for %s and %s\\n", mynames[j], mynames[k]);
+						${cf_cv_main_return:-return}(1);
+					}
+				}
+			}
+		}
+	}
+	${cf_cv_main_return:-return}(0);
+}
+
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:20802: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:20805: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:20807: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:20810: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_consistent_getenv=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_consistent_getenv=no
 fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 
-echo "$as_me:15602: checking if sys/time.h works with sys/select.h" >&5
+fi
+echo "$as_me:20823: result: $cf_cv_consistent_getenv" >&5
+echo "${ECHO_T}$cf_cv_consistent_getenv" >&6
+
+if test "x$cf_cv_consistent_getenv" = xno
+then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_CONSISTENT_GETENV 1
+EOF
+
+fi
+
+if test "x$cf_cv_consistent_getenv" = xno && \
+	test "x$cf_with_trace" = xyes
+then
+	{ echo "$as_me:20838: WARNING: The NCURSES_TRACE environment variable is not supported with this configuration" >&5
+echo "$as_me: WARNING: The NCURSES_TRACE environment variable is not supported with this configuration" >&2;}
+fi
+
+echo "$as_me:20842: checking if sys/time.h works with sys/select.h" >&5
 echo $ECHO_N "checking if sys/time.h works with sys/select.h... $ECHO_C" >&6
 if test "${cf_cv_sys_time_select+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 15609 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 20849 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -15618,36 +20858,36 @@
 #endif
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:15629: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20869: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:15632: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:15635: \"$ac_try\"") >&5
+  echo "$as_me:20872: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:20875: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15638: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:20878: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_sys_time_select=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_sys_time_select=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
 
-echo "$as_me:15650: result: $cf_cv_sys_time_select" >&5
+echo "$as_me:20890: result: $cf_cv_sys_time_select" >&5
 echo "${ECHO_T}$cf_cv_sys_time_select" >&6
 test "$cf_cv_sys_time_select" = yes &&
 cat >>confdefs.h <<\EOF
@@ -15657,34 +20897,34 @@
 ###	checks for compiler characteristics
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CC -o "conftest$ac_exeext" $CFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
-echo "$as_me:15665: checking for an ANSI C-conforming const" >&5
+echo "$as_me:20905: checking for an ANSI C-conforming const" >&5
 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
 if test "${ac_cv_c_const+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 15671 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 20911 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
 /* FIXME: Include the comments suggested by Paul. */
 #ifndef __cplusplus
   /* Ultrix mips cc rejects this.  */
   typedef int charset[2];
-  const charset x;
+  const charset x; (void)x;
   /* SunOS 4.1.1 cc rejects this.  */
   char const *const *ccp;
   char **p;
   /* NEC SVR4.0.2 mips cc rejects this.  */
   struct point {int x, y;};
-  static struct point const zero = {0,0};
+  static struct point const zero = {0,0}; (void)zero;
   /* AIX XL C 1.02.0.0 rejects this.
      It does not let you subtract one const X* pointer from another in
      an arm of an if-expression whose if-part is not a constant
@@ -15700,16 +20940,19 @@
     char const *s = 0 ? (char *) 0 : (char const *) 0;
 
     *t++ = 0;
+	(void)s;
   }
   { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
     int x[] = {25, 17};
     const int *foo = &x[0];
     ++foo;
+	(void)foo;
   }
   { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
     typedef const int *iptr;
     iptr p = 0;
     ++p;
+	(void)p;
   }
   { /* AIX XL C 1.02.0.0 rejects this saying
        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
@@ -15718,6 +20961,7 @@
   }
   { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
     const int foo = 10;
+	(void)foo;
   }
 #endif
 
@@ -15725,27 +20969,27 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:15729: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:20973: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:15732: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:15735: \"$ac_try\"") >&5
+  echo "$as_me:20976: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:20979: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15738: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:20982: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_c_const=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_c_const=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:15748: result: $ac_cv_c_const" >&5
+echo "$as_me:20992: result: $ac_cv_c_const" >&5
 echo "${ECHO_T}$ac_cv_c_const" >&6
 if test $ac_cv_c_const = no; then
 
@@ -15755,44 +20999,44 @@
 
 fi
 
-echo "$as_me:15758: checking for inline" >&5
+echo "$as_me:21002: checking for inline" >&5
 echo $ECHO_N "checking for inline... $ECHO_C" >&6
 if test "${ac_cv_c_inline+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
-  cat >conftest.$ac_ext <<_ACEOF
-#line 15766 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 21010 "configure"
 #include "confdefs.h"
 #ifndef __cplusplus
-static $ac_kw int static_foo () {return 0; }
-$ac_kw int foo () {return 0; }
+static $ac_kw int static_foo (void) {return 0; }
+$ac_kw int foo (void) {return 0; }
 #endif
 
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:15775: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21019: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:15778: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:15781: \"$ac_try\"") >&5
+  echo "$as_me:21022: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:21025: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15784: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:21028: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_c_inline=$ac_kw; break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 done
 
 fi
-echo "$as_me:15795: result: $ac_cv_c_inline" >&5
+echo "$as_me:21039: result: $ac_cv_c_inline" >&5
 echo "${ECHO_T}$ac_cv_c_inline" >&6
 case $ac_cv_c_inline in
   inline | yes) ;;
@@ -15818,7 +21062,7 @@
 		:
 	elif test "$GCC" = yes
 	then
-		echo "$as_me:15821: checking if $CC supports options to tune inlining" >&5
+		echo "$as_me:21065: checking if $CC supports options to tune inlining" >&5
 echo $ECHO_N "checking if $CC supports options to tune inlining... $ECHO_C" >&6
 if test "${cf_cv_gcc_inline+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -15826,41 +21070,41 @@
 
 		cf_save_CFLAGS=$CFLAGS
 		CFLAGS="$CFLAGS --param max-inline-insns-single=1200"
-		cat >conftest.$ac_ext <<_ACEOF
-#line 15830 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 21074 "configure"
 #include "confdefs.h"
 inline int foo(void) { return 1; }
 int
-main ()
+main (void)
 {
 ${cf_cv_main_return:-return} foo()
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:15842: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21086: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:15845: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:15848: \"$ac_try\"") >&5
+  echo "$as_me:21089: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:21092: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15851: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:21095: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_gcc_inline=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_gcc_inline=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 		CFLAGS=$cf_save_CFLAGS
 
 fi
-echo "$as_me:15863: result: $cf_cv_gcc_inline" >&5
+echo "$as_me:21107: result: $cf_cv_gcc_inline" >&5
 echo "${ECHO_T}$cf_cv_gcc_inline" >&6
 		if test "$cf_cv_gcc_inline" = yes ; then
 
@@ -15871,23 +21115,29 @@
 
 for cf_add_cflags in --param max-inline-insns-single=1200
 do
-case $cf_fix_cppflags in
+case "$cf_fix_cppflags" in
 (no)
-	case $cf_add_cflags in
+	case "$cf_add_cflags" in
 	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
+		case "$cf_add_cflags" in
 		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+			cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
 
 			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 				&& test -z "${cf_tst_cflags}" \
 				&& cf_fix_cppflags=yes
 
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+			if test "$cf_fix_cppflags" = yes ; then
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
 				continue
 			fi
 			;;
@@ -15896,7 +21146,7 @@
 		(*$cf_add_cflags)
 			;;
 		(*)
-			case $cf_add_cflags in
+			case "$cf_add_cflags" in
 			(-D*)
 				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
 
@@ -15906,19 +21156,27 @@
 
 				;;
 			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
+
+	test -n "$cf_new_cppflags" && cf_new_cppflags="$cf_new_cppflags "
+	cf_new_cppflags="${cf_new_cppflags}$cf_add_cflags"
+
 			;;
 		esac
 		;;
 	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
+
+	test -n "$cf_new_cflags" && cf_new_cflags="$cf_new_cflags "
+	cf_new_cflags="${cf_new_cflags}$cf_add_cflags"
+
 		;;
 	esac
 	;;
 (yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
 
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+	test -n "$cf_new_extra_cppflags" && cf_new_extra_cppflags="$cf_new_extra_cppflags "
+	cf_new_extra_cppflags="${cf_new_extra_cppflags}$cf_add_cflags"
+
+	cf_tst_cflags=`echo "${cf_add_cflags}" |sed -e 's/^[^"]*"'\''//'`
 
 	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
 		&& test -z "${cf_tst_cflags}" \
@@ -15929,24 +21187,30 @@
 
 if test -n "$cf_new_cflags" ; then
 
-	CFLAGS="$CFLAGS $cf_new_cflags"
+	test -n "$CFLAGS" && CFLAGS="$CFLAGS "
+	CFLAGS="${CFLAGS}$cf_new_cflags"
+
 fi
 
 if test -n "$cf_new_cppflags" ; then
 
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}$cf_new_cppflags"
+
 fi
 
 if test -n "$cf_new_extra_cppflags" ; then
 
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+	test -n "$EXTRA_CPPFLAGS" && EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS "
+	EXTRA_CPPFLAGS="${EXTRA_CPPFLAGS}$cf_new_extra_cppflags"
+
 fi
 
 		fi
 	fi
 fi
 
-echo "$as_me:15949: checking for signal global datatype" >&5
+echo "$as_me:21213: checking for signal global datatype" >&5
 echo $ECHO_N "checking for signal global datatype... $ECHO_C" >&6
 if test "${cf_cv_sig_atomic_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -15957,8 +21221,8 @@
 		"sig_atomic_t" \
 		"int"
 	do
-	cat >conftest.$ac_ext <<_ACEOF
-#line 15961 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 21225 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -15969,10 +21233,11 @@
 $cf_type x;
 static void handler(int sig)
 {
+	(void)sig;
 	x = 5;
 }
 int
-main ()
+main (void)
 {
 signal(SIGINT, handler);
 		 x = 1
@@ -15980,40 +21245,40 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:15984: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21249: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:15987: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:15990: \"$ac_try\"") >&5
+  echo "$as_me:21252: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:21255: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:15993: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:21258: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_sig_atomic_t=$cf_type
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_sig_atomic_t=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 		test "$cf_cv_sig_atomic_t" != no && break
 	done
 
 fi
 
-echo "$as_me:16007: result: $cf_cv_sig_atomic_t" >&5
+echo "$as_me:21272: result: $cf_cv_sig_atomic_t" >&5
 echo "${ECHO_T}$cf_cv_sig_atomic_t" >&6
 test "$cf_cv_sig_atomic_t" != no &&
 cat >>confdefs.h <<EOF
 #define SIG_ATOMIC_T $cf_cv_sig_atomic_t
 EOF
 
-if test $NCURSES_CHTYPE = auto ; then
+if test "$NCURSES_CHTYPE" = auto ; then
 
-echo "$as_me:16016: checking for type of chtype" >&5
+echo "$as_me:21281: checking for type of chtype" >&5
 echo $ECHO_N "checking for type of chtype... $ECHO_C" >&6
 if test "${cf_cv_typeof_chtype+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -16022,13 +21287,13 @@
 		if test "$cross_compiling" = yes; then
   cf_cv_typeof_chtype=long
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 16026 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 21291 "configure"
 #include "confdefs.h"
 
+$ac_includes_default
 #define WANT_BITS 31
-#include <stdio.h>
-int main()
+int main(void)
 {
 	FILE *fp = fopen("cf_test.out", "w");
 	if (fp != 0) {
@@ -16057,31 +21322,31 @@
 }
 
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:16061: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:21326: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:16064: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:16066: \"$ac_try\"") >&5
+  echo "$as_me:21329: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:21331: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16069: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:21334: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_typeof_chtype=`cat cf_test.out`
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_typeof_chtype=long
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 		rm -f cf_test.out
 
 fi
 
-echo "$as_me:16084: result: $cf_cv_typeof_chtype" >&5
+echo "$as_me:21349: result: $cf_cv_typeof_chtype" >&5
 echo "${ECHO_T}$cf_cv_typeof_chtype" >&6
 
 cat >>confdefs.h <<EOF
@@ -16093,54 +21358,54 @@
 fi
 test "$cf_cv_typeof_chtype" = unsigned && cf_cv_typeof_chtype=""
 
-echo "$as_me:16096: checking if unsigned literals are legal" >&5
+echo "$as_me:21361: checking if unsigned literals are legal" >&5
 echo $ECHO_N "checking if unsigned literals are legal... $ECHO_C" >&6
 if test "${cf_cv_unsigned_literals+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 16103 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 21368 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
-long x = 1L + 1UL + 1U + 1
+long x = 1L + 1UL + 1U + 1; (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:16115: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21380: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:16118: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:16121: \"$ac_try\"") >&5
+  echo "$as_me:21383: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:21386: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16124: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:21389: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_unsigned_literals=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_unsigned_literals=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
 
-echo "$as_me:16136: result: $cf_cv_unsigned_literals" >&5
+echo "$as_me:21401: result: $cf_cv_unsigned_literals" >&5
 echo "${ECHO_T}$cf_cv_unsigned_literals" >&6
 
 cf_cv_1UL="1"
 test ".$cf_cv_unsigned_literals" = .yes && cf_cv_1UL="${cf_cv_1UL}U"
 test ".$cf_cv_typeof_chtype"    = .long && cf_cv_1UL="${cf_cv_1UL}L"
 
-if test $NCURSES_MMASK_T = auto ; then
+if test "$NCURSES_MMASK_T" = auto ; then
 	cf_cv_typeof_mmask_t=long
 else
 	cf_cv_typeof_mmask_t=$NCURSES_MMASK_T
@@ -16149,52 +21414,48 @@
 
 ###	Checks for external-data
 
-echo "$as_me:16152: checking if external errno is declared" >&5
+echo "$as_me:21417: checking if external errno is declared" >&5
 echo $ECHO_N "checking if external errno is declared... $ECHO_C" >&6
 if test "${cf_cv_dcl_errno+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 16159 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 21424 "configure"
 #include "confdefs.h"
 
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <sys/types.h>
+$ac_includes_default
 #include <errno.h>
 int
-main ()
+main (void)
 {
-int x = (int) errno
+int x = (int) errno; (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:16177: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21438: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:16180: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:16183: \"$ac_try\"") >&5
+  echo "$as_me:21441: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:21444: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16186: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:21447: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_dcl_errno=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_dcl_errno=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:16197: result: $cf_cv_dcl_errno" >&5
+echo "$as_me:21458: result: $cf_cv_dcl_errno" >&5
 echo "${ECHO_T}$cf_cv_dcl_errno" >&6
 
 if test "$cf_cv_dcl_errno" = no ; then
@@ -16209,49 +21470,49 @@
 
 # It's possible (for near-UNIX clones) that the data doesn't exist
 
-echo "$as_me:16212: checking if external errno exists" >&5
+echo "$as_me:21473: checking if external errno exists" >&5
 echo $ECHO_N "checking if external errno exists... $ECHO_C" >&6
 if test "${cf_cv_have_errno+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 16219 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 21480 "configure"
 #include "confdefs.h"
 
 #undef errno
 extern int errno;
 
 int
-main ()
+main (void)
 {
 errno = 2
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16234: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21495: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:16237: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:16240: \"$ac_try\"") >&5
+  echo "$as_me:21498: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:21501: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16243: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:21504: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_have_errno=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_have_errno=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:16254: result: $cf_cv_have_errno" >&5
+echo "$as_me:21515: result: $cf_cv_have_errno" >&5
 echo "${ECHO_T}$cf_cv_have_errno" >&6
 
 if test "$cf_cv_have_errno" = yes ; then
@@ -16264,7 +21525,7 @@
 
 fi
 
-echo "$as_me:16267: checking if data-only library module links" >&5
+echo "$as_me:21528: checking if data-only library module links" >&5
 echo $ECHO_N "checking if data-only library module links... $ECHO_C" >&6
 if test "${cf_cv_link_dataonly+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -16272,37 +21533,41 @@
 
 	rm -f conftest.a
 	cat >conftest.$ac_ext <<EOF
-#line 16275 "configure"
+#line 21536 "configure"
 int	testdata[3] = { 123, 456, 789 };
 EOF
-	if { (eval echo "$as_me:16278: \"$ac_compile\"") >&5
+	if { (eval echo "$as_me:21539: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:16281: \$? = $ac_status" >&5
-  (exit $ac_status); } ; then
+  echo "$as_me:21542: \$? = $ac_status" >&5
+  (exit "$ac_status"); } ; then
 		mv conftest.o data.o && \
 		( $AR $ARFLAGS conftest.a data.o ) 2>&5 1>/dev/null
 	fi
 	rm -f conftest.$ac_ext data.o
 	cat >conftest.$ac_ext <<EOF
-#line 16288 "configure"
-int	testfunc()
-{
+#line 21549 "configure"
+extern int testfunc(void);
 #if defined(NeXT)
+int	testfunc(void)
+{
 	${cf_cv_main_return:-return}(1);	/* I'm told this linker is broken */
+}
 #else
-	extern int testdata[3];
+extern int testdata[3];
+int	testfunc(void)
+{
 	return testdata[0] == 123
 	   &&  testdata[1] == 456
 	   &&  testdata[2] == 789;
-#endif
 }
+#endif
 EOF
-	if { (eval echo "$as_me:16301: \"$ac_compile\"") >&5
+	if { (eval echo "$as_me:21566: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:16304: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
+  echo "$as_me:21569: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; then
 		mv conftest.o func.o && \
 		( $AR $ARFLAGS conftest.a func.o ) 2>&5 1>/dev/null
 	fi
@@ -16313,42 +21578,42 @@
 	if test "$cross_compiling" = yes; then
   cf_cv_link_dataonly=unknown
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 16317 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 21582 "configure"
 #include "confdefs.h"
 
-	int main()
+	extern int testfunc(void);
+	int main(void)
 	{
-		extern int testfunc();
 		${cf_cv_main_return:-return} (!testfunc());
 	}
 
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:16328: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:21593: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:16331: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:16333: \"$ac_try\"") >&5
+  echo "$as_me:21596: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:21598: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16336: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:21601: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_link_dataonly=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_link_dataonly=no
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 	LIBS="$cf_saveLIBS"
 
 fi
 
-echo "$as_me:16351: result: $cf_cv_link_dataonly" >&5
+echo "$as_me:21616: result: $cf_cv_link_dataonly" >&5
 echo "${ECHO_T}$cf_cv_link_dataonly" >&6
 
 if test "$cf_cv_link_dataonly" = no ; then
@@ -16362,90 +21627,288 @@
 
 ###	Checks for library functions.
 
-for ac_func in \
-getcwd \
-getegid \
-geteuid \
-getopt \
-getttynam \
-issetugid \
-poll \
-putenv \
-remove \
-select \
-setbuf \
-setbuffer \
-setenv \
-setvbuf \
-sigaction \
-sigvec \
-strdup \
-strstr \
-tcgetpgrp \
-times \
-vsnprintf \
-
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:16390: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
-if eval "test \"\${$as_ac_var+set}\" = set"; then
+echo "$as_me:21630: checking for clock_gettime" >&5
+echo $ECHO_N "checking for clock_gettime... $ECHO_C" >&6
+if test "${cf_cv_func_clock_gettime+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 16396 "configure"
+
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 21637 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.  */
-#include <assert.h>
+#include <time.h>
+int
+main (void)
+{
+struct timespec ts;
+		int rc = clock_gettime(CLOCK_REALTIME, &ts); (void) rc; (void)ts
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21650: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:21653: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:21656: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:21659: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_func_clock_gettime=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_func_clock_gettime=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+
+fi
+echo "$as_me:21670: result: $cf_cv_func_clock_gettime" >&5
+echo "${ECHO_T}$cf_cv_func_clock_gettime" >&6
+
+if test "$cf_cv_func_clock_gettime" = yes
+then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_CLOCK_GETTIME 1
+EOF
+
+else
+echo "$as_me:21681: checking for gettimeofday" >&5
+echo $ECHO_N "checking for gettimeofday... $ECHO_C" >&6
+if test "${ac_cv_func_gettimeofday+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 21687 "configure"
+#include "confdefs.h"
+#define gettimeofday autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef gettimeofday
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char gettimeofday (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_gettimeofday) || defined (__stub___gettimeofday)
+#error found stub for gettimeofday
+#endif
+
+	return gettimeofday ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21718: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:21721: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:21724: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:21727: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_func_gettimeofday=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_func_gettimeofday=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:21737: result: $ac_cv_func_gettimeofday" >&5
+echo "${ECHO_T}$ac_cv_func_gettimeofday" >&6
+if test "$ac_cv_func_gettimeofday" = yes; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_GETTIMEOFDAY 1
+EOF
+
+else
+
+echo "$as_me:21747: checking for gettimeofday in -lbsd" >&5
+echo $ECHO_N "checking for gettimeofday in -lbsd... $ECHO_C" >&6
+if test "${ac_cv_lib_bsd_gettimeofday+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 21755 "configure"
+#include "confdefs.h"
+
 /* Override any gcc2 internal prototype to avoid an error.  */
 #ifdef __cplusplus
 extern "C"
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-char (*f) ();
-
+char gettimeofday (void);
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
-#endif
-
+gettimeofday ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16427: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21774: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:16430: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:16433: \"$ac_try\"") >&5
+  echo "$as_me:21777: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:21780: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16436: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:21783: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_lib_bsd_gettimeofday=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_lib_bsd_gettimeofday=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:21794: result: $ac_cv_lib_bsd_gettimeofday" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_gettimeofday" >&6
+if test "$ac_cv_lib_bsd_gettimeofday" = yes; then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_GETTIMEOFDAY 1
+EOF
+
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lbsd; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
+			cf_add_1lib=
+			break
+		fi
+	done
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
+done
+LIBS="$cf_add_libs"
+
+fi
+
+fi
+fi
+
+for ac_func in \
+fpathconf \
+getcwd \
+getauxval \
+getegid \
+geteuid \
+getopt \
+getuid \
+issetugid \
+localeconv \
+poll \
+remove \
+select \
+setbuf \
+setbuffer \
+setfsuid \
+setvbuf \
+sigaction \
+sigvec \
+snprintf \
+strdup \
+strstr \
+sysconf \
+tcgetpgrp \
+times \
+tsearch \
+vsnprintf \
+
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:21853: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 21859 "configure"
+#include "confdefs.h"
+#define $ac_func autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#error found stub for $ac_func
+#endif
+
+	return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:21890: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:21893: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:21896: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:21899: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 eval "$as_ac_var=no"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:16446: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+echo "$as_me:21909: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
 EOF
@@ -16453,28 +21916,207 @@
 fi
 done
 
-if test "x$ac_cv_func_getopt" = xno &&
+echo "$as_me:21919: checking if _PATH_TTYS is defined in ttyent.h" >&5
+echo $ECHO_N "checking if _PATH_TTYS is defined in ttyent.h... $ECHO_C" >&6
+if test "${cf_cv_PATH_TTYS+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 21926 "configure"
+#include "confdefs.h"
+
+#include <stdio.h>
+#include <ttyent.h>
+int
+main (void)
+{
+
+FILE *fp = fopen(_PATH_TTYS, "r"); (void)fp
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:21941: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:21944: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:21947: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:21950: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_PATH_TTYS=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_PATH_TTYS=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:21960: result: $cf_cv_PATH_TTYS" >&5
+echo "${ECHO_T}$cf_cv_PATH_TTYS" >&6
+
+if test $cf_cv_PATH_TTYS = no
+then
+	for cf_ttys in /etc/ttytype /etc/ttys
+	do
+		if test -f $cf_ttys
+		then
+			cf_cv_PATH_TTYS=maybe
+
+cat >>confdefs.h <<\EOF
+#define _PATH_TTYS $cf_ttys
+EOF
+
+			break
+		fi
+	done
+fi
+
+if test $cf_cv_PATH_TTYS != no
+then
+	echo "$as_me:21982: checking if _PATH_TTYS file exists" >&5
+echo $ECHO_N "checking if _PATH_TTYS file exists... $ECHO_C" >&6
+if test "${cf_cv_have_PATH_TTYS+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+		if test "$cross_compiling" = yes; then
+  cf_cv_have_PATH_TTYS=unknown
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 21992 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#include <ttyent.h>
+
+int main(void) {
+	FILE *fp = fopen(_PATH_TTYS, "r");
+	${cf_cv_main_return:-return} (fp == 0);
+}
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:22005: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:22008: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:22010: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:22013: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_have_PATH_TTYS=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_have_PATH_TTYS=no
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+fi
+echo "$as_me:22025: result: $cf_cv_have_PATH_TTYS" >&5
+echo "${ECHO_T}$cf_cv_have_PATH_TTYS" >&6
+	test "$cf_cv_have_PATH_TTYS" = no && cf_cv_PATH_TTYS=no
+fi
+
+if test $cf_cv_PATH_TTYS != no
+then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_PATH_TTYS 1
+EOF
+
+	echo "$as_me:22037: checking for getttynam" >&5
+echo $ECHO_N "checking for getttynam... $ECHO_C" >&6
+if test "${cf_cv_func_getttynam+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 22044 "configure"
+#include "confdefs.h"
+#include <ttyent.h>
+int
+main (void)
+{
+struct ttyent *fp = getttynam("/dev/tty"); (void)fp
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22056: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:22059: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:22062: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:22065: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_func_getttynam=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_func_getttynam=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:22075: result: $cf_cv_func_getttynam" >&5
+echo "${ECHO_T}$cf_cv_func_getttynam" >&6
+	test "$cf_cv_func_getttynam" = yes && cat >>confdefs.h <<\EOF
+#define HAVE_GETTTYNAM 1
+EOF
+
+fi
+
+if test "x$ac_cv_func_getopt" = xno && \
    test "x$cf_with_progs$cf_with_tests" != xnono; then
-	{ { echo "$as_me:16458: error: getopt is required for building programs" >&5
+	{ { echo "$as_me:22085: error: getopt is required for building programs" >&5
 echo "$as_me: error: getopt is required for building programs" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
+if test "x$with_safe_sprintf" = xyes
+then
+	if test "x$ac_cv_func_vsnprintf" = xyes
+	then
+		{ echo "$as_me:22094: WARNING: will use vsnprintf instead of safe-sprintf option" >&5
+echo "$as_me: WARNING: will use vsnprintf instead of safe-sprintf option" >&2;}
+	else
+
+cat >>confdefs.h <<\EOF
+#define USE_SAFE_SPRINTF 1
+EOF
+
+	fi
+fi
+
 if test "x$with_getcap" = "xyes" ; then
 
-echo "$as_me:16465: checking for terminal-capability database functions" >&5
+echo "$as_me:22107: checking for terminal-capability database functions" >&5
 echo $ECHO_N "checking for terminal-capability database functions... $ECHO_C" >&6
 if test "${cf_cv_cgetent+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 16472 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22114 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
+$ac_includes_default
 int
-main ()
+main (void)
 {
 
 	char temp[128];
@@ -16488,28 +22130,28 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16492: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22134: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:16495: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:16498: \"$ac_try\"") >&5
+  echo "$as_me:22137: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:22140: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16501: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22143: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_cgetent=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_cgetent=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:16512: result: $cf_cv_cgetent" >&5
+echo "$as_me:22154: result: $cf_cv_cgetent" >&5
 echo "${ECHO_T}$cf_cv_cgetent" >&6
 
 if test "$cf_cv_cgetent" = yes
@@ -16519,19 +22161,20 @@
 #define HAVE_BSD_CGETENT 1
 EOF
 
-echo "$as_me:16522: checking if cgetent uses const parameter" >&5
+echo "$as_me:22164: checking if cgetent uses const parameter" >&5
 echo $ECHO_N "checking if cgetent uses const parameter... $ECHO_C" >&6
 if test "${cf_cv_cgetent_const+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 16529 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22171 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
+#pragma GCC diagnostic error "-Wincompatible-pointer-types-discards-qualifiers"
+$ac_includes_default
 int
-main ()
+main (void)
 {
 
 	char temp[128];
@@ -16547,28 +22190,28 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16551: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22194: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:16554: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:16557: \"$ac_try\"") >&5
+  echo "$as_me:22197: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:22200: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16560: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22203: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_cgetent_const=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_cgetent_const=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:16571: result: $cf_cv_cgetent_const" >&5
+echo "$as_me:22214: result: $cf_cv_cgetent_const" >&5
 echo "${ECHO_T}$cf_cv_cgetent_const" >&6
 	if test "$cf_cv_cgetent_const" = yes
 	then
@@ -16582,46 +22225,46 @@
 
 fi
 
-echo "$as_me:16585: checking for isascii" >&5
+echo "$as_me:22228: checking for isascii" >&5
 echo $ECHO_N "checking for isascii... $ECHO_C" >&6
 if test "${cf_cv_have_isascii+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 16592 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 22235 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 int
-main ()
+main (void)
 {
-int x = isascii(' ')
+int x = isascii(' '); (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16604: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22247: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:16607: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:16610: \"$ac_try\"") >&5
+  echo "$as_me:22250: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:22253: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16613: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22256: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_have_isascii=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_have_isascii=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 
 fi
-echo "$as_me:16624: result: $cf_cv_have_isascii" >&5
+echo "$as_me:22267: result: $cf_cv_have_isascii" >&5
 echo "${ECHO_T}$cf_cv_have_isascii" >&6
 test "$cf_cv_have_isascii" = yes &&
 cat >>confdefs.h <<\EOF
@@ -16629,66 +22272,66 @@
 EOF
 
 if test "$ac_cv_func_sigaction" = yes; then
-echo "$as_me:16632: checking whether sigaction needs _POSIX_SOURCE" >&5
+echo "$as_me:22275: checking whether sigaction needs _POSIX_SOURCE" >&5
 echo $ECHO_N "checking whether sigaction needs _POSIX_SOURCE... $ECHO_C" >&6
-cat >conftest.$ac_ext <<_ACEOF
-#line 16635 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22278 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
 #include <signal.h>
 int
-main ()
+main (void)
 {
-struct sigaction act
+struct sigaction act; (void)act
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:16649: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:22292: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:16652: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:16655: \"$ac_try\"") >&5
+  echo "$as_me:22295: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:22298: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16658: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22301: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   sigact_bad=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 16666 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22309 "configure"
 #include "confdefs.h"
 
 #define _POSIX_SOURCE
 #include <sys/types.h>
 #include <signal.h>
 int
-main ()
+main (void)
 {
-struct sigaction act
+struct sigaction act; (void)act
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:16681: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:22324: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:16684: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:16687: \"$ac_try\"") >&5
+  echo "$as_me:22327: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:22330: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16690: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22333: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   sigact_bad=yes
 
 cat >>confdefs.h <<\EOF
@@ -16697,17 +22340,17 @@
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 sigact_bad=unknown
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-echo "$as_me:16706: result: $sigact_bad" >&5
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+echo "$as_me:22349: result: $sigact_bad" >&5
 echo "${ECHO_T}$sigact_bad" >&6
 fi
 
-echo "$as_me:16710: checking if nanosleep really works" >&5
+echo "$as_me:22353: checking if nanosleep really works" >&5
 echo $ECHO_N "checking if nanosleep really works... $ECHO_C" >&6
 if test "${cf_cv_func_nanosleep+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -16716,11 +22359,12 @@
 if test "$cross_compiling" = yes; then
   cf_cv_func_nanosleep=unknown
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 16720 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 22363 "configure"
 #include "confdefs.h"
 
-#include <stdio.h>
+$ac_includes_default
+
 #include <errno.h>
 #include <time.h>
 
@@ -16728,7 +22372,7 @@
 #include <sys/time.h>
 #endif
 
-int main() {
+int main(void) {
 	struct timespec ts1, ts2;
 	int code;
 	ts1.tv_sec  = 0;
@@ -16741,28 +22385,28 @@
 }
 
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:16745: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:22389: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:16748: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:16750: \"$ac_try\"") >&5
+  echo "$as_me:22392: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:22394: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16753: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22397: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_func_nanosleep=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_func_nanosleep=no
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 fi
-echo "$as_me:16765: result: $cf_cv_func_nanosleep" >&5
+echo "$as_me:22409: result: $cf_cv_func_nanosleep" >&5
 echo "${ECHO_T}$cf_cv_func_nanosleep" >&6
 
 test "$cf_cv_func_nanosleep" = "yes" &&
@@ -16774,27 +22418,29 @@
 termio.h \
 termios.h \
 unistd.h \
+sys/ioctl.h \
+sys/termio.h \
 
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:16780: checking for $ac_header" >&5
+echo "$as_me:22426: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 16786 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 22432 "configure"
 #include "confdefs.h"
 #include <$ac_header>
 _ACEOF
-if { (eval echo "$as_me:16790: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:22436: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:16796: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:22442: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -16807,14 +22453,14 @@
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   eval "$as_ac_Header=no"
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 fi
-echo "$as_me:16815: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+echo "$as_me:22461: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 EOF
@@ -16822,57 +22468,6 @@
 fi
 done
 
-if test "$ISC" = yes ; then
-
-for ac_header in sys/termio.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:16830: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 16836 "configure"
-#include "confdefs.h"
-#include <$ac_header>
-_ACEOF
-if { (eval echo "$as_me:16840: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
-  ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:16846: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
-  if test -s conftest.err; then
-    ac_cpp_err=$ac_c_preproc_warn_flag
-  else
-    ac_cpp_err=
-  fi
-else
-  ac_cpp_err=yes
-fi
-if test -z "$ac_cpp_err"; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  eval "$as_ac_Header=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-echo "$as_me:16865: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<EOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-EOF
-
-fi
-done
-
-fi
 if test "$ac_cv_header_termios_h" = yes ; then
 	case "$CFLAGS $CPPFLAGS" in
 	(*-D_POSIX_SOURCE*)
@@ -16880,90 +22475,90 @@
 	(*)	termios_bad=maybe ;;
 	esac
 	if test "$termios_bad" = maybe ; then
-	echo "$as_me:16883: checking whether termios.h needs _POSIX_SOURCE" >&5
+	echo "$as_me:22478: checking whether termios.h needs _POSIX_SOURCE" >&5
 echo $ECHO_N "checking whether termios.h needs _POSIX_SOURCE... $ECHO_C" >&6
-	cat >conftest.$ac_ext <<_ACEOF
-#line 16886 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 22481 "configure"
 #include "confdefs.h"
 #include <termios.h>
 int
-main ()
+main (void)
 {
-struct termios foo; int x = foo.c_iflag
+struct termios foo; int x = (int)(foo.c_iflag = 1); (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:16898: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:22493: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:16901: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:16904: \"$ac_try\"") >&5
+  echo "$as_me:22496: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:22499: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16907: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22502: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   termios_bad=no
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
-		cat >conftest.$ac_ext <<_ACEOF
-#line 16915 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 22510 "configure"
 #include "confdefs.h"
 
 #define _POSIX_SOURCE
 #include <termios.h>
 int
-main ()
+main (void)
 {
-struct termios foo; int x = foo.c_iflag
+struct termios foo; int x = (int)(foo.c_iflag = 2); (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:16929: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:22524: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:16932: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:16935: \"$ac_try\"") >&5
+  echo "$as_me:22527: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:22530: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:16938: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22533: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   termios_bad=unknown
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 termios_bad=yes
 cat >>confdefs.h <<\EOF
 #define _POSIX_SOURCE 1
 EOF
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-	echo "$as_me:16954: result: $termios_bad" >&5
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+	echo "$as_me:22549: result: $termios_bad" >&5
 echo "${ECHO_T}$termios_bad" >&6
 	fi
 fi
 
-echo "$as_me:16959: checking for tcgetattr" >&5
+echo "$as_me:22554: checking for tcgetattr" >&5
 echo $ECHO_N "checking for tcgetattr... $ECHO_C" >&6
 if test "${cf_cv_have_tcgetattr+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 16966 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22561 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -16981,7 +22576,7 @@
 #endif
 
 int
-main ()
+main (void)
 {
 
 TTY foo;
@@ -16990,80 +22585,90 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:16994: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22589: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:16997: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:17000: \"$ac_try\"") >&5
+  echo "$as_me:22592: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:22595: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17003: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22598: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_have_tcgetattr=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_have_tcgetattr=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:17013: result: $cf_cv_have_tcgetattr" >&5
+echo "$as_me:22608: result: $cf_cv_have_tcgetattr" >&5
 echo "${ECHO_T}$cf_cv_have_tcgetattr" >&6
 test "$cf_cv_have_tcgetattr" = yes &&
 cat >>confdefs.h <<\EOF
 #define HAVE_TCGETATTR 1
 EOF
 
-echo "$as_me:17020: checking for vsscanf function or workaround" >&5
+echo "$as_me:22615: checking for vsscanf function or workaround" >&5
 echo $ECHO_N "checking for vsscanf function or workaround... $ECHO_C" >&6
 if test "${cf_cv_func_vsscanf+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 17027 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22622 "configure"
 #include "confdefs.h"
 
 #include <stdarg.h>
 #include <stdio.h>
+
+static void
+myfunc(const char *str, const char *fmt, ...)
+{
+	va_list ap;
+	va_start(ap, fmt);
+	vsscanf(str, fmt, ap);
+	va_end(ap);
+}
+
 int
-main ()
+main (void)
 {
 
-	va_list ap;
-	vsscanf("from", "%d", ap)
+	myfunc("55", "%d");
+
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17043: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22648: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17046: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:17049: \"$ac_try\"") >&5
+  echo "$as_me:22651: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:22654: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17052: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22657: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_func_vsscanf=vsscanf
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 17060 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22665 "configure"
 #include "confdefs.h"
 
 #include <stdarg.h>
 #include <stdio.h>
 int
-main ()
+main (void)
 {
 
 	FILE strbuf;
@@ -17078,31 +22683,31 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17082: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22687: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17085: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:17088: \"$ac_try\"") >&5
+  echo "$as_me:22690: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:22693: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17091: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22696: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_func_vsscanf=vfscanf
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 17099 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 22704 "configure"
 #include "confdefs.h"
 
 #include <stdarg.h>
 #include <stdio.h>
 int
-main ()
+main (void)
 {
 
 	FILE strbuf;
@@ -17117,35 +22722,35 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17121: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22726: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17124: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:17127: \"$ac_try\"") >&5
+  echo "$as_me:22729: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:22732: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17130: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22735: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_func_vsscanf=_doscan
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
 cf_cv_func_vsscanf=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:17145: result: $cf_cv_func_vsscanf" >&5
+echo "$as_me:22750: result: $cf_cv_func_vsscanf" >&5
 echo "${ECHO_T}$cf_cv_func_vsscanf" >&6
 
-case $cf_cv_func_vsscanf in
+case "$cf_cv_func_vsscanf" in
 (vsscanf)
 cat >>confdefs.h <<\EOF
 #define HAVE_VSSCANF 1
@@ -17163,28 +22768,75 @@
 ;;
 esac
 
-echo "$as_me:17166: checking for working mkstemp" >&5
+for ac_header in \
+unistd.h \
+
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:22776: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 22782 "configure"
+#include "confdefs.h"
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:22786: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:22792: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+  cat "conftest.$ac_ext" >&5
+  eval "$as_ac_Header=no"
+fi
+rm -f conftest.err "conftest.$ac_ext"
+fi
+echo "$as_me:22811: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+echo "$as_me:22821: checking for working mkstemp" >&5
 echo $ECHO_N "checking for working mkstemp... $ECHO_C" >&6
 if test "${cf_cv_func_mkstemp+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-rm -rf conftest*
+rm -rf ./conftest*
 if test "$cross_compiling" = yes; then
   cf_cv_func_mkstemp=maybe
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 17177 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 22832 "configure"
 #include "confdefs.h"
 
-#include <sys/types.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/stat.h>
-int main()
+$ac_includes_default
+
+int main(void)
 {
-	char *tmpl = "conftestXXXXXX";
+	static char tmpl[] = "conftestXXXXXX";
 	char name[2][80];
 	int n;
 	int result = 0;
@@ -17211,90 +22863,90 @@
 }
 
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:17215: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:22867: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17218: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:17220: \"$ac_try\"") >&5
+  echo "$as_me:22870: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:22872: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17223: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22875: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_func_mkstemp=yes
 
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_func_mkstemp=no
 
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 
 fi
-echo "$as_me:17238: result: $cf_cv_func_mkstemp" >&5
+echo "$as_me:22890: result: $cf_cv_func_mkstemp" >&5
 echo "${ECHO_T}$cf_cv_func_mkstemp" >&6
 if test "x$cf_cv_func_mkstemp" = xmaybe ; then
-	echo "$as_me:17241: checking for mkstemp" >&5
+	echo "$as_me:22893: checking for mkstemp" >&5
 echo $ECHO_N "checking for mkstemp... $ECHO_C" >&6
 if test "${ac_cv_func_mkstemp+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 17247 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 22899 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char mkstemp (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
+#define mkstemp autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef mkstemp
+
 #ifdef __cplusplus
 extern "C"
 #endif
+
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char mkstemp ();
-char (*f) ();
+char mkstemp (void);
 
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
+
+/* The GNU C library defines stubs for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_mkstemp) || defined (__stub___mkstemp)
-choke me
-#else
-f = mkstemp; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#error found stub for mkstemp
 #endif
 
+	return mkstemp ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17278: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:22930: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17281: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:17284: \"$ac_try\"") >&5
+  echo "$as_me:22933: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:22936: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17287: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:22939: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_func_mkstemp=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_func_mkstemp=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:17297: result: $ac_cv_func_mkstemp" >&5
+echo "$as_me:22949: result: $ac_cv_func_mkstemp" >&5
 echo "${ECHO_T}$ac_cv_func_mkstemp" >&6
 
 fi
@@ -17315,26 +22967,26 @@
 fi
 
 if test "x$cross_compiling" = xyes ; then
-	{ echo "$as_me:17318: WARNING: cross compiling: assume setvbuf params not reversed" >&5
+	{ echo "$as_me:22970: WARNING: cross compiling: assume setvbuf params not reversed" >&5
 echo "$as_me: WARNING: cross compiling: assume setvbuf params not reversed" >&2;}
 else
-	echo "$as_me:17321: checking whether setvbuf arguments are reversed" >&5
+	echo "$as_me:22973: checking whether setvbuf arguments are reversed" >&5
 echo $ECHO_N "checking whether setvbuf arguments are reversed... $ECHO_C" >&6
 if test "${ac_cv_func_setvbuf_reversed+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   if test "$cross_compiling" = yes; then
-  { { echo "$as_me:17327: error: cannot run test program while cross compiling" >&5
+  { { echo "$as_me:22979: error: cannot run test program while cross compiling" >&5
 echo "$as_me: error: cannot run test program while cross compiling" >&2;}
    { (exit 1); exit 1; }; }
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 17332 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 22984 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 /* If setvbuf has the reversed format, exit 0. */
 int
-main ()
+main (void)
 {
   /* This call has the arguments reversed.
      A reversed system may check and see that the address of main
@@ -17342,32 +22994,32 @@
   if (setvbuf(stdout, _IOLBF, (char *) main, BUFSIZ) != 0)
     $ac_main_return(1);
   putc('\r', stdout);
-  $ac_main_return(0);			/* Non-reversed systems segv here.  */
+  $ac_main_return(0);                   /* Non-reversed systems segv here.  */
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:17349: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:23001: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17352: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:17354: \"$ac_try\"") >&5
+  echo "$as_me:23004: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:23006: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17357: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23009: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_func_setvbuf_reversed=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_func_setvbuf_reversed=no
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-rm -f core core.* *.core
+rm -f core ./core.* ./*.core
 fi
-echo "$as_me:17370: result: $ac_cv_func_setvbuf_reversed" >&5
+echo "$as_me:23022: result: $ac_cv_func_setvbuf_reversed" >&5
 echo "${ECHO_T}$ac_cv_func_setvbuf_reversed" >&6
 if test $ac_cv_func_setvbuf_reversed = yes; then
 
@@ -17378,17 +23030,17 @@
 fi
 
 fi
-echo "$as_me:17381: checking for intptr_t" >&5
+echo "$as_me:23033: checking for intptr_t" >&5
 echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6
 if test "${ac_cv_type_intptr_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 17387 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 23039 "configure"
 #include "confdefs.h"
 $ac_includes_default
 int
-main ()
+main (void)
 {
 if ((intptr_t *) 0)
   return 0;
@@ -17398,29 +23050,29 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:17402: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:23054: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:17405: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:17408: \"$ac_try\"") >&5
+  echo "$as_me:23057: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:23060: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17411: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23063: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_type_intptr_t=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_type_intptr_t=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:17421: result: $ac_cv_type_intptr_t" >&5
+echo "$as_me:23073: result: $ac_cv_type_intptr_t" >&5
 echo "${ECHO_T}$ac_cv_type_intptr_t" >&6
-if test $ac_cv_type_intptr_t = yes; then
+if test "$ac_cv_type_intptr_t" = yes; then
   :
 else
 
@@ -17430,17 +23082,17 @@
 
 fi
 
-echo "$as_me:17433: checking for ssize_t" >&5
+echo "$as_me:23085: checking for ssize_t" >&5
 echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6
 if test "${ac_cv_type_ssize_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 17439 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 23091 "configure"
 #include "confdefs.h"
 $ac_includes_default
 int
-main ()
+main (void)
 {
 if ((ssize_t *) 0)
   return 0;
@@ -17450,29 +23102,29 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:17454: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:23106: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:17457: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:17460: \"$ac_try\"") >&5
+  echo "$as_me:23109: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:23112: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17463: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23115: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_type_ssize_t=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_type_ssize_t=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:17473: result: $ac_cv_type_ssize_t" >&5
+echo "$as_me:23125: result: $ac_cv_type_ssize_t" >&5
 echo "${ECHO_T}$ac_cv_type_ssize_t" >&6
-if test $ac_cv_type_ssize_t = yes; then
+if test "$ac_cv_type_ssize_t" = yes; then
   :
 else
 
@@ -17482,54 +23134,54 @@
 
 fi
 
-echo "$as_me:17485: checking for type sigaction_t" >&5
+echo "$as_me:23137: checking for type sigaction_t" >&5
 echo $ECHO_N "checking for type sigaction_t... $ECHO_C" >&6
 if test "${cf_cv_type_sigaction+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 17492 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 23144 "configure"
 #include "confdefs.h"
 
 #include <signal.h>
 int
-main ()
+main (void)
 {
-sigaction_t x
+sigaction_t x; (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:17505: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:23157: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:17508: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:17511: \"$ac_try\"") >&5
+  echo "$as_me:23160: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:23163: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17514: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23166: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_type_sigaction=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_type_sigaction=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 
-echo "$as_me:17525: result: $cf_cv_type_sigaction" >&5
+echo "$as_me:23177: result: $cf_cv_type_sigaction" >&5
 echo "${ECHO_T}$cf_cv_type_sigaction" >&6
 test "$cf_cv_type_sigaction" = yes &&
 cat >>confdefs.h <<\EOF
 #define HAVE_TYPE_SIGACTION 1
 EOF
 
-echo "$as_me:17532: checking declaration of size-change" >&5
+echo "$as_me:23184: checking declaration of size-change" >&5
 echo $ECHO_N "checking declaration of size-change... $ECHO_C" >&6
 if test "${cf_cv_sizechange+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -17542,9 +23194,15 @@
 do
 
 	CPPFLAGS="$cf_save_CPPFLAGS"
-	test -n "$cf_opts" && CPPFLAGS="$CPPFLAGS -D$cf_opts"
-	cat >conftest.$ac_ext <<_ACEOF
-#line 17547 "configure"
+	if test -n "$cf_opts"
+	then
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-D$cf_opts"
+
+	fi
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 23205 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #ifdef HAVE_TERMIOS_H
@@ -17554,30 +23212,36 @@
 #include <termio.h>
 #endif
 #endif
+
 #ifdef NEED_PTEM_H
 /* This is a workaround for SCO:  they neglected to define struct winsize in
- * termios.h -- it's only in termio.h and ptem.h
+ * termios.h -- it is only in termio.h and ptem.h
  */
-#include        <sys/stream.h>
-#include        <sys/ptem.h>
+#include <sys/stream.h>
+#include <sys/ptem.h>
 #endif
-#if !defined(sun) || !defined(HAVE_TERMIOS_H)
+
+#ifdef HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
 #endif
 
 int
-main ()
+main (void)
 {
 
 #ifdef TIOCGSIZE
-	struct ttysize win;	/* FIXME: what system is this? */
-	int y = win.ts_lines;
-	int x = win.ts_cols;
+	struct ttysize win;	/* SunOS 3.0... */
+	int y = win.ts_lines = 2;
+	int x = win.ts_cols = 1;
+	(void)y;
+	(void)x;
 #else
 #ifdef TIOCGWINSZ
-	struct winsize win;
-	int y = win.ws_row;
-	int x = win.ws_col;
+	struct winsize win;	/* everything else */
+	int y = win.ws_row = 2;
+	int x = win.ws_col = 1;
+	(void)y;
+	(void)x;
 #else
 	no TIOCGSIZE or TIOCGWINSZ
 #endif /* TIOCGWINSZ */
@@ -17587,25 +23251,25 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:17591: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:23255: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:17594: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:17597: \"$ac_try\"") >&5
+  echo "$as_me:23258: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:23261: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17600: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23264: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_sizechange=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_sizechange=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 	CPPFLAGS="$cf_save_CPPFLAGS"
 	if test "$cf_cv_sizechange" = yes ; then
@@ -17616,7 +23280,7 @@
 done
 
 fi
-echo "$as_me:17619: result: $cf_cv_sizechange" >&5
+echo "$as_me:23283: result: $cf_cv_sizechange" >&5
 echo "${ECHO_T}$cf_cv_sizechange" >&6
 if test "$cf_cv_sizechange" != no ; then
 
@@ -17624,7 +23288,7 @@
 #define HAVE_SIZECHANGE 1
 EOF
 
-	case $cf_cv_sizechange in
+	case "$cf_cv_sizechange" in
 	(NEED*)
 		cat >>confdefs.h <<EOF
 #define $cf_cv_sizechange  1
@@ -17634,129 +23298,129 @@
 	esac
 fi
 
-echo "$as_me:17637: checking for memmove" >&5
+echo "$as_me:23301: checking for memmove" >&5
 echo $ECHO_N "checking for memmove... $ECHO_C" >&6
 if test "${ac_cv_func_memmove+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 17643 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 23307 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char memmove (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
+#define memmove autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef memmove
+
 #ifdef __cplusplus
 extern "C"
 #endif
+
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char memmove ();
-char (*f) ();
+char memmove (void);
 
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
+
+/* The GNU C library defines stubs for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_memmove) || defined (__stub___memmove)
-choke me
-#else
-f = memmove; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#error found stub for memmove
 #endif
 
+	return memmove ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17674: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23338: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17677: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:17680: \"$ac_try\"") >&5
+  echo "$as_me:23341: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:23344: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17683: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23347: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_func_memmove=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_func_memmove=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:17693: result: $ac_cv_func_memmove" >&5
+echo "$as_me:23357: result: $ac_cv_func_memmove" >&5
 echo "${ECHO_T}$ac_cv_func_memmove" >&6
-if test $ac_cv_func_memmove = yes; then
+if test "$ac_cv_func_memmove" = yes; then
   :
 else
 
-echo "$as_me:17699: checking for bcopy" >&5
+echo "$as_me:23363: checking for bcopy" >&5
 echo $ECHO_N "checking for bcopy... $ECHO_C" >&6
 if test "${ac_cv_func_bcopy+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 17705 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 23369 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char bcopy (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
+#define bcopy autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef bcopy
+
 #ifdef __cplusplus
 extern "C"
 #endif
+
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char bcopy ();
-char (*f) ();
+char bcopy (void);
 
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
+
+/* The GNU C library defines stubs for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_bcopy) || defined (__stub___bcopy)
-choke me
-#else
-f = bcopy; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#error found stub for bcopy
 #endif
 
+	return bcopy ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17736: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23400: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17739: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:17742: \"$ac_try\"") >&5
+  echo "$as_me:23403: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:23406: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17745: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23409: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_func_bcopy=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_func_bcopy=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:17755: result: $ac_cv_func_bcopy" >&5
+echo "$as_me:23419: result: $ac_cv_func_bcopy" >&5
 echo "${ECHO_T}$ac_cv_func_bcopy" >&6
-if test $ac_cv_func_bcopy = yes; then
+if test "$ac_cv_func_bcopy" = yes; then
 
-	echo "$as_me:17759: checking if bcopy does overlapping moves" >&5
+	echo "$as_me:23423: checking if bcopy does overlapping moves" >&5
 echo $ECHO_N "checking if bcopy does overlapping moves... $ECHO_C" >&6
 if test "${cf_cv_good_bcopy+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -17765,11 +23429,13 @@
 		if test "$cross_compiling" = yes; then
   cf_cv_good_bcopy=unknown
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 17769 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 23433 "configure"
 #include "confdefs.h"
 
-int main() {
+$ac_includes_default
+
+int main(void) {
 	static char data[] = "abcdefghijklmnopqrstuwwxyz";
 	char temp[40];
 	bcopy(data, temp, sizeof(data));
@@ -17779,29 +23445,29 @@
 }
 
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:17783: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:23449: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17786: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:17788: \"$ac_try\"") >&5
+  echo "$as_me:23452: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:23454: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17791: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23457: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_good_bcopy=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_good_bcopy=no
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 
 fi
-echo "$as_me:17804: result: $cf_cv_good_bcopy" >&5
+echo "$as_me:23470: result: $cf_cv_good_bcopy" >&5
 echo "${ECHO_T}$cf_cv_good_bcopy" >&6
 
 else
@@ -17824,7 +23490,77 @@
 
 fi
 
-echo "$as_me:17827: checking if poll really works" >&5
+tty >/dev/null 2>&1 || {
+for ac_func in posix_openpt
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:23497: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 23503 "configure"
+#include "confdefs.h"
+#define $ac_func autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
+
+#ifdef __cplusplus
+extern "C"
+#endif
+
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func (void);
+
+int
+main (void)
+{
+
+/* The GNU C library defines stubs for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+#error found stub for $ac_func
+#endif
+
+	return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23534: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:23537: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:23540: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:23543: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+eval "$as_ac_var=no"
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:23553: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
+  cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+ }
+echo "$as_me:23563: checking if poll really works" >&5
 echo $ECHO_N "checking if poll really works... $ECHO_C" >&6
 if test "${cf_cv_working_poll+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -17833,20 +23569,21 @@
 if test "$cross_compiling" = yes; then
   cf_cv_working_poll=unknown
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 17837 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 23573 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
+$ac_includes_default
+
 #include <fcntl.h>
+
 #ifdef HAVE_POLL_H
 #include <poll.h>
 #else
 #include <sys/poll.h>
 #endif
-int main() {
+
+int main(void) {
 	struct pollfd myfds;
 	int ret;
 
@@ -17866,6 +23603,11 @@
 		if (!isatty(fd)) {
 			fd = open("/dev/tty", 2);	/* O_RDWR */
 		}
+#ifdef HAVE_POSIX_OPENPT
+		if (fd < 0) {
+			fd = posix_openpt(O_RDWR);
+		}
+#endif
 
 		if (fd >= 0) {
 			/* also check with standard input */
@@ -17880,48 +23622,108 @@
 	${cf_cv_main_return:-return}(ret < 0);
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:17884: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:23626: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17887: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:17889: \"$ac_try\"") >&5
+  echo "$as_me:23629: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:23631: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17892: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23634: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_working_poll=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_working_poll=no
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 fi
-echo "$as_me:17904: result: $cf_cv_working_poll" >&5
+echo "$as_me:23646: result: $cf_cv_working_poll" >&5
 echo "${ECHO_T}$cf_cv_working_poll" >&6
 test "$cf_cv_working_poll" = "yes" &&
 cat >>confdefs.h <<\EOF
 #define HAVE_WORKING_POLL 1
 EOF
 
-echo "$as_me:17911: checking for va_copy" >&5
+echo "$as_me:23653: checking if MB_LEN_MAX is usable" >&5
+echo $ECHO_N "checking if MB_LEN_MAX is usable... $ECHO_C" >&6
+if test "${cf_cv_mb_len_max+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 23660 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+#include <limits.h>
+int
+main (void)
+{
+
+#if defined(MB_LEN_MAX) && MB_LEN_MAX >= 6
+	${cf_cv_main_return:-return}(0);
+#else
+#error MB_LEN_MAX is not usable
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:23680: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:23683: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:23686: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:23689: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_mb_len_max=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_mb_len_max=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:23699: result: $cf_cv_mb_len_max" >&5
+echo "${ECHO_T}$cf_cv_mb_len_max" >&6
+if test "$cf_cv_mb_len_max" = yes
+then
+
+cat >>confdefs.h <<\EOF
+#define HAVE_CONSISTENT_MB_LEN_MAX 1
+EOF
+
+else
+	{ echo "$as_me:23709: WARNING: MB_LEN_MAX is missing/inconsistent in system headers" >&5
+echo "$as_me: WARNING: MB_LEN_MAX is missing/inconsistent in system headers" >&2;}
+fi
+
+echo "$as_me:23713: checking for va_copy" >&5
 echo $ECHO_N "checking for va_copy... $ECHO_C" >&6
 if test "${cf_cv_have_va_copy+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 17918 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 23720 "configure"
 #include "confdefs.h"
 
 #include <stdarg.h>
 
 int
-main ()
+main (void)
 {
 
 	static va_list dst;
@@ -17931,48 +23733,52 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17935: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23737: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17938: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:17941: \"$ac_try\"") >&5
+  echo "$as_me:23740: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:23743: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17944: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23746: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_have_va_copy=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_have_va_copy=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:17954: result: $cf_cv_have_va_copy" >&5
+echo "$as_me:23756: result: $cf_cv_have_va_copy" >&5
 echo "${ECHO_T}$cf_cv_have_va_copy" >&6
 
-test "$cf_cv_have_va_copy" = yes &&
+if test "$cf_cv_have_va_copy" = yes;
+then
+
 cat >>confdefs.h <<\EOF
 #define HAVE_VA_COPY 1
 EOF
 
-echo "$as_me:17962: checking for __va_copy" >&5
+else # !cf_cv_have_va_copy
+
+echo "$as_me:23768: checking for __va_copy" >&5
 echo $ECHO_N "checking for __va_copy... $ECHO_C" >&6
 if test "${cf_cv_have___va_copy+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 17969 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 23775 "configure"
 #include "confdefs.h"
 
 #include <stdarg.h>
 
 int
-main ()
+main (void)
 {
 
 	static va_list dst;
@@ -17982,45 +23788,212 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:17986: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23792: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:17989: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:17992: \"$ac_try\"") >&5
+  echo "$as_me:23795: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:23798: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:17995: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:23801: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_have___va_copy=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_have___va_copy=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:18005: result: $cf_cv_have___va_copy" >&5
+echo "$as_me:23811: result: $cf_cv_have___va_copy" >&5
 echo "${ECHO_T}$cf_cv_have___va_copy" >&6
 
-test "$cf_cv_have___va_copy" = yes &&
+if test "$cf_cv_have___va_copy" = yes
+then
+
 cat >>confdefs.h <<\EOF
 #define HAVE___VA_COPY 1
 EOF
 
-echo "$as_me:18013: checking for pid_t" >&5
+else # !cf_cv_have___va_copy
+
+echo "$as_me:23823: checking for __builtin_va_copy" >&5
+echo $ECHO_N "checking for __builtin_va_copy... $ECHO_C" >&6
+if test "${cf_cv_have___builtin_va_copy+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 23830 "configure"
+#include "confdefs.h"
+
+#include <stdarg.h>
+
+int
+main (void)
+{
+
+	static va_list dst;
+	static va_list src;
+	__builtin_va_copy(dst, src)
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23847: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:23850: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:23853: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:23856: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_have___builtin_va_copy=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_have___builtin_va_copy=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:23866: result: $cf_cv_have___builtin_va_copy" >&5
+echo "${ECHO_T}$cf_cv_have___builtin_va_copy" >&6
+
+test "$cf_cv_have___builtin_va_copy" = yes &&
+
+cat >>confdefs.h <<\EOF
+#define HAVE___BUILTIN_VA_COPY 1
+EOF
+
+fi # cf_cv_have___va_copy
+
+fi # cf_cv_have_va_copy
+
+case "${cf_cv_have_va_copy}${cf_cv_have___va_copy}${cf_cv_have___builtin_va_copy}" in
+(*yes*)
+	;;
+
+(*)
+	echo "$as_me:23884: checking if we can simply copy va_list" >&5
+echo $ECHO_N "checking if we can simply copy va_list... $ECHO_C" >&6
+if test "${cf_cv_pointer_va_list+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 23891 "configure"
+#include "confdefs.h"
+
+#include <stdarg.h>
+
+int
+main (void)
+{
+
+	va_list dst;
+	va_list src;
+	dst = src
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23908: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:23911: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:23914: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:23917: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_pointer_va_list=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_pointer_va_list=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:23927: result: $cf_cv_pointer_va_list" >&5
+echo "${ECHO_T}$cf_cv_pointer_va_list" >&6
+
+	if test "$cf_cv_pointer_va_list" = no
+	then
+		echo "$as_me:23932: checking if we can copy va_list indirectly" >&5
+echo $ECHO_N "checking if we can copy va_list indirectly... $ECHO_C" >&6
+if test "${cf_cv_array_va_list+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 23939 "configure"
+#include "confdefs.h"
+
+#include <stdarg.h>
+
+int
+main (void)
+{
+
+	va_list dst;
+	va_list src;
+	*dst = *src
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:23956: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:23959: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:23962: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:23965: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_array_va_list=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_array_va_list=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+fi
+echo "$as_me:23975: result: $cf_cv_array_va_list" >&5
+echo "${ECHO_T}$cf_cv_array_va_list" >&6
+		test "$cf_cv_array_va_list" = yes &&
+cat >>confdefs.h <<\EOF
+#define ARRAY_VA_LIST 1
+EOF
+
+	fi
+	;;
+esac
+
+echo "$as_me:23986: checking for pid_t" >&5
 echo $ECHO_N "checking for pid_t... $ECHO_C" >&6
 if test "${ac_cv_type_pid_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 18019 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 23992 "configure"
 #include "confdefs.h"
 $ac_includes_default
 int
-main ()
+main (void)
 {
 if ((pid_t *) 0)
   return 0;
@@ -18030,29 +24003,29 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:18034: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:24007: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:18037: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:18040: \"$ac_try\"") >&5
+  echo "$as_me:24010: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:24013: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:18043: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:24016: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_type_pid_t=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_type_pid_t=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:18053: result: $ac_cv_type_pid_t" >&5
+echo "$as_me:24026: result: $ac_cv_type_pid_t" >&5
 echo "${ECHO_T}$ac_cv_type_pid_t" >&6
-if test $ac_cv_type_pid_t = yes; then
+if test "$ac_cv_type_pid_t" = yes; then
   :
 else
 
@@ -18065,24 +24038,24 @@
 for ac_header in unistd.h vfork.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:18068: checking for $ac_header" >&5
+echo "$as_me:24041: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 18074 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 24047 "configure"
 #include "confdefs.h"
 #include <$ac_header>
 _ACEOF
-if { (eval echo "$as_me:18078: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:24051: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:18084: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:24057: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -18095,14 +24068,14 @@
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   eval "$as_ac_Header=no"
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 fi
-echo "$as_me:18103: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+echo "$as_me:24076: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 EOF
@@ -18113,65 +24086,65 @@
 for ac_func in fork vfork
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-echo "$as_me:18116: checking for $ac_func" >&5
+echo "$as_me:24089: checking for $ac_func" >&5
 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
 if eval "test \"\${$as_ac_var+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 18122 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 24095 "configure"
 #include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func (); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
+#define $ac_func autoconf_temporary
+#include <limits.h>	/* least-intrusive standard header which defines gcc2 __stub macros */
+#undef $ac_func
+
 #ifdef __cplusplus
 extern "C"
 #endif
+
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char $ac_func ();
-char (*f) ();
+char $ac_func (void);
 
 int
-main ()
+main (void)
 {
-/* The GNU C library defines this for functions which it implements
+
+/* The GNU C library defines stubs for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
     something starting with __ and the normal name is an alias.  */
 #if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-f = $ac_func; /* workaround for ICC 12.0.3 */ if (f == 0) return 1;
+#error found stub for $ac_func
 #endif
 
+	return $ac_func ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:18153: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:24126: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:18156: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:18159: \"$ac_try\"") >&5
+  echo "$as_me:24129: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:24132: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:18162: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:24135: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   eval "$as_ac_var=yes"
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 eval "$as_ac_var=no"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-echo "$as_me:18172: result: `eval echo '${'$as_ac_var'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
-if test `eval echo '${'$as_ac_var'}'` = yes; then
+echo "$as_me:24145: result: `eval echo '${'"$as_ac_var"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_var"'}'`" >&6
+if test "`eval echo '${'"$as_ac_var"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
 EOF
@@ -18181,7 +24154,7 @@
 
 ac_cv_func_fork_works=$ac_cv_func_fork
 if test "x$ac_cv_func_fork" = xyes; then
-  echo "$as_me:18184: checking for working fork" >&5
+  echo "$as_me:24157: checking for working fork" >&5
 echo $ECHO_N "checking for working fork... $ECHO_C" >&6
 if test "${ac_cv_func_fork_works+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -18189,42 +24162,42 @@
   if test "$cross_compiling" = yes; then
   ac_cv_func_fork_works=cross
 else
-  cat >conftest.$ac_ext <<_ACEOF
+  cat >"conftest.$ac_ext" <<_ACEOF
 /* By Rüdiger Kuhlmann. */
       #include <sys/types.h>
       #if HAVE_UNISTD_H
       # include <unistd.h>
       #endif
       /* Some systems only have a dummy stub for fork() */
-      int main ()
+      int main (void)
       {
         if (fork() < 0)
           $ac_main_return (1);
         $ac_main_return (0);
       }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:18207: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:24180: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:18210: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:18212: \"$ac_try\"") >&5
+  echo "$as_me:24183: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:24185: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:18215: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:24188: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_func_fork_works=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_func_fork_works=no
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 fi
-echo "$as_me:18227: result: $ac_cv_func_fork_works" >&5
+echo "$as_me:24200: result: $ac_cv_func_fork_works" >&5
 echo "${ECHO_T}$ac_cv_func_fork_works" >&6
 
 fi
@@ -18238,12 +24211,12 @@
       ac_cv_func_fork_works=yes
       ;;
   esac
-  { echo "$as_me:18241: WARNING: CROSS: Result $ac_cv_func_fork_works guessed due to cross-compiling." >&5
+  { echo "$as_me:24214: WARNING: CROSS: Result $ac_cv_func_fork_works guessed due to cross-compiling." >&5
 echo "$as_me: WARNING: CROSS: Result $ac_cv_func_fork_works guessed due to cross-compiling." >&2;}
 fi
 ac_cv_func_vfork_works=$ac_cv_func_vfork
 if test "x$ac_cv_func_vfork" = xyes; then
-  echo "$as_me:18246: checking for working vfork" >&5
+  echo "$as_me:24219: checking for working vfork" >&5
 echo $ECHO_N "checking for working vfork... $ECHO_C" >&6
 if test "${ac_cv_func_vfork_works+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -18251,8 +24224,8 @@
   if test "$cross_compiling" = yes; then
   ac_cv_func_vfork_works=cross
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 18255 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 24228 "configure"
 #include "confdefs.h"
 /* Thanks to Paul Eggert for this test.  */
 #include <stdio.h>
@@ -18271,11 +24244,7 @@
    static variable whose address is put into a register that is
    clobbered by the vfork.  */
 static
-#ifdef __cplusplus
 sparc_address_test (int arg)
-# else
-sparc_address_test (arg) int arg;
-#endif
 {
   static pid_t child;
   if (!child) {
@@ -18293,7 +24262,7 @@
 }
 
 int
-main ()
+main (void)
 {
   pid_t parent = getpid ();
   pid_t child;
@@ -18318,7 +24287,7 @@
     /* Convince the compiler that p..p7 are live; otherwise, it might
        use the same hardware register for all 8 local variables.  */
     if (p != p1 || p != p2 || p != p3 || p != p4
-	|| p != p5 || p != p6 || p != p7)
+        || p != p5 || p != p6 || p != p7)
       _exit(1);
 
     /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
@@ -18333,49 +24302,49 @@
     while (wait(&status) != child)
       ;
     $ac_main_return(
-	 /* Was there some problem with vforking?  */
-	 child < 0
+         /* Was there some problem with vforking?  */
+         child < 0
 
-	 /* Did the child fail?  (This shouldn't happen.)  */
-	 || status
+         /* Did the child fail?  (This shouldn't happen.)  */
+         || status
 
-	 /* Did the vfork/compiler bug occur?  */
-	 || parent != getpid()
+         /* Did the vfork/compiler bug occur?  */
+         || parent != getpid()
 
-	 /* Did the file descriptor bug occur?  */
-	 || fstat(fileno(stdout), &st) != 0
-	 );
+         /* Did the file descriptor bug occur?  */
+         || fstat(fileno(stdout), &st) != 0
+         );
   }
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:18352: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:24321: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:18355: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:18357: \"$ac_try\"") >&5
+  echo "$as_me:24324: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:24326: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:18360: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:24329: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_func_vfork_works=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_func_vfork_works=no
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 fi
-echo "$as_me:18372: result: $ac_cv_func_vfork_works" >&5
+echo "$as_me:24341: result: $ac_cv_func_vfork_works" >&5
 echo "${ECHO_T}$ac_cv_func_vfork_works" >&6
 
 fi;
 if test "x$ac_cv_func_fork_works" = xcross; then
   ac_cv_func_vfork_works=ac_cv_func_vfork
-  { echo "$as_me:18378: WARNING: CROSS: Result $ac_cv_func_vfork_works guessed due to cross-compiling." >&5
+  { echo "$as_me:24347: WARNING: CROSS: Result $ac_cv_func_vfork_works guessed due to cross-compiling." >&5
 echo "$as_me: WARNING: CROSS: Result $ac_cv_func_vfork_works guessed due to cross-compiling." >&2;}
 fi
 
@@ -18400,17 +24369,90 @@
 
 fi
 
+echo "$as_me:24372: checking if fopen accepts explicit binary mode" >&5
+echo $ECHO_N "checking if fopen accepts explicit binary mode... $ECHO_C" >&6
+if test "${cf_cv_fopen_bin_r+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	if test "$cross_compiling" = yes; then
+  cf_cv_fopen_bin_r=unknown
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 24382 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+int main(void)
+{
+	FILE *fp = fopen("conftest.tmp", "wb");
+	int rc = 0;
+	if (fp != 0) {
+		int p, q;
+		for (p = 0; p < 256; ++p) {
+			fputc(p, fp);
+		}
+		fclose(fp);
+		fp = fopen("conftest.tmp", "rb");
+		if (fp != 0) {
+			for (p = 0; p < 256; ++p) {
+				q = fgetc(fp);
+				if (q != p) {
+					rc = 1;
+					break;
+				}
+			}
+		} else {
+			rc = 1;
+		}
+	} else {
+		rc = 1;
+	}
+	${cf_cv_main_return:-return} (rc);
+}
+
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:24417: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:24420: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:24422: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:24425: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_fopen_bin_r=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_fopen_bin_r=no
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+
+fi
+echo "$as_me:24438: result: $cf_cv_fopen_bin_r" >&5
+echo "${ECHO_T}$cf_cv_fopen_bin_r" >&6
+test "x$cf_cv_fopen_bin_r" != xno &&
+cat >>confdefs.h <<\EOF
+#define USE_FOPEN_BIN_R 1
+EOF
+
 # special check for test/ditto.c
 
-echo "$as_me:18405: checking for openpty in -lutil" >&5
+echo "$as_me:24447: checking for openpty in -lutil" >&5
 echo $ECHO_N "checking for openpty in -lutil... $ECHO_C" >&6
 if test "${ac_cv_lib_util_openpty+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lutil  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-#line 18413 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 24455 "configure"
 #include "confdefs.h"
 
 /* Override any gcc2 internal prototype to avoid an error.  */
@@ -18419,116 +24461,117 @@
 #endif
 /* We use char because int might match the return type of a gcc2
    builtin and then its argument prototype would still apply.  */
-char openpty ();
+char openpty (void);
 int
-main ()
+main (void)
 {
 openpty ();
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:18432: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:24474: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:18435: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:18438: \"$ac_try\"") >&5
+  echo "$as_me:24477: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:24480: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:18441: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:24483: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_lib_util_openpty=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_lib_util_openpty=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 LIBS=$ac_check_lib_save_LIBS
 fi
-echo "$as_me:18452: result: $ac_cv_lib_util_openpty" >&5
+echo "$as_me:24494: result: $ac_cv_lib_util_openpty" >&5
 echo "${ECHO_T}$ac_cv_lib_util_openpty" >&6
-if test $ac_cv_lib_util_openpty = yes; then
+if test "$ac_cv_lib_util_openpty" = yes; then
   cf_cv_lib_util=yes
 else
   cf_cv_lib_util=no
 fi
 
-echo "$as_me:18460: checking for openpty header" >&5
+echo "$as_me:24502: checking for openpty header" >&5
 echo $ECHO_N "checking for openpty header... $ECHO_C" >&6
 if test "${cf_cv_func_openpty+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
 	cf_save_LIBS="$LIBS"
-	test $cf_cv_lib_util = yes &&
-cf_add_libs="-lutil"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+	test "$cf_cv_lib_util" = yes && {
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lutil; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
-
+ }
 	for cf_header in pty.h libutil.h util.h
 	do
-	cat >conftest.$ac_ext <<_ACEOF
-#line 18487 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 24529 "configure"
 #include "confdefs.h"
 
 #include <$cf_header>
 
 int
-main ()
+main (void)
 {
 
 	int x = openpty((int *)0, (int *)0, (char *)0,
 				   (struct termios *)0, (struct winsize *)0);
+	(void)x;
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:18504: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:24547: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:18507: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:18510: \"$ac_try\"") >&5
+  echo "$as_me:24550: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:24553: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:18513: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:24556: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 		cf_cv_func_openpty=$cf_header
 		break
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 
 		cf_cv_func_openpty=no
 
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 	done
 	LIBS="$cf_save_LIBS"
 
 fi
-echo "$as_me:18531: result: $cf_cv_func_openpty" >&5
+echo "$as_me:24574: result: $cf_cv_func_openpty" >&5
 echo "${ECHO_T}$cf_cv_func_openpty" >&6
 
 if test "$cf_cv_func_openpty" != no ; then
@@ -18543,19 +24586,19 @@
 
 	if test "x$cf_cv_lib_util" = xyes ; then
 
-cf_add_libs="-lutil"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $TEST_LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$TEST_LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -lutil; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 TEST_LIBS="$cf_add_libs"
 
@@ -18577,9 +24620,9 @@
 if test -n "$with_hashed_db/include" ; then
   for cf_add_incdir in $with_hashed_db/include
   do
-	while test $cf_add_incdir != /usr/include
+	while test "$cf_add_incdir" != /usr/include
 	do
-	  if test -d $cf_add_incdir
+	  if test -d "$cf_add_incdir"
 	  then
 		cf_have_incdir=no
 		if test -n "$CFLAGS$CPPFLAGS" ; then
@@ -18596,38 +24639,41 @@
 			if test "$GCC" = yes
 			then
 			  cf_save_CPPFLAGS=$CPPFLAGS
-			  CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
-			  cat >conftest.$ac_ext <<_ACEOF
-#line 18601 "configure"
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir"
+
+			  cat >"conftest.$ac_ext" <<_ACEOF
+#line 24647 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int
-main ()
+main (void)
 {
 printf("Hello")
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:18613: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:24659: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:18616: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:18619: \"$ac_try\"") >&5
+  echo "$as_me:24662: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:24665: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:18622: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:24668: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   :
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_have_incdir=yes
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 			  CPPFLAGS=$cf_save_CPPFLAGS
 			fi
 		  fi
@@ -18636,11 +24682,11 @@
 		if test "$cf_have_incdir" = no ; then
 		  test -n "$verbose" && echo "	adding $cf_add_incdir to include-path" 1>&6
 
-echo "${as_me:-configure}:18639: testing adding $cf_add_incdir to include-path ..." 1>&5
+echo "${as_me:-configure}:24685: testing adding $cf_add_incdir to include-path ..." 1>&5
 
 		  CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
 
-		  cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'`
+		  cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'`
 		  test "$cf_top_incdir" = "$cf_add_incdir" && break
 		  cf_add_incdir="$cf_top_incdir"
 		else
@@ -18656,9 +24702,9 @@
 if test -n "$with_hashed_db/lib" ; then
 	for cf_add_libdir in $with_hashed_db/lib
 	do
-		if test $cf_add_libdir = /usr/lib ; then
+		if test "$cf_add_libdir" = /usr/lib ; then
 			:
-		elif test -d $cf_add_libdir
+		elif test -d "$cf_add_libdir"
 		then
 			cf_have_libdir=no
 			if test -n "$LDFLAGS$LIBS" ; then
@@ -18672,7 +24718,7 @@
 			if test "$cf_have_libdir" = no ; then
 				test -n "$verbose" && echo "	adding $cf_add_libdir to library-path" 1>&6
 
-echo "${as_me:-configure}:18675: testing adding $cf_add_libdir to library-path ..." 1>&5
+echo "${as_me:-configure}:24721: testing adding $cf_add_libdir to library-path ..." 1>&5
 
 				LDFLAGS="-L$cf_add_libdir $LDFLAGS"
 			fi
@@ -18683,7 +24729,7 @@
 	else
 		case "$with_hashed_db" in
 		(./*|../*|/*)
-			{ echo "$as_me:18686: WARNING: no such directory $with_hashed_db" >&5
+			{ echo "$as_me:24732: WARNING: no such directory $with_hashed_db" >&5
 echo "$as_me: WARNING: no such directory $with_hashed_db" >&2;}
 			;;
 		(*)
@@ -18694,11 +24740,11 @@
 test -d "$prefix" && \
  {
 	test -n "$verbose" && echo "	... testing for include-directories under $prefix"
-	test -d $prefix/include &&          cf_search="$cf_search $prefix/include"
-	test -d $prefix/include/$with_hashed_db &&       cf_search="$cf_search $prefix/include/$with_hashed_db"
-	test -d $prefix/include/$with_hashed_db/include &&    cf_search="$cf_search $prefix/include/$with_hashed_db/include"
-	test -d $prefix/$with_hashed_db/include &&       cf_search="$cf_search $prefix/$with_hashed_db/include"
-	test -d $prefix/$with_hashed_db/include/$with_hashed_db &&    cf_search="$cf_search $prefix/$with_hashed_db/include/$with_hashed_db"
+	test -d "$prefix/include" &&          cf_search="$cf_search $prefix/include"
+	test -d "$prefix/include/$with_hashed_db" &&       cf_search="$cf_search $prefix/include/$with_hashed_db"
+	test -d "$prefix/include/$with_hashed_db/include" &&    cf_search="$cf_search $prefix/include/$with_hashed_db/include"
+	test -d "$prefix/$with_hashed_db/include" &&       cf_search="$cf_search $prefix/$with_hashed_db/include"
+	test -d "$prefix/$with_hashed_db/include/$with_hashed_db" &&    cf_search="$cf_search $prefix/$with_hashed_db/include/$with_hashed_db"
 }
 
 for cf_subdir_prefix in \
@@ -18712,28 +24758,28 @@
 
 test "x$cf_subdir_prefix" != "x$prefix" && \
 test -d "$cf_subdir_prefix" && \
-(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && {
+{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && {
 	test -n "$verbose" && echo "	... testing for include-directories under $cf_subdir_prefix"
-	test -d $cf_subdir_prefix/include &&          cf_search="$cf_search $cf_subdir_prefix/include"
-	test -d $cf_subdir_prefix/include/$with_hashed_db &&       cf_search="$cf_search $cf_subdir_prefix/include/$with_hashed_db"
-	test -d $cf_subdir_prefix/include/$with_hashed_db/include &&    cf_search="$cf_search $cf_subdir_prefix/include/$with_hashed_db/include"
-	test -d $cf_subdir_prefix/$with_hashed_db/include &&       cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/include"
-	test -d $cf_subdir_prefix/$with_hashed_db/include/$with_hashed_db &&    cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/include/$with_hashed_db"
+	test -d "$cf_subdir_prefix/include" &&          cf_search="$cf_search $cf_subdir_prefix/include"
+	test -d "$cf_subdir_prefix/include/$with_hashed_db" &&       cf_search="$cf_search $cf_subdir_prefix/include/$with_hashed_db"
+	test -d "$cf_subdir_prefix/include/$with_hashed_db/include" &&    cf_search="$cf_search $cf_subdir_prefix/include/$with_hashed_db/include"
+	test -d "$cf_subdir_prefix/$with_hashed_db/include" &&       cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/include"
+	test -d "$cf_subdir_prefix/$with_hashed_db/include/$with_hashed_db" &&    cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/include/$with_hashed_db"
 }
 
 done
 
 	for cf_item in $cf_search
 	do
-		case $cf_item in
+		case "$cf_item" in
 		(*/$with_hashed_db)
 
 if test -n "$cf_item" ; then
   for cf_add_incdir in $cf_item
   do
-	while test $cf_add_incdir != /usr/include
+	while test "$cf_add_incdir" != /usr/include
 	do
-	  if test -d $cf_add_incdir
+	  if test -d "$cf_add_incdir"
 	  then
 		cf_have_incdir=no
 		if test -n "$CFLAGS$CPPFLAGS" ; then
@@ -18750,38 +24796,41 @@
 			if test "$GCC" = yes
 			then
 			  cf_save_CPPFLAGS=$CPPFLAGS
-			  CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
-			  cat >conftest.$ac_ext <<_ACEOF
-#line 18755 "configure"
+
+	test -n "$CPPFLAGS" && CPPFLAGS="$CPPFLAGS "
+	CPPFLAGS="${CPPFLAGS}-I$cf_add_incdir"
+
+			  cat >"conftest.$ac_ext" <<_ACEOF
+#line 24804 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int
-main ()
+main (void)
 {
 printf("Hello")
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:18767: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:24816: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:18770: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:18773: \"$ac_try\"") >&5
+  echo "$as_me:24819: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:24822: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:18776: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:24825: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   :
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_have_incdir=yes
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 			  CPPFLAGS=$cf_save_CPPFLAGS
 			fi
 		  fi
@@ -18790,11 +24839,11 @@
 		if test "$cf_have_incdir" = no ; then
 		  test -n "$verbose" && echo "	adding $cf_add_incdir to include-path" 1>&6
 
-echo "${as_me:-configure}:18793: testing adding $cf_add_incdir to include-path ..." 1>&5
+echo "${as_me:-configure}:24842: testing adding $cf_add_incdir to include-path ..." 1>&5
 
 		  CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
 
-		  cf_top_incdir=`echo $cf_add_incdir | sed -e 's%/include/.*$%/include%'`
+		  cf_top_incdir=`echo "$cf_add_incdir" | sed -e 's%/include/.*$%/include%'`
 		  test "$cf_top_incdir" = "$cf_add_incdir" && break
 		  cf_add_incdir="$cf_top_incdir"
 		else
@@ -18817,11 +24866,11 @@
 test -d "$prefix" && \
  {
 	test -n "$verbose" && echo "	... testing for lib-directories under $prefix"
-	test -d $prefix/lib &&          cf_search="$cf_search $prefix/lib"
-	test -d $prefix/lib/$with_hashed_db &&       cf_search="$cf_search $prefix/lib/$with_hashed_db"
-	test -d $prefix/lib/$with_hashed_db/lib &&    cf_search="$cf_search $prefix/lib/$with_hashed_db/lib"
-	test -d $prefix/$with_hashed_db/lib &&       cf_search="$cf_search $prefix/$with_hashed_db/lib"
-	test -d $prefix/$with_hashed_db/lib/$with_hashed_db &&    cf_search="$cf_search $prefix/$with_hashed_db/lib/$with_hashed_db"
+	test -d "$prefix/lib" &&          cf_search="$cf_search $prefix/lib"
+	test -d "$prefix/lib/$with_hashed_db" &&       cf_search="$cf_search $prefix/lib/$with_hashed_db"
+	test -d "$prefix/lib/$with_hashed_db/lib" &&    cf_search="$cf_search $prefix/lib/$with_hashed_db/lib"
+	test -d "$prefix/$with_hashed_db/lib" &&       cf_search="$cf_search $prefix/$with_hashed_db/lib"
+	test -d "$prefix/$with_hashed_db/lib/$with_hashed_db" &&    cf_search="$cf_search $prefix/$with_hashed_db/lib/$with_hashed_db"
 }
 
 for cf_subdir_prefix in \
@@ -18835,28 +24884,28 @@
 
 test "x$cf_subdir_prefix" != "x$prefix" && \
 test -d "$cf_subdir_prefix" && \
-(test -z "$prefix" || test x$prefix = xNONE || test "x$cf_subdir_prefix" != "x$prefix") && {
+{ test -z "$prefix" || test "x$prefix" = xNONE || test "x$cf_subdir_prefix" != "x$prefix"; } && {
 	test -n "$verbose" && echo "	... testing for lib-directories under $cf_subdir_prefix"
-	test -d $cf_subdir_prefix/lib &&          cf_search="$cf_search $cf_subdir_prefix/lib"
-	test -d $cf_subdir_prefix/lib/$with_hashed_db &&       cf_search="$cf_search $cf_subdir_prefix/lib/$with_hashed_db"
-	test -d $cf_subdir_prefix/lib/$with_hashed_db/lib &&    cf_search="$cf_search $cf_subdir_prefix/lib/$with_hashed_db/lib"
-	test -d $cf_subdir_prefix/$with_hashed_db/lib &&       cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/lib"
-	test -d $cf_subdir_prefix/$with_hashed_db/lib/$with_hashed_db &&    cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/lib/$with_hashed_db"
+	test -d "$cf_subdir_prefix/lib" &&          cf_search="$cf_search $cf_subdir_prefix/lib"
+	test -d "$cf_subdir_prefix/lib/$with_hashed_db" &&       cf_search="$cf_search $cf_subdir_prefix/lib/$with_hashed_db"
+	test -d "$cf_subdir_prefix/lib/$with_hashed_db/lib" &&    cf_search="$cf_search $cf_subdir_prefix/lib/$with_hashed_db/lib"
+	test -d "$cf_subdir_prefix/$with_hashed_db/lib" &&       cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/lib"
+	test -d "$cf_subdir_prefix/$with_hashed_db/lib/$with_hashed_db" &&    cf_search="$cf_search $cf_subdir_prefix/$with_hashed_db/lib/$with_hashed_db"
 }
 
 done
 
 	for cf_item in $cf_search
 	do
-		case $cf_item in
+		case "$cf_item" in
 		(*/$with_hashed_db)
 
 if test -n "$cf_item" ; then
 	for cf_add_libdir in $cf_item
 	do
-		if test $cf_add_libdir = /usr/lib ; then
+		if test "$cf_add_libdir" = /usr/lib ; then
 			:
-		elif test -d $cf_add_libdir
+		elif test -d "$cf_add_libdir"
 		then
 			cf_have_libdir=no
 			if test -n "$LDFLAGS$LIBS" ; then
@@ -18870,7 +24919,7 @@
 			if test "$cf_have_libdir" = no ; then
 				test -n "$verbose" && echo "	adding $cf_add_libdir to library-path" 1>&6
 
-echo "${as_me:-configure}:18873: testing adding $cf_add_libdir to library-path ..." 1>&5
+echo "${as_me:-configure}:24922: testing adding $cf_add_libdir to library-path ..." 1>&5
 
 				LDFLAGS="-L$cf_add_libdir $LDFLAGS"
 			fi
@@ -18887,24 +24936,24 @@
 	fi
 esac
 
-echo "$as_me:18890: checking for db.h" >&5
+echo "$as_me:24939: checking for db.h" >&5
 echo $ECHO_N "checking for db.h... $ECHO_C" >&6
 if test "${ac_cv_header_db_h+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 18896 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 24945 "configure"
 #include "confdefs.h"
 #include <db.h>
 _ACEOF
-if { (eval echo "$as_me:18900: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:24949: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:18906: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:24955: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_c_preproc_warn_flag
   else
@@ -18917,16 +24966,16 @@
   ac_cv_header_db_h=yes
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   ac_cv_header_db_h=no
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 fi
-echo "$as_me:18925: result: $ac_cv_header_db_h" >&5
+echo "$as_me:24974: result: $ac_cv_header_db_h" >&5
 echo "${ECHO_T}$ac_cv_header_db_h" >&6
-if test $ac_cv_header_db_h = yes; then
+if test "$ac_cv_header_db_h" = yes; then
 
-echo "$as_me:18929: checking for version of db" >&5
+echo "$as_me:24978: checking for version of db" >&5
 echo $ECHO_N "checking for version of db... $ECHO_C" >&6
 if test "${cf_cv_hashed_db_version+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -18937,10 +24986,10 @@
 for cf_db_version in 1 2 3 4 5 6
 do
 
-echo "${as_me:-configure}:18940: testing checking for db version $cf_db_version ..." 1>&5
+echo "${as_me:-configure}:24989: testing checking for db version $cf_db_version ..." 1>&5
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 18943 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 24992 "configure"
 #include "confdefs.h"
 
 $ac_includes_default
@@ -18951,58 +25000,58 @@
 #if $cf_db_version == DB_VERSION_MAJOR
 	/* ok */
 #else
-	make an error
+	#error $cf_db_version is not DB_VERSION_MAJOR
 #endif
 #else
 #if $cf_db_version == 1
 	/* ok: assuming this is DB 1.8.5 */
 #else
-	make an error
+	#error $cf_db_version is not 1
 #endif
 #endif
 
 int
-main ()
+main (void)
 {
 DBT *foo = 0
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:18973: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25022: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:18976: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:18979: \"$ac_try\"") >&5
+  echo "$as_me:25025: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:25028: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:18982: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:25031: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 	cf_cv_hashed_db_version=$cf_db_version
 	break
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 done
 
 fi
-echo "$as_me:18996: result: $cf_cv_hashed_db_version" >&5
+echo "$as_me:25045: result: $cf_cv_hashed_db_version" >&5
 echo "${ECHO_T}$cf_cv_hashed_db_version" >&6
 
 if test "$cf_cv_hashed_db_version" = unknown ; then
-	{ { echo "$as_me:19000: error: Cannot determine version of db" >&5
+	{ { echo "$as_me:25049: error: Cannot determine version of db" >&5
 echo "$as_me: error: Cannot determine version of db" >&2;}
    { (exit 1); exit 1; }; }
 else
 
-echo "$as_me:19005: checking for db libraries" >&5
+echo "$as_me:25054: checking for db libraries" >&5
 echo $ECHO_N "checking for db libraries... $ECHO_C" >&6
 if test "${cf_cv_hashed_db_libs+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -19014,35 +25063,35 @@
 	cf_save_libs="$LIBS"
 	if test -n "$cf_db_libs"; then
 
-cf_add_libs="-l$cf_db_libs"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_db_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
 
 	fi
 
-echo "${as_me:-configure}:19035: testing checking for library "$cf_db_libs" ..." 1>&5
+echo "${as_me:-configure}:25084: testing checking for library $cf_db_libs ..." 1>&5
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 19038 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 25087 "configure"
 #include "confdefs.h"
 
 $ac_includes_default
 #include <db.h>
 
 int
-main ()
+main (void)
 {
 
 	char *path = "/tmp/foo";
@@ -19089,18 +25138,18 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:19093: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:25142: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:19096: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:19099: \"$ac_try\"") >&5
+  echo "$as_me:25145: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:25148: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19102: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:25151: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 	if test -n "$cf_db_libs" ; then
 		cf_cv_hashed_db_libs=$cf_db_libs
@@ -19112,35 +25161,35 @@
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 	LIBS="$cf_save_libs"
 done
 
 fi
-echo "$as_me:19122: result: $cf_cv_hashed_db_libs" >&5
+echo "$as_me:25171: result: $cf_cv_hashed_db_libs" >&5
 echo "${ECHO_T}$cf_cv_hashed_db_libs" >&6
 
 	if test "$cf_cv_hashed_db_libs" = unknown ; then
-		{ { echo "$as_me:19126: error: Cannot determine library for db" >&5
+		{ { echo "$as_me:25175: error: Cannot determine library for db" >&5
 echo "$as_me: error: Cannot determine library for db" >&2;}
    { (exit 1); exit 1; }; }
 	elif test "$cf_cv_hashed_db_libs" != default ; then
 
-cf_add_libs="-l$cf_cv_hashed_db_libs"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_cv_hashed_db_libs; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
 
@@ -19149,7 +25198,7 @@
 
 else
 
-	{ { echo "$as_me:19152: error: Cannot find db.h" >&5
+	{ { echo "$as_me:25201: error: Cannot find db.h" >&5
 echo "$as_me: error: Cannot find db.h" >&2;}
    { (exit 1); exit 1; }; }
 
@@ -19157,50 +25206,50 @@
 
 fi
 
-if test -z "$cf_user_CFLAGS" && test "$with_no_leaks" = no ; then
-	CFLAGS=`echo ${CFLAGS} | sed -e 's%-g %%' -e 's%-g$%%'`
-	CXXFLAGS=`echo ${CXXFLAGS} | sed -e 's%-g %%' -e 's%-g$%%'`
+if test -z "$cf_user_CFLAGS" && test "$enable_leaks" = yes ; then
+	CFLAGS=`echo "${CFLAGS}" | sed -e 's%-g %%' -e 's%-g$%%' -e 's%[	]% %g' -e 's% [ ]*% %g' -e 's%^ %%' -e 's% $%%'`
+	CXXFLAGS=`echo "${CXXFLAGS}" | sed -e 's%-g %%' -e 's%-g$%%' -e 's%[	]% %g' -e 's% [ ]*% %g' -e 's%^ %%' -e 's% $%%'`
 fi
 
 # Just in case, check if the C compiler has a bool type.
 
-echo "$as_me:19167: checking if we should include stdbool.h" >&5
+echo "$as_me:25216: checking if we should include stdbool.h" >&5
 echo $ECHO_N "checking if we should include stdbool.h... $ECHO_C" >&6
 
 if test "${cf_cv_header_stdbool_h+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 19175 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 25224 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
-bool foo = false
+bool foo = false; (void)foo
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19187: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25236: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:19190: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:19193: \"$ac_try\"") >&5
+  echo "$as_me:25239: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:25242: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19196: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:25245: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_header_stdbool_h=0
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 19203 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 25252 "configure"
 #include "confdefs.h"
 
 #ifndef __BEOS__
@@ -19208,91 +25257,91 @@
 #endif
 
 int
-main ()
+main (void)
 {
-bool foo = false
+bool foo = false; (void)foo
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19219: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25268: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:19222: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:19225: \"$ac_try\"") >&5
+  echo "$as_me:25271: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:25274: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19228: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:25277: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_header_stdbool_h=1
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_header_stdbool_h=0
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 
 if test "$cf_cv_header_stdbool_h" = 1
-then	echo "$as_me:19242: result: yes" >&5
+then	echo "$as_me:25291: result: yes" >&5
 echo "${ECHO_T}yes" >&6
-else	echo "$as_me:19244: result: no" >&5
+else	echo "$as_me:25293: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
-echo "$as_me:19248: checking for builtin bool type" >&5
+echo "$as_me:25297: checking for builtin bool type" >&5
 echo $ECHO_N "checking for builtin bool type... $ECHO_C" >&6
 
 if test "${cf_cv_cc_bool_type+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 19256 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 25305 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
 #include <sys/types.h>
 
 int
-main ()
+main (void)
 {
-bool x = false
+bool x = false; (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19271: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:25320: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:19274: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:19277: \"$ac_try\"") >&5
+  echo "$as_me:25323: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:25326: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19280: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:25329: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_cc_bool_type=1
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_cc_bool_type=0
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
 
 if test "$cf_cv_cc_bool_type" = 1
-then	echo "$as_me:19293: result: yes" >&5
+then	echo "$as_me:25342: result: yes" >&5
 echo "${ECHO_T}yes" >&6
-else	echo "$as_me:19295: result: no" >&5
+else	echo "$as_me:25344: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
@@ -19300,153 +25349,201 @@
 if test -n "$CXX" ; then
 	ac_ext=cc
 ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 if test -n "$GXX" ; then
-case $cf_cv_system_name in
-(os2*)
-	cf_stdcpp_libname=stdcpp
-	;;
-(*)
-	cf_stdcpp_libname=stdc++
-	;;
-esac
-echo "$as_me:19317: checking for library $cf_stdcpp_libname" >&5
+
+	cf_save="$LIBS"
+	LIBS="$LIBS $CXXLIBS"
+	echo "$as_me:25361: checking if we already have C++ library" >&5
+echo $ECHO_N "checking if we already have C++ library... $ECHO_C" >&6
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 25364 "configure"
+#include "confdefs.h"
+
+			#include <iostream>
+int
+main (void)
+{
+
+			std::cout << "Hello World!" << std::endl;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:25378: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:25381: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:25384: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:25387: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_have_libstdcpp=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_have_libstdcpp=no
+fi
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+	echo "$as_me:25396: result: $cf_have_libstdcpp" >&5
+echo "${ECHO_T}$cf_have_libstdcpp" >&6
+	LIBS="$cf_save"
+
+	if test "$cf_have_libstdcpp" != yes
+	then
+		case "$cf_cv_system_name" in
+		(os2*)
+			if test -z "`g++ -dM -E - < /dev/null | grep __KLIBC__`"; then
+				cf_stdcpp_libname=stdcpp
+			else
+				cf_stdcpp_libname=stdc++
+			fi
+			;;
+		(*)
+			cf_stdcpp_libname=stdc++
+			;;
+		esac
+
+		echo "$as_me:25415: checking for library $cf_stdcpp_libname" >&5
 echo $ECHO_N "checking for library $cf_stdcpp_libname... $ECHO_C" >&6
 if test "${cf_cv_libstdcpp+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cf_save="$LIBS"
+			cf_save="$LIBS"
+			LIBS="$LIBS $CXXLIBS"
 
-cf_add_libs="-l$cf_stdcpp_libname"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_stdcpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
 
-cat >conftest.$ac_ext <<_ACEOF
-#line 19342 "configure"
+		cat >"conftest.$ac_ext" <<_ACEOF
+#line 25441 "configure"
 #include "confdefs.h"
 
-#include <strstream.h>
+				#include <iostream>
 int
-main ()
+main (void)
 {
 
-char buf[80];
-strstreambuf foo(buf, sizeof(buf))
-
+				std::cout << "Hello World!" << std::endl;
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:19358: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:25455: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:19361: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:19364: \"$ac_try\"") >&5
+  echo "$as_me:25458: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:25461: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19367: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:25464: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_libstdcpp=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_libstdcpp=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
-	LIBS="$cf_save"
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
+			LIBS="$cf_save"
 
 fi
-echo "$as_me:19379: result: $cf_cv_libstdcpp" >&5
+echo "$as_me:25476: result: $cf_cv_libstdcpp" >&5
 echo "${ECHO_T}$cf_cv_libstdcpp" >&6
-test "$cf_cv_libstdcpp" = yes &&
-cf_add_libs="-l$cf_stdcpp_libname"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $CXXLIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+		test "$cf_cv_libstdcpp" = yes && {
+cf_add_libs="$CXXLIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_stdcpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 CXXLIBS="$cf_add_libs"
-
+ }
+	fi
 fi
 
-	echo "$as_me:19400: checking whether $CXX understands -c and -o together" >&5
+	echo "$as_me:25498: checking whether $CXX understands -c and -o together" >&5
 echo $ECHO_N "checking whether $CXX understands -c and -o together... $ECHO_C" >&6
 if test "${cf_cv_prog_CXX_c_o+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
 cat > conftest.$ac_ext <<CF_EOF
-#include <stdio.h>
-int main()
+int main(void)
 {
 	${cf_cv_main_return:-return}(0);
 }
 CF_EOF
 # We do the test twice because some compilers refuse to overwrite an
 # existing .o file with -o, though they will create one.
-ac_try='$CXX -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-if { (eval echo "$as_me:19416: \"$ac_try\"") >&5
+ac_try='$CXX $CXXFLAGS $CPPFLAGS -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+if { (eval echo "$as_me:25513: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19419: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-  test -f conftest2.$ac_objext && { (eval echo "$as_me:19421: \"$ac_try\"") >&5
+  echo "$as_me:25516: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+  test -f conftest2.$ac_objext && { (eval echo "$as_me:25518: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19424: \$? = $ac_status" >&5
-  (exit $ac_status); };
+  echo "$as_me:25521: \$? = $ac_status" >&5
+  (exit "$ac_status"); };
 then
   eval cf_cv_prog_CXX_c_o=yes
 else
   eval cf_cv_prog_CXX_c_o=no
 fi
-rm -rf conftest*
+rm -rf ./conftest*
 
 fi
-if test $cf_cv_prog_CXX_c_o = yes; then
-  echo "$as_me:19435: result: yes" >&5
+if test "$cf_cv_prog_CXX_c_o" = yes; then
+  echo "$as_me:25532: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 else
-  echo "$as_me:19438: result: no" >&5
+  echo "$as_me:25535: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
-	case $GXX_VERSION in
-	(1*|2.0-6*)
+	case "$GXX_VERSION" in
+	(1.*|2.[0-6]*|[1-9][0-9].*)
 		cf_cxx_library=yes
 		;;
 	(*-2.7*|2.7*)
 
 cf_cxx_library=unknown
-case $cf_cv_system_name in
+case "$cf_cv_system_name" in
 (os2*)
 	cf_gpp_libname=gpp
 	;;
@@ -19455,67 +25552,67 @@
 	;;
 esac
 if test "$GXX" = yes; then
-	echo "$as_me:19458: checking for lib$cf_gpp_libname" >&5
+	echo "$as_me:25555: checking for lib$cf_gpp_libname" >&5
 echo $ECHO_N "checking for lib$cf_gpp_libname... $ECHO_C" >&6
 	cf_save="$LIBS"
 
-cf_add_libs="-l$cf_gpp_libname"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $LIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$LIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_gpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 LIBS="$cf_add_libs"
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 19479 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 25576 "configure"
 #include "confdefs.h"
 
 #include <$cf_gpp_libname/builtin.h>
 
 int
-main ()
+main (void)
 {
 two_arg_error_handler_t foo2 = lib_error_handler
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:19493: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:25590: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:19496: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:19499: \"$ac_try\"") >&5
+  echo "$as_me:25593: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:25596: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19502: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:25599: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cxx_library=yes
 
-cf_add_libs="-l$cf_gpp_libname"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $CXXLIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$CXXLIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_gpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 CXXLIBS="$cf_add_libs"
 
@@ -19534,48 +25631,48 @@
 	 fi
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 19539 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 25636 "configure"
 #include "confdefs.h"
 
 #include <builtin.h>
 
 int
-main ()
+main (void)
 {
 two_arg_error_handler_t foo2 = lib_error_handler
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:19553: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:25650: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:19556: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:19559: \"$ac_try\"") >&5
+  echo "$as_me:25653: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:25656: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19562: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:25659: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cxx_library=yes
 
-cf_add_libs="-l$cf_gpp_libname"
-# Filter out duplicates - this happens with badly-designed ".pc" files...
-for cf_add_1lib in $CXXLIBS
-do
-	for cf_add_2lib in $cf_add_libs
-	do
-		if test "x$cf_add_1lib" = "x$cf_add_2lib"
-		then
+cf_add_libs="$CXXLIBS"
+# reverse order
+cf_add_0lib=
+for cf_add_1lib in -l$cf_gpp_libname; do cf_add_0lib="$cf_add_1lib $cf_add_0lib"; done
+# filter duplicates
+for cf_add_1lib in $cf_add_0lib; do
+	for cf_add_2lib in $cf_add_libs; do
+		if test "x$cf_add_1lib" = "x$cf_add_2lib"; then
 			cf_add_1lib=
 			break
 		fi
 	done
-	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_libs $cf_add_1lib"
+	test -n "$cf_add_1lib" && cf_add_libs="$cf_add_1lib $cf_add_libs"
 done
 CXXLIBS="$cf_add_libs"
 
@@ -19585,14 +25682,14 @@
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cxx_library=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 	LIBS="$cf_save"
-	echo "$as_me:19595: result: $cf_cxx_library" >&5
+	echo "$as_me:25692: result: $cf_cxx_library" >&5
 echo "${ECHO_T}$cf_cxx_library" >&6
 fi
 
@@ -19604,11 +25701,11 @@
 
 	ac_ext=cc
 ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
-echo "$as_me:19611: checking how to run the C++ preprocessor" >&5
+ac_main_return="return"
+echo "$as_me:25708: checking how to run the C++ preprocessor" >&5
 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
 if test -z "$CXXCPP"; then
   if test "${ac_cv_prog_CXXCPP+set}" = set; then
@@ -19624,20 +25721,20 @@
   # with a fresh cross-compiler works.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 19628 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 25725 "configure"
 #include "confdefs.h"
 #include <assert.h>
                      Syntax error
 _ACEOF
-if { (eval echo "$as_me:19633: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:25730: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:19639: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:25736: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_cxx_preproc_warn_flag
   else
@@ -19650,27 +25747,27 @@
   :
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 
   # OK, works on sane cases.  Now check whether non-existent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 19662 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 25759 "configure"
 #include "confdefs.h"
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:19666: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:25763: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:19672: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:25769: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_cxx_preproc_warn_flag
   else
@@ -19684,16 +25781,16 @@
 continue
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 if $ac_preproc_ok; then
   break
 fi
@@ -19706,7 +25803,7 @@
 else
   ac_cv_prog_CXXCPP=$CXXCPP
 fi
-echo "$as_me:19709: result: $CXXCPP" >&5
+echo "$as_me:25806: result: $CXXCPP" >&5
 echo "${ECHO_T}$CXXCPP" >&6
 ac_preproc_ok=false
 for ac_cxx_preproc_warn_flag in '' yes
@@ -19715,20 +25812,20 @@
   # with a fresh cross-compiler works.
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp. "Syntax error" is here to catch this case.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 19719 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 25816 "configure"
 #include "confdefs.h"
 #include <assert.h>
                      Syntax error
 _ACEOF
-if { (eval echo "$as_me:19724: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:25821: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:19730: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:25827: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_cxx_preproc_warn_flag
   else
@@ -19741,27 +25838,27 @@
   :
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   # Broken: fails on valid input.
 continue
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 
   # OK, works on sane cases.  Now check whether non-existent headers
   # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-#line 19753 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 25850 "configure"
 #include "confdefs.h"
 #include <ac_nonexistent.h>
 _ACEOF
-if { (eval echo "$as_me:19757: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:25854: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:19763: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:25860: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_cxx_preproc_warn_flag
   else
@@ -19775,52 +25872,52 @@
 continue
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   # Passes both tests.
 ac_preproc_ok=:
 break
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 
 done
 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 if $ac_preproc_ok; then
   :
 else
-  { { echo "$as_me:19791: error: C++ preprocessor \"$CXXCPP\" fails sanity check" >&5
+  { { echo "$as_me:25888: error: C++ preprocessor \"$CXXCPP\" fails sanity check" >&5
 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check" >&2;}
    { (exit 1); exit 1; }; }
 fi
 
 ac_ext=cc
 ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 for ac_header in typeinfo
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:19806: checking for $ac_header" >&5
+echo "$as_me:25903: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 19812 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 25909 "configure"
 #include "confdefs.h"
 #include <$ac_header>
 _ACEOF
-if { (eval echo "$as_me:19816: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:25913: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:19822: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:25919: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_cxx_preproc_warn_flag
   else
@@ -19833,14 +25930,14 @@
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   eval "$as_ac_Header=no"
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 fi
-echo "$as_me:19841: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+echo "$as_me:25938: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 EOF
@@ -19851,24 +25948,24 @@
 for ac_header in iostream
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-echo "$as_me:19854: checking for $ac_header" >&5
+echo "$as_me:25951: checking for $ac_header" >&5
 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 if eval "test \"\${$as_ac_Header+set}\" = set"; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 19860 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 25957 "configure"
 #include "confdefs.h"
 #include <$ac_header>
 _ACEOF
-if { (eval echo "$as_me:19864: \"$ac_cpp conftest.$ac_ext\"") >&5
-  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+if { (eval echo "$as_me:25961: \"$ac_cpp "conftest.$ac_ext"\"") >&5
+  (eval $ac_cpp "conftest.$ac_ext") 2>conftest.er1
   ac_status=$?
-  egrep -v '^ *\+' conftest.er1 >conftest.err
+  $EGREP -v '^ *\+' conftest.er1 >conftest.err
   rm -f conftest.er1
   cat conftest.err >&5
-  echo "$as_me:19870: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null; then
+  echo "$as_me:25967: \$? = $ac_status" >&5
+  (exit "$ac_status"); } >/dev/null; then
   if test -s conftest.err; then
     ac_cpp_err=$ac_cxx_preproc_warn_flag
   else
@@ -19881,14 +25978,14 @@
   eval "$as_ac_Header=yes"
 else
   echo "$as_me: failed program was:" >&5
-  cat conftest.$ac_ext >&5
+  cat "conftest.$ac_ext" >&5
   eval "$as_ac_Header=no"
 fi
-rm -f conftest.err conftest.$ac_ext
+rm -f conftest.err "conftest.$ac_ext"
 fi
-echo "$as_me:19889: result: `eval echo '${'$as_ac_Header'}'`" >&5
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
+echo "$as_me:25986: result: `eval echo '${'"$as_ac_Header"'}'`" >&5
+echo "${ECHO_T}`eval echo '${'"$as_ac_Header"'}'`" >&6
+if test "`eval echo '${'"$as_ac_Header"'}'`" = yes; then
   cat >>confdefs.h <<EOF
 #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 EOF
@@ -19897,17 +25994,17 @@
 done
 
 if test x"$ac_cv_header_iostream" = xyes ; then
-	echo "$as_me:19900: checking if iostream uses std-namespace" >&5
+	echo "$as_me:25997: checking if iostream uses std-namespace" >&5
 echo $ECHO_N "checking if iostream uses std-namespace... $ECHO_C" >&6
-	cat >conftest.$ac_ext <<_ACEOF
-#line 19903 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 26000 "configure"
 #include "confdefs.h"
 
 #include <iostream>
 using std::endl;
 using std::cerr;
 int
-main ()
+main (void)
 {
 
 cerr << "testing" << endl;
@@ -19916,26 +26013,26 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19920: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26017: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:19923: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:19926: \"$ac_try\"") >&5
+  echo "$as_me:26020: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26023: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19929: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:26026: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_iostream_namespace=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_iostream_namespace=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
-	echo "$as_me:19938: result: $cf_iostream_namespace" >&5
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+	echo "$as_me:26035: result: $cf_iostream_namespace" >&5
 echo "${ECHO_T}$cf_iostream_namespace" >&6
 	if test "$cf_iostream_namespace" = yes ; then
 
@@ -19946,43 +26043,43 @@
 	fi
 fi
 
-echo "$as_me:19949: checking if we should include stdbool.h" >&5
+echo "$as_me:26046: checking if we should include stdbool.h" >&5
 echo $ECHO_N "checking if we should include stdbool.h... $ECHO_C" >&6
 
 if test "${cf_cv_header_stdbool_h+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 19957 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 26054 "configure"
 #include "confdefs.h"
 
 int
-main ()
+main (void)
 {
-bool foo = false
+bool foo = false; (void)foo
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:19969: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26066: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:19972: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:19975: \"$ac_try\"") >&5
+  echo "$as_me:26069: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26072: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:19978: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:26075: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_header_stdbool_h=0
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-cat >conftest.$ac_ext <<_ACEOF
-#line 19985 "configure"
+cat "conftest.$ac_ext" >&5
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 26082 "configure"
 #include "confdefs.h"
 
 #ifndef __BEOS__
@@ -19990,110 +26087,104 @@
 #endif
 
 int
-main ()
+main (void)
 {
-bool foo = false
+bool foo = false; (void)foo
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:20001: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26098: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:20004: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:20007: \"$ac_try\"") >&5
+  echo "$as_me:26101: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26104: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:20010: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:26107: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_header_stdbool_h=1
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_header_stdbool_h=0
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 
 if test "$cf_cv_header_stdbool_h" = 1
-then	echo "$as_me:20024: result: yes" >&5
+then	echo "$as_me:26121: result: yes" >&5
 echo "${ECHO_T}yes" >&6
-else	echo "$as_me:20026: result: no" >&5
+else	echo "$as_me:26123: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
-echo "$as_me:20030: checking for builtin bool type" >&5
+echo "$as_me:26127: checking for builtin bool type" >&5
 echo $ECHO_N "checking for builtin bool type... $ECHO_C" >&6
 
 if test "${cf_cv_builtin_bool+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 20038 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 26135 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
 #include <sys/types.h>
 
 int
-main ()
+main (void)
 {
-bool x = false
+bool x = false; (void)x
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:20053: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26150: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:20056: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:20059: \"$ac_try\"") >&5
+  echo "$as_me:26153: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26156: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:20062: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:26159: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_builtin_bool=1
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_builtin_bool=0
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 fi
 
 if test "$cf_cv_builtin_bool" = 1
-then	echo "$as_me:20075: result: yes" >&5
+then	echo "$as_me:26172: result: yes" >&5
 echo "${ECHO_T}yes" >&6
-else	echo "$as_me:20077: result: no" >&5
+else	echo "$as_me:26174: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
-echo "$as_me:20081: checking for size of bool" >&5
-echo $ECHO_N "checking for size of bool... $ECHO_C" >&6
-if test "${cf_cv_type_of_bool+set}" = set; then
+echo "$as_me:26178: checking for bool" >&5
+echo $ECHO_N "checking for bool... $ECHO_C" >&6
+if test "${ac_cv_type_bool+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-
-	rm -f cf_test.out
-	if test "$cross_compiling" = yes; then
-  cf_cv_type_of_bool=unknown
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 20092 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 26184 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
-#include <stdio.h>
+$ac_includes_default
 
 #if defined(__cplusplus)
 
@@ -20113,7 +26204,377 @@
 
 #endif
 
-int main()
+int
+main (void)
+{
+if ((bool *) 0)
+  return 0;
+if (sizeof (bool))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26219: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:26222: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26225: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:26228: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_type_bool=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_type_bool=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:26238: result: $ac_cv_type_bool" >&5
+echo "${ECHO_T}$ac_cv_type_bool" >&6
+
+echo "$as_me:26241: checking size of bool" >&5
+echo $ECHO_N "checking size of bool... $ECHO_C" >&6
+if test "${ac_cv_sizeof_bool+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_bool" = yes; then
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 26250 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (bool)) >= 0)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26282: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:26285: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26288: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:26291: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 26296 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (bool)) <= $ac_mid)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26328: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:26331: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26334: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:26337: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`; ac_mid=`expr 2 '*' "$ac_mid" + 1`
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  done
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 26353 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (bool)) >= $ac_mid)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26385: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:26388: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26391: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:26394: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_hi=`expr "$ac_mid" - 1`; ac_mid=`expr 2 '*' "$ac_mid"`
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  done
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' "$ac_hi" - "$ac_lo" ')' / 2 + "$ac_lo"`
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 26410 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (bool)) <= $ac_mid)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26442: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:26445: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26448: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:26451: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+done
+ac_cv_sizeof_bool=$ac_lo
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:26464: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 26469 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+FILE *f = fopen ("conftest.val", "w");
+if (!f)
+  $ac_main_return (1);
+fprintf (f, "%ld", (long)(sizeof (bool)));
+fclose (f);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:26505: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:26508: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:26510: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:26513: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_sizeof_bool=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_bool=0
+fi
+fi
+echo "$as_me:26529: result: $ac_cv_sizeof_bool" >&5
+echo "${ECHO_T}$ac_cv_sizeof_bool" >&6
+cat >>confdefs.h <<EOF
+#define SIZEOF_BOOL $ac_cv_sizeof_bool
+EOF
+
+echo "$as_me:26535: checking for type of bool" >&5
+echo $ECHO_N "checking for type of bool... $ECHO_C" >&6
+if test "${cf_cv_type_of_bool+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	rm -f cf_test.out
+	if test "$cross_compiling" = yes; then
+
+		case x$ac_cv_sizeof_bool in
+		(x1) cf_cv_type_of_bool="unsigned char";;
+		(x2) cf_cv_type_of_bool="unsigned short";;
+		(x4) cf_cv_type_of_bool="unsigned int";;
+		(x8) cf_cv_type_of_bool="unsigned long";;
+		(*)  cf_cv_type_of_bool=unknown;;
+		esac
+
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 26554 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int main(void)
 {
 	FILE *fp = fopen("cf_test.out", "w");
 	if (fp != 0) {
@@ -20130,17 +26591,17 @@
 }
 
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:20134: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:26595: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:20137: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:20139: \"$ac_try\"") >&5
+  echo "$as_me:26598: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:26600: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:20142: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:26603: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_type_of_bool=`cat cf_test.out`
 		 if test -z "$cf_cv_type_of_bool"; then
 		   cf_cv_type_of_bool=unknown
@@ -20148,27 +26609,27 @@
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_type_of_bool=unknown
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-
-fi
-
 	rm -f cf_test.out
-echo "$as_me:20160: result: $cf_cv_type_of_bool" >&5
+
+fi
+echo "$as_me:26620: result: $cf_cv_type_of_bool" >&5
 echo "${ECHO_T}$cf_cv_type_of_bool" >&6
+
 if test "$cf_cv_type_of_bool" = unknown ; then
 	case .$NCURSES_BOOL in
 	(.auto|.) NCURSES_BOOL=unsigned;;
 	esac
-	{ echo "$as_me:20166: WARNING: Assuming $NCURSES_BOOL for type of bool" >&5
+	{ echo "$as_me:26627: WARNING: Assuming $NCURSES_BOOL for type of bool" >&5
 echo "$as_me: WARNING: Assuming $NCURSES_BOOL for type of bool" >&2;}
 	cf_cv_type_of_bool=$NCURSES_BOOL
 fi
 
-echo "$as_me:20171: checking for special defines needed for etip.h" >&5
+echo "$as_me:26632: checking for special defines needed for etip.h" >&5
 echo $ECHO_N "checking for special defines needed for etip.h... $ECHO_C" >&6
 cf_save_CXXFLAGS="$CXXFLAGS"
 cf_result="none"
@@ -20176,7 +26637,7 @@
 # etip.h includes ncurses.h which includes ncurses_dll.h
 # But ncurses_dll.h is generated - fix here.
 test -d include || mkdir include
-test -f include/ncurses_dll.h || sed -e 's/@NCURSES_WRAP_PREFIX@/'$NCURSES_WRAP_PREFIX'/g' ${srcdir}/include/ncurses_dll.h.in >include/ncurses_dll.h
+test -f include/ncurses_dll.h || sed -e 's/@NCURSES_WRAP_PREFIX@/'$NCURSES_WRAP_PREFIX'/g' "${srcdir}/include/ncurses_dll.h.in" >include/ncurses_dll.h
 
 for cf_math in "" MATH_H
 do
@@ -20185,32 +26646,32 @@
 	CXXFLAGS="$cf_save_CXXFLAGS -I${srcdir}/c++ -I${srcdir}/menu -Iinclude -I${srcdir}/include"
 	test -n "$cf_math" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_math}"
 	test -n "$cf_excp" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_excp}"
-cat >conftest.$ac_ext <<_ACEOF
-#line 20189 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 26650 "configure"
 #include "confdefs.h"
 
 #include <etip.h.in>
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:20203: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26664: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:20206: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:20209: \"$ac_try\"") >&5
+  echo "$as_me:26667: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26670: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:20212: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:26673: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 	test -n "$cf_math" && cat >>confdefs.h <<EOF
 #define ETIP_NEEDS_${cf_math} 1
@@ -20225,17 +26686,89 @@
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 done
 done
-echo "$as_me:20233: result: $cf_result" >&5
-echo "${ECHO_T}$cf_result" >&6
+echo "$as_me:26694: result: ${cf_result:-(none)}" >&5
+echo "${ECHO_T}${cf_result:-(none)}" >&6
 CXXFLAGS="$cf_save_CXXFLAGS"
 
 if test -n "$CXX"; then
-echo "$as_me:20238: checking if $CXX accepts parameter initialization" >&5
+echo "$as_me:26699: checking if $CXX accepts override keyword" >&5
+echo $ECHO_N "checking if $CXX accepts override keyword... $ECHO_C" >&6
+if test "${cf_cv_cpp_override+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
+
+	if test "$cross_compiling" = yes; then
+  cf_cv_cpp_override=unknown
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 26716 "configure"
+#include "confdefs.h"
+
+class base
+{
+public:
+	virtual int foo(float x) = 0;
+};
+
+class derived: public base
+{
+public:
+	int foo(float x) override { return x != 0.0 ? 1 : 0; }
+};
+
+int main(void) { }
+
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:26735: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:26738: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:26740: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:26743: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  cf_cv_cpp_override=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+cf_cv_cpp_override=no
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+	ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ac_main_return="return"
+
+fi
+echo "$as_me:26762: result: $cf_cv_cpp_override" >&5
+echo "${ECHO_T}$cf_cv_cpp_override" >&6
+fi
+test "$cf_cv_cpp_override" = yes &&
+cat >>confdefs.h <<\EOF
+#define CPP_HAS_OVERRIDE 1
+EOF
+
+if test -n "$CXX"; then
+echo "$as_me:26771: checking if $CXX accepts parameter initialization" >&5
 echo $ECHO_N "checking if $CXX accepts parameter initialization... $ECHO_C" >&6
 if test "${cf_cv_cpp_param_init+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -20243,16 +26776,16 @@
 
 	ac_ext=cc
 ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 	if test "$cross_compiling" = yes; then
   cf_cv_cpp_param_init=unknown
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 20255 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 26788 "configure"
 #include "confdefs.h"
 
 class TEST {
@@ -20267,38 +26800,38 @@
 {
 	value = x;
 }
-int main() { }
+int main(void) { }
 
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:20274: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:26807: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:20277: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:20279: \"$ac_try\"") >&5
+  echo "$as_me:26810: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:26812: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:20282: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:26815: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_cpp_param_init=yes
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_cpp_param_init=no
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 	ac_ext=cc
 ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 fi
-echo "$as_me:20301: result: $cf_cv_cpp_param_init" >&5
+echo "$as_me:26834: result: $cf_cv_cpp_param_init" >&5
 echo "${ECHO_T}$cf_cv_cpp_param_init" >&6
 fi
 test "$cf_cv_cpp_param_init" = yes &&
@@ -20308,7 +26841,7 @@
 
 if test -n "$CXX"; then
 
-echo "$as_me:20311: checking if $CXX accepts static_cast" >&5
+echo "$as_me:26844: checking if $CXX accepts static_cast" >&5
 echo $ECHO_N "checking if $CXX accepts static_cast... $ECHO_C" >&6
 if test "${cf_cv_cpp_static_cast+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -20316,13 +26849,13 @@
 
 	ac_ext=cc
 ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
-	cat >conftest.$ac_ext <<_ACEOF
-#line 20325 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 26858 "configure"
 #include "confdefs.h"
 
 class NCursesPanel
@@ -20357,7 +26890,7 @@
 };
 
 int
-main ()
+main (void)
 {
 
 	const char* p_UserData = static_cast<char*>(0)
@@ -20365,35 +26898,35 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:20369: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:26902: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:20372: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:20375: \"$ac_try\"") >&5
+  echo "$as_me:26905: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:26908: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:20378: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:26911: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_cpp_static_cast=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_cpp_static_cast=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 
 	ac_ext=cc
 ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS "conftest.$ac_ext" >&5'
+ac_link='$CXX -o "conftest$ac_exeext" $CXXFLAGS $CPPFLAGS $LDFLAGS "conftest.$ac_ext" $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-ac_main_return=return
+ac_main_return="return"
 
 fi
-echo "$as_me:20396: result: $cf_cv_cpp_static_cast" >&5
+echo "$as_me:26929: result: $cf_cv_cpp_static_cast" >&5
 echo "${ECHO_T}$cf_cv_cpp_static_cast" >&6
 
 fi
@@ -20405,7 +26938,7 @@
 
 	CXX_AR='$(AR)'
 	CXX_ARFLAGS='$(ARFLAGS)'
-	case $cf_cv_system_name in
+	case "$cf_cv_system_name" in
 	(irix*)
 	    if test "$GXX" != yes ; then
 		CXX_AR='$(CXX)'
@@ -20442,22 +26975,16 @@
 	else
 		if test "$cf_cv_header_stdbool_h" = 1 ; then
 
-echo "$as_me:20445: checking for size of bool" >&5
-echo $ECHO_N "checking for size of bool... $ECHO_C" >&6
-if test "${cf_cv_type_of_bool+set}" = set; then
+echo "$as_me:26978: checking for bool" >&5
+echo $ECHO_N "checking for bool... $ECHO_C" >&6
+if test "${ac_cv_type_bool+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-
-	rm -f cf_test.out
-	if test "$cross_compiling" = yes; then
-  cf_cv_type_of_bool=unknown
-else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 20456 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 26984 "configure"
 #include "confdefs.h"
 
-#include <stdlib.h>
-#include <stdio.h>
+$ac_includes_default
 
 #if defined(__cplusplus)
 
@@ -20477,7 +27004,377 @@
 
 #endif
 
-int main()
+int
+main (void)
+{
+if ((bool *) 0)
+  return 0;
+if (sizeof (bool))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:27019: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:27022: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:27025: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:27028: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_type_bool=yes
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_cv_type_bool=no
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+echo "$as_me:27038: result: $ac_cv_type_bool" >&5
+echo "${ECHO_T}$ac_cv_type_bool" >&6
+
+echo "$as_me:27041: checking size of bool" >&5
+echo $ECHO_N "checking size of bool... $ECHO_C" >&6
+if test "${ac_cv_sizeof_bool+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_bool" = yes; then
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 27050 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (bool)) >= 0)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:27082: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:27085: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:27088: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:27091: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 27096 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (bool)) <= $ac_mid)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:27128: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:27131: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:27134: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:27137: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`; ac_mid=`expr 2 '*' "$ac_mid" + 1`
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  done
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 27153 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (bool)) >= $ac_mid)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:27185: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:27188: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:27191: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:27194: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_hi=`expr "$ac_mid" - 1`; ac_mid=`expr 2 '*' "$ac_mid"`
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+  done
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' "$ac_hi" - "$ac_lo" ')' / 2 + "$ac_lo"`
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 27210 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+int _array_ [1 - 2 * !((sizeof (bool)) <= $ac_mid)]
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:27242: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:27245: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:27248: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:27251: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`
+fi
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
+done
+ac_cv_sizeof_bool=$ac_lo
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:27264: error: cannot run test program while cross compiling" >&5
+echo "$as_me: error: cannot run test program while cross compiling" >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 27269 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int
+main (void)
+{
+FILE *f = fopen ("conftest.val", "w");
+if (!f)
+  $ac_main_return (1);
+fprintf (f, "%ld", (long)(sizeof (bool)));
+fclose (f);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:27305: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:27308: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:27310: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:27313: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
+  ac_cv_sizeof_bool=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat "conftest.$ac_ext" >&5
+fi
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_bool=0
+fi
+fi
+echo "$as_me:27329: result: $ac_cv_sizeof_bool" >&5
+echo "${ECHO_T}$ac_cv_sizeof_bool" >&6
+cat >>confdefs.h <<EOF
+#define SIZEOF_BOOL $ac_cv_sizeof_bool
+EOF
+
+echo "$as_me:27335: checking for type of bool" >&5
+echo $ECHO_N "checking for type of bool... $ECHO_C" >&6
+if test "${cf_cv_type_of_bool+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	rm -f cf_test.out
+	if test "$cross_compiling" = yes; then
+
+		case x$ac_cv_sizeof_bool in
+		(x1) cf_cv_type_of_bool="unsigned char";;
+		(x2) cf_cv_type_of_bool="unsigned short";;
+		(x4) cf_cv_type_of_bool="unsigned int";;
+		(x8) cf_cv_type_of_bool="unsigned long";;
+		(*)  cf_cv_type_of_bool=unknown;;
+		esac
+
+else
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 27354 "configure"
+#include "confdefs.h"
+
+$ac_includes_default
+
+#if defined(__cplusplus)
+
+#ifdef HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
+#include <builtin.h>
+#endif
+
+#else
+
+#if $cf_cv_header_stdbool_h
+#include <stdbool.h>
+#endif
+
+#endif
+
+int main(void)
 {
 	FILE *fp = fopen("cf_test.out", "w");
 	if (fp != 0) {
@@ -20494,17 +27391,17 @@
 }
 
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:20498: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:27395: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:20501: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:20503: \"$ac_try\"") >&5
+  echo "$as_me:27398: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:27400: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:20506: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:27403: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   cf_cv_type_of_bool=`cat cf_test.out`
 		 if test -z "$cf_cv_type_of_bool"; then
 		   cf_cv_type_of_bool=unknown
@@ -20512,34 +27409,34 @@
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_cv_type_of_bool=unknown
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-
-fi
-
 	rm -f cf_test.out
-echo "$as_me:20524: result: $cf_cv_type_of_bool" >&5
+
+fi
+echo "$as_me:27420: result: $cf_cv_type_of_bool" >&5
 echo "${ECHO_T}$cf_cv_type_of_bool" >&6
+
 if test "$cf_cv_type_of_bool" = unknown ; then
 	case .$NCURSES_BOOL in
 	(.auto|.) NCURSES_BOOL=unsigned;;
 	esac
-	{ echo "$as_me:20530: WARNING: Assuming $NCURSES_BOOL for type of bool" >&5
+	{ echo "$as_me:27427: WARNING: Assuming $NCURSES_BOOL for type of bool" >&5
 echo "$as_me: WARNING: Assuming $NCURSES_BOOL for type of bool" >&2;}
 	cf_cv_type_of_bool=$NCURSES_BOOL
 fi
 
 		else
-			echo "$as_me:20536: checking for fallback type of bool" >&5
+			echo "$as_me:27433: checking for fallback type of bool" >&5
 echo $ECHO_N "checking for fallback type of bool... $ECHO_C" >&6
 			case "$host_cpu" in
 			(i?86)	cf_cv_type_of_bool=char	;;
 			(*)	cf_cv_type_of_bool=int	;;
 			esac
-			echo "$as_me:20542: result: $cf_cv_type_of_bool" >&5
+			echo "$as_me:27439: result: $cf_cv_type_of_bool" >&5
 echo "${ECHO_T}$cf_cv_type_of_bool" >&6
 		fi
 	fi
@@ -20551,11 +27448,11 @@
 # specify the type of bool in a configure-script option and postpone
 # integration with the C++ compiler provided that the types are compatible.
 USE_CXX_BOOL=1
-if test $cf_cv_cc_bool_type = 1
+if test "$cf_cv_cc_bool_type" = 1
 then
 	# oops: C has a bool.  Unlikely, but C++ could differ.
 	USE_CXX_BOOL=0
-elif test $cf_cv_builtin_bool = 0
+elif test "$cf_cv_builtin_bool" = 0
 then
 	# C++ has no bool
 	USE_CXX_BOOL=0
@@ -20568,7 +27465,7 @@
 
 	if test "$cf_with_ada" != "no" ; then
 		if test "$with_libtool" != "no"; then
-			{ echo "$as_me:20571: WARNING: libtool does not support Ada - disabling feature" >&5
+			{ echo "$as_me:27468: WARNING: libtool does not support Ada - disabling feature" >&5
 echo "$as_me: WARNING: libtool does not support Ada - disabling feature" >&2;}
 			cf_with_ada=no
 		fi
@@ -20576,67 +27473,161 @@
 
 	if test "$cf_with_ada" != "no" ; then
 
-cf_ada_make=gnatmake
-# Extract the first word of "$cf_ada_make", so it can be a program name with args.
-set dummy $cf_ada_make; ac_word=$2
-echo "$as_me:20582: checking for $ac_word" >&5
+for cf_prog_gnat in gnat gnatmake gprconfig gprbuild
+do
+
+cf_upper_prog_gnat=`echo "${cf_prog_gnat}" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+	unset ac_cv_path_cf_TEMP_gnat
+	unset cf_TEMP_gnat
+	# Extract the first word of "$cf_prog_gnat", so it can be a program name with args.
+set dummy $cf_prog_gnat; ac_word=$2
+echo "$as_me:27485: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_prog_gnat_exists+set}" = set; then
+if test "${ac_cv_path_cf_TEMP_gnat+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  if test -n "$gnat_exists"; then
-  ac_cv_prog_gnat_exists="$gnat_exists" # Let the user override the test.
-else
+  case $cf_TEMP_gnat in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_cf_TEMP_gnat="$cf_TEMP_gnat" # Let the user override the test with a path.
+  ;;
+  *)
   ac_save_IFS=$IFS; IFS=$ac_path_separator
 ac_dummy="$PATH"
 for ac_dir in $ac_dummy; do
   IFS=$ac_save_IFS
   test -z "$ac_dir" && ac_dir=.
-  $as_executable_p "$ac_dir/$ac_word" || continue
-ac_cv_prog_gnat_exists="yes"
-echo "$as_me:20597: found $ac_dir/$ac_word" >&5
-break
+  if $as_executable_p "$ac_dir/$ac_word"; then
+   ac_cv_path_cf_TEMP_gnat="$ac_dir/$ac_word"
+   echo "$as_me:27502: found $ac_dir/$ac_word" >&5
+   break
+fi
 done
 
-  test -z "$ac_cv_prog_gnat_exists" && ac_cv_prog_gnat_exists="no"
+  test -z "$ac_cv_path_cf_TEMP_gnat" && ac_cv_path_cf_TEMP_gnat="no"
+  ;;
+esac
 fi
-fi
-gnat_exists=$ac_cv_prog_gnat_exists
-if test -n "$gnat_exists"; then
-  echo "$as_me:20606: result: $gnat_exists" >&5
-echo "${ECHO_T}$gnat_exists" >&6
+cf_TEMP_gnat=$ac_cv_path_cf_TEMP_gnat
+
+if test -n "$cf_TEMP_gnat"; then
+  echo "$as_me:27514: result: $cf_TEMP_gnat" >&5
+echo "${ECHO_T}$cf_TEMP_gnat" >&6
 else
-  echo "$as_me:20609: result: no" >&5
+  echo "$as_me:27517: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
-if test "$ac_cv_prog_gnat_exists" = no; then
+	eval "cf_cv_PATH_$cf_upper_prog_gnat=$ac_cv_path_cf_TEMP_gnat"
+
+	if test "x$cf_TEMP_gnat" != xno; then
+		unset cf_cv_gnat_version
+		unset cf_TEMP_gnat
+
+echo "$as_me:27527: checking for $cf_prog_gnat version" >&5
+echo $ECHO_N "checking for $cf_prog_gnat version... $ECHO_C" >&6
+if test "${cf_cv_gnat_version+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cf_cv_gnat_version=`$cf_prog_gnat --version 2>&1 | \
+	grep '[0-9].[0-9][0-9]*' |\
+	sed -e '2,$d' -e 's/[^0-9 \.]//g' -e 's/^[ ]*//' -e 's/ .*//'`
+
+fi
+echo "$as_me:27538: result: $cf_cv_gnat_version" >&5
+echo "${ECHO_T}$cf_cv_gnat_version" >&6
+test -z "$cf_cv_gnat_version" && cf_cv_gnat_version=no
+eval cf_TEMP_gnat=$cf_cv_gnat_version; unset cf_cv_gnat_version
+
+	fi
+	eval "cf_cv_VERSION_$cf_upper_prog_gnat=$cf_TEMP_gnat"
+
+	unset cf_TEMP_gnat
+	unset cf_cv_gnat_version
+	unset ac_cv_path_cf_TEMP_gnat
+done
+
+if test "x$cf_cv_VERSION_GNATMAKE" = "xno"; then
 	cf_ada_make=
 	cf_cv_prog_gnat_correct=no
 else
+	cf_ada_make=gnatmake
+	if test "x$cf_cv_VERSION_GPRCONFIG" = "xno"; then
+		# gprconfig is newer than gnatmake; we can continue...
+		cf_ada_config="##"
+	else
+		rm -rf ./conftest* ./*~conftest*
+		if mkdir conftest.src
+		then
+			cf_ada_config=""
+			cd conftest.src
+			for cf_gprconfig in Ada C
+			do
+				echo "$as_me:27567: checking for gprconfig name for $cf_gprconfig" >&5
+echo $ECHO_N "checking for gprconfig name for $cf_gprconfig... $ECHO_C" >&6
+				if test "$cf_gprconfig" = C
+				then
+					for cf_gprconfig_param in \
+						"$cf_gprconfig,,,,GNATGCC" \
+						"$cf_gprconfig,,,,GCC" \
+						"$cf_gprconfig"
+					do
+						cf_gprconfig_value=`echo s| gprconfig --config=$cf_gprconfig_param 2>&5 | ${AWK:-awk} '/^\*/{print $3;}' | head -n 1`
+						test -n "$cf_gprconfig_value" && break
+					done
+				else
+					cf_gprconfig_param=$cf_gprconfig
+					cf_gprconfig_value=`echo s| gprconfig --config=$cf_gprconfig_param 2>&5 | ${AWK:-awk} '/^\*/{print $3;}' | head -n 1`
+				fi
+				if test -n "$cf_gprconfig_value"
+				then
+					eval "cf_ada_config_$cf_gprconfig=$cf_gprconfig_value"
+					echo "$as_me:27586: result: $cf_gprconfig_value" >&5
+echo "${ECHO_T}$cf_gprconfig_value" >&6
+				else
+					echo "$as_me:27589: result: missing" >&5
+echo "${ECHO_T}missing" >&6
+					cf_ada_config="#"
+					break
+				fi
+			done
+			cd ..
+			rm -rf ./conftest* ./*~conftest*
+		fi
+	fi
+	if test "x$cf_ada_config" != "x#"
+	then
 
-echo "$as_me:20618: checking for gnat version" >&5
+echo "$as_me:27602: checking for gnat version" >&5
 echo $ECHO_N "checking for gnat version... $ECHO_C" >&6
-cf_gnat_version=`${cf_ada_make:-gnatmake} -v 2>&1 | \
+if test "${cf_cv_gnat_version+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+cf_cv_gnat_version=`${cf_ada_make:-gnatmake} --version 2>&1 | \
 	grep '[0-9].[0-9][0-9]*' |\
 	sed -e '2,$d' -e 's/[^0-9 \.]//g' -e 's/^[ ]*//' -e 's/ .*//'`
-echo "$as_me:20623: result: $cf_gnat_version" >&5
-echo "${ECHO_T}$cf_gnat_version" >&6
 
-case $cf_gnat_version in
-(3.1[1-9]*|3.[2-9]*|[4-9].*|20[0-9][0-9])
+fi
+echo "$as_me:27613: result: $cf_cv_gnat_version" >&5
+echo "${ECHO_T}$cf_cv_gnat_version" >&6
+test -z "$cf_cv_gnat_version" && cf_cv_gnat_version=no
+
+case "$cf_cv_gnat_version" in
+(3.1[1-9]*|3.[2-9]*|[4-9].*|[1-9][0-9].[0-9]*|20[0-9][0-9])
 	cf_cv_prog_gnat_correct=yes
 	;;
 (*)
-	{ echo "$as_me:20631: WARNING: Unsupported GNAT version $cf_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&5
-echo "$as_me: WARNING: Unsupported GNAT version $cf_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&2;}
+	{ echo "$as_me:27622: WARNING: Unsupported GNAT version $cf_cv_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&5
+echo "$as_me: WARNING: Unsupported GNAT version $cf_cv_gnat_version. We require 3.11 or better. Disabling Ada95 binding." >&2;}
 	cf_cv_prog_gnat_correct=no
 	;;
 esac
 
-	# Extract the first word of "m4", so it can be a program name with args.
+		# Extract the first word of "m4", so it can be a program name with args.
 set dummy m4; ac_word=$2
-echo "$as_me:20639: checking for $ac_word" >&5
+echo "$as_me:27630: checking for $ac_word" >&5
 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 if test "${ac_cv_prog_M4_exists+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -20651,7 +27642,7 @@
   test -z "$ac_dir" && ac_dir=.
   $as_executable_p "$ac_dir/$ac_word" || continue
 ac_cv_prog_M4_exists="yes"
-echo "$as_me:20654: found $ac_dir/$ac_word" >&5
+echo "$as_me:27645: found $ac_dir/$ac_word" >&5
 break
 done
 
@@ -20660,22 +27651,23 @@
 fi
 M4_exists=$ac_cv_prog_M4_exists
 if test -n "$M4_exists"; then
-  echo "$as_me:20663: result: $M4_exists" >&5
+  echo "$as_me:27654: result: $M4_exists" >&5
 echo "${ECHO_T}$M4_exists" >&6
 else
-  echo "$as_me:20666: result: no" >&5
+  echo "$as_me:27657: result: no" >&5
 echo "${ECHO_T}no" >&6
 fi
 
-	if test "$ac_cv_prog_M4_exists" = no; then
-		cf_cv_prog_gnat_correct=no
-		echo Ada95 binding required program m4 not found. Ada95 binding disabled.
-	fi
-	if test "$cf_cv_prog_gnat_correct" = yes; then
-		echo "$as_me:20675: checking if GNAT works" >&5
+		if test "$ac_cv_prog_M4_exists" = no; then
+			cf_cv_prog_gnat_correct=no
+			{ echo "$as_me:27663: WARNING: Ada95 binding required program m4 not found. Ada95 binding disabled" >&5
+echo "$as_me: WARNING: Ada95 binding required program m4 not found. Ada95 binding disabled" >&2;}
+		fi
+		if test "$cf_cv_prog_gnat_correct" = yes; then
+			echo "$as_me:27667: checking if GNAT works" >&5
 echo $ECHO_N "checking if GNAT works... $ECHO_C" >&6
 
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
 cat >>conftest.ads <<CF_EOF
 procedure conftest;
 CF_EOF
@@ -20689,7 +27681,7 @@
    GNAT.OS_Lib.OS_Exit (0);
 end conftest;
 CF_EOF
-if ( $cf_ada_make $ADAFLAGS conftest 1>&5 2>&1 ) ; then
+if ( "$cf_ada_make" $ADAFLAGS conftest 1>&5 2>&1 ) ; then
    if ( ./conftest 1>&5 2>&1 ) ; then
       cf_cv_prog_gnat_correct=yes
    else
@@ -20698,10 +27690,13 @@
 else
    cf_cv_prog_gnat_correct=no
 fi
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
 
-		echo "$as_me:20703: result: $cf_cv_prog_gnat_correct" >&5
+			echo "$as_me:27695: result: $cf_cv_prog_gnat_correct" >&5
 echo "${ECHO_T}$cf_cv_prog_gnat_correct" >&6
+		fi
+	else
+		cf_cv_prog_gnat_correct=no
 	fi
 fi
 
@@ -20709,7 +27704,7 @@
 
  	ADAFLAGS="$ADAFLAGS -gnatpn"
 
-	echo "$as_me:20712: checking optimization options for ADAFLAGS" >&5
+	echo "$as_me:27707: checking optimization options for ADAFLAGS" >&5
 echo $ECHO_N "checking optimization options for ADAFLAGS... $ECHO_C" >&6
 	case "$CFLAGS" in
 	(*-g*)
@@ -20726,10 +27721,10 @@
 
 		;;
 	esac
-	echo "$as_me:20729: result: $ADAFLAGS" >&5
+	echo "$as_me:27724: result: $ADAFLAGS" >&5
 echo "${ECHO_T}$ADAFLAGS" >&6
 
-echo "$as_me:20732: checking if GNATPREP supports -T option" >&5
+echo "$as_me:27727: checking if GNATPREP supports -T option" >&5
 echo $ECHO_N "checking if GNATPREP supports -T option... $ECHO_C" >&6
 if test "${cf_cv_gnatprep_opt_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -20739,21 +27734,21 @@
 gnatprep -T 2>/dev/null >/dev/null && cf_cv_gnatprep_opt_t=yes
 
 fi
-echo "$as_me:20742: result: $cf_cv_gnatprep_opt_t" >&5
+echo "$as_me:27737: result: $cf_cv_gnatprep_opt_t" >&5
 echo "${ECHO_T}$cf_cv_gnatprep_opt_t" >&6
 test "$cf_cv_gnatprep_opt_t" = yes && GNATPREP_OPTS="-T $GNATPREP_OPTS"
 
-echo "$as_me:20746: checking if GNAT supports generics" >&5
+echo "$as_me:27741: checking if GNAT supports generics" >&5
 echo $ECHO_N "checking if GNAT supports generics... $ECHO_C" >&6
-case $cf_gnat_version in
-(3.[1-9]*|[4-9].*)
+case "$cf_cv_gnat_version" in
+(3.1[1-9]*|3.[2-9]*|[4-9].*|[1-9][0-9].[0-9]*|20[0-9][0-9])
 	cf_gnat_generics=yes
 	;;
 (*)
 	cf_gnat_generics=no
 	;;
 esac
-echo "$as_me:20756: result: $cf_gnat_generics" >&5
+echo "$as_me:27751: result: $cf_gnat_generics" >&5
 echo "${ECHO_T}$cf_gnat_generics" >&6
 
 if test "$cf_gnat_generics" = yes
@@ -20765,13 +27760,13 @@
 	cf_generic_objects=
 fi
 
-echo "$as_me:20768: checking if GNAT supports SIGINT" >&5
+echo "$as_me:27763: checking if GNAT supports SIGINT" >&5
 echo $ECHO_N "checking if GNAT supports SIGINT... $ECHO_C" >&6
 if test "${cf_cv_gnat_sigint+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
 
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
 cat >>conftest.ads <<CF_EOF
 with Ada.Interrupts.Names;
 
@@ -20805,18 +27800,18 @@
    end Process;
 end ConfTest;
 CF_EOF
-if ( $cf_ada_make $ADAFLAGS conftest 1>&5 2>&1 ) ; then
+if ( "$cf_ada_make" $ADAFLAGS conftest 1>&5 2>&1 ) ; then
       cf_cv_gnat_sigint=yes
 else
    cf_cv_gnat_sigint=no
 fi
-rm -rf conftest* *~conftest*
+rm -rf ./conftest* ./*~conftest*
 
 fi
-echo "$as_me:20816: result: $cf_cv_gnat_sigint" >&5
+echo "$as_me:27811: result: $cf_cv_gnat_sigint" >&5
 echo "${ECHO_T}$cf_cv_gnat_sigint" >&6
 
-if test $cf_cv_gnat_sigint = yes ; then
+if test "$cf_cv_gnat_sigint" = yes ; then
 	USE_GNAT_SIGINT=""
 else
 	USE_GNAT_SIGINT="#"
@@ -20826,20 +27821,22 @@
 cf_gnat_projects=no
 
 if test "$enable_gnat_projects" != no ; then
-echo "$as_me:20829: checking if GNAT supports project files" >&5
+echo "$as_me:27824: checking if GNAT supports project files" >&5
 echo $ECHO_N "checking if GNAT supports project files... $ECHO_C" >&6
-case $cf_gnat_version in
+case "$cf_cv_gnat_version" in
 (3.[0-9]*)
 	;;
 (*)
-	case $cf_cv_system_name in
+	case "$cf_cv_system_name" in
 	(cygwin*|msys*)
 		;;
 	(*)
-		mkdir conftest.src conftest.bin conftest.lib
-		cd conftest.src
-		rm -rf conftest* *~conftest*
-		cat >>library.gpr <<CF_EOF
+		rm -rf ./conftest* ./*~conftest*
+		if mkdir conftest.src conftest.bin conftest.lib
+		then
+			cd conftest.src
+			rm -rf ./conftest* ./*~conftest*
+			cat >>library.gpr <<CF_EOF
 project Library is
   Kind := External ("LIB_KIND");
   for Library_Name use "ConfTest";
@@ -20852,12 +27849,12 @@
   for Source_Dirs use (Source_Dir);
 end Library;
 CF_EOF
-		cat >>confpackage.ads <<CF_EOF
+			cat >>confpackage.ads <<CF_EOF
 package ConfPackage is
    procedure conftest;
 end ConfPackage;
 CF_EOF
-		cat >>confpackage.adb <<CF_EOF
+			cat >>confpackage.adb <<CF_EOF
 with Text_IO;
 package body ConfPackage is
    procedure conftest is
@@ -20867,44 +27864,57 @@
    end conftest;
 end ConfPackage;
 CF_EOF
-		if ( $cf_ada_make $ADAFLAGS \
-				-Plibrary.gpr \
-				-XBUILD_DIR=`cd ../conftest.bin;pwd` \
-				-XLIBRARY_DIR=`cd ../conftest.lib;pwd` \
-				-XSOURCE_DIR=`pwd` \
-				-XSONAME=libConfTest.so.1 \
-				-XLIB_KIND=static 1>&5 2>&1 ) ; then
-			cf_gnat_projects=yes
+			if ( "$cf_ada_make" $ADAFLAGS \
+					-Plibrary.gpr \
+					-XBUILD_DIR="`cd ../conftest.bin;pwd`" \
+					-XLIBRARY_DIR="`cd ../conftest.lib;pwd`" \
+					-XSOURCE_DIR="`pwd`" \
+					-XSONAME=libConfTest.so.1 \
+					-XLIB_KIND=static 1>&5 2>&1 ) ; then
+				cf_gnat_projects=yes
+			fi
+			cd ..
 		fi
-		cd ..
 		if test -f conftest.lib/confpackage.ali
 		then
 			cf_gnat_libraries=yes
 		fi
-		rm -rf conftest* *~conftest*
+		rm -rf ./conftest* ./*~conftest*
 		;;
 	esac
 	;;
 esac
-echo "$as_me:20889: result: $cf_gnat_projects" >&5
+echo "$as_me:27887: result: $cf_gnat_projects" >&5
 echo "${ECHO_T}$cf_gnat_projects" >&6
 fi # enable_gnat_projects
 
-if test $cf_gnat_projects = yes
+if test "$cf_gnat_projects" = yes
 then
-	echo "$as_me:20895: checking if GNAT supports libraries" >&5
+	echo "$as_me:27893: checking if GNAT supports libraries" >&5
 echo $ECHO_N "checking if GNAT supports libraries... $ECHO_C" >&6
-	echo "$as_me:20897: result: $cf_gnat_libraries" >&5
+	echo "$as_me:27895: result: $cf_gnat_libraries" >&5
 echo "${ECHO_T}$cf_gnat_libraries" >&6
 fi
 
+USE_OLD_MAKERULES=""
+USE_GNAT_PROJECTS="#"
+USE_GNAT_MAKE_GPR="#"
+USE_GNAT_GPRBUILD="#"
+
 if test "$cf_gnat_projects" = yes
 then
 	USE_OLD_MAKERULES="#"
 	USE_GNAT_PROJECTS=""
-else
-	USE_OLD_MAKERULES=""
-	USE_GNAT_PROJECTS="#"
+	if test "$cf_cv_VERSION_GPRBUILD" != no
+	then
+		USE_GNAT_GPRBUILD=""
+	elif test "$cf_cv_VERSION_GNATMAKE" != no
+	then
+		USE_GNAT_MAKE_GPR=""
+	else
+		{ echo "$as_me:27915: WARNING: use old makefile rules since tools are missing" >&5
+echo "$as_me: WARNING: use old makefile rules since tools are missing" >&2;}
+	fi
 fi
 
 if test "$cf_gnat_libraries" = yes
@@ -20914,8 +27924,8 @@
 	USE_GNAT_LIBRARIES="#"
 fi
 
-echo "$as_me:20917: checking for ada-compiler" >&5
-echo $ECHO_N "checking for ada-compiler... $ECHO_C" >&6
+echo "$as_me:27927: checking for Ada95 compiler" >&5
+echo $ECHO_N "checking for Ada95 compiler... $ECHO_C" >&6
 
 # Check whether --with-ada-compiler or --without-ada-compiler was given.
 if test "${with_ada_compiler+set}" = set; then
@@ -20925,13 +27935,13 @@
   cf_ada_compiler=gnatmake
 fi;
 
-echo "$as_me:20928: result: $cf_ada_compiler" >&5
+echo "$as_me:27938: result: $cf_ada_compiler" >&5
 echo "${ECHO_T}$cf_ada_compiler" >&6
 
 			cf_ada_package=terminal_interface
 
-echo "$as_me:20933: checking for ada-include" >&5
-echo $ECHO_N "checking for ada-include... $ECHO_C" >&6
+echo "$as_me:27943: checking for Ada95 include directory" >&5
+echo $ECHO_N "checking for Ada95 include directory... $ECHO_C" >&6
 
 # Check whether --with-ada-include or --without-ada-include was given.
 if test "${with_ada_include+set}" = set; then
@@ -20954,19 +27964,19 @@
 	;;
 (.[a-zA-Z]:[\\/]*) # OS/2 EMX
 	;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
 	eval withval="$withval"
 	case ".$withval" in
 	(.NONE/*)
-		withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+		withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
 		;;
 	esac
 	;;
 (.no|.NONE/*)
-	withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+	withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
 	;;
 (*)
-	{ { echo "$as_me:20969: error: expected a pathname, not \"$withval\"" >&5
+	{ { echo "$as_me:27979: error: expected a pathname, not \"$withval\"" >&5
 echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;}
    { (exit 1); exit 1; }; }
 	;;
@@ -20975,11 +27985,11 @@
 fi
 eval ADA_INCLUDE="$withval"
 
-echo "$as_me:20978: result: $ADA_INCLUDE" >&5
+echo "$as_me:27988: result: $ADA_INCLUDE" >&5
 echo "${ECHO_T}$ADA_INCLUDE" >&6
 
-echo "$as_me:20981: checking for ada-objects" >&5
-echo $ECHO_N "checking for ada-objects... $ECHO_C" >&6
+echo "$as_me:27991: checking for Ada95 object directory" >&5
+echo $ECHO_N "checking for Ada95 object directory... $ECHO_C" >&6
 
 # Check whether --with-ada-objects or --without-ada-objects was given.
 if test "${with_ada_objects+set}" = set; then
@@ -21002,19 +28012,19 @@
 	;;
 (.[a-zA-Z]:[\\/]*) # OS/2 EMX
 	;;
-(.\${*prefix}*|.\${*dir}*)
+(.\$\{*prefix\}*|.\$\{*dir\}*)
 	eval withval="$withval"
 	case ".$withval" in
 	(.NONE/*)
-		withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+		withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
 		;;
 	esac
 	;;
 (.no|.NONE/*)
-	withval=`echo $withval | sed -e s%NONE%$cf_path_syntax%`
+	withval=`echo "$withval" | sed -e s%NONE%$cf_path_syntax%`
 	;;
 (*)
-	{ { echo "$as_me:21017: error: expected a pathname, not \"$withval\"" >&5
+	{ { echo "$as_me:28027: error: expected a pathname, not \"$withval\"" >&5
 echo "$as_me: error: expected a pathname, not \"$withval\"" >&2;}
    { (exit 1); exit 1; }; }
 	;;
@@ -21023,11 +28033,11 @@
 fi
 eval ADA_OBJECTS="$withval"
 
-echo "$as_me:21026: result: $ADA_OBJECTS" >&5
+echo "$as_me:28036: result: $ADA_OBJECTS" >&5
 echo "${ECHO_T}$ADA_OBJECTS" >&6
 
-echo "$as_me:21029: checking if an Ada95 shared-library should be built" >&5
-echo $ECHO_N "checking if an Ada95 shared-library should be built... $ECHO_C" >&6
+echo "$as_me:28039: checking whether to build an Ada95 shared library" >&5
+echo $ECHO_N "checking whether to build an Ada95 shared library... $ECHO_C" >&6
 
 # Check whether --with-ada-sharedlib or --without-ada-sharedlib was given.
 if test "${with_ada_sharedlib+set}" = set; then
@@ -21036,8 +28046,24 @@
 else
   with_ada_sharedlib=no
 fi;
-echo "$as_me:21039: result: $with_ada_sharedlib" >&5
+cf_ada_sharedlib_warn=no
+
+if test "x$with_ada_sharedlib" != xno
+then
+	if test "x$cf_gnat_projects" != xyes
+	then
+		with_ada_sharedlib=no
+		cf_ada_sharedlib_warn=yes
+	fi
+fi
+
+echo "$as_me:28060: result: $with_ada_sharedlib" >&5
 echo "${ECHO_T}$with_ada_sharedlib" >&6
+if test "x$cf_ada_sharedlib_warn" != xno
+then
+	{ echo "$as_me:28064: WARNING: disabling Ada95 shared library since GNAT projects are not supported" >&5
+echo "$as_me: WARNING: disabling Ada95 shared library since GNAT projects are not supported" >&2;}
+fi
 
 ADA_SHAREDLIB='lib$(LIB_NAME).so.1'
 MAKE_ADA_SHAREDLIB="#"
@@ -21051,6 +28077,27 @@
 	fi
 fi
 
+			# allow the Ada binding to be renamed
+
+echo "$as_me:28082: checking for Ada95 curses library name" >&5
+echo $ECHO_N "checking for Ada95 curses library name... $ECHO_C" >&6
+
+# Check whether --with-ada-libname or --without-ada-libname was given.
+if test "${with_ada_libname+set}" = set; then
+  withval="$with_ada_libname"
+  ADA_LIBNAME=$withval
+else
+  ADA_LIBNAME=AdaCurses
+fi;
+case "x$ADA_LIBNAME" in
+(x|xyes|xno)
+	ADA_LIBNAME=AdaCurses
+	;;
+esac
+
+echo "$as_me:28098: result: $ADA_LIBNAME" >&5
+echo "${ECHO_T}$ADA_LIBNAME" >&6
+
 		fi
 	fi
 else
@@ -21059,17 +28106,17 @@
 
 # do this "late" to avoid conflict with header-checks
 if test "x$with_widec" = xyes ; then
-	echo "$as_me:21062: checking for wchar_t" >&5
+	echo "$as_me:28109: checking for wchar_t" >&5
 echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6
 if test "${ac_cv_type_wchar_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 21068 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 28115 "configure"
 #include "confdefs.h"
 $ac_includes_default
 int
-main ()
+main (void)
 {
 if ((wchar_t *) 0)
   return 0;
@@ -21079,30 +28126,30 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:21083: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:28130: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:21086: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:21089: \"$ac_try\"") >&5
+  echo "$as_me:28133: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:28136: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:21092: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:28139: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_type_wchar_t=yes
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_cv_type_wchar_t=no
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 fi
-echo "$as_me:21102: result: $ac_cv_type_wchar_t" >&5
+echo "$as_me:28149: result: $ac_cv_type_wchar_t" >&5
 echo "${ECHO_T}$ac_cv_type_wchar_t" >&6
 
-echo "$as_me:21105: checking size of wchar_t" >&5
+echo "$as_me:28152: checking size of wchar_t" >&5
 echo $ECHO_N "checking size of wchar_t... $ECHO_C" >&6
 if test "${ac_cv_sizeof_wchar_t+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -21110,179 +28157,179 @@
   if test "$ac_cv_type_wchar_t" = yes; then
   if test "$cross_compiling" = yes; then
   # Depending upon the size, compute the lo and hi bounds.
-cat >conftest.$ac_ext <<_ACEOF
-#line 21114 "configure"
+cat >"conftest.$ac_ext" <<_ACEOF
+#line 28161 "configure"
 #include "confdefs.h"
 $ac_includes_default
 int
-main ()
+main (void)
 {
 int _array_ [1 - 2 * !((sizeof (wchar_t)) >= 0)]
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:21126: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:28173: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:21129: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:21132: \"$ac_try\"") >&5
+  echo "$as_me:28176: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:28179: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:21135: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:28182: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_lo=0 ac_mid=0
   while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-#line 21140 "configure"
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 28187 "configure"
 #include "confdefs.h"
 $ac_includes_default
 int
-main ()
+main (void)
 {
 int _array_ [1 - 2 * !((sizeof (wchar_t)) <= $ac_mid)]
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:21152: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:28199: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:21155: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:21158: \"$ac_try\"") >&5
+  echo "$as_me:28202: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:28205: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:21161: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:28208: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_hi=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`; ac_mid=`expr 2 '*' $ac_mid + 1`
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`; ac_mid=`expr 2 '*' "$ac_mid" + 1`
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
   done
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 ac_hi=-1 ac_mid=-1
   while :; do
-    cat >conftest.$ac_ext <<_ACEOF
-#line 21177 "configure"
+    cat >"conftest.$ac_ext" <<_ACEOF
+#line 28224 "configure"
 #include "confdefs.h"
 $ac_includes_default
 int
-main ()
+main (void)
 {
 int _array_ [1 - 2 * !((sizeof (wchar_t)) >= $ac_mid)]
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:21189: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:28236: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:21192: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:21195: \"$ac_try\"") >&5
+  echo "$as_me:28239: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:28242: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:21198: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:28245: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_lo=$ac_mid; break
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_hi=`expr $ac_mid - 1`; ac_mid=`expr 2 '*' $ac_mid`
+cat "conftest.$ac_ext" >&5
+ac_hi=`expr "$ac_mid" - 1`; ac_mid=`expr 2 '*' "$ac_mid"`
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
   done
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 # Binary search between lo and hi bounds.
 while test "x$ac_lo" != "x$ac_hi"; do
-  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
-  cat >conftest.$ac_ext <<_ACEOF
-#line 21214 "configure"
+  ac_mid=`expr '(' "$ac_hi" - "$ac_lo" ')' / 2 + "$ac_lo"`
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 28261 "configure"
 #include "confdefs.h"
 $ac_includes_default
 int
-main ()
+main (void)
 {
 int _array_ [1 - 2 * !((sizeof (wchar_t)) <= $ac_mid)]
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:21226: \"$ac_compile\"") >&5
+rm -f "conftest.$ac_objext"
+if { (eval echo "$as_me:28273: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:21229: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest.$ac_objext'
-  { (eval echo "$as_me:21232: \"$ac_try\"") >&5
+  echo "$as_me:28276: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest.$ac_objext"'
+  { (eval echo "$as_me:28279: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:21235: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:28282: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_hi=$ac_mid
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
-ac_lo=`expr $ac_mid + 1`
+cat "conftest.$ac_ext" >&5
+ac_lo=`expr "$ac_mid" + 1`
 fi
-rm -f conftest.$ac_objext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest.$ac_ext"
 done
 ac_cv_sizeof_wchar_t=$ac_lo
 else
   if test "$cross_compiling" = yes; then
-  { { echo "$as_me:21248: error: cannot run test program while cross compiling" >&5
+  { { echo "$as_me:28295: error: cannot run test program while cross compiling" >&5
 echo "$as_me: error: cannot run test program while cross compiling" >&2;}
    { (exit 1); exit 1; }; }
 else
-  cat >conftest.$ac_ext <<_ACEOF
-#line 21253 "configure"
+  cat >"conftest.$ac_ext" <<_ACEOF
+#line 28300 "configure"
 #include "confdefs.h"
 $ac_includes_default
 int
-main ()
+main (void)
 {
 FILE *f = fopen ("conftest.val", "w");
 if (!f)
   $ac_main_return (1);
-fprintf (f, "%d", (sizeof (wchar_t)));
+fprintf (f, "%ld", (long)(sizeof (wchar_t)));
 fclose (f);
   ;
   return 0;
 }
 _ACEOF
-rm -f conftest$ac_exeext
-if { (eval echo "$as_me:21269: \"$ac_link\"") >&5
+rm -f "conftest$ac_exeext"
+if { (eval echo "$as_me:28316: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:21272: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (eval echo "$as_me:21274: \"$ac_try\"") >&5
+  echo "$as_me:28319: \$? = $ac_status" >&5
+  (exit "$ac_status"); } && { ac_try='"./conftest$ac_exeext"'
+  { (eval echo "$as_me:28321: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:21277: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:28324: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
   ac_cv_sizeof_wchar_t=`cat conftest.val`
 else
   echo "$as_me: program exited with status $ac_status" >&5
 echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 fi
-rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+rm -f core ./core.* ./*.core "conftest$ac_exeext" "conftest.$ac_objext" "conftest.$ac_ext"
 fi
 fi
 rm -f conftest.val
@@ -21290,12 +28337,25 @@
   ac_cv_sizeof_wchar_t=0
 fi
 fi
-echo "$as_me:21293: result: $ac_cv_sizeof_wchar_t" >&5
+echo "$as_me:28340: result: $ac_cv_sizeof_wchar_t" >&5
 echo "${ECHO_T}$ac_cv_sizeof_wchar_t" >&6
 cat >>confdefs.h <<EOF
 #define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t
 EOF
 
+	# cross-compiling to mingw can run into the problem that attempting to
+	# link with the regex library fails, causing the test to not set this to
+	# a number.  "recent" autoconf does not address this problem either -TD
+	if test -z "$ac_cv_sizeof_wchar_t"
+	then
+		test -n "$verbose" && echo "	test failed (assume 2)" 1>&6
+
+echo "${as_me:-configure}:28353: testing test failed (assume 2) ..." 1>&5
+
+		sed /SIZEOF_WCHAR_T/d confdefs.h >confdefs.tmp
+		mv confdefs.tmp confdefs.h
+		echo "#define SIZEOF_WCHAR_T 2" >>confdefs.h
+	fi
 fi
 
 ### Construct the ncurses library-subsets, if any, from this set of keywords:
@@ -21308,7 +28368,7 @@
 ### chooses to split module lists into libraries.
 ###
 ### (see CF_LIB_RULES).
-echo "$as_me:21311: checking for library subsets" >&5
+echo "$as_me:28371: checking for library subsets" >&5
 echo $ECHO_N "checking for library subsets... $ECHO_C" >&6
 LIB_SUBSETS=
 
@@ -21336,21 +28396,33 @@
 # base library (so it resides in base).
 if test "$with_term_driver" != no ; then
 	LIB_SUBSETS="${LIB_SUBSETS}+port_drivers"
-	case $cf_cv_system_name in
+	case "$cf_cv_system_name" in
 	(*mingw32*|*mingw64*)
-		LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32con"
+		if test "x$with_exp_win32" = xyes ; then
+			LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32"
+		else
+			LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo+port_win32con"
+		fi
 		CPPFLAGS="$CPPFLAGS -DUSE_WIN32CON_DRIVER"
 		;;
 	(*)
 		LIB_SUBSETS="${LIB_SUBSETS}+port_tinfo"
 		;;
 	esac
+elif test "x$with_exp_win32" = xyes ; then
+	case "$cf_cv_system_name" in
+	(*mingw32*|*mingw64*)
+		LIB_SUBSETS="${LIB_SUBSETS}+port_win32"
+		;;
+	(*)
+		;;
+	esac
 fi
 
 test "x$with_widec"     = xyes && LIB_SUBSETS="${LIB_SUBSETS}+widechar"
 test "x$with_ext_funcs" = xyes && LIB_SUBSETS="${LIB_SUBSETS}+ext_funcs"
 
-echo "$as_me:21353: result: $LIB_SUBSETS" >&5
+echo "$as_me:28425: result: $LIB_SUBSETS" >&5
 echo "${ECHO_T}$LIB_SUBSETS" >&6
 
 ### Construct the list of include-directories to be generated
@@ -21381,7 +28453,7 @@
 fi
 
 ### Build up pieces for makefile rules
-echo "$as_me:21384: checking default library suffix" >&5
+echo "$as_me:28456: checking default library suffix" >&5
 echo $ECHO_N "checking default library suffix... $ECHO_C" >&6
 
 	case $DFT_LWR_MODEL in
@@ -21392,10 +28464,10 @@
 	(shared)  DFT_ARG_SUFFIX=''   ;;
 	esac
 	test -n "$LIB_SUFFIX" && DFT_ARG_SUFFIX="${LIB_SUFFIX}${DFT_ARG_SUFFIX}"
-echo "$as_me:21395: result: $DFT_ARG_SUFFIX" >&5
+echo "$as_me:28467: result: $DFT_ARG_SUFFIX" >&5
 echo "${ECHO_T}$DFT_ARG_SUFFIX" >&6
 
-echo "$as_me:21398: checking default library-dependency suffix" >&5
+echo "$as_me:28470: checking default library-dependency suffix" >&5
 echo $ECHO_N "checking default library-dependency suffix... $ECHO_C" >&6
 
 	case X$DFT_LWR_MODEL in
@@ -21404,19 +28476,37 @@
 		DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
 		;;
 	(Xdebug)
-		DFT_LIB_SUFFIX='_g.a'
+		case "$cf_cv_system_name" in
+		(*-msvc*)
+			DFT_LIB_SUFFIX='_g.lib'
+			;;
+		(*)
+			DFT_LIB_SUFFIX='_g.a'
+			;;
+		esac
 		DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
 		;;
 	(Xprofile)
-		DFT_LIB_SUFFIX='_p.a'
+		case "$cf_cv_system_name" in
+		(*-msvc*)
+			DFT_LIB_SUFFIX='_p.lib'
+			;;
+		(*)
+			DFT_LIB_SUFFIX='_p.a'
+			;;
+		esac
 		DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
 		;;
 	(Xshared)
-		case $cf_cv_system_name in
+		case "$cf_cv_system_name" in
 		(aix[5-7]*)
 			DFT_LIB_SUFFIX='.so'
 			DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
 			;;
+		(*-msvc*)
+			DFT_LIB_SUFFIX='.dll'
+			DFT_DEP_SUFFIX='.dll.lib'
+			;;
 		(cygwin*|msys*|mingw*)
 			DFT_LIB_SUFFIX='.dll'
 			DFT_DEP_SUFFIX='.dll.a'
@@ -21426,7 +28516,7 @@
 			DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
 			;;
 		(hpux*)
-			case $target in
+			case "$target" in
 			(ia64*)
 				DFT_LIB_SUFFIX='.so'
 				DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
@@ -21444,7 +28534,14 @@
 		esac
 		;;
 	(*)
-		DFT_LIB_SUFFIX='.a'
+		case "$target" in
+		(*-msvc*)
+			DFT_LIB_SUFFIX='.lib'
+			;;
+		(*)
+			DFT_LIB_SUFFIX='.a'
+			;;
+		esac
 		DFT_DEP_SUFFIX=$DFT_LIB_SUFFIX
 		;;
 	esac
@@ -21453,10 +28550,10 @@
 		DFT_LIB_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_LIB_SUFFIX}"
 		DFT_DEP_SUFFIX="${LIB_SUFFIX}${EXTRA_SUFFIX}${DFT_DEP_SUFFIX}"
 	fi
-echo "$as_me:21456: result: $DFT_DEP_SUFFIX" >&5
+echo "$as_me:28553: result: $DFT_DEP_SUFFIX" >&5
 echo "${ECHO_T}$DFT_DEP_SUFFIX" >&6
 
-echo "$as_me:21459: checking default object directory" >&5
+echo "$as_me:28556: checking default object directory" >&5
 echo $ECHO_N "checking default object directory... $ECHO_C" >&6
 
 	case $DFT_LWR_MODEL in
@@ -21465,18 +28562,18 @@
 	(debug)   DFT_OBJ_SUBDIR='obj_g' ;;
 	(profile) DFT_OBJ_SUBDIR='obj_p' ;;
 	(shared)
-		case $cf_cv_system_name in
+		case "$cf_cv_system_name" in
 		(cygwin|msys)
 			DFT_OBJ_SUBDIR='objects' ;;
 		(*)
 			DFT_OBJ_SUBDIR='obj_s' ;;
 		esac
 	esac
-echo "$as_me:21475: result: $DFT_OBJ_SUBDIR" >&5
+echo "$as_me:28572: result: $DFT_OBJ_SUBDIR" >&5
 echo "${ECHO_T}$DFT_OBJ_SUBDIR" >&6
 
 if test "x$cf_with_cxx" = xyes ; then
-echo "$as_me:21479: checking c++ library-dependency suffix" >&5
+echo "$as_me:28576: checking c++ library-dependency suffix" >&5
 echo $ECHO_N "checking c++ library-dependency suffix... $ECHO_C" >&6
 if test "$with_libtool" != "no"; then
 	# libtool thinks it can make c++ shared libraries (perhaps only g++)
@@ -21493,19 +28590,37 @@
 		CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
 		;;
 	(Xdebug)
-		CXX_LIB_SUFFIX='_g.a'
+		case "$cf_cv_system_name" in
+		(*-msvc*)
+			CXX_LIB_SUFFIX='_g.lib'
+			;;
+		(*)
+			CXX_LIB_SUFFIX='_g.a'
+			;;
+		esac
 		CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
 		;;
 	(Xprofile)
-		CXX_LIB_SUFFIX='_p.a'
+		case "$cf_cv_system_name" in
+		(*-msvc*)
+			CXX_LIB_SUFFIX='_p.lib'
+			;;
+		(*)
+			CXX_LIB_SUFFIX='_p.a'
+			;;
+		esac
 		CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
 		;;
 	(Xshared)
-		case $cf_cv_system_name in
+		case "$cf_cv_system_name" in
 		(aix[5-7]*)
 			CXX_LIB_SUFFIX='.so'
 			CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
 			;;
+		(*-msvc*)
+			CXX_LIB_SUFFIX='.dll'
+			CXX_DEP_SUFFIX='.dll.lib'
+			;;
 		(cygwin*|msys*|mingw*)
 			CXX_LIB_SUFFIX='.dll'
 			CXX_DEP_SUFFIX='.dll.a'
@@ -21515,7 +28630,7 @@
 			CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
 			;;
 		(hpux*)
-			case $target in
+			case "$target" in
 			(ia64*)
 				CXX_LIB_SUFFIX='.so'
 				CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
@@ -21533,7 +28648,14 @@
 		esac
 		;;
 	(*)
-		CXX_LIB_SUFFIX='.a'
+		case "$target" in
+		(*-msvc*)
+			CXX_LIB_SUFFIX='.lib'
+			;;
+		(*)
+			CXX_LIB_SUFFIX='.a'
+			;;
+		esac
 		CXX_DEP_SUFFIX=$CXX_LIB_SUFFIX
 		;;
 	esac
@@ -21544,15 +28666,15 @@
 	fi
 
 fi
-echo "$as_me:21547: result: $CXX_LIB_SUFFIX" >&5
+echo "$as_me:28669: result: $CXX_LIB_SUFFIX" >&5
 echo "${ECHO_T}$CXX_LIB_SUFFIX" >&6
 
 fi
 
 # do not want -ldl in build except as needed for -lncurses dependency
 if test "x$with_dlsym" = xyes ; then
-if test $DFT_LWR_MODEL = shared || \
-   test $DFT_LWR_MODEL = libtool ; then
+if test "$DFT_LWR_MODEL" = shared || \
+   test "$DFT_LWR_MODEL" = libtool ; then
 
 # remove dl library from $LIBS
 LIBS=`echo "$LIBS" | sed -e 's/-ldl[ 	]//g' -e 's/-ldl$//'`
@@ -21583,17 +28705,20 @@
 
 	if test "x$with_ticlib" != xyes ; then
 		TICS_NAME=$with_ticlib
-		TICS_ARG_SUFFIX="${with_ticlib}`echo ${USE_ARG_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
-		TICS_DEP_SUFFIX="${with_ticlib}`echo ${DFT_DEP_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
+		TICS_SUFFIX="`echo "${DFT_LIB_SUFFIX}" |sed -e "s/^${USE_LIB_SUFFIX}//"`"
+		TICS_ARG_SUFFIX="${with_ticlib}`echo "${USE_ARG_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
+		TICS_DEP_SUFFIX="${with_ticlib}`echo "${DFT_DEP_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
 		TICS_LIB_SUFFIX="${with_ticlib}"
 	else
+		TICS_SUFFIX=${DFT_LIB_SUFFIX}
 		TICS_ARG_SUFFIX="${TICS_NAME}${USE_ARG_SUFFIX}"
 		TICS_DEP_SUFFIX="${TICS_NAME}${DFT_DEP_SUFFIX}"
 		TICS_LIB_SUFFIX="${TICS_NAME}${USE_LIB_SUFFIX}"
 	fi
 	TICS_LDFLAGS="-L${LIB_DIR}"
-	TICS_LIBS="-l${TICS_LIB_SUFFIX}"
+	TICS_LIBS="-l${TICS_ARG_SUFFIX}"
 else
+	TICS_SUFFIX=${DFT_LIB_SUFFIX}
 	TICS_LDFLAGS="-L${LIB_DIR}"
 	TICS_LIBS="-l${LIB_NAME}${USE_ARG_SUFFIX}"
 fi
@@ -21602,9 +28727,9 @@
 
 	if test "x$with_termlib" != xyes ; then
 		TINFO_NAME=$with_termlib
-		TINFO_SUFFIX="`echo ${DFT_LIB_SUFFIX}|sed -e "s/^${USE_LIB_SUFFIX}//"`"
-		TINFO_ARG_SUFFIX="${with_termlib}`echo ${USE_ARG_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
-		TINFO_DEP_SUFFIX="${with_termlib}`echo ${DFT_DEP_SUFFIX}|sed -e "s/^${LIB_SUFFIX}//"`"
+		TINFO_SUFFIX="`echo "${DFT_LIB_SUFFIX}" |sed -e "s/^${USE_LIB_SUFFIX}//"`"
+		TINFO_ARG_SUFFIX="${with_termlib}`echo "${USE_ARG_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
+		TINFO_DEP_SUFFIX="${with_termlib}`echo "${DFT_DEP_SUFFIX}" |sed -e "s/^${LIB_SUFFIX}//"`"
 		TINFO_LIB_SUFFIX="${with_termlib}"
 	else
 		TINFO_SUFFIX=${DFT_LIB_SUFFIX}
@@ -21652,7 +28777,7 @@
 fi
 
 if test "$DFT_LWR_MODEL" = shared ; then
-	case $cf_cv_system_name in
+	case "$cf_cv_system_name" in
 	(cygwin*|msys*)
 		# "lib" files have ".dll.a" suffix, "cyg"or "msys-" files have ".dll"
 		TINFO_SUFFIX=.dll
@@ -21674,11 +28799,11 @@
 # needed for Ada95
 TINFO_LDFLAGS2=`echo "$TINFO_LDFLAGS" | sed -e 's,-L\.\./,-L../../,'`
 
-case $DFT_LWR_MODEL in
+case "$DFT_LWR_MODEL" in
 (normal|debug|profile)
 
 if test "$GCC" = yes ; then
-	case $cf_cv_system_name in
+	case "$cf_cv_system_name" in
 	(OS/2*|os2*|aix[4]*|solaris2.1[0-9]|darwin*)
 		LDFLAGS_STATIC=
 		LDFLAGS_SHARED=
@@ -21689,7 +28814,7 @@
 		;;
 	esac
 else
-	case $cf_cv_system_name in
+	case "$cf_cv_system_name" in
 	(aix[4-7]*) 	# from ld manpage
 		LDFLAGS_STATIC=-bstatic
 		LDFLAGS_SHARED=-bdynamic
@@ -21717,20 +28842,20 @@
 
 if test -n "$LDFLAGS_STATIC" && test -n "$LDFLAGS_SHARED"
 then
-	echo "$as_me:21720: checking if linker supports switching between static/dynamic" >&5
+	echo "$as_me:28845: checking if linker supports switching between static/dynamic" >&5
 echo $ECHO_N "checking if linker supports switching between static/dynamic... $ECHO_C" >&6
 
 	rm -f libconftest.a
 	cat >conftest.$ac_ext <<EOF
-#line 21725 "configure"
+#line 28850 "configure"
 #include <stdio.h>
 int cf_ldflags_static(FILE *fp) { return fflush(fp); }
 EOF
-	if { (eval echo "$as_me:21729: \"$ac_compile\"") >&5
+	if { (eval echo "$as_me:28854: \"$ac_compile\"") >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
-  echo "$as_me:21732: \$? = $ac_status" >&5
-  (exit $ac_status); } ; then
+  echo "$as_me:28857: \$? = $ac_status" >&5
+  (exit "$ac_status"); } ; then
 		( $AR $ARFLAGS libconftest.a conftest.o ) 2>&5 1>/dev/null
 		( eval $RANLIB libconftest.a ) 2>&5 >/dev/null
 	fi
@@ -21739,16 +28864,16 @@
 	cf_save_LIBS="$LIBS"
 
 	LIBS="$LDFLAGS_STATIC -L`pwd` -lconftest $LDFLAGS_DYNAMIC $LIBS"
-	cat >conftest.$ac_ext <<_ACEOF
-#line 21743 "configure"
+	cat >"conftest.$ac_ext" <<_ACEOF
+#line 28868 "configure"
 #include "confdefs.h"
 
-#line 21746 "configure"
+#line 28871 "configure"
 #include <stdio.h>
 int cf_ldflags_static(FILE *fp);
 
 int
-main ()
+main (void)
 {
 
 	return cf_ldflags_static(stdin);
@@ -21757,21 +28882,21 @@
   return 0;
 }
 _ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (eval echo "$as_me:21761: \"$ac_link\"") >&5
+rm -f "conftest.$ac_objext" "conftest$ac_exeext"
+if { (eval echo "$as_me:28886: \"$ac_link\"") >&5
   (eval $ac_link) 2>&5
   ac_status=$?
-  echo "$as_me:21764: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-         { ac_try='test -s conftest$ac_exeext'
-  { (eval echo "$as_me:21767: \"$ac_try\"") >&5
+  echo "$as_me:28889: \$? = $ac_status" >&5
+  (exit "$ac_status"); } &&
+         { ac_try='test -s "conftest$ac_exeext"'
+  { (eval echo "$as_me:28892: \"$ac_try\"") >&5
   (eval $ac_try) 2>&5
   ac_status=$?
-  echo "$as_me:21770: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
+  echo "$as_me:28895: \$? = $ac_status" >&5
+  (exit "$ac_status"); }; }; then
 
 	# some linkers simply ignore the -dynamic
-	case x`file conftest$ac_exeext 2>/dev/null` in
+	case x`file "conftest$ac_exeext" 2>/dev/null` in
 	(*static*)
 		cf_ldflags_static=no
 		;;
@@ -21782,18 +28907,18 @@
 
 else
   echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+cat "conftest.$ac_ext" >&5
 cf_ldflags_static=no
 fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f "conftest.$ac_objext" "conftest$ac_exeext" "conftest.$ac_ext"
 
 	rm -f libconftest.*
 	LIBS="$cf_save_LIBS"
 
-	echo "$as_me:21793: result: $cf_ldflags_static" >&5
+	echo "$as_me:28918: result: $cf_ldflags_static" >&5
 echo "${ECHO_T}$cf_ldflags_static" >&6
 
-	if test $cf_ldflags_static != yes
+	if test "$cf_ldflags_static" != yes
 	then
 		LDFLAGS_STATIC=
 		LDFLAGS_SHARED=
@@ -21806,17 +28931,17 @@
 	;;
 esac
 
-echo "$as_me:21809: checking where we will install curses.h" >&5
+echo "$as_me:28934: checking where we will install curses.h" >&5
 echo $ECHO_N "checking where we will install curses.h... $ECHO_C" >&6
 
 includesubdir=
 if test "$with_overwrite" = no && \
- ( test "x$includedir" = 'x${prefix}/include' || \
-   test "x$includedir" = "x${prefix}/include" )
+ { test "x$includedir" = 'x${prefix}/include' || \
+   test "x$includedir" = "x${prefix}/include"; }
 then
 	includesubdir="/ncurses${USE_LIB_SUFFIX}"
 fi
-echo "$as_me:21819: result: ${includedir}${includesubdir}" >&5
+echo "$as_me:28944: result: ${includedir}${includesubdir}" >&5
 echo "${ECHO_T}${includedir}${includesubdir}" >&6
 
 ### Resolve a conflict between normal and wide-curses by forcing applications
@@ -21824,14 +28949,22 @@
 if test "$with_overwrite" != no ; then
 if test "$NCURSES_LIBUTF8" = 1 ; then
 	NCURSES_LIBUTF8='defined(HAVE_LIBUTF8_H)'
-	{ echo "$as_me:21827: WARNING: Wide-character applications must define HAVE_LIBUTF8_H to include curses.h" >&5
+	{ echo "$as_me:28952: WARNING: Wide-character applications must define HAVE_LIBUTF8_H to include curses.h" >&5
 echo "$as_me: WARNING: Wide-character applications must define HAVE_LIBUTF8_H to include curses.h" >&2;}
 fi
 fi
 WITH_OVERWRITE=$with_overwrite
 
-# used to separate tack out of the tree
-NCURSES_TREE=
+### At least on MinGW a shared library build without libtool
+### requires adding the additional libs to the link list.
+case "$cf_cv_system_name" in
+(*mingw32*|*mingw64*)
+	if test "$DFT_LWR_MODEL" != "libtool"; then
+   	   SHLIB_LIST="$SHLIB_LIST ${LIBS}"
+	fi
+	;;
+*)	;;
+esac
 
 ### predefined stuff for the test programs
 
@@ -21839,10 +28972,104 @@
 #define HAVE_SLK_COLOR 1
 EOF
 
+# pkgsrc uses these
+
+echo "$as_me:28977: checking for desired basename for form library" >&5
+echo $ECHO_N "checking for desired basename for form library... $ECHO_C" >&6
+
+# Check whether --with-form-libname or --without-form-libname was given.
+if test "${with_form_libname+set}" = set; then
+  withval="$with_form_libname"
+  with_lib_basename=$withval
+else
+  with_lib_basename=form
+fi;
+FORM_NAME="$with_lib_basename"
+
+case "x$FORM_NAME" in
+(x|xno|xnone|xyes)
+	FORM_NAME=form
+	;;
+(*)
+	;;
+esac
+
+echo "$as_me:28997: result: $FORM_NAME" >&5
+echo "${ECHO_T}$FORM_NAME" >&6
+
+echo "$as_me:29000: checking for desired basename for menu library" >&5
+echo $ECHO_N "checking for desired basename for menu library... $ECHO_C" >&6
+
+# Check whether --with-menu-libname or --without-menu-libname was given.
+if test "${with_menu_libname+set}" = set; then
+  withval="$with_menu_libname"
+  with_lib_basename=$withval
+else
+  with_lib_basename=menu
+fi;
+MENU_NAME="$with_lib_basename"
+
+case "x$MENU_NAME" in
+(x|xno|xnone|xyes)
+	MENU_NAME=menu
+	;;
+(*)
+	;;
+esac
+
+echo "$as_me:29020: result: $MENU_NAME" >&5
+echo "${ECHO_T}$MENU_NAME" >&6
+
+echo "$as_me:29023: checking for desired basename for panel library" >&5
+echo $ECHO_N "checking for desired basename for panel library... $ECHO_C" >&6
+
+# Check whether --with-panel-libname or --without-panel-libname was given.
+if test "${with_panel_libname+set}" = set; then
+  withval="$with_panel_libname"
+  with_lib_basename=$withval
+else
+  with_lib_basename=panel
+fi;
+PANEL_NAME="$with_lib_basename"
+
+case "x$PANEL_NAME" in
+(x|xno|xnone|xyes)
+	PANEL_NAME=panel
+	;;
+(*)
+	;;
+esac
+
+echo "$as_me:29043: result: $PANEL_NAME" >&5
+echo "${ECHO_T}$PANEL_NAME" >&6
+
+echo "$as_me:29046: checking for desired basename for cxx library" >&5
+echo $ECHO_N "checking for desired basename for cxx library... $ECHO_C" >&6
+
+# Check whether --with-cxx-libname or --without-cxx-libname was given.
+if test "${with_cxx_libname+set}" = set; then
+  withval="$with_cxx_libname"
+  with_lib_basename=$withval
+else
+  with_lib_basename=ncurses++
+fi;
+CXX_NAME="$with_lib_basename"
+
+case "x$CXX_NAME" in
+(x|xno|xnone|xyes)
+	CXX_NAME=ncurses++
+	;;
+(*)
+	;;
+esac
+
+echo "$as_me:29066: result: $CXX_NAME" >&5
+echo "${ECHO_T}$CXX_NAME" >&6
+
 ### Construct the list of subdirectories for which we'll customize makefiles
 ### with the appropriate compile-rules.
 
-echo "$as_me:21845: checking for src modules" >&5
+echo "$as_me:29072: checking for src modules" >&5
 echo $ECHO_N "checking for src modules... $ECHO_C" >&6
 
 # dependencies and linker-arguments for test-programs
@@ -21860,15 +29087,7 @@
 cf_cv_src_modules=
 for cf_dir in $modules_to_build
 do
-	if test -f $srcdir/$cf_dir/modules; then
-
-		# We may/may not have tack in the distribution, though the
-		# makefile is.
-		if test $cf_dir = tack ; then
-			if test ! -f $srcdir/${cf_dir}/${cf_dir}.h; then
-				continue
-			fi
-		fi
+	if test -f "$srcdir/$cf_dir/modules" ; then
 
 		if test -z "$cf_cv_src_modules"; then
 			cf_cv_src_modules=$cf_dir
@@ -21880,9 +29099,7 @@
 		# well.  These are header files that are the same name as their
 		# directory.  Ncurses is the only library that does not follow
 		# that pattern.
-		if test $cf_dir = tack ; then
-			continue
-		elif test -f $srcdir/${cf_dir}/${cf_dir}.h; then
+		if test -f "$srcdir/${cf_dir}/${cf_dir}.h" ; then
 
 cf_have_include=`echo "$cf_dir" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
 
@@ -21894,20 +29111,24 @@
 #define HAVE_LIB${cf_have_include} 1
 EOF
 
-			TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${cf_dir}${DFT_DEP_SUFFIX} $TEST_DEPS"
-			TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${cf_dir}${DFT_DEP_SUFFIX} $TEST_DEP2"
+cf_map_lib_basename=`echo "$cf_dir" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+eval TEST_ROOT="\$${cf_map_lib_basename}_NAME"
+
+			TEST_DEPS="${LIB_DIR}/${LIB_PREFIX}${TEST_ROOT}${DFT_DEP_SUFFIX} $TEST_DEPS"
+			TEST_DEP2="${LIB_2ND}/${LIB_PREFIX}${TEST_ROOT}${DFT_DEP_SUFFIX} $TEST_DEP2"
 			if test "$DFT_LWR_MODEL" = "libtool"; then
 				TEST_ARGS="${TEST_DEPS}"
 				TEST_ARG2="${TEST_DEP2}"
 			else
-				TEST_ARGS="-l${cf_dir}${USE_ARG_SUFFIX} $TEST_ARGS"
-				TEST_ARG2="-l${cf_dir}${USE_ARG_SUFFIX} $TEST_ARG2"
+				TEST_ARGS="-l${TEST_ROOT}${USE_ARG_SUFFIX} $TEST_ARGS"
+				TEST_ARG2="-l${TEST_ROOT}${USE_ARG_SUFFIX} $TEST_ARG2"
 			fi
 			PC_MODULES_TO_MAKE="${PC_MODULES_TO_MAKE} ${cf_dir}${USE_ARG_SUFFIX}"
 		fi
 	fi
 done
-echo "$as_me:21910: result: $cf_cv_src_modules" >&5
+echo "$as_me:29131: result: $cf_cv_src_modules" >&5
 echo "${ECHO_T}$cf_cv_src_modules" >&6
 
 TEST_ARGS="-L${LIB_DIR} $TEST_ARGS"
@@ -21936,7 +29157,7 @@
 test "x$with_ticlib" != xno && PC_MODULES_TO_MAKE="$PC_MODULES_TO_MAKE $TICS_ARG_SUFFIX"
 
 ADA_SUBDIRS=
-if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = xyes && test -f $srcdir/Ada95/Makefile.in; then
+if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = xyes && test -f "$srcdir/Ada95/Makefile.in" ; then
 	SRC_SUBDIRS="$SRC_SUBDIRS Ada95"
 	ADA_SUBDIRS="gen src"
 	if test "x$cf_with_tests" != "xno" ; then
@@ -21959,6 +29180,7 @@
 fi
 
 if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = "xyes"; then
+   SUB_MAKEFILES="$SUB_MAKEFILES Ada95/src/library.gpr:Ada95/src/library.gpr.in"
    SUB_MAKEFILES="$SUB_MAKEFILES Ada95/gen/adacurses${USE_CFG_SUFFIX}-config:Ada95/gen/adacurses-config.in"
    SUB_MAKEFILES="$SUB_MAKEFILES man/adacurses${USE_CFG_SUFFIX}-config.1:man/MKada_config.in"
 fi
@@ -21973,7 +29195,7 @@
 	(debug)   cf_subdir='obj_g' ;;
 	(profile) cf_subdir='obj_p' ;;
 	(shared)
-		case $cf_cv_system_name in
+		case "$cf_cv_system_name" in
 		(cygwin|msys)
 			cf_subdir='objects' ;;
 		(*)
@@ -21983,13 +29205,13 @@
 
 	for cf_item2 in $DIRS_TO_MAKE
 	do
-		test $cf_item2 = $cf_subdir && break
+		test "$cf_item2" = "$cf_subdir" && break
 	done
 	test ".$cf_item2" != ".$cf_subdir" && DIRS_TO_MAKE="$DIRS_TO_MAKE $cf_subdir"
 done
 for cf_dir in $DIRS_TO_MAKE
 do
-	test ! -d $cf_dir && mkdir $cf_dir
+	test ! -d "$cf_dir" && mkdir "$cf_dir"
 done
 
 # symbols that differ when compiling Ada95 by itself.
@@ -22005,86 +29227,6 @@
 #define NCURSES_VERSION_STRING "${NCURSES_MAJOR}.${NCURSES_MINOR}.${NCURSES_PATCH}"
 EOF
 
-### Now that we're done running tests, add the compiler-warnings, if any
-
-cf_fix_cppflags=no
-cf_new_cflags=
-cf_new_cppflags=
-cf_new_extra_cppflags=
-
-for cf_add_cflags in $EXTRA_CFLAGS
-do
-case $cf_fix_cppflags in
-(no)
-	case $cf_add_cflags in
-	(-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C)
-		case $cf_add_cflags in
-		(-D*)
-			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
-
-			test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
-				&& test -z "${cf_tst_cflags}" \
-				&& cf_fix_cppflags=yes
-
-			if test $cf_fix_cppflags = yes ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
-				continue
-			elif test "${cf_tst_cflags}" = "\"'" ; then
-				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
-				continue
-			fi
-			;;
-		esac
-		case "$CPPFLAGS" in
-		(*$cf_add_cflags)
-			;;
-		(*)
-			case $cf_add_cflags in
-			(-D*)
-				cf_tst_cppflags=`echo "x$cf_add_cflags" | sed -e 's/^...//' -e 's/=.*//'`
-
-CPPFLAGS=`echo "$CPPFLAGS" | \
-	sed	-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?[ 	]/ /g' \
-		-e 's/-[UD]'"$cf_tst_cppflags"'\(=[^ 	]*\)\?$//g'`
-
-				;;
-			esac
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
-			;;
-		esac
-		;;
-	(*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
-		;;
-	esac
-	;;
-(yes)
-	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
-
-	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
-
-	test "x${cf_add_cflags}" != "x${cf_tst_cflags}" \
-		&& test -z "${cf_tst_cflags}" \
-		&& cf_fix_cppflags=no
-	;;
-esac
-done
-
-if test -n "$cf_new_cflags" ; then
-
-	CFLAGS="$CFLAGS $cf_new_cflags"
-fi
-
-if test -n "$cf_new_cppflags" ; then
-
-	CPPFLAGS="$CPPFLAGS $cf_new_cppflags"
-fi
-
-if test -n "$cf_new_extra_cppflags" ; then
-
-	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
-fi
-
 ### Define substitutions for header files to avoid name-pollution
 
 if test "x$cf_cv_have_tcgetattr" = xyes ; then
@@ -22118,58 +29260,8 @@
 SUB_MAKEFILES="$SUB_MAKEFILES misc/ncurses-config:misc/ncurses-config.in"
 SUB_MAKEFILES="$SUB_MAKEFILES man/ncurses${USE_CFG_SUFFIX}-config.1:man/MKncu_config.in"
 
-if test "x$enable_pc_files" = xyes ; then \
+if test "x$enable_pc_files" = xyes && test -z "$MAKE_PC_FILES" ; then
 SUB_MAKEFILES="$SUB_MAKEFILES misc/gen-pkgconfig:misc/gen-pkgconfig.in"
-MAKE_PC_FILES=
-else
-MAKE_PC_FILES="#"
-fi
-
-# Extract the first word of "tic", so it can be a program name with args.
-set dummy tic; ac_word=$2
-echo "$as_me:22130: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
-if test "${ac_cv_path_TIC_PATH+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  case $TIC_PATH in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_TIC_PATH="$TIC_PATH" # Let the user override the test with a path.
-  ;;
-  *)
-  ac_save_IFS=$IFS; IFS=$ac_path_separator
-ac_dummy="$PATH:/usr/local/ncurses/bin"
-for ac_dir in $ac_dummy; do
-  IFS=$ac_save_IFS
-  test -z "$ac_dir" && ac_dir=.
-  if $as_executable_p "$ac_dir/$ac_word"; then
-   ac_cv_path_TIC_PATH="$ac_dir/$ac_word"
-   echo "$as_me:22147: found $ac_dir/$ac_word" >&5
-   break
-fi
-done
-
-  test -z "$ac_cv_path_TIC_PATH" && ac_cv_path_TIC_PATH="unknown"
-  ;;
-esac
-fi
-TIC_PATH=$ac_cv_path_TIC_PATH
-
-if test -n "$TIC_PATH"; then
-  echo "$as_me:22159: result: $TIC_PATH" >&5
-echo "${ECHO_T}$TIC_PATH" >&6
-else
-  echo "$as_me:22162: result: no" >&5
-echo "${ECHO_T}no" >&6
-fi
-
-if test -n "$FALLBACK_LIST"
-then
-	if test "$TIC_PATH" = unknown
-	then
-		{ echo "$as_me:22170: WARNING: no tic program found for fallbacks" >&5
-echo "$as_me: WARNING: no tic program found for fallbacks" >&2;}
-	fi
 fi
 
 if test "x$cf_with_tests" != xno ; then
@@ -22180,20 +29272,24 @@
 
 ADAHTML_DIR=../../doc/html/ada
 
-# these could be configurable, but are not currently
-PANEL_NAME=panel
-MENU_NAME=menu
-FORM_NAME=form
-CXX_NAME=ncurses++
+# workaround for OS/2 (20151017)
+case "$cf_cv_system_name" in
+(os2*)
+	LIBTOOL_OPTS_CXX="-os2dllname ncurs++"
+	;;
+(*)
+	LIBTOOL_OPTS_CXX=
+	;;
+esac
 
 # workaround for g++ versus Solaris (20131116)
-case $cf_cv_system_name in
+case "$cf_cv_system_name" in
 (solaris2*)
 	case "x$CPPFLAGS" in
 	(*-D_XOPEN_SOURCE_EXTENDED*)
 		test -n "$verbose" && echo "	moving _XOPEN_SOURCE_EXTENDED to work around g++ problem" 1>&6
 
-echo "${as_me:-configure}:22196: testing moving _XOPEN_SOURCE_EXTENDED to work around g++ problem ..." 1>&5
+echo "${as_me:-configure}:29292: testing moving _XOPEN_SOURCE_EXTENDED to work around g++ problem ..." 1>&5
 
 		CFLAGS="$CFLAGS -D_XOPEN_SOURCE_EXTENDED"
 		CPPFLAGS=`echo "x$CPPFLAGS" | sed -e  's/^.//' -e 's/-D_XOPEN_SOURCE_EXTENDED//'`
@@ -22204,8 +29300,8 @@
 
 # Help to automatically enable the extended curses features when using either
 # the *-config or the ".pc" files by adding defines.
-echo "$as_me:22207: checking for defines to add to ncurses${USE_CFG_SUFFIX}-config script" >&5
-echo $ECHO_N "checking for defines to add to ncurses${USE_CFG_SUFFIX}-config script... $ECHO_C" >&6
+echo "$as_me:29303: checking for defines to add to ncurses${USE_CFG_SUFFIX}${cf_config_suffix}-config script" >&5
+echo $ECHO_N "checking for defines to add to ncurses${USE_CFG_SUFFIX}${cf_config_suffix}-config script... $ECHO_C" >&6
 PKG_CFLAGS=
 for cf_loop1 in $CPPFLAGS_after_XOPEN
 do
@@ -22220,7 +29316,7 @@
 	done
 	test "$cf_found" = no && PKG_CFLAGS="$PKG_CFLAGS $cf_loop1"
 done
-echo "$as_me:22223: result: $PKG_CFLAGS" >&5
+echo "$as_me:29319: result: $PKG_CFLAGS" >&5
 echo "${ECHO_T}$PKG_CFLAGS" >&6
 
 # AC_CHECK_SIZEOF demands a literal parameter, no variables.  So we do this.
@@ -22260,7 +29356,11 @@
 	MISC_UNINSTALL_DATA=uninstall.data
 fi
 
-SUB_SCRIPTS=
+if test "x$cf_with_db_install" = "xno" || test "x$TERMINFO_SRC" = "xno"; then
+	MAKE_DATABASE="#"
+else
+	MAKE_DATABASE="$MAKE_TERMINFO"
+fi
 
 if test -n "$PACKAGE"
 then
@@ -22275,9 +29375,9 @@
 if test -n "$RESULTING_SYMS"
 then
 	cf_filter_syms=$cf_dft_filter_syms
-	test -n "$verbose" && echo "	will map symbols to ABI=$cf_cv_abi_version" 1>&6
+	test -n "$verbose" && echo "	will map symbols to ABI=$cf_cv_abi_default" 1>&6
 
-echo "${as_me:-configure}:22280: testing will map symbols to ABI=$cf_cv_abi_version ..." 1>&5
+echo "${as_me:-configure}:29380: testing will map symbols to ABI=$cf_cv_abi_default ..." 1>&5
 
 fi
 
@@ -22286,19 +29386,119 @@
 	cf_filter_syms=yes
 fi
 
+test "x$cf_with_trace" = xyes && NCURSES_INLINE=
+
 UNALTERED_SYMS=`echo "$RESULTING_SYMS" | sed -e 's/\\$/\\\\$/g'`
-if test $cf_filter_syms = yes
+if test "$cf_filter_syms" = yes
 then
 	RESULTING_SYMS=resulting.map
 fi
 
 if test "x$cross_compiling" = xyes ; then
 	ADAGEN_LDFLAGS='$(CROSS_LDFLAGS)'
+	CHECK_BUILD="#"
 else
 	ADAGEN_LDFLAGS='$(NATIVE_LDFLAGS)'
+	CHECK_BUILD=
 fi
 
-ac_config_files="$ac_config_files include/MKterm.h.awk include/curses.head:include/curses.h.in include/ncurses_dll.h include/termcap.h include/unctrl.h $SUB_SCRIPTS $SUB_MAKEFILES Makefile"
+# This is used for the *-config script and *.pc data files.
+
+echo "$as_me:29407: checking for linker search path" >&5
+echo $ECHO_N "checking for linker search path... $ECHO_C" >&6
+if test "${cf_cv_ld_searchpath+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+if test "$cross_compiling" != yes ; then
+
+# GNU binutils' ld does not involve permissions which may stop ldconfig.
+cf_pathlist=`${LD:-ld} --verbose 2>/dev/null | grep SEARCH_DIR | sed -e 's,SEARCH_DIR[("=][("=]*,,g' -e 's/"[)];//gp' | sort -u`
+
+# The -NX options tell newer versions of Linux ldconfig to not attempt to
+# update the cache, which makes it run faster.
+test -z "$cf_pathlist" && \
+	cf_pathlist=`(ldconfig -NX -v) 2>/dev/null | sed -e '/^[ 	]/d' -e 's/:$//' | sort -u`
+
+test -z "$cf_pathlist" &&
+	cf_pathlist=`(ldconfig -v) 2>/dev/null | sed -n -e '/^[ 	]/d' -e 's/:$//p' | sort -u`
+
+# This works with OpenBSD 6.5, which lists only filenames
+test -z "$cf_pathlist" &&
+	cf_pathlist=`(ldconfig -v) 2>/dev/null | sed -n -e 's,^Adding \(.*\)/.*$,\1,p' | sort -u`
+
+if test -z "$cf_pathlist"
+then
+	# dyld default path with MacOS
+	if test -f /usr/bin/otool && test "x`uname -s`" = xDarwin
+	then
+		# do this to bypass check
+		cf_cv_ld_searchpath='$HOME/lib'
+		cf_pathlist="/usr/local/lib /lib /usr/lib"
+	fi
+fi
+
+if test -z "$cf_pathlist"
+then
+	# Solaris is "SunOS"
+	if test -f /usr/bin/isainfo && test "x`uname -s`" = xSunOS
+	then
+		case x`(isainfo -b)` in
+		(x64)
+			cf_pathlist="$cf_pathlist /lib/64 /usr/lib/64"
+			;;
+		(x32)
+			test -d /usr/ccs/lib && cf_pathlist="$cf_pathlist /usr/ccs/lib"
+			cf_pathlist="$cf_pathlist /lib /usr/lib"
+			;;
+		(*)
+			{ echo "$as_me:29455: WARNING: problem with Solaris architecture" >&5
+echo "$as_me: WARNING: problem with Solaris architecture" >&2;}
+			;;
+		esac
+	fi
+fi
+
+if test -z "$cf_pathlist"
+then
+	# HP-UX
+	if test x"`uname -s`" = xHP-UX
+	then
+		case x`getconf LONG_BIT` in
+		(x64)
+			cf_pathlist="/usr/lib/hpux64"
+			;;
+		(x*)
+			cf_pathlist="/usr/lib/hpux32"
+			;;
+		esac
+	fi
+fi
+
+fi
+
+# If nothing else, assume it is conventional
+test -z "$cf_pathlist" && cf_pathlist="/usr/lib /lib"
+
+# Finally, check that this is only directories
+for cf_path in $0 $cf_pathlist
+do
+	if test -d "$cf_path"; then
+		test -n "$cf_cv_ld_searchpath" && cf_cv_ld_searchpath="${cf_cv_ld_searchpath} "
+		cf_cv_ld_searchpath="${cf_cv_ld_searchpath}${cf_path}"
+	fi
+done
+
+# Ensure that it is nonempty
+test -z "$cf_cv_ld_searchpath" && cf_cv_ld_searchpath=/usr/lib
+
+fi
+echo "$as_me:29496: result: $cf_cv_ld_searchpath" >&5
+echo "${ECHO_T}$cf_cv_ld_searchpath" >&6
+
+LD_SEARCHPATH=`echo "$cf_cv_ld_searchpath"|sed -e 's/ /|/g'`
+
+ac_config_files="$ac_config_files include/MKterm.h.awk include/curses.head:include/curses.h.in include/ncurses_dll.h include/termcap.h include/unctrl.h man/man_db.renames $SUB_MAKEFILES Makefile"
 ac_config_commands="$ac_config_commands default"
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -22310,7 +29510,7 @@
 # config.status only pays attention to the cache file if you give it
 # the --recheck option to rerun configure.
 #
-# `ac_cv_env_foo' variables (set or unset) will be overriden when
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
 # loading this file, other *unset* `ac_cv_foo' will be assigned the
 # following values.
 
@@ -22376,25 +29576,29 @@
 
 DEFS=-DHAVE_CONFIG_H
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:22382: creating $CONFIG_STATUS" >&5
+{ echo "$as_me:29582: creating $CONFIG_STATUS" >&5
 echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
+cat >"$CONFIG_STATUS" <<_ACEOF
 #! $SHELL
 # Generated automatically by configure.
 # Run this file to recreate the current configuration.
 # Compiler output produced by configure, useful for debugging
 # configure, is in config.log if it exists.
 
+me=\`echo "\$0" | sed -e 's,.*\\/,,'\`
+
 debug=false
 SHELL=\${CONFIG_SHELL-$SHELL}
 ac_cs_invocation="\$0 \$@"
 
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
 _ACEOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF
+cat >>"$CONFIG_STATUS" <<\_ACEOF
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
@@ -22407,9 +29611,9 @@
 as_me=`echo "$0" |sed 's,.*[\\/],,'`
 
 if expr a : '\(a\)' >/dev/null 2>&1; then
-  as_expr=expr
+  as_expr="expr"
 else
-  as_expr=false
+  as_expr="false"
 fi
 
 rm -f conf$$ conf$$.exe conf$$.file
@@ -22424,7 +29628,7 @@
     as_ln_s='ln -s'
   fi
 elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
+  as_ln_s='ln'
 else
   as_ln_s='cp -p'
 fi
@@ -22434,9 +29638,9 @@
 
 # Support unset when possible.
 if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
-  as_unset=unset
+  as_unset="unset"
 else
-  as_unset=false
+  as_unset="false"
 fi
 
 # NLS nuisances.
@@ -22464,22 +29668,22 @@
 
 # Files that config.status was made for.
 if test -n "$ac_config_files"; then
-  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+  echo "config_files=\"$ac_config_files\"" >>"$CONFIG_STATUS"
 fi
 
 if test -n "$ac_config_headers"; then
-  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+  echo "config_headers=\"$ac_config_headers\"" >>"$CONFIG_STATUS"
 fi
 
 if test -n "$ac_config_links"; then
-  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+  echo "config_links=\"$ac_config_links\"" >>"$CONFIG_STATUS"
 fi
 
 if test -n "$ac_config_commands"; then
-  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+  echo "config_commands=\"$ac_config_commands\"" >>"$CONFIG_STATUS"
 fi
 
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
 
 ac_cs_usage="\
 \`$as_me' instantiates files from templates according to the
@@ -22508,21 +29712,22 @@
 Report bugs to <dickey@invisible-island.net>."
 EOF
 
-cat >>$CONFIG_STATUS <<EOF
+cat >>"$CONFIG_STATUS" <<EOF
 ac_cs_version="\\
 config.status
-configured by $0, generated by GNU Autoconf 2.52.20141204,
+configured by $0, generated by GNU Autoconf 2.52.20231210,
   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
 
+Copyright 2003-2022,2023	Thomas E. Dickey
 Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
-srcdir=$srcdir
+srcdir="$srcdir"
 INSTALL="$INSTALL"
 EOF
 
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
 # If no file are specified by the user, then we need to provide default
 # value.  By we need to know if files were specified by the user.
 ac_need_defaults=:
@@ -22545,17 +29750,17 @@
   case $1 in
   # Handling of the options.
 EOF
-cat >>$CONFIG_STATUS <<EOF
+cat >>"$CONFIG_STATUS" <<EOF
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
     exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
 EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
   --version | --vers* | -V )
     echo "$ac_cs_version"; exit 0 ;;
   --he | --h)
     # Conflict between --help and --header
-    { { echo "$as_me:22558: error: ambiguous option: $1
+    { { echo "$as_me:29763: error: ambiguous option: $1
 Try \`$0 --help' for more information." >&5
 echo "$as_me: error: ambiguous option: $1
 Try \`$0 --help' for more information." >&2;}
@@ -22574,7 +29779,7 @@
     ac_need_defaults=false;;
 
   # This is an error.
-  -*) { { echo "$as_me:22577: error: unrecognized option: $1
+  -*) { { echo "$as_me:29782: error: unrecognized option: $1
 Try \`$0 --help' for more information." >&5
 echo "$as_me: error: unrecognized option: $1
 Try \`$0 --help' for more information." >&2;}
@@ -22593,18 +29798,18 @@
 ## Running config.status.  ##
 ## ----------------------- ##
 
-This file was extended by $as_me 2.52.20141204, executed with
+This file was extended by $as_me 2.52.20231210, executed with
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
   CONFIG_LINKS    = $CONFIG_LINKS
   CONFIG_COMMANDS = $CONFIG_COMMANDS
-  > $ac_cs_invocation
+  > "$ac_cs_invocation"
 on `(hostname || uname -n) 2>/dev/null | sed 1q`
 
 _ACEOF
 EOF
 
-cat >>$CONFIG_STATUS <<EOF
+cat >>"$CONFIG_STATUS" <<EOF
 #
 # INIT-COMMANDS section.
 #
@@ -22612,12 +29817,14 @@
 ### Special initialization commands, used to pass information from the
 ### configuration-run into config.status
 
-AWK="$AWK"
 ALTERNATE_SYMS="$ALTERNATE_SYMS"
+AWK="$AWK"
+CXX_NAME="$CXX_NAME"
 DFT_ARG_SUFFIX="$DFT_ARG_SUFFIX"
 DFT_LWR_MODEL="$DFT_LWR_MODEL"
 ECHO_LD="$ECHO_LD"
 EXTRA_SUFFIX="$EXTRA_SUFFIX"
+FORM_NAME="$FORM_NAME"
 LDCONFIG="$LDCONFIG"
 LIBTOOL_VERSION="$LIBTOOL_VERSION"
 LIB_NAME="$LIB_NAME"
@@ -22627,15 +29834,19 @@
 LIB_TRACING="$LIB_TRACING"
 LN_S="$LN_S"
 MAKE_TERMINFO="$MAKE_TERMINFO"
+MANPAGE_RENAMES="$MANPAGE_RENAMES"
+MENU_NAME="$MENU_NAME"
 NCURSES_MAJOR="$NCURSES_MAJOR"
 NCURSES_MINOR="$NCURSES_MINOR"
 NCURSES_OSPEED="$NCURSES_OSPEED"
 NCURSES_PATCH="$NCURSES_PATCH"
+PANEL_NAME="$PANEL_NAME"
 SRC_SUBDIRS="$SRC_SUBDIRS"
 TERMINFO="$TERMINFO"
 TICS_ARG_SUFFIX="$TICS_ARG_SUFFIX"
 TICS_LIB_SUFFIX="$TICS_LIB_SUFFIX"
 TICS_NAME="$TICS_NAME"
+TICS_SUFFIX="$TICS_SUFFIX"
 TIC_PATH="$TIC_PATH"
 TINFO_ARG_SUFFIX="$TINFO_ARG_SUFFIX"
 TINFO_LIB_SUFFIX="$TINFO_LIB_SUFFIX"
@@ -22651,11 +29862,16 @@
 WITH_ECHO="${enable_echo:=yes}"
 WITH_OVERWRITE="$with_overwrite"
 cf_LIST_MODELS="$cf_list_models"
+cf_cv_VERSION_GNATMAKE=$cf_cv_VERSION_GNATMAKE
+cf_cv_VERSION_GPRBUILD=$cf_cv_VERSION_GPRBUILD
+cf_cv_abi_default="$cf_cv_abi_default"
 cf_cv_abi_version="$cf_cv_abi_version"
 cf_cv_do_relink="$cf_cv_do_relink"
+cf_cv_do_reranlib="$cf_cv_do_reranlib"
 cf_cv_do_symlinks="$cf_cv_do_symlinks"
 cf_cv_enable_lp64="$cf_cv_enable_lp64"
 cf_cv_enable_opaque="$cf_cv_enable_opaque"
+cf_cv_make_PHONY="$cf_cv_make_PHONY"
 cf_cv_prog_CC_c_o=$cf_cv_prog_CC_c_o
 cf_cv_prog_CXX_c_o=$cf_cv_prog_CXX_c_o
 cf_cv_prog_gnat_correct=$cf_cv_prog_gnat_correct
@@ -22673,11 +29889,12 @@
 cf_with_tests="$cf_with_tests"
 host="$host"
 target="$target"
+verbose="$verbose"
 with_shared_cxx="$with_shared_cxx"
 
 EOF
 
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
 for ac_config_target in $ac_config_targets
 do
   case "$ac_config_target" in
@@ -22687,12 +29904,12 @@
   "include/ncurses_dll.h" ) CONFIG_FILES="$CONFIG_FILES include/ncurses_dll.h" ;;
   "include/termcap.h" ) CONFIG_FILES="$CONFIG_FILES include/termcap.h" ;;
   "include/unctrl.h" ) CONFIG_FILES="$CONFIG_FILES include/unctrl.h" ;;
-  "$SUB_SCRIPTS" ) CONFIG_FILES="$CONFIG_FILES $SUB_SCRIPTS" ;;
+  "man/man_db.renames" ) CONFIG_FILES="$CONFIG_FILES man/man_db.renames" ;;
   "$SUB_MAKEFILES" ) CONFIG_FILES="$CONFIG_FILES $SUB_MAKEFILES" ;;
   "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
   "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
   "include/ncurses_cfg.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/ncurses_cfg.h:include/ncurses_cfg.hin" ;;
-  *) { { echo "$as_me:22695: error: invalid argument: $ac_config_target" >&5
+  *) { { echo "$as_me:29912: error: invalid argument: $ac_config_target" >&5
 echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
    { (exit 1); exit 1; }; };;
   esac
@@ -22702,7 +29919,7 @@
 # then the envvar interface is used.  Set only those that are not.
 # We use the long form for the default assignment because of an extremely
 # bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
+if "$ac_need_defaults"; then
   test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
   test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
   test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
@@ -22716,14 +29933,14 @@
 }
 
 # Create a (secure) tmp directory for tmp files.
-: ${TMPDIR=/tmp}
+: "${TMPDIR=/tmp}"
 {
   tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
   test -n "$tmp" && test -d "$tmp"
 }  ||
 {
   tmp=$TMPDIR/cs$$-$RANDOM
-  (umask 077 && mkdir $tmp)
+  (umask 077 && mkdir "$tmp")
 } ||
 {
    echo "$me: cannot create a temporary directory in $TMPDIR" >&2
@@ -22732,7 +29949,7 @@
 
 EOF
 
-cat >>$CONFIG_STATUS <<EOF
+cat >>"$CONFIG_STATUS" <<EOF
 
 #
 # CONFIG_FILES section.
@@ -22743,7 +29960,7 @@
 if test -n "\$CONFIG_FILES"; then
   # Protect against being on the right side of a sed subst in config.status.
   sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
-   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >"\$tmp"/subs.sed <<\\CEOF
 s,@SHELL@,$SHELL,;t t
 s,@exec_prefix@,$exec_prefix,;t t
 s,@prefix@,$prefix,;t t
@@ -22756,6 +29973,7 @@
 s,@sysconfdir@,$sysconfdir,;t t
 s,@sharedstatedir@,$sharedstatedir,;t t
 s,@localstatedir@,$localstatedir,;t t
+s,@runstatedir@,$runstatedir,;t t
 s,@libdir@,$libdir,;t t
 s,@includedir@,$includedir,;t t
 s,@oldincludedir@,$oldincludedir,;t t
@@ -22776,12 +29994,14 @@
 s,@DEFS@,$DEFS,;t t
 s,@LIBS@,$LIBS,;t t
 s,@top_builddir@,$top_builddir,;t t
+s,@GREP@,$GREP,;t t
 s,@EGREP@,$EGREP,;t t
 s,@NCURSES_MAJOR@,$NCURSES_MAJOR,;t t
 s,@NCURSES_MINOR@,$NCURSES_MINOR,;t t
 s,@NCURSES_PATCH@,$NCURSES_PATCH,;t t
 s,@cf_cv_rel_version@,$cf_cv_rel_version,;t t
 s,@cf_cv_abi_version@,$cf_cv_abi_version,;t t
+s,@cf_cv_abi_default@,$cf_cv_abi_default,;t t
 s,@cf_cv_builtin_bool@,$cf_cv_builtin_bool,;t t
 s,@cf_cv_header_stdbool_h@,$cf_cv_header_stdbool_h,;t t
 s,@cf_cv_type_of_bool@,$cf_cv_type_of_bool,;t t
@@ -22802,6 +30022,7 @@
 s,@target_cpu@,$target_cpu,;t t
 s,@target_vendor@,$target_vendor,;t t
 s,@target_os@,$target_os,;t t
+s,@FGREP@,$FGREP,;t t
 s,@CC@,$CC,;t t
 s,@CFLAGS@,$CFLAGS,;t t
 s,@LDFLAGS@,$LDFLAGS,;t t
@@ -22821,13 +30042,17 @@
 s,@INSTALL_DATA@,$INSTALL_DATA,;t t
 s,@LINT@,$LINT,;t t
 s,@LINT_OPTS@,$LINT_OPTS,;t t
+s,@LINT_LIBS@,$LINT_LIBS,;t t
 s,@LN_S@,$LN_S,;t t
+s,@cf_config_suffix@,$cf_config_suffix,;t t
 s,@PKG_CONFIG@,$PKG_CONFIG,;t t
 s,@ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t
 s,@PKG_CONFIG_LIBDIR@,$PKG_CONFIG_LIBDIR,;t t
 s,@MAKE_PC_FILES@,$MAKE_PC_FILES,;t t
 s,@PC_MODULE_SUFFIX@,$PC_MODULE_SUFFIX,;t t
 s,@SET_MAKE@,$SET_MAKE,;t t
+s,@MAKE_NO_PHONY@,$MAKE_NO_PHONY,;t t
+s,@MAKE_PHONY@,$MAKE_PHONY,;t t
 s,@CTAGS@,$CTAGS,;t t
 s,@ETAGS@,$ETAGS,;t t
 s,@MAKE_LOWER_TAGS@,$MAKE_LOWER_TAGS,;t t
@@ -22896,10 +30121,16 @@
 s,@VERSIONED_SYMS@,$VERSIONED_SYMS,;t t
 s,@WILDCARD_SYMS@,$WILDCARD_SYMS,;t t
 s,@cf_ldd_prog@,$cf_ldd_prog,;t t
+s,@EXTRA_PKG_LDFLAGS@,$EXTRA_PKG_LDFLAGS,;t t
 s,@EXTRA_SUFFIX@,$EXTRA_SUFFIX,;t t
 s,@TERMINFO_SRC@,$TERMINFO_SRC,;t t
 s,@NCURSES_USE_DATABASE@,$NCURSES_USE_DATABASE,;t t
+s,@TIC@,$TIC,;t t
+s,@ac_ct_TIC@,$ac_ct_TIC,;t t
+s,@INFOCMP@,$INFOCMP,;t t
+s,@ac_ct_INFOCMP@,$ac_ct_INFOCMP,;t t
 s,@FALLBACK_LIST@,$FALLBACK_LIST,;t t
+s,@USE_FALLBACKS@,$USE_FALLBACKS,;t t
 s,@WHICH_XTERM@,$WHICH_XTERM,;t t
 s,@XTERM_KBS@,$XTERM_KBS,;t t
 s,@TERMINFO_DIRS@,$TERMINFO_DIRS,;t t
@@ -22909,6 +30140,7 @@
 s,@TERMPATH@,$TERMPATH,;t t
 s,@NCURSES_USE_TERMCAP@,$NCURSES_USE_TERMCAP,;t t
 s,@BROKEN_LINKER@,$BROKEN_LINKER,;t t
+s,@NCURSES_WCWIDTH_GRAPHICS@,$NCURSES_WCWIDTH_GRAPHICS,;t t
 s,@NCURSES_CH_T@,$NCURSES_CH_T,;t t
 s,@NCURSES_LIBUTF8@,$NCURSES_LIBUTF8,;t t
 s,@NEED_WCHAR_H@,$NEED_WCHAR_H,;t t
@@ -22919,11 +30151,22 @@
 s,@NCURSES_OK_WINT_T@,$NCURSES_OK_WINT_T,;t t
 s,@cf_cv_enable_lp64@,$cf_cv_enable_lp64,;t t
 s,@NCURSES_TPARM_VARARGS@,$NCURSES_TPARM_VARARGS,;t t
+s,@NCURSES_WATTR_MACROS@,$NCURSES_WATTR_MACROS,;t t
+s,@RGB_PATH@,$RGB_PATH,;t t
+s,@no_x11_rgb@,$no_x11_rgb,;t t
 s,@NCURSES_BOOL@,$NCURSES_BOOL,;t t
 s,@TERMINFO_CAPS@,$TERMINFO_CAPS,;t t
+s,@NCURSES_CHTYPE@,$NCURSES_CHTYPE,;t t
 s,@NCURSES_OSPEED@,$NCURSES_OSPEED,;t t
+s,@NCURSES_MMASK_T@,$NCURSES_MMASK_T,;t t
 s,@NCURSES_CCHARW_MAX@,$NCURSES_CCHARW_MAX,;t t
+s,@NCURSES_SBOOL@,$NCURSES_SBOOL,;t t
 s,@NCURSES_TPARM_ARG@,$NCURSES_TPARM_ARG,;t t
+s,@cf_manpage_format@,$cf_manpage_format,;t t
+s,@cf_manpage_inboth@,$cf_manpage_inboth,;t t
+s,@cf_manpage_so_strip@,$cf_manpage_so_strip,;t t
+s,@cf_manpage_compress@,$cf_manpage_compress,;t t
+s,@cf_manpage_coptions@,$cf_manpage_coptions,;t t
 s,@MANPAGE_RENAMES@,$MANPAGE_RENAMES,;t t
 s,@NCURSES_EXT_FUNCS@,$NCURSES_EXT_FUNCS,;t t
 s,@GENERATED_EXT_FUNCS@,$GENERATED_EXT_FUNCS,;t t
@@ -22932,23 +30175,36 @@
 s,@NCURSES_CONST@,$NCURSES_CONST,;t t
 s,@NCURSES_EXT_COLORS@,$NCURSES_EXT_COLORS,;t t
 s,@NCURSES_MOUSE_VERSION@,$NCURSES_MOUSE_VERSION,;t t
-s,@NCURSES_SBOOL@,$NCURSES_SBOOL,;t t
+s,@cf_cv_enable_sigwinch@,$cf_cv_enable_sigwinch,;t t
 s,@NCURSES_XNAMES@,$NCURSES_XNAMES,;t t
-s,@NCURSES_INTEROP_FUNCS@,$NCURSES_INTEROP_FUNCS,;t t
 s,@PTHREAD@,$PTHREAD,;t t
 s,@cf_cv_enable_reentrant@,$cf_cv_enable_reentrant,;t t
 s,@cf_cv_enable_opaque@,$cf_cv_enable_opaque,;t t
-s,@NCURSES_OPAQUE@,$NCURSES_OPAQUE,;t t
 s,@NCURSES_SIZE_T@,$NCURSES_SIZE_T,;t t
+s,@NCURSES_OPAQUE@,$NCURSES_OPAQUE,;t t
+s,@NCURSES_OPAQUE_FORM@,$NCURSES_OPAQUE_FORM,;t t
+s,@NCURSES_OPAQUE_MENU@,$NCURSES_OPAQUE_MENU,;t t
+s,@NCURSES_OPAQUE_PANEL@,$NCURSES_OPAQUE_PANEL,;t t
 s,@NCURSES_WRAP_PREFIX@,$NCURSES_WRAP_PREFIX,;t t
+s,@NCURSES_IMPEXP@,$NCURSES_IMPEXP,;t t
+s,@NCURSES_CXX_IMPEXP@,$NCURSES_CXX_IMPEXP,;t t
+s,@NCURSES_INTEROP_FUNCS@,$NCURSES_INTEROP_FUNCS,;t t
+s,@NCURSES_WGETCH_EVENTS@,$NCURSES_WGETCH_EVENTS,;t t
+s,@EXP_WIN32_DRIVER@,$EXP_WIN32_DRIVER,;t t
+s,@INTERNALS_HDR@,$INTERNALS_HDR,;t t
 s,@ECHO_LT@,$ECHO_LT,;t t
 s,@ECHO_LD@,$ECHO_LD,;t t
 s,@RULE_CC@,$RULE_CC,;t t
 s,@SHOW_CC@,$SHOW_CC,;t t
 s,@ECHO_CC@,$ECHO_CC,;t t
 s,@ECHO_LINK@,$ECHO_LINK,;t t
-s,@ADAFLAGS@,$ADAFLAGS,;t t
+s,@INSTALL_OPT_S@,$INSTALL_OPT_S,;t t
+s,@INSTALL_OPT_O@,$INSTALL_OPT_O,;t t
+s,@INSTALL_OPT_P@,$INSTALL_OPT_P,;t t
 s,@EXTRA_CFLAGS@,$EXTRA_CFLAGS,;t t
+s,@HAVE_STDNORETURN_H@,$HAVE_STDNORETURN_H,;t t
+s,@STDC_NORETURN@,$STDC_NORETURN,;t t
+s,@ADAFLAGS@,$ADAFLAGS,;t t
 s,@EXTRA_CXXFLAGS@,$EXTRA_CXXFLAGS,;t t
 s,@ADA_TRACE@,$ADA_TRACE,;t t
 s,@MATH_LIB@,$MATH_LIB,;t t
@@ -22965,9 +30221,12 @@
 s,@CXX_ARFLAGS@,$CXX_ARFLAGS,;t t
 s,@CXXLIBS@,$CXXLIBS,;t t
 s,@USE_CXX_BOOL@,$USE_CXX_BOOL,;t t
-s,@gnat_exists@,$gnat_exists,;t t
+s,@cf_TEMP_gnat@,$cf_TEMP_gnat,;t t
 s,@M4_exists@,$M4_exists,;t t
 s,@cf_ada_make@,$cf_ada_make,;t t
+s,@cf_ada_config@,$cf_ada_config,;t t
+s,@cf_ada_config_Ada@,$cf_ada_config_Ada,;t t
+s,@cf_ada_config_C@,$cf_ada_config_C,;t t
 s,@GNATPREP_OPTS@,$GNATPREP_OPTS,;t t
 s,@cf_compile_generics@,$cf_compile_generics,;t t
 s,@cf_generic_objects@,$cf_generic_objects,;t t
@@ -22975,12 +30234,15 @@
 s,@USE_OLD_MAKERULES@,$USE_OLD_MAKERULES,;t t
 s,@USE_GNAT_PROJECTS@,$USE_GNAT_PROJECTS,;t t
 s,@USE_GNAT_LIBRARIES@,$USE_GNAT_LIBRARIES,;t t
+s,@USE_GNAT_MAKE_GPR@,$USE_GNAT_MAKE_GPR,;t t
+s,@USE_GNAT_GPRBUILD@,$USE_GNAT_GPRBUILD,;t t
 s,@cf_ada_compiler@,$cf_ada_compiler,;t t
 s,@cf_ada_package@,$cf_ada_package,;t t
 s,@ADA_INCLUDE@,$ADA_INCLUDE,;t t
 s,@ADA_OBJECTS@,$ADA_OBJECTS,;t t
 s,@ADA_SHAREDLIB@,$ADA_SHAREDLIB,;t t
 s,@MAKE_ADA_SHAREDLIB@,$MAKE_ADA_SHAREDLIB,;t t
+s,@ADA_LIBNAME@,$ADA_LIBNAME,;t t
 s,@ACPPFLAGS@,$ACPPFLAGS,;t t
 s,@DFT_ARG_SUFFIX@,$DFT_ARG_SUFFIX,;t t
 s,@DFT_DEP_SUFFIX@,$DFT_DEP_SUFFIX,;t t
@@ -23007,7 +30269,10 @@
 s,@TICS_LIST@,$TICS_LIST,;t t
 s,@TINFO_LIST@,$TINFO_LIST,;t t
 s,@SHLIB_LIST@,$SHLIB_LIST,;t t
-s,@NCURSES_TREE@,$NCURSES_TREE,;t t
+s,@FORM_NAME@,$FORM_NAME,;t t
+s,@MENU_NAME@,$MENU_NAME,;t t
+s,@PANEL_NAME@,$PANEL_NAME,;t t
+s,@CXX_NAME@,$CXX_NAME,;t t
 s,@TEST_ARGS@,$TEST_ARGS,;t t
 s,@TEST_DEPS@,$TEST_DEPS,;t t
 s,@TEST_ARG2@,$TEST_ARG2,;t t
@@ -23021,23 +30286,23 @@
 s,@HAVE_TERMIO_H@,$HAVE_TERMIO_H,;t t
 s,@HAVE_TERMIOS_H@,$HAVE_TERMIOS_H,;t t
 s,@cross_compiling@,$cross_compiling,;t t
-s,@TIC_PATH@,$TIC_PATH,;t t
 s,@MAKE_TESTS@,$MAKE_TESTS,;t t
 s,@ADAHTML_DIR@,$ADAHTML_DIR,;t t
-s,@PANEL_NAME@,$PANEL_NAME,;t t
-s,@MENU_NAME@,$MENU_NAME,;t t
-s,@FORM_NAME@,$FORM_NAME,;t t
-s,@CXX_NAME@,$CXX_NAME,;t t
+s,@LIBTOOL_OPTS_CXX@,$LIBTOOL_OPTS_CXX,;t t
 s,@PKG_CFLAGS@,$PKG_CFLAGS,;t t
 s,@MISC_INSTALL_DATA@,$MISC_INSTALL_DATA,;t t
 s,@MISC_UNINSTALL_DATA@,$MISC_UNINSTALL_DATA,;t t
+s,@MAKE_DATABASE@,$MAKE_DATABASE,;t t
 s,@UNALTERED_SYMS@,$UNALTERED_SYMS,;t t
 s,@ADAGEN_LDFLAGS@,$ADAGEN_LDFLAGS,;t t
+s,@CHECK_BUILD@,$CHECK_BUILD,;t t
+s,@PRIVATE_LIBS@,$PRIVATE_LIBS,;t t
+s,@LD_SEARCHPATH@,$LD_SEARCHPATH,;t t
 CEOF
 
 EOF
 
-  cat >>$CONFIG_STATUS <<\EOF
+  cat >>"$CONFIG_STATUS" <<\EOF
   # Split the substitutions into bite-sized pieces for seds with
   # small command number limits, like on Digital OSF/1 and HP-UX.
   ac_max_sed_lines=48
@@ -23046,13 +30311,13 @@
   ac_end=$ac_max_sed_lines # Line after last line for current file.
   ac_more_lines=:
   ac_sed_cmds=
-  while $ac_more_lines; do
-    if test $ac_beg -gt 1; then
-      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+  while "$ac_more_lines"; do
+    if test "$ac_beg" -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" "$tmp"/subs.sed >"$tmp"/subs.frag
     else
-      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+      sed "${ac_end}q" "$tmp"/subs.sed >"$tmp"/subs.frag
     fi
-    if test ! -s $tmp/subs.frag; then
+    if test ! -s "$tmp"/subs.frag; then
       ac_more_lines=false
     else
       # The purpose of the label and of the branching condition is to
@@ -23060,29 +30325,47 @@
       # is no need to browse any of the substitutions).
       # These are the two extra sed commands mentioned above.
       (echo ':t
-  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
-      if test -z "$ac_sed_cmds"; then
-  	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
-      else
-  	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat "$tmp"/subs.frag) >"$tmp"/subs-$ac_sed_frag.sed
+      # It is possible to make a multiline substitution using escaped newlines.
+      # Ensure that we do not split the substitution between script fragments.
+      ac_BEG=$ac_end
+      ac_END=`expr "$ac_end" + "$ac_max_sed_lines"`
+      sed "1,${ac_BEG}d; ${ac_END}p; q" "$tmp"/subs.sed >"$tmp"/subs.next
+      if test -s "$tmp"/subs.next; then
+        grep '^s,@[^@,][^@,]*@,.*\\$' "$tmp"/subs.next >"$tmp"/subs.edit
+        if test ! -s "$tmp"/subs.edit; then
+          grep "^s,@[^@,][^@,]*@,.*,;t t$" "$tmp"/subs.next >"$tmp"/subs.edit
+          if test ! -s "$tmp"/subs.edit; then
+            if test "$ac_beg" -gt 1; then
+              ac_end=`expr "$ac_end" - 1`
+              continue
+            fi
+          fi
+        fi
       fi
-      ac_sed_frag=`expr $ac_sed_frag + 1`
+
+      if test -z "$ac_sed_cmds"; then
+        ac_sed_cmds="sed -f \"$tmp\"/subs-$ac_sed_frag.sed"
+      else
+        ac_sed_cmds="$ac_sed_cmds | sed -f \"$tmp\"/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr "$ac_sed_frag" + 1`
       ac_beg=$ac_end
-      ac_end=`expr $ac_end + $ac_max_sed_lines`
+      ac_end=`expr "$ac_end" + "$ac_max_sed_lines"`
     fi
   done
   if test -z "$ac_sed_cmds"; then
-    ac_sed_cmds=cat
+    ac_sed_cmds="cat"
   fi
 fi # test -n "$CONFIG_FILES"
 
 EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
 for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
+  case "$ac_file" in
   - | *:- | *:-:* ) # input from stdin
-        cat >$tmp/stdin
+        cat >"$tmp"/stdin
         ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
         ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
   *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
@@ -23119,26 +30402,26 @@
   esac
 done; }
 
-    ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
+    ac_dir_suffix="/`echo "$ac_dir"|sed 's,^\./,,'`"
     # A "../" for each directory in $ac_dir_suffix.
     ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
   else
     ac_dir_suffix= ac_dots=
   fi
 
-  case $srcdir in
+  case "$srcdir" in
   .)  ac_srcdir=.
       if test -z "$ac_dots"; then
          ac_top_srcdir=.
       else
-         ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
+         ac_top_srcdir=`echo "$ac_dots" | sed 's,/$,,'`
       fi ;;
   [\\/]* | ?:[\\/]* )
-      ac_srcdir=$srcdir$ac_dir_suffix;
-      ac_top_srcdir=$srcdir ;;
+      ac_srcdir="$srcdir$ac_dir_suffix";
+      ac_top_srcdir="$srcdir" ;;
   *) # Relative path.
-    ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_dots$srcdir ;;
+    ac_srcdir="$ac_dots$srcdir$ac_dir_suffix"
+    ac_top_srcdir="$ac_dots$srcdir" ;;
   esac
 
   case $INSTALL in
@@ -23147,7 +30430,7 @@
   esac
 
   if test x"$ac_file" != x-; then
-    { echo "$as_me:23150: creating $ac_file" >&5
+    { echo "$as_me:30433: creating $ac_file" >&5
 echo "$as_me: creating $ac_file" >&6;}
     rm -f "$ac_file"
   fi
@@ -23162,48 +30445,48 @@
   ac_file_inputs=`IFS=:
     for f in $ac_file_in; do
       case $f in
-      -) echo $tmp/stdin ;;
+      -) echo "$tmp"/stdin ;;
       [\\/$]*)
          # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:23168: error: cannot find input file: $f" >&5
+         test -f "$f" || { { echo "$as_me:30451: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
-         echo $f;;
+         echo "$f";;
       *) # Relative
          if test -f "$f"; then
            # Build tree
-           echo $f
+           echo "$f"
          elif test -f "$srcdir/$f"; then
            # Source tree
-           echo $srcdir/$f
+           echo "$srcdir/$f"
          else
            # /dev/null tree
-           { { echo "$as_me:23181: error: cannot find input file: $f" >&5
+           { { echo "$as_me:30464: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          fi;;
       esac
     done` || { (exit 1); exit 1; }
 EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
   ac_warn_datarootdir=no
   if test x"$ac_file" != x-; then
     for ac_item in $ac_file_inputs
     do
-      ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' $ac_item`
+      ac_seen=`grep '@\(datadir\|mandir\|infodir\)@' "$ac_item"`
       if test -n "$ac_seen"; then
-        ac_used=`grep '@datarootdir@' $ac_item`
+        ac_used=`grep '@datarootdir@' "$ac_item"`
         if test -z "$ac_used"; then
-          { echo "$as_me:23197: WARNING: datarootdir was used implicitly but not set:
+          { echo "$as_me:30480: WARNING: datarootdir was used implicitly but not set:
 $ac_seen" >&5
 echo "$as_me: WARNING: datarootdir was used implicitly but not set:
 $ac_seen" >&2;}
           ac_warn_datarootdir=yes
         fi
       fi
-      ac_seen=`grep '${datarootdir}' $ac_item`
+      ac_seen=`grep '${datarootdir}' "$ac_item"`
       if test -n "$ac_seen"; then
-        { echo "$as_me:23206: WARNING: datarootdir was used explicitly but not set:
+        { echo "$as_me:30489: WARNING: datarootdir was used explicitly but not set:
 $ac_seen" >&5
 echo "$as_me: WARNING: datarootdir was used explicitly but not set:
 $ac_seen" >&2;}
@@ -23217,53 +30500,61 @@
 fi
 
 EOF
-cat >>$CONFIG_STATUS <<EOF
+cat >>"$CONFIG_STATUS" <<EOF
   sed "$ac_vpsub
 $extrasub
 EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
 :t
 /@[a-zA-Z_][a-zA-Z_0-9]*@/!b
 s,@configure_input@,$configure_input,;t t
 s,@srcdir@,$ac_srcdir,;t t
 s,@top_srcdir@,$ac_top_srcdir,;t t
 s,@INSTALL@,$ac_INSTALL,;t t
-" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
-  rm -f $tmp/stdin
+" $ac_file_inputs | (eval "$ac_sed_cmds") >"$tmp"/out
+  rm -f "$tmp"/stdin
+EOF
+test -n "${FGREP}" || FGREP="grep -F"
+test -n "${EGREP}" || EGREP="grep -E"
+cat >>"$CONFIG_STATUS" <<EOF
+  test -n "\${FGREP}" || FGREP="$FGREP"
+  test -n "\${EGREP}" || EGREP="$EGREP"
+EOF
+cat >>"$CONFIG_STATUS" <<\EOF
   if test x"$ac_file" != x-; then
-    cp $tmp/out $ac_file
+    cp "$tmp/out" "$ac_file"
 
     for ac_name in prefix exec_prefix datarootdir
     do
-        ac_seen=`fgrep -n '${'$ac_name'[:=].*}' $ac_file`
+        ac_seen=`$FGREP -n '${'$ac_name'[:=].*}' "$ac_file"`
         if test -n "$ac_seen"; then
-            ac_init=`egrep '[ 	]*'$ac_name'[ 	]*=' $ac_file`
+            ac_init=`$EGREP '[ 	]*'$ac_name'[ 	]*=' "$ac_file"`
             if test -z "$ac_init"; then
-              ac_seen=`echo "$ac_seen" |sed -e 's,^,'$ac_file':,'`
-              { echo "$as_me:23243: WARNING: Variable $ac_name is used but was not set:
+              ac_seen=`echo "$ac_seen" |sed -e 's,^,'"$ac_file"':,'`
+              { echo "$as_me:30534: WARNING: Variable $ac_name is used but was not set:
 $ac_seen" >&5
 echo "$as_me: WARNING: Variable $ac_name is used but was not set:
 $ac_seen" >&2;}
             fi
         fi
     done
-    egrep -n '@[a-z_][a-z_0-9]+@' $ac_file >$tmp/out
-    egrep -n '@[A-Z_][A-Z_0-9]+@' $ac_file >>$tmp/out
-    if test -s $tmp/out; then
-      ac_seen=`sed -e 's,^,'$ac_file':,' < $tmp/out`
-      { echo "$as_me:23254: WARNING: Some variables may not be substituted:
+    $EGREP -n '@[a-z_][a-z_0-9]+@' "$ac_file" >"$tmp"/out
+    $EGREP -n '@[A-Z_][A-Z_0-9]+@' "$ac_file" >>"$tmp"/out
+    if test -s "$tmp"/out; then
+      ac_seen=`sed -e 's,^,'"$ac_file"':,' < "$tmp"/out`
+      { echo "$as_me:30545: WARNING: Some variables may not be substituted:
 $ac_seen" >&5
 echo "$as_me: WARNING: Some variables may not be substituted:
 $ac_seen" >&2;}
     fi
   else
-    cat $tmp/out
+    cat "$tmp"/out
   fi
-  rm -f $tmp/out
+  rm -f "$tmp"/out
 
 done
 EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
 
 #
 # CONFIG_HEADER section.
@@ -23290,9 +30581,9 @@
 
 for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-  case $ac_file in
+  case "$ac_file" in
   - | *:- | *:-:* ) # input from stdin
-        cat >$tmp/stdin
+        cat >"$tmp"/stdin
         ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
         ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
   *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
@@ -23300,7 +30591,7 @@
   * )   ac_file_in=$ac_file.in ;;
   esac
 
-  test x"$ac_file" != x- && { echo "$as_me:23303: creating $ac_file" >&5
+  test x"$ac_file" != x- && { echo "$as_me:30594: creating $ac_file" >&5
 echo "$as_me: creating $ac_file" >&6;}
 
   # First look for the input files in the build tree, otherwise in the
@@ -23308,10 +30599,10 @@
   ac_file_inputs=`IFS=:
     for f in $ac_file_in; do
       case $f in
-      -) echo $tmp/stdin ;;
+      -) echo "$tmp"/stdin ;;
       [\\/$]*)
          # Absolute (can't be DOS-style, as IFS=:)
-         test -f "$f" || { { echo "$as_me:23314: error: cannot find input file: $f" >&5
+         test -f "$f" || { { echo "$as_me:30605: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          echo $f;;
@@ -23321,17 +30612,17 @@
            echo $f
          elif test -f "$srcdir/$f"; then
            # Source tree
-           echo $srcdir/$f
+           echo "$srcdir/$f"
          else
            # /dev/null tree
-           { { echo "$as_me:23327: error: cannot find input file: $f" >&5
+           { { echo "$as_me:30618: error: cannot find input file: $f" >&5
 echo "$as_me: error: cannot find input file: $f" >&2;}
    { (exit 1); exit 1; }; }
          fi;;
       esac
     done` || { (exit 1); exit 1; }
   # Remove the trailing spaces.
-  sed 's/[ 	]*$//' $ac_file_inputs >$tmp/in
+  sed 's/[ 	]*$//' $ac_file_inputs >"$tmp"/in
 
 EOF
 
@@ -23344,14 +30635,14 @@
 # the size of here documents, and old seds have small limits too.
 
 rm -f conftest.tail
-echo '  rm -f conftest.frag' >> $CONFIG_STATUS
+echo '  rm -f conftest.frag' >> "$CONFIG_STATUS"
 while grep . conftest.vals >/dev/null
 do
   # Write chunks of a limited-size here document to conftest.frag.
-  echo '  cat >> conftest.frag <<CEOF' >> $CONFIG_STATUS
-  sed ${ac_max_here_lines}q conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> $CONFIG_STATUS
-  echo 'CEOF' >> $CONFIG_STATUS
-  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+  echo '  cat >> conftest.frag <<CEOF' >> "$CONFIG_STATUS"
+  sed "${ac_max_here_lines}q" conftest.vals | sed -e 's/#ifdef.*/#if 0/' >> "$CONFIG_STATUS"
+  echo 'CEOF' >> "$CONFIG_STATUS"
+  sed "1,${ac_max_here_lines}d" conftest.vals > conftest.tail
   rm -f conftest.vals
   mv conftest.tail conftest.vals
 done
@@ -23363,26 +30654,26 @@
 /@DEFS@/r conftest.frag
 /@DEFS@/d
 CEOF
-sed -f conftest.edit $tmp/in > $tmp/out
-rm -f $tmp/in
-mv $tmp/out $tmp/in
+sed -f conftest.edit "$tmp"/in > "$tmp"/out
+rm -f "$tmp"/in
+mv "$tmp"/out "$tmp"/in
 rm -f conftest.edit conftest.frag
-' >> $CONFIG_STATUS
+' >> "$CONFIG_STATUS"
 
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
   # Let's still pretend it is `configure' which instantiates (i.e., don't
   # use $as_me), people would be surprised to read:
   #    /* config.h.  Generated automatically by config.status.  */
   if test x"$ac_file" = x-; then
-    echo "/* Generated automatically by configure.  */" >$tmp/config.h
+    echo "/* Generated automatically by configure.  */" >"$tmp"/config.h
   else
-    echo "/* $ac_file.  Generated automatically by configure.  */" >$tmp/config.h
+    echo "/* $ac_file.  Generated automatically by configure.  */" >"$tmp"/config.h
   fi
-  cat $tmp/in >>$tmp/config.h
-  rm -f $tmp/in
+  cat "$tmp"/in >>"$tmp"/config.h
+  rm -f "$tmp"/in
   if test x"$ac_file" != x-; then
-    if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
-      { echo "$as_me:23385: $ac_file is unchanged" >&5
+    if cmp -s "$ac_file" "$tmp/config.h" 2>/dev/null; then
+      { echo "$as_me:30676: $ac_file is unchanged" >&5
 echo "$as_me: $ac_file is unchanged" >&6;}
     else
       ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
@@ -23414,16 +30705,16 @@
 done; }
 
       fi
-      rm -f $ac_file
-      mv $tmp/config.h $ac_file
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file"
     fi
   else
-    cat $tmp/config.h
-    rm -f $tmp/config.h
+    cat "$tmp"/config.h
+    rm -f "$tmp"/config.h
   fi
 done
 EOF
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
 #
 # CONFIG_COMMANDS section.
 #
@@ -23431,16 +30722,16 @@
   ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
   ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
 
-  case $ac_dest in
+  case "$ac_dest" in
     default )
 if test "x$cf_with_tests" != xno ; then
 
 for cf_dir in test
 do
-	if test ! -d $srcdir/$cf_dir; then
+	if test ! -d "$srcdir/$cf_dir" ; then
 		continue
-	elif test -f $srcdir/$cf_dir/programs; then
-		$AWK -f $srcdir/test/mk-test.awk INSTALL=no ECHO_LINK="$ECHO_LD" $srcdir/$cf_dir/programs >>$cf_dir/Makefile
+	elif test -f "$srcdir/$cf_dir/programs" ; then
+		$AWK -f "$srcdir/test/mk-test.awk" INSTALL=no ECHO_LINK="$ECHO_LD" "$srcdir/$cf_dir/programs" >>$cf_dir/Makefile
 	fi
 done
 
@@ -23448,60 +30739,67 @@
 
 cf_prefix=$LIB_PREFIX
 
-case $cf_cv_shlib_version in
-(cygdll|msysdll|mingw)
+case "$cf_cv_shlib_version" in
+(cygdll|msysdll|mingw|msvcdll)
 	TINFO_NAME=$TINFO_ARG_SUFFIX
 	TINFO_SUFFIX=.dll
 	;;
 esac
 
 if test -n "$TINFO_SUFFIX" ; then
-	case $TINFO_SUFFIX in
+	case "$TINFO_SUFFIX" in
 	(tw*)
 		TINFO_NAME="${TINFO_NAME}tw${EXTRA_SUFFIX}"
-		TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^tw'$EXTRA_SUFFIX'//'`
+		TINFO_SUFFIX=`echo "$TINFO_SUFFIX" | sed 's/^tw'$EXTRA_SUFFIX'//'`
 		;;
 	(t*)
 		TINFO_NAME="${TINFO_NAME}t${EXTRA_SUFFIX}"
-		TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^t'$EXTRA_SUFFIX'//'`
+		TINFO_SUFFIX=`echo "$TINFO_SUFFIX" | sed 's/^t'$EXTRA_SUFFIX'//'`
 		;;
 	(w*)
 		TINFO_NAME="${TINFO_NAME}w${EXTRA_SUFFIX}"
-		TINFO_SUFFIX=`echo $TINFO_SUFFIX | sed 's/^w'$EXTRA_SUFFIX'//'`
+		TINFO_SUFFIX=`echo "$TINFO_SUFFIX" | sed 's/^w'$EXTRA_SUFFIX'//'`
 		;;
 	esac
 fi
 
 for cf_dir in $SRC_SUBDIRS
 do
-	if test ! -d $srcdir/$cf_dir ; then
+	if test ! -d "$srcdir/$cf_dir" ; then
 		continue
-	elif test -f $srcdir/$cf_dir/modules; then
+	elif test -f "$srcdir/$cf_dir/modules" ; then
 
 		SHARED_LIB=
 		Libs_To_Make=
-
-		cf_sed_options=
-		if test -n "${cf_cv_abi_version}" && test "x${cf_cv_abi_version}" != "x5"
+		cf_awk_program=
+		if test -n "${cf_cv_abi_default}" && test "x${cf_cv_abi_default}" != "x5"
 		then
-			cf_sed_options="$cf_sed_options -e \"s/NCURSES\\([WT]\\+\\)\?_/NCURSES\\1${cf_cv_abi_version}_/g\""
-			cf_sed_options="$cf_sed_options -e \"/deprecated in ABI${cf_cv_abi_version}/d\""
+			cf_awk_program="$cf_awk_program\
+/deprecated in ABI${cf_cv_abi_default}/ { next; }\
+{ sub(\"NCURSES([WT]+)?\", \"&${cf_cv_abi_default}\"); }\
+"
 		fi
 
 		if test "x$WILDCARD_SYMS" = xno
 		then
-			cf_sed_options="$cf_sed_options -e \"s/_\*;//g\""
+			cf_awk_program="$cf_awk_program\
+/[ 	]_\\*;/ { skip=1; next; }\
+"
 		fi
 
-		if test "x$cf_sed_options" != "x"
+		if test "x$cf_awk_program" != "x"
 		then
 			cat >>$cf_dir/Makefile <<CF_EOF
 
 # Generated by CF_LIB_RULES
 resulting.map: $UNALTERED_SYMS
-	sed $cf_sed_options < $UNALTERED_SYMS >\$@
+	$AWK 'BEGIN { skip = 1; last=""; } \
+$cf_awk_program \
+{ if ( last != "" && ( skip == 0 || \$\$0 !~ /}/ ) ) { print last; }\
+ skip = 0; last = \$\$0; } \
+END { print last; }' < "$UNALTERED_SYMS" >\$@
 
-clean::
+distclean::
 	rm -f resulting.map
 CF_EOF
 		fi
@@ -23515,19 +30813,37 @@
 		cf_depsuf=$cf_suffix
 		;;
 	(Xdebug)
-		cf_suffix='_g.a'
+		case "$cf_cv_system_name" in
+		(*-msvc*)
+			cf_suffix='_g.lib'
+			;;
+		(*)
+			cf_suffix='_g.a'
+			;;
+		esac
 		cf_depsuf=$cf_suffix
 		;;
 	(Xprofile)
-		cf_suffix='_p.a'
+		case "$cf_cv_system_name" in
+		(*-msvc*)
+			cf_suffix='_p.lib'
+			;;
+		(*)
+			cf_suffix='_p.a'
+			;;
+		esac
 		cf_depsuf=$cf_suffix
 		;;
 	(Xshared)
-		case $cf_cv_system_name in
+		case "$cf_cv_system_name" in
 		(aix[5-7]*)
 			cf_suffix='.so'
 			cf_depsuf=$cf_suffix
 			;;
+		(*-msvc*)
+			cf_suffix='.dll'
+			cf_depsuf='.dll.lib'
+			;;
 		(cygwin*|msys*|mingw*)
 			cf_suffix='.dll'
 			cf_depsuf='.dll.a'
@@ -23537,7 +30853,7 @@
 			cf_depsuf=$cf_suffix
 			;;
 		(hpux*)
-			case $target in
+			case "$target" in
 			(ia64*)
 				cf_suffix='.so'
 				cf_depsuf=$cf_suffix
@@ -23555,7 +30871,14 @@
 		esac
 		;;
 	(*)
-		cf_suffix='.a'
+		case "$target" in
+		(*-msvc*)
+			cf_suffix='.lib'
+			;;
+		(*)
+			cf_suffix='.a'
+			;;
+		esac
 		cf_depsuf=$cf_suffix
 		;;
 	esac
@@ -23565,9 +30888,22 @@
 		cf_depsuf="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_depsuf}"
 	fi
 
-			cf_libname=$cf_dir
-			test "$cf_dir" = c++ && cf_libname=ncurses++
-			if test $cf_item = shared ; then
+			if test "$cf_dir" = "c++"
+			then
+
+cf_map_lib_basename=`echo "cxx" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+eval cf_libname="\$${cf_map_lib_basename}_NAME"
+
+			else
+
+cf_map_lib_basename=`echo "$cf_dir" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+eval cf_libname="\$${cf_map_lib_basename}_NAME"
+
+			fi
+			test -z "$cf_libname" && cf_libname="$cf_dir"
+			if test "$cf_item" = shared ; then
 				if test -n "${LIB_SUFFIX}"
 				then
 					cf_shared_suffix=`echo "$cf_suffix" | sed 's/^'"${USE_LIB_SUFFIX}"'//'`
@@ -23608,7 +30944,7 @@
 				# cygwin needs import library, and has unique naming convention
 				# use autodetected ${cf_prefix} for import lib and static lib, but
 				# use 'cyg' prefix for shared lib.
-				case $cf_cv_shlib_version in
+				case "$cf_cv_shlib_version" in
 				(cygdll)
 					cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
 					cf_add_lib="../lib/cyg${cf_libname}${cf_cygsuf}"
@@ -23621,6 +30957,10 @@
 					cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
 					cf_add_lib="../lib/lib${cf_libname}${cf_cygsuf}"
 					;;
+				(msvcdll)
+					cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
+					cf_add_lib="../lib/${cf_libname}${cf_cygsuf}"
+					;;
 				(*)
 					cf_add_lib=
 					;;
@@ -23635,7 +30975,7 @@
 			Libs_To_Make="$Libs_To_Make $cf_add_lib"
 		done
 
-		if test $cf_dir = ncurses ; then
+		if test "$cf_dir" = ncurses ; then
 			cf_subsets="$LIB_SUBSETS"
 			cf_r_parts="$cf_subsets"
 			cf_liblist="$Libs_To_Make"
@@ -23646,12 +30986,12 @@
 				cf_r_parts=`echo "$cf_r_parts" |sed -e 's/^[^ ]* //'`
 				if test "$cf_l_parts" != "$cf_r_parts" ; then
 					cf_add_lib=
-					case $cf_l_parts in
+					case "$cf_l_parts" in
 					(*termlib*)
-						cf_add_lib=`echo $cf_liblist |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TINFO_LIB_SUFFIX}%g`
+						cf_add_lib=`echo "$cf_liblist" |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TINFO_LIB_SUFFIX}%g`
 						;;
 					(*ticlib*)
-						cf_add_lib=`echo $cf_liblist |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TICS_LIB_SUFFIX}%g`
+						cf_add_lib=`echo "$cf_liblist" |sed -e s%${LIB_NAME}${USE_LIB_SUFFIX}%${TICS_LIB_SUFFIX}%g`
 						;;
 					(*)
 						break
@@ -23668,12 +31008,12 @@
 			cf_subsets=`echo "$LIB_SUBSETS" | sed -e 's/^termlib.* //'`
 		fi
 
-		if test $cf_dir = c++; then
+		if test "$cf_dir" = c++; then
 			if test "x$with_shared_cxx" != xyes && test -n "$cf_shared_suffix"; then
 				cf_list=
 				for cf_item in $Libs_To_Make
 				do
-					case $cf_item in
+					case "$cf_item" in
 					(*.a)
 						;;
 					(*)
@@ -23697,12 +31037,12 @@
 
 		sed -e "s%@Libs_To_Make@%$Libs_To_Make%" \
 		    -e "s%@SHARED_LIB@%$SHARED_LIB%" \
-			$cf_dir/Makefile >$cf_dir/Makefile.out
-		mv $cf_dir/Makefile.out $cf_dir/Makefile
+			"$cf_dir/Makefile" >$cf_dir/Makefile.out
+		mv "$cf_dir/Makefile.out" "$cf_dir/Makefile"
 
-		$AWK -f $srcdir/mk-0th.awk \
+		$AWK -f "$srcdir/mk-0th.awk" \
 			libname="${cf_dir}${LIB_SUFFIX}" subsets="$LIB_SUBSETS" ticlib="$TICS_LIB_SUFFIX" termlib="$TINFO_LIB_SUFFIX" \
-			$srcdir/$cf_dir/modules >>$cf_dir/Makefile
+			"$srcdir/$cf_dir/modules" >>$cf_dir/Makefile
 
 		for cf_subset in $cf_subsets
 		do
@@ -23716,11 +31056,11 @@
 
 			CXX_MODEL=$cf_ITEM
 			if test "$CXX_MODEL" = SHARED; then
-				case $cf_cv_shlib_version in
-				(cygdll|msysdll|mingw)
+				case "$cf_cv_shlib_version" in
+				(cygdll|msysdll|mingw|msvcdll)
 					test "x$with_shared_cxx" = xno && test -n "$verbose" && echo "	overriding CXX_MODEL to SHARED" 1>&6
 
-echo "${as_me:-configure}:23723: testing overriding CXX_MODEL to SHARED ..." 1>&5
+echo "${as_me:-configure}:31063: testing overriding CXX_MODEL to SHARED ..." 1>&5
 
 					with_shared_cxx=yes
 					;;
@@ -23736,19 +31076,37 @@
 		cf_depsuf=$cf_suffix
 		;;
 	(Xdebug)
-		cf_suffix='_g.a'
+		case "$cf_cv_system_name" in
+		(*-msvc*)
+			cf_suffix='_g.lib'
+			;;
+		(*)
+			cf_suffix='_g.a'
+			;;
+		esac
 		cf_depsuf=$cf_suffix
 		;;
 	(Xprofile)
-		cf_suffix='_p.a'
+		case "$cf_cv_system_name" in
+		(*-msvc*)
+			cf_suffix='_p.lib'
+			;;
+		(*)
+			cf_suffix='_p.a'
+			;;
+		esac
 		cf_depsuf=$cf_suffix
 		;;
 	(Xshared)
-		case $cf_cv_system_name in
+		case "$cf_cv_system_name" in
 		(aix[5-7]*)
 			cf_suffix='.so'
 			cf_depsuf=$cf_suffix
 			;;
+		(*-msvc*)
+			cf_suffix='.dll'
+			cf_depsuf='.dll.lib'
+			;;
 		(cygwin*|msys*|mingw*)
 			cf_suffix='.dll'
 			cf_depsuf='.dll.a'
@@ -23758,7 +31116,7 @@
 			cf_depsuf=$cf_suffix
 			;;
 		(hpux*)
-			case $target in
+			case "$target" in
 			(ia64*)
 				cf_suffix='.so'
 				cf_depsuf=$cf_suffix
@@ -23776,7 +31134,14 @@
 		esac
 		;;
 	(*)
-		cf_suffix='.a'
+		case "$target" in
+		(*-msvc*)
+			cf_suffix='.lib'
+			;;
+		(*)
+			cf_suffix='.a'
+			;;
+		esac
 		cf_depsuf=$cf_suffix
 		;;
 	esac
@@ -23792,7 +31157,7 @@
 	(debug)   cf_subdir='obj_g' ;;
 	(profile) cf_subdir='obj_p' ;;
 	(shared)
-		case $cf_cv_system_name in
+		case "$cf_cv_system_name" in
 		(cygwin|msys)
 			cf_subdir='objects' ;;
 		(*)
@@ -23802,8 +31167,8 @@
 
 			# Test for case where we build libtinfo with a different name.
 			cf_libname=$cf_dir
-			if test $cf_dir = ncurses ; then
-				case $cf_subset in
+			if test "$cf_dir" = ncurses ; then
+				case "$cf_subset" in
 				(*base*)
 					cf_libname=${cf_libname}$USE_LIB_SUFFIX
 					;;
@@ -23814,14 +31179,24 @@
 					cf_libname=$TICS_LIB_SUFFIX
 					;;
 				esac
-			elif test $cf_dir = c++ ; then
-				cf_libname=ncurses++$USE_LIB_SUFFIX
+			elif test "$cf_dir" = c++ ; then
+
+cf_map_lib_basename=`echo "cxx" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+eval cf_libname="\$${cf_map_lib_basename}_NAME"
+
+				cf_libname=${cf_libname}$USE_LIB_SUFFIX
 			else
+
+cf_map_lib_basename=`echo "$cf_dir" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+eval cf_libname="\$${cf_map_lib_basename}_NAME"
+
 				cf_libname=${cf_libname}$USE_LIB_SUFFIX
 			fi
 			if test -n "${USE_ARG_SUFFIX}" ; then
 				# undo $USE_LIB_SUFFIX add-on in CF_LIB_SUFFIX
-				cf_suffix=`echo $cf_suffix |sed -e "s%^${USE_LIB_SUFFIX}%%"`
+				cf_suffix=`echo "$cf_suffix" |sed -e "s%^${USE_LIB_SUFFIX}%%"`
 			fi
 
 			# These dependencies really are for development, not
@@ -23833,9 +31208,9 @@
 				cf_reldir="\${srcdir}"
 			fi
 
-			if test -f $srcdir/$cf_dir/$cf_dir.priv.h; then
+			if test -f "$srcdir/$cf_dir/$cf_dir.priv.h" ; then
 				cf_depend="$cf_depend $cf_reldir/$cf_dir.priv.h"
-			elif test -f $srcdir/$cf_dir/curses.priv.h; then
+			elif test -f "$srcdir/$cf_dir/curses.priv.h" ; then
 				cf_depend="$cf_depend $cf_reldir/curses.priv.h"
 			fi
 
@@ -23843,36 +31218,39 @@
  			old_cf_suffix="$cf_suffix"
  			if test "$cf_cv_shlib_version_infix" = yes ; then
 			if test -n "$USE_LIB_SUFFIX" ; then
-				case $USE_LIB_SUFFIX in
+				case "$USE_LIB_SUFFIX" in
 				(tw*)
-					cf_libname=`echo $cf_libname | sed 's/tw'$EXTRA_SUFFIX'$//'`
-					cf_suffix=`echo $cf_suffix | sed 's/^tw'$EXTRA_SUFFIX'//'`
+					cf_libname=`echo "$cf_libname" | sed 's/tw'$EXTRA_SUFFIX'$//'`
+					cf_suffix=`echo "$cf_suffix" | sed 's/^tw'$EXTRA_SUFFIX'//'`
 					cf_dir_suffix=tw$EXTRA_SUFFIX
 					;;
 				(t*)
-					cf_libname=`echo $cf_libname | sed 's/t'$EXTRA_SUFFIX'$//'`
-					cf_suffix=`echo $cf_suffix | sed 's/^t'$EXTRA_SUFFIX'//'`
+					cf_libname=`echo "$cf_libname" | sed 's/t'$EXTRA_SUFFIX'$//'`
+					cf_suffix=`echo "$cf_suffix" | sed 's/^t'$EXTRA_SUFFIX'//'`
 					cf_dir_suffix=t$EXTRA_SUFFIX
 					;;
 				(w*)
-					cf_libname=`echo $cf_libname | sed 's/w'$EXTRA_SUFFIX'$//'`
-					cf_suffix=`echo $cf_suffix | sed 's/^w'$EXTRA_SUFFIX'//'`
+					cf_libname=`echo "$cf_libname" | sed 's/w'$EXTRA_SUFFIX'$//'`
+					cf_suffix=`echo "$cf_suffix" | sed 's/^w'$EXTRA_SUFFIX'//'`
 					cf_dir_suffix=w$EXTRA_SUFFIX
 					;;
 				(*)
-					cf_libname=`echo $cf_libname | sed 's/'$EXTRA_SUFFIX'$//'`
-					cf_suffix=`echo $cf_suffix | sed 's/^'$EXTRA_SUFFIX'//'`
+					cf_libname=`echo "$cf_libname" | sed 's/'$EXTRA_SUFFIX'$//'`
+					cf_suffix=`echo "$cf_suffix" | sed 's/^'$EXTRA_SUFFIX'//'`
 					cf_dir_suffix=$EXTRA_SUFFIX
 					;;
 				esac
 			fi
  			fi
 
-			$AWK -f $srcdir/mk-1st.awk \
+			$AWK -f "$srcdir/mk-1st.awk" \
 				name=${cf_libname}${cf_dir_suffix} \
 				traces=$LIB_TRACING \
 				MODEL=$cf_ITEM \
 				CXX_MODEL=$CXX_MODEL \
+				LIB_SUFFIX=$LIB_SUFFIX \
+				USE_LIB_SUFFIX=$USE_LIB_SUFFIX \
+				make_phony="${cf_cv_make_PHONY:-no}" \
 				model=$cf_subdir \
 				prefix=$cf_prefix \
 				suffix=$cf_suffix \
@@ -23884,6 +31262,7 @@
 				ShlibVer=$cf_cv_shlib_version \
 				ShlibVerInfix=$cf_cv_shlib_version_infix \
 				ReLink=${cf_cv_do_relink:-no} \
+				ReRanlib=${cf_cv_do_reranlib:-yes} \
 				DoLinks=$cf_cv_do_symlinks \
 				rmSoLocs=$cf_cv_rm_so_locs \
 				ldconfig="$LDCONFIG" \
@@ -23891,16 +31270,16 @@
 				depend="$cf_depend" \
 				host="$host" \
 				libtool_version="$LIBTOOL_VERSION" \
-				$srcdir/$cf_dir/modules >>$cf_dir/Makefile
+				"$srcdir/$cf_dir/modules" >>$cf_dir/Makefile
 
 			cf_suffix="$old_cf_suffix"
 
 			for cf_subdir2 in $cf_subdirs lib
 			do
-				test $cf_subdir = $cf_subdir2 && break
+				test "$cf_subdir" = "$cf_subdir2" && break
 			done
 			test "${cf_subset}.${cf_subdir2}" != "${cf_subset}.${cf_subdir}" && \
-			$AWK -f $srcdir/mk-2nd.awk \
+			$AWK -f "$srcdir/mk-2nd.awk" \
 				name=$cf_dir \
 				traces=$LIB_TRACING \
 				MODEL=$cf_ITEM \
@@ -23910,53 +31289,76 @@
 				echo=$WITH_ECHO \
 				crenames=$cf_cv_prog_CC_c_o \
 				cxxrenames=$cf_cv_prog_CXX_c_o \
-				$srcdir/$cf_dir/modules >>$cf_dir/Makefile
+				"$srcdir/$cf_dir/modules" >>$cf_dir/Makefile
 			cf_subdirs="$cf_subdirs $cf_subdir"
 			done
 		done
 	fi
 
-	echo '	cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} $@' >>Makefile
+	echo '	( cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} $@ )' >>Makefile
 done
 
+echo >> Makefile
+echo '# generated by CF_LIB_RULES' >> Makefile
+
+if test "x$cf_cv_make_PHONY" = xyes ; then
+	cat >> Makefile <<-CF_EOF
+
+	.PHONY :	libs
+	.PHONY :	lintlib
+	.PHONY :	install.includes
+	.PHONY :	uninstall.includes
+	.PHONY :	install.libs
+	.PHONY :	uninstall.libs
+CF_EOF
+fi
+
 for cf_dir in $SRC_SUBDIRS
 do
-	if test ! -d $srcdir/$cf_dir ; then
+	if test ! -d "$srcdir/$cf_dir" ; then
 		continue
 	fi
 
-	if test -f $cf_dir/Makefile ; then
+	if test -f "$cf_dir/Makefile" ; then
 		case "$cf_dir" in
 		(Ada95)
 			echo 'libs \' >> Makefile
 			echo 'install.libs \' >> Makefile
 			echo 'uninstall.libs ::' >> Makefile
-			echo '	cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} $@' >> Makefile
+			echo '	( cd '$cf_dir' && ${MAKE} ${TOP_MFLAGS} $@ )' >> Makefile
 			;;
 		esac
 	fi
 
-	if test -f $srcdir/$cf_dir/modules; then
+	if test -f "$srcdir/$cf_dir/modules" ; then
+
+		if test "x$cf_cv_make_PHONY" = xyes ; then
+			cat >> Makefile <<-CF_EOF
+
+			.PHONY :	install.$cf_dir
+			.PHONY :	uninstall.$cf_dir
+CF_EOF
+		fi
+
 		echo >> Makefile
-		if test -f $srcdir/$cf_dir/headers; then
+		if test -f "$srcdir/$cf_dir/headers" ; then
 cat >> Makefile <<CF_EOF
 install.includes \\
 uninstall.includes \\
 CF_EOF
 		fi
-if test "$cf_dir" != "c++" ; then
-echo 'lint \' >> Makefile
-fi
+
 cat >> Makefile <<CF_EOF
+lint \\
 libs \\
 lintlib \\
 install.libs \\
 uninstall.libs \\
 install.$cf_dir \\
 uninstall.$cf_dir ::
-	cd $cf_dir && \${MAKE} \${TOP_MFLAGS} \$@
+	( cd "$cf_dir" && \${MAKE} \${TOP_MFLAGS} \$@ )
 CF_EOF
-	elif test -f $srcdir/$cf_dir/headers; then
+	elif test -f "$srcdir/$cf_dir/headers" ; then
 cat >> Makefile <<CF_EOF
 
 libs \\
@@ -23964,32 +31366,49 @@
 uninstall.libs \\
 install.includes \\
 uninstall.includes ::
-	cd $cf_dir && \${MAKE} \${TOP_MFLAGS} \$@
+	( cd "$cf_dir" && \${MAKE} \${TOP_MFLAGS} \$@ )
 CF_EOF
 fi
 done
 
+if test "x$cf_cv_make_PHONY" = xyes ; then
+	cat >> Makefile <<-CF_EOF
+
+	.PHONY :	install.data
+	.PHONY :	uninstall.data
+CF_EOF
+fi
+
 if test "x$cf_with_db_install" = xyes; then
 cat >> Makefile <<CF_EOF
 
 install.libs uninstall.libs \\
 install.data uninstall.data ::
-$MAKE_TERMINFO	cd misc && \${MAKE} \${TOP_MFLAGS} \$@
+$MAKE_TERMINFO	( cd misc && \${MAKE} \${TOP_MFLAGS} \$@ )
 CF_EOF
 else
 cat >> Makefile <<CF_EOF
 
 install.libs uninstall.libs ::
-	cd misc && \${MAKE} \${TOP_MFLAGS} \$@
+	( cd misc && \${MAKE} \${TOP_MFLAGS} \$@ )
 CF_EOF
 fi
 
 if test "x$cf_with_manpages" = xyes; then
+
+if test "x$cf_cv_make_PHONY" = xyes ; then
+	cat >> Makefile <<-CF_EOF
+
+	.PHONY :	install.man
+	.PHONY :	uninstall.man
+CF_EOF
+fi
+
 cat >> Makefile <<CF_EOF
 
 install.man \\
 uninstall.man ::
-	cd man && \${MAKE} \${TOP_MFLAGS} \$@
+	( cd man && \${MAKE} \${TOP_MFLAGS} \$@ )
 CF_EOF
 fi
 
@@ -23998,24 +31417,10 @@
 distclean ::
 	rm -f config.cache config.log config.status Makefile include/ncurses_cfg.h
 	rm -f headers.sh headers.sed mk_shared_lib.sh
-	rm -f edit_man.* man_alias.*
+	rm -f edit_man.* man_alias.* *.tmp
 	rm -rf \${DIRS_TO_MAKE}
 CF_EOF
 
-# Special case: tack's manpage lives in its own directory.
-if test "x$cf_with_manpages" = xyes; then
-if test -d tack ; then
-if test -f $srcdir/$tack.h; then
-cat >> Makefile <<CF_EOF
-
-install.man \\
-uninstall.man ::
-	cd tack && \${MAKE} \${TOP_MFLAGS} \$@
-CF_EOF
-fi
-fi
-fi
-
 rm -f headers.sed headers.sh
 
 echo creating headers.sh
@@ -24038,12 +31443,12 @@
 echo installing \$SRC in \$DST
 CF_EOF
 
-if test $WITH_CURSES_H = yes; then
+if test "$WITH_CURSES_H" = yes; then
 	cat >>headers.sh <<CF_EOF
 case \$DST in
 (/*/include/*)
 	END=\`basename \$DST\`
-	for i in \`cat \$REF/../*/headers |fgrep -v "#"\`
+	for i in \`cat \$REF/../*/headers |${FGREP-fgrep} -v "#"\`
 	do
 		NAME=\`basename \$i\`
 		echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED
@@ -24060,7 +31465,7 @@
 case \$DST in
 (/*/include/*)
 	END=\`basename \$DST\`
-	for i in \`cat \$REF/../*/headers |fgrep -v "#"\`
+	for i in \`cat \$REF/../*/headers |${FGREP-fgrep} -v "#"\`
 	do
 		NAME=\`basename \$i\`
 		if test "\$NAME" = "curses.h"
@@ -24082,7 +31487,7 @@
 sed -f \$TMPSED \$SRC > \$TMPSRC
 NAME=\`basename \$SRC\`
 CF_EOF
-if test $WITH_CURSES_H != yes; then
+if test "$WITH_CURSES_H" != yes; then
 	cat >>headers.sh <<CF_EOF
 test "\$NAME" = "curses.h" && NAME=ncurses.h
 CF_EOF
@@ -24099,19 +31504,26 @@
 
 for cf_dir in $SRC_SUBDIRS
 do
-	if test ! -d $srcdir/$cf_dir ; then
+	if test ! -d "$srcdir/$cf_dir" ; then
 		continue
 	fi
 
-	if test -f $srcdir/$cf_dir/headers; then
-		$AWK -f $srcdir/mk-hdr.awk \
+	if test -f "$srcdir/$cf_dir/headers" ; then
+		$AWK -f "$srcdir/mk-hdr.awk" \
 			subset="$LIB_SUBSETS" \
 			compat="$WITH_CURSES_H" \
-			$srcdir/$cf_dir/headers >>$cf_dir/Makefile
+			"$srcdir/$cf_dir/headers" >>$cf_dir/Makefile
 	fi
 
-	if test -f $srcdir/$cf_dir/modules; then
+	if test -f "$srcdir/$cf_dir/modules" ; then
 		if test "$cf_dir" != "c++" ; then
+			if test "x$cf_cv_make_PHONY" = xyes ; then
+				cat >> $cf_dir/Makefile <<-CF_EOF
+
+				.PHONY :	depend
+CF_EOF
+			fi
+
 			cat >>$cf_dir/Makefile <<"CF_EOF"
 depend : ${AUTO_SRC}
 	makedepend -- ${CPPFLAGS} -- ${C_SRC}
@@ -24122,9 +31534,16 @@
 	fi
 done
 
+if test "$MANPAGE_RENAMES" != no ; then
+	# Construct a sed-script to perform renaming within man-pages
+	test -n "$verbose" && echo "creating edit_man.sed"
+	test ! -d man && mkdir man
+	FGREP="${FGREP-grep -F}" $SHELL "$srcdir/man/make_sed.sh" "$MANPAGE_RENAMES" >./edit_man.sed
+fi
+
 if test "x$cf_with_ada" = "xyes" && test "x$cf_cv_prog_gnat_correct" = "xyes"; then
 if test -z "$USE_OLD_MAKERULES" ; then
-	$AWK -f $srcdir/Ada95/mk-1st.awk <$srcdir/Ada95/src/modules >>Ada95/src/Makefile
+	$AWK -f "$srcdir/Ada95/mk-1st.awk" <"$srcdir/Ada95/src/modules" >>Ada95/src/Makefile
 fi
 fi
  ;;
@@ -24132,11 +31551,11 @@
 done
 EOF
 
-cat >>$CONFIG_STATUS <<\EOF
+cat >>"$CONFIG_STATUS" <<\EOF
 
 { (exit 0); exit 0; }
 EOF
-chmod +x $CONFIG_STATUS
+chmod +x "$CONFIG_STATUS"
 ac_clean_files=$ac_clean_files_save
 
 # configure is writing to config.log, and then calls config.status.
@@ -24150,10 +31569,10 @@
 if test "$no_create" != yes; then
   ac_cs_success=:
   exec 5>/dev/null
-  $SHELL $CONFIG_STATUS || ac_cs_success=false
+  $SHELL "$CONFIG_STATUS" || ac_cs_success=false
   exec 5>>config.log
   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
   # would make configure fail if this is the last instruction.
-  $ac_cs_success || { (exit 1); exit 1; }
+  "$ac_cs_success" || { (exit 1); exit 1; }
 fi
 ${MAKE:-make} preinstall
