#! /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; }
