diff --git a/config.status b/config.status
new file mode 100755
index 0000000..8842ff9
--- /dev/null
+++ b/config.status
@@ -0,0 +1,2079 @@
+#! /bin/sh
+# 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-/bin/sh}
+ac_cs_invocation="$0 $@"
+
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr="expr"
+else
+  as_expr="false"
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln'
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+  as_unset="unset"
+else
+  as_unset="false"
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+exec 6>&1
+
+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  man/Makefile include/Makefile ncurses/Makefile progs/Makefile panel/Makefile menu/Makefile form/Makefile test/Makefile misc/Makefile c++/Makefile misc/run_tic.sh:misc/run_tic.in misc/ncurses-config:misc/ncurses-config.in man/ncursesw6-config.1:man/MKncu_config.in Makefile"
+config_headers=" include/ncurses_cfg.h:include/ncurses_cfg.hin"
+config_commands=" default"
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <dickey@invisible-island.net>."
+ac_cs_version="\
+config.status
+configured by ./configure, generated by GNU Autoconf 2.52.20231210,
+  with options \"--enable-tcap-names --with-terminfo-dirs=/system_ext/etc/terminfo --with-default-terminfo-dir=/system_ext/etc/terminfo\"
+
+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="."
+INSTALL="/usr/bin/install -c"
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    shift
+    set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
+    shift
+    ;;
+  -*);;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_need_defaults=false;;
+  esac
+
+  case $1 in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running /bin/sh ./configure " --enable-tcap-names --with-terminfo-dirs=/system_ext/etc/terminfo --with-default-terminfo-dir=/system_ext/etc/terminfo " --no-create --no-recursion"
+    exec /bin/sh ./configure --enable-tcap-names --with-terminfo-dirs=/system_ext/etc/terminfo --with-default-terminfo-dir=/system_ext/etc/terminfo --no-create --no-recursion ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { 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;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    shift
+    CONFIG_FILES="$CONFIG_FILES $1"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $1"
+    ac_need_defaults=false;;
+
+  # This is an error.
+  -*) { { 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;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+exec 5>>config.log
+cat >&5 << _ACEOF
+
+## ----------------------- ##
+## Running config.status.  ##
+## ----------------------- ##
+
+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"
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+
+_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+### Special initialization commands, used to pass information from the
+### configuration-run into config.status
+
+ALTERNATE_SYMS=""
+AWK="mawk"
+CXX_NAME="ncurses++"
+DFT_ARG_SUFFIX="w"
+DFT_LWR_MODEL="normal"
+ECHO_LD=""
+EXTRA_SUFFIX=""
+FORM_NAME="form"
+LDCONFIG="/usr/sbin/ldconfig"
+LIBTOOL_VERSION="-version-number"
+LIB_NAME="ncurses"
+LIB_PREFIX="lib"
+LIB_SUBSETS="ticlib+termlib+ext_tinfo+base+widechar+ext_funcs"
+LIB_SUFFIX="w"
+LIB_TRACING="DEBUG"
+LN_S="ln -s -f"
+MAKE_TERMINFO=""
+MANPAGE_RENAMES="/home/micky387/Omni/external/libncurses/man/man_db.renames"
+MENU_NAME="menu"
+NCURSES_MAJOR="6"
+NCURSES_MINOR="5"
+NCURSES_OSPEED="short"
+NCURSES_PATCH="20240427"
+PANEL_NAME="panel"
+SRC_SUBDIRS=" man include ncurses progs panel menu form test misc c++"
+TERMINFO="/system_ext/etc/terminfo"
+TICS_ARG_SUFFIX=""
+TICS_LIB_SUFFIX=""
+TICS_NAME="tic"
+TICS_SUFFIX="w.a"
+TIC_PATH=""
+TINFO_ARG_SUFFIX="ncursesw"
+TINFO_LIB_SUFFIX=""
+TINFO_NAME="ncurses"
+TINFO_SUFFIX="w.a"
+UNALTERED_SYMS=""
+USE_ARG_SUFFIX="w"
+USE_CFG_SUFFIX="w6"
+USE_LIB_SUFFIX="w"
+USE_OLD_MAKERULES=""
+WILDCARD_SYMS=""
+WITH_CURSES_H="yes"
+WITH_ECHO="yes"
+WITH_OVERWRITE="yes"
+cf_LIST_MODELS=" normal debug"
+cf_cv_VERSION_GNATMAKE=no
+cf_cv_VERSION_GPRBUILD=no
+cf_cv_abi_default="6"
+cf_cv_abi_version="6"
+cf_cv_do_relink=""
+cf_cv_do_reranlib="no"
+cf_cv_do_symlinks="yes"
+cf_cv_enable_lp64="1"
+cf_cv_enable_opaque="NCURSES_OPAQUE"
+cf_cv_make_PHONY="yes"
+cf_cv_prog_CC_c_o=yes
+cf_cv_prog_CXX_c_o=yes
+cf_cv_prog_gnat_correct=no
+cf_cv_rel_version="6.5"
+cf_cv_rm_so_locs="no"
+cf_cv_shared_soname='`basename $@ .${REL_VERSION}`.${ABI_VERSION}'
+cf_cv_shlib_version="rel"
+cf_cv_shlib_version_infix="no"
+cf_cv_system_name="linux-gnu"
+cf_cv_term_driver="no"
+cf_with_ada="yes"
+cf_with_cxx_binding="yes"
+cf_with_db_install="yes"
+cf_with_manpages="yes"
+cf_with_tests="yes"
+host="x86_64-pc-linux-gnu"
+target="x86_64-pc-linux-gnu"
+verbose=""
+with_shared_cxx=""
+
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "include/MKterm.h.awk" ) CONFIG_FILES="$CONFIG_FILES include/MKterm.h.awk" ;;
+  "include/curses.head" ) CONFIG_FILES="$CONFIG_FILES include/curses.head:include/curses.h.in" ;;
+  "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" ;;
+  "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:29912: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if "$ac_need_defaults"; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+: "${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")
+} ||
+{
+   echo "$me: cannot create a temporary directory in $TMPDIR" >&2
+   { (exit 1); exit 1; }
+}
+
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t$/@;t t/; /@;t t$/s/[\\&,]/\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t$/,;t t/' >"$tmp"/subs.sed <<\CEOF
+s,@SHELL@,/bin/sh,;t t
+s,@exec_prefix@,${prefix},;t t
+s,@prefix@,/usr,;t t
+s,@program_transform_name@,s,x,x,,;t t
+s,@bindir@,${exec_prefix}/bin,;t t
+s,@sbindir@,${exec_prefix}/sbin,;t t
+s,@libexecdir@,${exec_prefix}/libexec,;t t
+s,@datarootdir@,${prefix}/share,;t t
+s,@datadir@,${datarootdir},;t t
+s,@sysconfdir@,${prefix}/etc,;t t
+s,@sharedstatedir@,${prefix}/com,;t t
+s,@localstatedir@,${prefix}/var,;t t
+s,@runstatedir@,${localstatedir}/run,;t t
+s,@libdir@,${exec_prefix}/lib,;t t
+s,@includedir@,${prefix}/include,;t t
+s,@oldincludedir@,/usr/include,;t t
+s,@infodir@,${datarootdir}/info,;t t
+s,@mandir@,${datarootdir}/man,;t t
+s,@PACKAGE_NAME@,,;t t
+s,@PACKAGE_TARNAME@,,;t t
+s,@PACKAGE_VERSION@,,;t t
+s,@PACKAGE_STRING@,,;t t
+s,@PACKAGE_BUGREPORT@,,;t t
+s,@build_alias@,,;t t
+s,@host_alias@,,;t t
+s,@target_alias@,,;t t
+s,@ECHO_C@,\c,;t t
+s,@ECHO_N@,,;t t
+s,@ECHO_T@,,;t t
+s,@PATH_SEPARATOR@,:,;t t
+s,@DEFS@,-DHAVE_CONFIG_H,;t t
+s,@LIBS@,,;t t
+s,@top_builddir@,/home/micky387/Omni/external/libncurses,;t t
+s,@GREP@,grep,;t t
+s,@EGREP@,grep -E,;t t
+s,@NCURSES_MAJOR@,6,;t t
+s,@NCURSES_MINOR@,5,;t t
+s,@NCURSES_PATCH@,20240427,;t t
+s,@cf_cv_rel_version@,6.5,;t t
+s,@cf_cv_abi_version@,6,;t t
+s,@cf_cv_abi_default@,6,;t t
+s,@cf_cv_builtin_bool@,1,;t t
+s,@cf_cv_header_stdbool_h@,1,;t t
+s,@cf_cv_type_of_bool@,unsigned char,;t t
+s,@VERSION@,5:0:10,;t t
+s,@VERSION_MAJOR@,6,;t t
+s,@VERSION_MINOR@,5,;t t
+s,@VERSION_PATCH@,20240427,;t t
+s,@PACKAGE@,ncursesw,;t t
+s,@build@,x86_64-pc-linux-gnu,;t t
+s,@build_cpu@,x86_64,;t t
+s,@build_vendor@,pc,;t t
+s,@build_os@,linux-gnu,;t t
+s,@host@,x86_64-pc-linux-gnu,;t t
+s,@host_cpu@,x86_64,;t t
+s,@host_vendor@,pc,;t t
+s,@host_os@,linux-gnu,;t t
+s,@target@,x86_64-pc-linux-gnu,;t t
+s,@target_cpu@,x86_64,;t t
+s,@target_vendor@,pc,;t t
+s,@target_os@,linux-gnu,;t t
+s,@FGREP@,grep -F,;t t
+s,@CC@,gcc,;t t
+s,@CFLAGS@,-O2 --param max-inline-insns-single=1200,;t t
+s,@LDFLAGS@,,;t t
+s,@CPPFLAGS@,-I. -I../include -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DNDEBUG,;t t
+s,@ac_ct_CC@,gcc,;t t
+s,@EXEEXT@,,;t t
+s,@OBJEXT@,o,;t t
+s,@EXTRA_CPPFLAGS@,,;t t
+s,@CPP@,gcc -E,;t t
+s,@LDCONFIG@,/usr/sbin/ldconfig,;t t
+s,@CXX@,/usr/bin/g++,;t t
+s,@CXXFLAGS@,-O2,;t t
+s,@ac_ct_CXX@,g++,;t t
+s,@AWK@,mawk,;t t
+s,@INSTALL_PROGRAM@,${INSTALL},;t t
+s,@INSTALL_SCRIPT@,${INSTALL},;t t
+s,@INSTALL_DATA@,${INSTALL} -m 644,;t t
+s,@LINT@,,;t t
+s,@LINT_OPTS@,,;t t
+s,@LINT_LIBS@,,;t t
+s,@LN_S@,ln -s -f,;t t
+s,@cf_config_suffix@,,;t t
+s,@PKG_CONFIG@,/usr/bin/pkg-config,;t t
+s,@ac_pt_PKG_CONFIG@,/usr/bin/pkg-config,;t t
+s,@PKG_CONFIG_LIBDIR@,/usr/local/lib/pkgconfig,;t t
+s,@MAKE_PC_FILES@,#,;t t
+s,@PC_MODULE_SUFFIX@,,;t t
+s,@SET_MAKE@,,;t t
+s,@MAKE_NO_PHONY@,#,;t t
+s,@MAKE_PHONY@,,;t t
+s,@CTAGS@,ctags,;t t
+s,@ETAGS@,etags,;t t
+s,@MAKE_LOWER_TAGS@,,;t t
+s,@MAKE_UPPER_TAGS@,,;t t
+s,@cf_cv_makeflags@,,;t t
+s,@RANLIB@,ranlib,;t t
+s,@ac_ct_RANLIB@,ranlib,;t t
+s,@LD@,ld,;t t
+s,@ac_ct_LD@,ld,;t t
+s,@AR@,ar,;t t
+s,@ac_ct_AR@,ar,;t t
+s,@NM@,nm,;t t
+s,@ac_ct_NM@,nm,;t t
+s,@ARFLAGS@,-curvU,;t t
+s,@DESTDIR@,,;t t
+s,@BUILD_CC@,${CC},;t t
+s,@BUILD_CPP@,${CPP},;t t
+s,@BUILD_CFLAGS@,${CFLAGS},;t t
+s,@BUILD_CPPFLAGS@,${CPPFLAGS},;t t
+s,@BUILD_LDFLAGS@,${LDFLAGS},;t t
+s,@BUILD_LIBS@,${LIBS},;t t
+s,@BUILD_EXEEXT@,$x,;t t
+s,@BUILD_OBJEXT@,o,;t t
+s,@cf_list_models@, normal debug,;t t
+s,@ABI_VERSION@,,;t t
+s,@LIBTOOL_VERSION@,-version-number,;t t
+s,@LIBTOOL@,,;t t
+s,@ac_ct_LIBTOOL@,,;t t
+s,@LT_UNDEF@,,;t t
+s,@LIBTOOL_CXX@,,;t t
+s,@LIBTOOL_OPTS@,,;t t
+s,@LIB_CREATE@,${AR} -cr,;t t
+s,@LIB_OBJECT@,${OBJECTS},;t t
+s,@LIB_SUFFIX@,w,;t t
+s,@LIB_PREP@,ranlib,;t t
+s,@LIB_CLEAN@,,;t t
+s,@LIB_COMPILE@,,;t t
+s,@LIB_LINK@,${CC},;t t
+s,@LIB_INSTALL@,,;t t
+s,@LIB_UNINSTALL@,,;t t
+s,@DFT_LWR_MODEL@,normal,;t t
+s,@DFT_UPR_MODEL@,NORMAL,;t t
+s,@TICS_NAME@,tic,;t t
+s,@TINFO_NAME@,ncurses,;t t
+s,@LIB_NAME@,ncurses,;t t
+s,@LIB_PREFIX@,lib,;t t
+s,@CC_G_OPT@,-g,;t t
+s,@CXX_G_OPT@,-g,;t t
+s,@LD_MODEL@,,;t t
+s,@shlibdir@,${exec_prefix}/lib,;t t
+s,@MAKE_DLLS@,#,;t t
+s,@CC_SHARED_OPTS@,-fPIC,;t t
+s,@LD_RPATH_OPT@,-Wl,-rpath,,;t t
+s,@LD_SHARED_OPTS@,,;t t
+s,@MK_SHARED_LIB@,${CC} ${LDFLAGS} ${CFLAGS} -shared -Wl,-soname,`basename $@ .${REL_VERSION}`.${ABI_VERSION},-stats,-lc -o $@,;t t
+s,@RM_SHARED_OPTS@,,;t t
+s,@LINK_PROGS@,,;t t
+s,@LINK_TESTS@,,;t t
+s,@EXTRA_LDFLAGS@,,;t t
+s,@LOCAL_LDFLAGS@,,;t t
+s,@LOCAL_LDFLAGS2@,,;t t
+s,@INSTALL_LIB@,-m 644 -p,;t t
+s,@RPATH_LIST@,${libdir},;t t
+s,@EXPORT_SYMS@,,;t t
+s,@RESULTING_SYMS@,,;t t
+s,@VERSIONED_SYMS@,,;t t
+s,@WILDCARD_SYMS@,,;t t
+s,@cf_ldd_prog@,,;t t
+s,@EXTRA_PKG_LDFLAGS@, ,;t t
+s,@EXTRA_SUFFIX@,,;t t
+s,@TERMINFO_SRC@,${top_srcdir}/misc/terminfo.src,;t t
+s,@NCURSES_USE_DATABASE@,1,;t t
+s,@TIC@,tic,;t t
+s,@ac_ct_TIC@,tic,;t t
+s,@INFOCMP@,infocmp,;t t
+s,@ac_ct_INFOCMP@,infocmp,;t t
+s,@FALLBACK_LIST@,,;t t
+s,@USE_FALLBACKS@,#,;t t
+s,@WHICH_XTERM@,xterm-new,;t t
+s,@XTERM_KBS@,DEL,;t t
+s,@TERMINFO_DIRS@,/system_ext/etc/terminfo,;t t
+s,@TERMINFO@,/system_ext/etc/terminfo,;t t
+s,@MAKE_TERMINFO@,,;t t
+s,@USE_BIG_STRINGS@,1,;t t
+s,@TERMPATH@,,;t t
+s,@NCURSES_USE_TERMCAP@,0,;t t
+s,@BROKEN_LINKER@,0,;t t
+s,@NCURSES_WCWIDTH_GRAPHICS@,1,;t t
+s,@NCURSES_CH_T@,cchar_t,;t t
+s,@NCURSES_LIBUTF8@,0,;t t
+s,@NEED_WCHAR_H@,1,;t t
+s,@NCURSES_MBSTATE_T@,0,;t t
+s,@NCURSES_WCHAR_T@,0,;t t
+s,@NCURSES_WINT_T@,0,;t t
+s,@NCURSES_OK_WCHAR_T@,1,;t t
+s,@NCURSES_OK_WINT_T@,1,;t t
+s,@cf_cv_enable_lp64@,1,;t t
+s,@NCURSES_TPARM_VARARGS@,1,;t t
+s,@NCURSES_WATTR_MACROS@,0,;t t
+s,@RGB_PATH@,/usr/share/X11/rgb.txt,;t t
+s,@no_x11_rgb@,,;t t
+s,@NCURSES_BOOL@,auto,;t t
+s,@TERMINFO_CAPS@,Caps,;t t
+s,@NCURSES_CHTYPE@,uint32_t,;t t
+s,@NCURSES_OSPEED@,short,;t t
+s,@NCURSES_MMASK_T@,uint32_t,;t t
+s,@NCURSES_CCHARW_MAX@,5,;t t
+s,@NCURSES_SBOOL@,char,;t t
+s,@NCURSES_TPARM_ARG@,intptr_t,;t t
+s,@cf_manpage_format@,no,;t t
+s,@cf_manpage_inboth@,no,;t t
+s,@cf_manpage_so_strip@,gz,;t t
+s,@cf_manpage_compress@,gzip,;t t
+s,@cf_manpage_coptions@,-n,;t t
+s,@MANPAGE_RENAMES@,/home/micky387/Omni/external/libncurses/man/man_db.renames,;t t
+s,@NCURSES_EXT_FUNCS@,1,;t t
+s,@GENERATED_EXT_FUNCS@,generated,;t t
+s,@NCURSES_SP_FUNCS@,1,;t t
+s,@GENERATED_SP_FUNCS@,generated,;t t
+s,@NCURSES_CONST@,const,;t t
+s,@NCURSES_EXT_COLORS@,1,;t t
+s,@NCURSES_MOUSE_VERSION@,2,;t t
+s,@cf_cv_enable_sigwinch@,1,;t t
+s,@NCURSES_XNAMES@,1,;t t
+s,@PTHREAD@,,;t t
+s,@cf_cv_enable_reentrant@,0,;t t
+s,@cf_cv_enable_opaque@,NCURSES_OPAQUE,;t t
+s,@NCURSES_SIZE_T@,short,;t t
+s,@NCURSES_OPAQUE@,1,;t t
+s,@NCURSES_OPAQUE_FORM@,1,;t t
+s,@NCURSES_OPAQUE_MENU@,1,;t t
+s,@NCURSES_OPAQUE_PANEL@,1,;t t
+s,@NCURSES_WRAP_PREFIX@,_nc_,;t t
+s,@NCURSES_IMPEXP@,,;t t
+s,@NCURSES_CXX_IMPEXP@,,;t t
+s,@NCURSES_INTEROP_FUNCS@,1,;t t
+s,@NCURSES_WGETCH_EVENTS@,0,;t t
+s,@EXP_WIN32_DRIVER@,0,;t t
+s,@INTERNALS_HDR@,,;t t
+s,@ECHO_LT@,,;t t
+s,@ECHO_LD@,,;t t
+s,@RULE_CC@,,;t t
+s,@SHOW_CC@,,;t t
+s,@ECHO_CC@,,;t t
+s,@ECHO_LINK@,@ echo linking $@ ... ;,;t t
+s,@INSTALL_OPT_S@,-s,;t t
+s,@INSTALL_OPT_O@,,;t t
+s,@INSTALL_OPT_P@,-p,;t t
+s,@EXTRA_CFLAGS@,,;t t
+s,@HAVE_STDNORETURN_H@,0,;t t
+s,@STDC_NORETURN@,,;t t
+s,@ADAFLAGS@,,;t t
+s,@EXTRA_CXXFLAGS@,,;t t
+s,@ADA_TRACE@,FALSE,;t t
+s,@MATH_LIB@,-lm,;t t
+s,@NCURSES_INLINE@,inline,;t t
+s,@cf_cv_typeof_chtype@,uint32_t,;t t
+s,@cf_cv_1UL@,1U,;t t
+s,@cf_cv_typeof_mmask_t@,uint32_t,;t t
+s,@HAVE_VSSCANF@,1,;t t
+s,@TEST_LIBS@,-lutil ,;t t
+s,@TEST_LIBS2@,,;t t
+s,@CXXCPP@,/usr/bin/g++ -E,;t t
+s,@CXXLDFLAGS@,,;t t
+s,@CXX_AR@,$(AR),;t t
+s,@CXX_ARFLAGS@,$(ARFLAGS),;t t
+s,@CXXLIBS@,,;t t
+s,@USE_CXX_BOOL@,defined(__cplusplus),;t t
+s,@cf_TEMP_gnat@,,;t t
+s,@M4_exists@,,;t t
+s,@cf_ada_make@,,;t t
+s,@cf_ada_config@,,;t t
+s,@cf_ada_config_Ada@,,;t t
+s,@cf_ada_config_C@,,;t t
+s,@GNATPREP_OPTS@,,;t t
+s,@cf_compile_generics@,,;t t
+s,@cf_generic_objects@,,;t t
+s,@USE_GNAT_SIGINT@,,;t t
+s,@USE_OLD_MAKERULES@,,;t t
+s,@USE_GNAT_PROJECTS@,,;t t
+s,@USE_GNAT_LIBRARIES@,,;t t
+s,@USE_GNAT_MAKE_GPR@,,;t t
+s,@USE_GNAT_GPRBUILD@,,;t t
+s,@cf_ada_compiler@,,;t t
+s,@cf_ada_package@,,;t t
+s,@ADA_INCLUDE@,,;t t
+s,@ADA_OBJECTS@,,;t t
+s,@ADA_SHAREDLIB@,,;t t
+s,@MAKE_ADA_SHAREDLIB@,,;t t
+s,@ADA_LIBNAME@,,;t t
+s,@ACPPFLAGS@,-I. -I../include -I../../include ,;t t
+s,@DFT_ARG_SUFFIX@,w,;t t
+s,@DFT_DEP_SUFFIX@,w.a,;t t
+s,@DFT_OBJ_SUBDIR@,objects,;t t
+s,@CXX_LIB_SUFFIX@,w.a,;t t
+s,@USE_ARG_SUFFIX@,w,;t t
+s,@USE_CFG_SUFFIX@,w6,;t t
+s,@USE_LIB_SUFFIX@,w,;t t
+s,@TICS_ARG_SUFFIX@,,;t t
+s,@TICS_DEP_SUFFIX@,,;t t
+s,@TICS_LIB_SUFFIX@,,;t t
+s,@TICS_LDFLAGS@,-L../lib,;t t
+s,@TICS_LIBS@,-lncursesw,;t t
+s,@TINFO_ARG_SUFFIX@,ncursesw,;t t
+s,@TINFO_DEP_SUFFIX@,,;t t
+s,@TINFO_LIB_SUFFIX@,,;t t
+s,@TINFO_LDFLAGS@,-L../lib,;t t
+s,@TINFO_LIBS@,-lncursesw,;t t
+s,@TINFO_LDFLAGS2@,-L../../lib,;t t
+s,@LDFLAGS_STATIC@,,;t t
+s,@LDFLAGS_SHARED@,,;t t
+s,@includesubdir@,,;t t
+s,@WITH_OVERWRITE@,yes,;t t
+s,@TICS_LIST@,,;t t
+s,@TINFO_LIST@,,;t t
+s,@SHLIB_LIST@,,;t t
+s,@FORM_NAME@,form,;t t
+s,@MENU_NAME@,menu,;t t
+s,@PANEL_NAME@,panel,;t t
+s,@CXX_NAME@,ncurses++,;t t
+s,@TEST_ARGS@,-L../lib -lformw -lmenuw -lpanelw -lncursesw ,;t t
+s,@TEST_DEPS@,../lib/libformw.a ../lib/libmenuw.a ../lib/libpanelw.a ../lib/libncursesw.a ,;t t
+s,@TEST_ARG2@,-L../../lib -lformw -lmenuw -lpanelw -lncursesw ,;t t
+s,@TEST_DEP2@,../../lib/libformw.a ../../lib/libmenuw.a ../../lib/libpanelw.a ../../lib/libncursesw.a ,;t t
+s,@PC_MODULES_TO_MAKE@,ncursesw panelw menuw formw ncurses++w,;t t
+s,@ADA_SUBDIRS@,,;t t
+s,@DIRS_TO_MAKE@,lib objects obj_g,;t t
+s,@NCURSES_SHLIB2@,/bin/sh $(top_srcdir)/misc/shlib,;t t
+s,@HAVE_TCGETATTR@,1,;t t
+s,@HAVE_STDINT_H@,1,;t t
+s,@HAVE_TERMIO_H@,1,;t t
+s,@HAVE_TERMIOS_H@,1,;t t
+s,@cross_compiling@,no,;t t
+s,@MAKE_TESTS@,,;t t
+s,@ADAHTML_DIR@,../../doc/html/ada,;t t
+s,@LIBTOOL_OPTS_CXX@,,;t t
+s,@PKG_CFLAGS@, -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600,;t t
+s,@MISC_INSTALL_DATA@,install.data,;t t
+s,@MISC_UNINSTALL_DATA@,uninstall.data,;t t
+s,@MAKE_DATABASE@,,;t t
+s,@UNALTERED_SYMS@,,;t t
+s,@ADAGEN_LDFLAGS@,$(NATIVE_LDFLAGS),;t t
+s,@CHECK_BUILD@,,;t t
+s,@PRIVATE_LIBS@,,;t t
+s,@LD_SEARCHPATH@,/lib/x86_64-linux-gnu|/usr/lib/x86_64-linux-gnu|/lib64|/usr/lib64|/usr/local/lib|/lib|/usr/lib,;t t
+CEOF
+
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while "$ac_more_lines"; do
+    if test "$ac_beg" -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" "$tmp"/subs.sed >"$tmp"/subs.frag
+    else
+      sed "${ac_end}q" "$tmp"/subs.sed >"$tmp"/subs.frag
+    fi
+    if test ! -s "$tmp"/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat "$tmp"/subs.frag) >"$tmp"/subs-$ac_sed_frag.sed
+      # 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
+
+      if test -z "$ac_sed_cmds"; then
+        ac_sed_cmds="sed -f \"$tmp\"/subs-$ac_sed_frag.sed"
+      else
+        ac_sed_cmds="$ac_sed_cmds | sed -f \"$tmp\"/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr "$ac_sed_frag" + 1`
+      ac_beg=$ac_end
+      ac_end=`expr "$ac_end" + "$ac_max_sed_lines"`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds="cat"
+  fi
+fi # test -n "$CONFIG_FILES"
+
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  - | *:- | *:-:* ) # input from stdin
+        cat >"$tmp"/stdin
+        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$ac_file" : 'X\(//\)[^/]' \| \
+         X"$ac_file" : 'X\(//\)$' \| \
+         X"$ac_file" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    { case "$ac_dir" in
+  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+  *)                      as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+  case $as_mkdir_dir in
+    # Skip DOS drivespec
+    ?:) as_incr_dir=$as_mkdir_dir ;;
+    *)
+      as_incr_dir=$as_incr_dir/$as_mkdir_dir
+      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+    ;;
+  esac
+done; }
+
+    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
+  .)  ac_srcdir=.
+      if test -z "$ac_dots"; then
+         ac_top_srcdir=.
+      else
+         ac_top_srcdir=`echo "$ac_dots" | sed 's,/$,,'`
+      fi ;;
+  [\\/]* | ?:[\\/]* )
+      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" ;;
+  esac
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_dots$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:30433: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # 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.  */
+  configure_input="Generated automatically from `echo $ac_file_in |
+                                                 sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo "$tmp"/stdin ;;
+      [\\/$]*)
+         # Absolute (can't be DOS-style, as IFS=:)
+         test -f "$f" || { { echo "$as_me:30451: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         echo "$f";;
+      *) # Relative
+         if test -f "$f"; then
+           # Build tree
+           echo "$f"
+         elif test -f "$srcdir/$f"; then
+           # Source tree
+           echo "$srcdir/$f"
+         else
+           # /dev/null tree
+           { { echo "$as_me: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; }
+  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"`
+      if test -n "$ac_seen"; then
+        ac_used=`grep '@datarootdir@' "$ac_item"`
+        if test -z "$ac_used"; then
+          { 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"`
+      if test -n "$ac_seen"; then
+        { 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;}
+        ac_warn_datarootdir=yes
+      fi
+    done
+  fi
+
+if test "x$ac_warn_datarootdir" = xyes; then
+  ac_sed_cmds="$ac_sed_cmds | sed -e 's,@datarootdir@,\${prefix}/share,g' -e 's,\${datarootdir},\${prefix}/share,g'"
+fi
+
+  sed "/^[ 	]*VPATH[ 	]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ 	]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ 	]*$//;
+}
+
+: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
+  test -n "${FGREP}" || FGREP="grep -F"
+  test -n "${EGREP}" || EGREP="grep -E"
+  if test x"$ac_file" != x-; then
+    cp "$tmp/out" "$ac_file"
+
+    for ac_name in prefix exec_prefix datarootdir
+    do
+        ac_seen=`$FGREP -n '${'$ac_name'[:=].*}' "$ac_file"`
+        if test -n "$ac_seen"; then
+            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: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: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
+  fi
+  rm -f "$tmp"/out
+
+done
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
+ac_dB='[ 	].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_i turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_iA='s,^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
+ac_iB='\([ 	]\),\1#\2define\3'
+ac_iC=' '
+ac_iD='\4,;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  - | *:- | *:-:* ) # input from stdin
+        cat >"$tmp"/stdin
+        ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+        ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me: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
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo "$tmp"/stdin ;;
+      [\\/$]*)
+         # Absolute (can't be DOS-style, as IFS=:)
+         test -f "$f" || { { echo "$as_me:30605: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+         echo $f;;
+      *) # Relative
+         if test -f "$f"; then
+           # Build tree
+           echo $f
+         elif test -f "$srcdir/$f"; then
+           # Source tree
+           echo "$srcdir/$f"
+         else
+           # /dev/null tree
+           { { echo "$as_me: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
+
+  rm -f conftest.frag
+  cat >> conftest.frag <<CEOF
+
+#define PACKAGE "ncurses"
+#define NCURSES_VERSION "6.5"
+#define NCURSES_PATCHDATE 20240427
+#define SYSTEM_NAME "linux-gnu"
+#if 0
+#include <stdlib.h>
+#endif
+#define HAVE_LONG_FILE_NAMES 1
+#define MIXEDCASE_FILENAMES 1
+#define STDC_HEADERS 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRING_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_STRINGS_H 1
+#define HAVE_INTTYPES_H 1
+#define HAVE_STDINT_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_DIRENT_H 1
+#define TERMINFO_DIRS "/system_ext/etc/terminfo"
+#define TERMINFO "/system_ext/etc/terminfo"
+#define HAVE_BIG_CORE 1
+#define PURE_TERMINFO 1
+#define USE_HOME_TERMINFO 1
+#define USE_ROOT_ENVIRON 1
+#define USE_ROOT_ACCESS 1
+#define USE_SETUID_ENVIRON 1
+#define HAVE_UNISTD_H 1
+#define HAVE_REMOVE 1
+#define HAVE_UNLINK 1
+#define HAVE_LINK 1
+#define HAVE_SYMLINK 1
+#define USE_LINKS 1
+#define HAVE_LANGINFO_CODESET 1
+#define USE_WIDEC_SUPPORT 1
+#define NCURSES_WIDECHAR 1
+CEOF
+  cat >> conftest.frag <<CEOF
+#define HAVE_WCHAR_H 1
+#define HAVE_WCTYPE_H 1
+#define HAVE_PUTWC 1
+#define HAVE_BTOWC 1
+#define HAVE_WCTOB 1
+#define HAVE_WMEMCHR 1
+#define HAVE_MBTOWC 1
+#define HAVE_WCTOMB 1
+#define HAVE_MBLEN 1
+#define HAVE_MBRLEN 1
+#define HAVE_MBRTOWC 1
+#define HAVE_WCSRTOMBS 1
+#define HAVE_MBSRTOWCS 1
+#define HAVE_WCSTOMBS 1
+#define HAVE_MBSTOWCS 1
+#define NEED_WCHAR_H 1
+#define HAVE_FSEEKO 1
+#define RGB_PATH "/usr/share/X11/rgb.txt"
+#define SIZEOF_SIGNED_CHAR 1
+#define NCURSES_EXT_FUNCS 1
+#define HAVE_ASSUME_DEFAULT_COLORS 1
+#define HAVE_CURSES_VERSION 1
+#define HAVE_HAS_KEY 1
+#define HAVE_RESIZETERM 1
+#define HAVE_RESIZE_TERM 1
+#define HAVE_TERM_ENTRY_H 1
+#define HAVE_USE_DEFAULT_COLORS 1
+#define HAVE_USE_SCREEN 1
+#define HAVE_USE_WINDOW 1
+#define HAVE_WRESIZE 1
+#define NCURSES_SP_FUNCS 1
+#define HAVE_TPUTS_SP 1
+#define NCURSES_EXT_COLORS 1
+#define HAVE_ALLOC_PAIR 1
+#define HAVE_INIT_EXTENDED_COLOR 1
+#define HAVE_RESET_COLOR_PAIRS 1
+#define NCURSES_EXT_PUTWIN 1
+#define NCURSES_NO_PADDING 1
+CEOF
+  cat >> conftest.frag <<CEOF
+#define USE_SIGWINCH 1
+#define NCURSES_XNAMES 1
+#define NCURSES_WRAP_PREFIX "_nc_"
+#define USE_ASSUMED_COLOR 1
+#define USE_HASHMAP 1
+#define GCC_SCANF 1
+#define GCC_SCANFLIKE(fmt,var) __attribute__((format(scanf,fmt,var)))
+#define GCC_PRINTF 1
+#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var)))
+#define GCC_UNUSED __attribute__((unused))
+#define GCC_NORETURN __attribute__((noreturn))
+#define HAVE_NC_ALLOC_H 1
+#define HAVE_MATH_FUNCS 1
+#define TIME_WITH_SYS_TIME 1
+#define HAVE_REGEX_H_FUNCS 1
+#define HAVE_FCNTL_H 1
+#define HAVE_GETOPT_H 1
+#define HAVE_LIMITS_H 1
+#define HAVE_LOCALE_H 1
+#define HAVE_MATH_H 1
+#define HAVE_POLL_H 1
+#define HAVE_SYS_AUXV_H 1
+#define HAVE_SYS_IOCTL_H 1
+#define HAVE_SYS_PARAM_H 1
+#define HAVE_SYS_POLL_H 1
+#define HAVE_SYS_SELECT_H 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_TIMES_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_WCTYPE_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_GETOPT_H 1
+#define HAVE_GETOPT_HEADER 1
+#define DECL_ENVIRON 1
+#define HAVE_ENVIRON 1
+#define HAVE_PUTENV 1
+#define HAVE_SETENV 1
+#define HAVE_STRDUP 1
+CEOF
+  cat >> conftest.frag <<CEOF
+#define HAVE_SYS_TIME_SELECT 1
+#define SIG_ATOMIC_T volatile sig_atomic_t
+#define HAVE_CLOCK_GETTIME 1
+#define HAVE_FPATHCONF 1
+#define HAVE_GETCWD 1
+#define HAVE_GETAUXVAL 1
+#define HAVE_GETEGID 1
+#define HAVE_GETEUID 1
+#define HAVE_GETOPT 1
+#define HAVE_GETUID 1
+#define HAVE_LOCALECONV 1
+#define HAVE_POLL 1
+#define HAVE_REMOVE 1
+#define HAVE_SELECT 1
+#define HAVE_SETBUF 1
+#define HAVE_SETBUFFER 1
+#define HAVE_SETFSUID 1
+#define HAVE_SETVBUF 1
+#define HAVE_SIGACTION 1
+#define HAVE_SNPRINTF 1
+#define HAVE_STRDUP 1
+#define HAVE_STRSTR 1
+#define HAVE_SYSCONF 1
+#define HAVE_TCGETPGRP 1
+#define HAVE_TIMES 1
+#define HAVE_TSEARCH 1
+#define HAVE_VSNPRINTF 1
+#define HAVE_ISASCII 1
+#define HAVE_NANOSLEEP 1
+#define HAVE_TERMIO_H 1
+#define HAVE_TERMIOS_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_SYS_IOCTL_H 1
+#define HAVE_TCGETATTR 1
+#define HAVE_VSSCANF 1
+#define HAVE_UNISTD_H 1
+#define HAVE_MKSTEMP 1
+#define HAVE_SIZECHANGE 1
+CEOF
+  cat >> conftest.frag <<CEOF
+#define HAVE_WORKING_POLL 1
+#define HAVE_CONSISTENT_MB_LEN_MAX 1
+#define HAVE_VA_COPY 1
+#define HAVE_UNISTD_H 1
+#define HAVE_FORK 1
+#define HAVE_VFORK 1
+#define HAVE_WORKING_VFORK 1
+#define HAVE_WORKING_FORK 1
+#define USE_FOPEN_BIN_R 1
+#define USE_OPENPTY_HEADER <pty.h>
+#define USE_XTERM_PTY 1
+#define HAVE_TYPEINFO 1
+#define HAVE_IOSTREAM 1
+#define IOSTREAM_NAMESPACE 1
+#define SIZEOF_BOOL 1
+#define CPP_HAS_OVERRIDE 1
+#define CPP_HAS_STATIC_CAST 1
+#define SIZEOF_WCHAR_T 4
+#define HAVE_SLK_COLOR 1
+#define HAVE_PANEL_H 1
+#define HAVE_LIBPANEL 1
+#define HAVE_MENU_H 1
+#define HAVE_LIBMENU 1
+#define HAVE_FORM_H 1
+#define HAVE_LIBFORM 1
+#define NCURSES_PATHSEP ':'
+#define NCURSES_VERSION_STRING "6.5.20240427"
+#define NCURSES_OSPEED_COMPAT 1
+CEOF
+  cat >> conftest.edit <<CEOF
+/@DEFS@/r conftest.frag
+/@DEFS@/d
+CEOF
+sed -f conftest.edit "$tmp"/in > "$tmp"/out
+rm -f "$tmp"/in
+mv "$tmp"/out "$tmp"/in
+rm -f conftest.edit conftest.frag
+
+  # 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
+  else
+    echo "/* $ac_file.  Generated automatically by configure.  */" >"$tmp"/config.h
+  fi
+  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:30676: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+         X"$ac_file" : 'X\(//\)[^/]' \| \
+         X"$ac_file" : 'X\(//\)$' \| \
+         X"$ac_file" : 'X\(/\)' \| \
+         .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+        { case "$ac_dir" in
+  [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+  *)                      as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+  case $as_mkdir_dir in
+    # Skip DOS drivespec
+    ?:) as_incr_dir=$as_mkdir_dir ;;
+    *)
+      as_incr_dir=$as_incr_dir/$as_mkdir_dir
+      test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+    ;;
+  esac
+done; }
+
+      fi
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file"
+    fi
+  else
+    cat "$tmp"/config.h
+    rm -f "$tmp"/config.h
+  fi
+done
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+
+  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
+		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
+	fi
+done
+
+fi
+
+cf_prefix=$LIB_PREFIX
+
+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
+	(tw*)
+		TINFO_NAME="${TINFO_NAME}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'//'`
+		;;
+	(w*)
+		TINFO_NAME="${TINFO_NAME}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
+		continue
+	elif test -f "$srcdir/$cf_dir/modules" ; then
+
+		SHARED_LIB=
+		Libs_To_Make=
+		cf_awk_program=
+		if test -n "${cf_cv_abi_default}" && test "x${cf_cv_abi_default}" != "x5"
+		then
+			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_awk_program="$cf_awk_program\
+/[ 	]_\\*;/ { skip=1; next; }\
+"
+		fi
+
+		if test "x$cf_awk_program" != "x"
+		then
+			cat >>$cf_dir/Makefile <<CF_EOF
+
+# Generated by CF_LIB_RULES
+resulting.map: $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" >\$@
+
+distclean::
+	rm -f resulting.map
+CF_EOF
+		fi
+
+		for cf_item in $cf_LIST_MODELS
+		do
+
+	case X$cf_item in
+	(Xlibtool)
+		cf_suffix='.la'
+		cf_depsuf=$cf_suffix
+		;;
+	(Xdebug)
+		case "$cf_cv_system_name" in
+		(*-msvc*)
+			cf_suffix='_g.lib'
+			;;
+		(*)
+			cf_suffix='_g.a'
+			;;
+		esac
+		cf_depsuf=$cf_suffix
+		;;
+	(Xprofile)
+		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
+		(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'
+			;;
+		(darwin*)
+			cf_suffix='.dylib'
+			cf_depsuf=$cf_suffix
+			;;
+		(hpux*)
+			case "$target" in
+			(ia64*)
+				cf_suffix='.so'
+				cf_depsuf=$cf_suffix
+				;;
+			(*)
+				cf_suffix='.sl'
+				cf_depsuf=$cf_suffix
+				;;
+			esac
+			;;
+		(*)
+			cf_suffix='.so'
+			cf_depsuf=$cf_suffix
+			;;
+		esac
+		;;
+	(*)
+		case "$target" in
+		(*-msvc*)
+			cf_suffix='.lib'
+			;;
+		(*)
+			cf_suffix='.a'
+			;;
+		esac
+		cf_depsuf=$cf_suffix
+		;;
+	esac
+	if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}"
+	then
+		cf_suffix="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_suffix}"
+		cf_depsuf="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_depsuf}"
+	fi
+
+			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}"'//'`
+				else
+					cf_shared_suffix="$cf_suffix"
+				fi
+				if test "$cf_cv_do_symlinks" = yes ; then
+					cf_version_name=
+
+					case "$cf_cv_shlib_version" in
+					(rel)
+						cf_version_name=REL_VERSION
+						;;
+					(abi)
+						cf_version_name=ABI_VERSION
+						;;
+					esac
+
+					if test -n "$cf_version_name"
+					then
+						case "$cf_cv_system_name" in
+						(darwin*)
+							# "w", etc?
+							cf_suffix="${USE_LIB_SUFFIX}"'.${'$cf_version_name'}'"$cf_shared_suffix"
+							;;
+						(*)
+							cf_suffix="$cf_suffix"'.${'$cf_version_name'}'
+							;;
+						esac
+					fi
+					if test -n "${USE_LIB_SUFFIX}"
+					then
+						cf_shared_suffix=`echo "$cf_suffix" | sed 's/^'"${USE_LIB_SUFFIX}"'//'`
+					else
+						cf_shared_suffix="$cf_suffix"
+					fi
+				fi
+				# 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
+				(cygdll)
+					cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
+					cf_add_lib="../lib/cyg${cf_libname}${cf_cygsuf}"
+					;;
+				(msysdll)
+					cf_cygsuf=`echo "$cf_suffix" | sed -e 's/\.dll/\${ABI_VERSION}.dll/'`
+					cf_add_lib="../lib/msys-${cf_libname}${cf_cygsuf}"
+					;;
+				(mingw)
+					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=
+					;;
+				esac
+				if test -n "$cf_add_lib"
+				then
+					Libs_To_Make="$Libs_To_Make $cf_add_lib"
+					continue
+				fi
+			fi
+			cf_add_lib="../lib/${cf_prefix}${cf_libname}${cf_suffix}"
+			Libs_To_Make="$Libs_To_Make $cf_add_lib"
+		done
+
+		if test "$cf_dir" = ncurses ; then
+			cf_subsets="$LIB_SUBSETS"
+			cf_r_parts="$cf_subsets"
+			cf_liblist="$Libs_To_Make"
+
+			while test -n "$cf_r_parts"
+			do
+				cf_l_parts=`echo "$cf_r_parts" |sed -e 's/ .*$//'`
+				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
+					(*termlib*)
+						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`
+						;;
+					(*)
+						break
+						;;
+					esac
+					if test -n "$cf_add_lib"; then
+						Libs_To_Make="$cf_add_lib $Libs_To_Make"
+					fi
+				else
+					break
+				fi
+			done
+		else
+			cf_subsets=`echo "$LIB_SUBSETS" | sed -e 's/^termlib.* //'`
+		fi
+
+		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
+					(*.a)
+						;;
+					(*)
+						cf_item=`echo "$cf_item" | sed -e "s,"$cf_shared_suffix",.a,"`
+						;;
+					esac
+					for cf_test in $cf_list
+					do
+						if test "$cf_test" = "$cf_item"
+						then
+							cf_LIST_MODELS=`echo "$cf_LIST_MODELS" | sed -e 's/normal//'`
+							cf_item=
+							break
+						fi
+					done
+					test -n "$cf_item" && cf_list="$cf_list $cf_item"
+				done
+				Libs_To_Make="$cf_list"
+			fi
+		fi
+
+		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"
+
+		$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
+
+		for cf_subset in $cf_subsets
+		do
+			cf_subdirs=
+			for cf_item in $cf_LIST_MODELS
+			do
+
+			echo "Appending rules for ${cf_item} model (${cf_dir}: ${cf_subset})"
+
+cf_ITEM=`echo "$cf_item" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
+
+			CXX_MODEL=$cf_ITEM
+			if test "$CXX_MODEL" = SHARED; then
+				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}:31063: testing overriding CXX_MODEL to SHARED ..." 1>&5
+
+					with_shared_cxx=yes
+					;;
+				(*)
+					test "x$with_shared_cxx" = xno && CXX_MODEL=NORMAL
+					;;
+				esac
+			fi
+
+	case X$cf_item in
+	(Xlibtool)
+		cf_suffix='.la'
+		cf_depsuf=$cf_suffix
+		;;
+	(Xdebug)
+		case "$cf_cv_system_name" in
+		(*-msvc*)
+			cf_suffix='_g.lib'
+			;;
+		(*)
+			cf_suffix='_g.a'
+			;;
+		esac
+		cf_depsuf=$cf_suffix
+		;;
+	(Xprofile)
+		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
+		(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'
+			;;
+		(darwin*)
+			cf_suffix='.dylib'
+			cf_depsuf=$cf_suffix
+			;;
+		(hpux*)
+			case "$target" in
+			(ia64*)
+				cf_suffix='.so'
+				cf_depsuf=$cf_suffix
+				;;
+			(*)
+				cf_suffix='.sl'
+				cf_depsuf=$cf_suffix
+				;;
+			esac
+			;;
+		(*)
+			cf_suffix='.so'
+			cf_depsuf=$cf_suffix
+			;;
+		esac
+		;;
+	(*)
+		case "$target" in
+		(*-msvc*)
+			cf_suffix='.lib'
+			;;
+		(*)
+			cf_suffix='.a'
+			;;
+		esac
+		cf_depsuf=$cf_suffix
+		;;
+	esac
+	if test -n "${LIB_SUFFIX}${EXTRA_SUFFIX}"
+	then
+		cf_suffix="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_suffix}"
+		cf_depsuf="${LIB_SUFFIX}${EXTRA_SUFFIX}${cf_depsuf}"
+	fi
+
+	case $cf_item in
+	(libtool) cf_subdir='obj_lo'  ;;
+	(normal)  cf_subdir='objects' ;;
+	(debug)   cf_subdir='obj_g' ;;
+	(profile) cf_subdir='obj_p' ;;
+	(shared)
+		case "$cf_cv_system_name" in
+		(cygwin|msys)
+			cf_subdir='objects' ;;
+		(*)
+			cf_subdir='obj_s' ;;
+		esac
+	esac
+
+			# 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
+				(*base*)
+					cf_libname=${cf_libname}$USE_LIB_SUFFIX
+					;;
+				(*termlib*)
+					cf_libname=$TINFO_LIB_SUFFIX
+					;;
+				(ticlib*)
+					cf_libname=$TICS_LIB_SUFFIX
+					;;
+				esac
+			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}%%"`
+			fi
+
+			# These dependencies really are for development, not
+			# builds, but they are useful in porting, too.
+			cf_depend="../include/ncurses_cfg.h"
+			if test "$srcdir" = "."; then
+				cf_reldir="."
+			else
+				cf_reldir="\${srcdir}"
+			fi
+
+			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
+				cf_depend="$cf_depend $cf_reldir/curses.priv.h"
+			fi
+
+ 			cf_dir_suffix=
+ 			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
+				(tw*)
+					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_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_dir_suffix=w$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" \
+				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 \
+				subset=$cf_subset \
+				driver=$cf_cv_term_driver \
+				SymLink="$LN_S" \
+				TermlibRoot=$TINFO_NAME \
+				TermlibSuffix=$TINFO_SUFFIX \
+				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" \
+				overwrite=$WITH_OVERWRITE \
+				depend="$cf_depend" \
+				host="$host" \
+				libtool_version="$LIBTOOL_VERSION" \
+				"$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
+			done
+			test "${cf_subset}.${cf_subdir2}" != "${cf_subset}.${cf_subdir}" && \
+			$AWK -f "$srcdir/mk-2nd.awk" \
+				name=$cf_dir \
+				traces=$LIB_TRACING \
+				MODEL=$cf_ITEM \
+				model=$cf_subdir \
+				subset=$cf_subset \
+				srcdir=$srcdir \
+				echo=$WITH_ECHO \
+				crenames=$cf_cv_prog_CC_c_o \
+				cxxrenames=$cf_cv_prog_CXX_c_o \
+				"$srcdir/$cf_dir/modules" >>$cf_dir/Makefile
+			cf_subdirs="$cf_subdirs $cf_subdir"
+			done
+		done
+	fi
+
+	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
+		continue
+	fi
+
+	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
+			;;
+		esac
+	fi
+
+	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
+cat >> Makefile <<CF_EOF
+install.includes \\
+uninstall.includes \\
+CF_EOF
+		fi
+
+cat >> Makefile <<CF_EOF
+lint \\
+libs \\
+lintlib \\
+install.libs \\
+uninstall.libs \\
+install.$cf_dir \\
+uninstall.$cf_dir ::
+	( cd "$cf_dir" && \${MAKE} \${TOP_MFLAGS} \$@ )
+CF_EOF
+	elif test -f "$srcdir/$cf_dir/headers" ; then
+cat >> Makefile <<CF_EOF
+
+libs \\
+install.libs \\
+uninstall.libs \\
+install.includes \\
+uninstall.includes ::
+	( 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} \$@ )
+CF_EOF
+else
+cat >> Makefile <<CF_EOF
+
+install.libs uninstall.libs ::
+	( 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} \$@ )
+CF_EOF
+fi
+
+cat >> Makefile <<CF_EOF
+
+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.* *.tmp
+	rm -rf \${DIRS_TO_MAKE}
+CF_EOF
+
+rm -f headers.sed headers.sh
+
+echo creating headers.sh
+cat >headers.sh <<CF_EOF
+#! $SHELL
+# This shell script is generated by the 'configure' script.  It is invoked in a
+# subdirectory of the build tree.  It generates a sed-script in the parent
+# directory that is used to adjust includes for header files that reside in a
+# subdirectory of /usr/include, etc.
+PRG=""
+while test \$# != 3
+do
+PRG="\$PRG \$1"; shift
+done
+DST=\$1
+REF=\$2
+SRC=\$3
+TMPSRC=\${TMPDIR:-/tmp}/\`basename \$SRC\`\$\$
+TMPSED=\${TMPDIR:-/tmp}/headers.sed\$\$
+echo installing \$SRC in \$DST
+CF_EOF
+
+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-fgrep} -v "#"\`
+	do
+		NAME=\`basename \$i\`
+		echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED
+	done
+	;;
+(*)
+	echo "" >> \$TMPSED
+	;;
+esac
+CF_EOF
+
+else
+	cat >>headers.sh <<CF_EOF
+case \$DST in
+(/*/include/*)
+	END=\`basename \$DST\`
+	for i in \`cat \$REF/../*/headers |${FGREP-fgrep} -v "#"\`
+	do
+		NAME=\`basename \$i\`
+		if test "\$NAME" = "curses.h"
+		then
+			echo "s/<curses.h>/<ncurses.h>/" >> \$TMPSED
+			NAME=ncurses.h
+		fi
+		echo "s/<\$NAME>/<\$END\/\$NAME>/" >> \$TMPSED
+	done
+	;;
+(*)
+	echo "s/<curses.h>/<ncurses.h>/" >> \$TMPSED
+	;;
+esac
+CF_EOF
+fi
+cat >>headers.sh <<CF_EOF
+rm -f \$TMPSRC
+sed -f \$TMPSED \$SRC > \$TMPSRC
+NAME=\`basename \$SRC\`
+CF_EOF
+if test "$WITH_CURSES_H" != yes; then
+	cat >>headers.sh <<CF_EOF
+test "\$NAME" = "curses.h" && NAME=ncurses.h
+CF_EOF
+fi
+cat >>headers.sh <<CF_EOF
+# Just in case someone gzip'd manpages, remove the conflicting copy.
+test -f \$DST/\$NAME.gz && rm -f \$DST/\$NAME.gz
+
+eval \$PRG \$TMPSRC \$DST/\$NAME
+rm -f \$TMPSRC \$TMPSED
+CF_EOF
+
+chmod 0755 headers.sh
+
+for cf_dir in $SRC_SUBDIRS
+do
+	if test ! -d "$srcdir/$cf_dir" ; then
+		continue
+	fi
+
+	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
+	fi
+
+	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}
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
+CF_EOF
+		fi
+	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
+fi
+fi
+ ;;
+  esac
+done
+
+{ (exit 0); exit 0; }
