dnl*****************************************************************************
dnl Copyright 1996 by Thomas E. Dickey <dickey@clark.net>                      *
dnl All Rights Reserved.                                                       *
dnl                                                                            *
dnl Permission to use, copy, modify, and distribute this software and its      *
dnl documentation for any purpose and without fee is hereby granted, provided  *
dnl that the above copyright notice appear in all copies and that both that    *
dnl copyright notice and this permission notice appear in supporting           *
dnl documentation, and that the name of the above listed copyright holder(s)   *
dnl not be used in advertising or publicity pertaining to distribution of the  *
dnl software without specific, written prior permission. THE ABOVE LISTED      *
dnl COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,  *
dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO     *
dnl EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY         *
dnl SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER       *
dnl RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF       *
dnl CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN        *
dnl CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.                   *
dnl*****************************************************************************
dnl $Id: configure.in,v 1.37 1996/11/17 00:10:16 tom Exp $
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.9)
AC_REVISION($Revision: 1.37 $)
AC_INIT(ncurses/lib_initscr.c)

NC_VERSION
NC_SYSTYPE

###	Derive the system name, as a check for reusing the autoconf cache
system_name="`(uname -s -r || hostname || echo unknown) 2>/dev/null`"
if test -n "$system_name" ; then
	AC_DEFINE_UNQUOTED(SYSTEM_NAME,"$system_name")
else
	system_name="`(hostname) 2>/dev/null`"
fi
AC_CACHE_VAL(nc_cv_system_name,[nc_cv_system_name="$system_name"])
test -z "$system_name" && system_name="$nc_cv_system_name"
test -n "$nc_cv_system_name" && AC_MSG_RESULT("Configuring for $nc_cv_system_name")

if test ".$system_name" != ".$nc_cv_system_name" ; then
	AC_MSG_RESULT("Cached system name does not agree with actual")
	AC_ERROR("Please remove config.cache and try again.")
fi

###	Default install-location
NC_CFG_DEFAULTS

###	Checks for programs.
AC_PROG_CC
if test -n "$GCC" ; then
AC_MSG_CHECKING(version of gcc)
eval "$CC --version"
fi
AC_PROG_CPP
AC_PROG_GCC_TRADITIONAL
AC_ISC_POSIX
dnl PROBLEM ON NEXT MACHINES:  g++ exists but is called cc++.  AC_PROG_CXX doesn't check
dnl                            for that name,
AC_PROG_CXX
AC_PROG_AWK
AC_PROG_MAKE_SET
NC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_RANLIB
AC_CHECK_PROGS(LINT, tdlint lint alint)
AC_CHECK_PROGS(MAN, man man_db)
AC_SUBST(LINT_OPTS)

NC_MAKEFLAGS
NC_MAN_PAGES

dnl Special option for use by system-builders: the install-prefix is used to
dnl adjust the location into which the actual install is done, so that an
dnl archive can be built without modifying the host system's configuration.
AC_ARG_WITH(install-prefix,
	[  --with-install-prefix   prefixes actual install-location],
	[case "$withval" in #(vi
	yes|no) #(vi
		;;
	*)	INSTALL_PREFIX="$withval"
		;;
	esac])
AC_SUBST(INSTALL_PREFIX)

### Options to allow the user to specify the set of libraries which are used.
### Use "--without-normal --with-shared" to allow the default model to be
### shared, for example.
nc_list_models=""
AC_ARG_WITH(shared,
	[  --with-shared           generate shared-libraries],
	[test "$withval" = "yes" && nc_list_models="$nc_list_models shared"])
AC_ARG_WITH(normal,
	[  --with-normal           generate normal-libraries (default)],
	[test "$withval" = "yes" && nc_list_models="$nc_list_models normal"],
	[nc_list_models="$nc_list_models normal"])
AC_ARG_WITH(debug,
	[  --with-debug            generate debug-libraries (default)],
	[test "$withval" = "yes" && nc_list_models="$nc_list_models debug"],
	[nc_list_models="$nc_list_models debug"])
AC_ARG_WITH(profile,
	[  --with-profile          generate profile-libraries],
	[test "$withval" = "yes" && nc_list_models="$nc_list_models profile"])

AC_MSG_CHECKING(for specified models)
test -z "$nc_list_models" && nc_list_models=normal
AC_MSG_RESULT($nc_list_models)

### Use the first model as the default, and save its suffix for use in building
### up test-applications.
DFT_LWR_MODEL=`echo $nc_list_models | $AWK '{print $1}'`
NC_UPPERCASE($DFT_LWR_MODEL,DFT_UPR_MODEL)dnl
NC_LIB_SUFFIX($DFT_LWR_MODEL,DFT_DEP_SUFFIX)dnl
NC_LIB_TYPE($DFT_LWR_MODEL,DFT_ARG_SUFFIX)dnl
NC_OBJ_SUBDIR($DFT_LWR_MODEL,DFT_OBJ_SUBDIR)dnl
AC_SUBST(DFT_OBJ_SUBDIR)dnl	the default object-directory ("obj")
AC_SUBST(DFT_LWR_MODEL)dnl	the default model ("normal")
AC_SUBST(DFT_UPR_MODEL)dnl	the default model ("NORMAL")
AC_SUBST(DFT_DEP_SUFFIX)dnl	the corresponding library-suffix (".a")
AC_SUBST(DFT_ARG_SUFFIX)dnl	the string to append to "-lncurses" ("")
AC_SUBST(nc_list_models)dnl	the complete list of models ("normal debug")

LIB_NAME=ncurses
AC_SUBST(LIB_NAME)

LIB_PREFIX=../lib/lib
AC_SUBST(LIB_PREFIX)

dnl Not all ports of gcc support the -g option

if test X"$CC_G_OPT" = X"" ; then
	CC_G_OPT='-g'
	test -n "$GCC" && test "$ac_cv_prog_gcc_g" != yes && CC_G_OPT=''
	test -n "$GCC" && CC_G_OPT="$CC_G_OPT -Dinline="
fi
AC_SUBST(CC_G_OPT)

if test X"$CXX_G_OPT" = X"" ; then
	CXX_G_OPT='-g'
	test -n "$GXX" && test "$ac_cv_prog_gxx_g" != yes && CXX_G_OPT=''
fi
AC_SUBST(CXX_G_OPT)

case $DFT_LWR_MODEL in
normal)  LD_MODEL=''   ;;
debug)   LD_MODEL=$CC_G_OPT ;;
profile) LD_MODEL='-pg';;
shared)  LD_MODEL=''   ;;
esac
AC_SUBST(LD_MODEL)dnl		the type of link (e.g., -g or -pg)
NC_SHARED_OPTS

if test "$CC_SHARED_OPTS" = "unknown"; then
	for model in $nc_list_models; do
		if test "$model" = "shared"; then
			echo '** Shared libraries are not supported in this version'
			exit 1
		fi
	done
fi

###	use option --disable-overwrite to leave out the link to -lcurses
AC_MSG_CHECKING(include directory)
AC_ARG_ENABLE(overwrite,
	[  --disable-overwrite     leave out the link to -lcurses],
	[with_overwrite=$enableval
	 test "$with_overwrite" = no && \
	 test "x$includedir" = 'x${prefix}/include' && \
	 	includedir='$(prefix)/include/ncurses'
	],
	[with_overwrite=yes])
AC_MSG_RESULT($includedir)

###	use option --enable-termcap to compile in the termcap fallback support
AC_ARG_ENABLE(termcap,
	[  --enable-termcap        compile in termcap fallback support],
	[with_termcap=$enableval],
	[with_termcap=no])
test "$with_termcap" != "yes" && AC_DEFINE(PURE_TERMINFO)

###	use option --enable-getcap to use a hacked getcap for reading termcaps
AC_ARG_ENABLE(getcap,
	[  --enable-getcap         fast termcap load, no xrefs to terminfo],
	[with_getcap=$enableval],
	[with_getcap=no])
test "$with_getcap" = "yes" && AC_DEFINE(USE_GETCAP)

###   use option --enable-symlinks to make tic use symlinks, not hard links
AC_ARG_ENABLE(symlinks,
	[  --enable-symlinks       make tic use symbolic links not hard links],
	[with_symlinks=$enableval]
	[AC_DEFINE(USE_SYMLINKS)])

###   use option --enable-bsdpad to have tputs process BSD-style prefix padding
AC_ARG_ENABLE(bsdpad,
	[  --enable-bsdpad         recognize BSD-style prefix padding],
	[with_bsdpad=$enableval]
	[AC_DEFINE(BSD_TPUTS)])

###	use option --disable-echo to suppress full display compiling commands
AC_ARG_ENABLE(echo,
	[  --enable-echo           display \"compiling\" commands (default)],
	[with_echo=$enableval],
	[with_echo=yes])
if test "$with_echo" = yes; then
	ECHO_LINK=
else
	ECHO_LINK='@ echo linking $@ ... ;'
fi
AC_SUBST(ECHO_LINK)

###	use option --with-warnings to turn on all gcc warnings
AC_ARG_ENABLE(warnings,
	[  --enable-warnings       turn on GCC compiler warnings],
	[with_warnings=$enableval])
if test -n "$with_warnings"; then
 	ADAFLAGS="$ADAFLAGS -gnatg"
	NC_GCC_WARNINGS
fi
NC_GCC_ATTRIBUTES

###	use option --with-assertions to turn on generation of assertion code
AC_ARG_ENABLE(assertions,
	[  --enable-assertions     turn on generation of assertion code],
	[with_assertions=$enableval])
if test -n "$GCC"
then
	if test -z "$with_assertions"
	then
		CPPFLAGS="$CPPFLAGS -DNDEBUG"
	else
		ADAFLAGS="$ADAFLAGS -gnata"
	fi
fi

###	Checks for libraries.
AC_CHECK_LIB(bsd, gettimeofday)dnl CLIX: bzero, select, gettimeofday

###	Checks for header files.
AC_STDC_HEADERS
AC_HEADER_DIRENT
NC_REGEX

dnl These are some other potentially nonportable headers.
AC_CHECK_HEADERS( \
fcntl.h \
getopt.h \
libc.h \
limits.h \
locale.h \
sys/bsdtypes.h \
sys/ioctl.h \
sys/param.h \
poll.h \
sys/select.h \
sys/stropts.h \
sys/time.h \
sys/times.h \
termio.h \
termios.h \
ttyent.h \
unistd.h \
values.h \
)

# check for HPUX's ANSI compiler
if test $nc_cv_systype = HP_UX; then
if test -z "$GCC"; then
	AC_MSG_CHECKING([for HP/UX ANSI compiler])
	nc_save_CFLAGS="$CFLAGS"
	CFLAGS="$CFLAGS -Aa"
	AC_TRY_COMPILE([],[void (*f)(void)=0],[nc_hpux_cc=yes],[nc_hpux_cc=no])
	AC_MSG_RESULT($nc_hpux_cc)
	if test $nc_hpux_cc = yes; then
		AC_DEFINE(_HPUX_SOURCE)
	else
		CFLAGS="$nc_save_CFLAGS"
	fi
fi;fi

# check for ISC (this may also define _POSIX_SOURCE)
# Note: even non-Posix ISC needs <sys/bsdtypes.h> to declare fd_set
if test "$ISC" = yes ; then
	AC_CHECK_LIB(cposix,main)
	AC_CHECK_LIB(inet,bzero,LIBS="$LIBS -linet")dnl also 'select()'
	AC_CHECK_HEADERS( sys/termio.h )
fi

# check for SCO.  this is a hack, and should be split into individual
# features -- the sys/time.h and select.h conflict, and the need for
# ptem.h due to winsize struct.
AC_CHECKING([for SCO by checking on /usr/bin/scosh])
AC_PROGRAM_CHECK(COULD_BE_SCO, [scosh], maybe, maybenot)
if test "$COULD_BE_SCO" = "maybe"
then
	AC_DEFINE(SYSTEM_LOOKS_LIKE_SCO)
fi

###	checks for compiler characteristics
AC_LANG_C
AC_C_CONST
AC_C_INLINE
test $ac_cv_c_inline != no && AC_DEFINE(CC_HAS_INLINE_FUNCS)

###	Checks for external-data
NC_ERRNO
NC_SYS_ERRLIST
NC_LINK_DATAONLY
NC_SPEED_TYPE

###	Checks for library functions.
AC_CHECK_FUNCS( \
gettimeofday \
getttynam \
memccpy \
poll \
select \
setbuffer \
setvbuf \
sigaction \
sigvec \
strdup \
tcgetattr \
times \
usleep \
vfscanf \
vsscanf \
)

if test $ac_cv_func_sigaction = yes; then
AC_MSG_CHECKING(whether sigaction needs _POSIX_SOURCE)
AC_TRY_COMPILE([#include <sys/types.h>
#include <signal.h>], [struct sigaction act;],
  sigact_bad=no, sigact_bad=yes AC_DEFINE(SVR4_ACTION))
AC_MSG_RESULT($sigact_bad)
fi

# some machines require _POSIX_SOURCE to completely define struct termios
if test $ac_cv_header_termios_h = yes ; then
	case "$CFLAGS" in
	*-D_POSIX_SOURCE*)
		termios_bad=dunno ;;
	*)	termios_bad=maybe ;;
	esac
	if test $termios_bad = maybe ; then
	AC_MSG_CHECKING(whether termios.h needs _POSIX_SOURCE)
	AC_TRY_COMPILE([#include <termios.h>],
		[struct termios foo; int x = foo.c_iflag],
		termios_bad=no, [
		AC_TRY_COMPILE([
#define _POSIX_SOURCE
#include <termios.h>],
			[struct termios foo; int x = foo.c_iflag],
			termios_bad=unknown,
			termios_bad=yes AC_DEFINE(SVR4_TERMIO))
			])
	AC_MSG_RESULT($termios_bad)
	fi
fi

AC_SYS_RESTARTABLE_SYSCALLS
AC_FUNC_SETVBUF_REVERSED
AC_TYPE_SIGNAL
NC_TYPE_SIGACTION
NC_TIOCGWINSZ

dnl FIXME checks we don't do (but neither does the old Configure script):
case "$nc_cv_systype" in
Linux)
	AC_DEFINE(GOOD_SELECT)
	;;
esac

dnl We'll do our own -g libraries
NC_STRIP_G_OPT(CFLAGS)
NC_STRIP_G_OPT(CXXFLAGS)

dnl Check for C++ compiler characteristics (and ensure that it's there!)
AC_CHECK_PROG(CXX_EXISTS, $CXX, yes, no)
if test "$ac_cv_prog_CXX_EXISTS" = yes; then
	AC_LANG_CPLUSPLUS
	NC_CXX_LIBRARY
	NC_BOOL_DECL
	NC_BOOL_SIZE
else
	nc_cxx_library=no
	AC_CACHE_VAL(nc_cv_builtin_bool,[nc_cv_builtin_bool=0])
	AC_CACHE_VAL(nc_cv_sizeof_bool,[nc_cv_sizeof_bool=int])
fi

dnl Check for availability of GNU Ada Translator (GNAT).
dnl At the moment we support no other Ada95 compiler.
nc_ada_make=gnatmake
AC_CHECK_PROG(gnat_exists, $nc_ada_make, yes, no)
if test "$ac_cv_prog_gnat_exists" = no; then
   nc_ada_make=
else
   NC_GNAT_VERSION
   AC_CHECK_PROG(m4_exists, m4, yes, no)
   if test "$ac_cv_prog_m4_exists" = no; then
      ac_cv_prog_gnat_correct=no
      echo Ada95 binding required program m4 not found. Ada95 binding disabled.
   fi
fi
if test	"$ac_cv_prog_gnat_correct" = yes; then
   nc_ada_compiler=gcc
   nc_ada_package=terminal_interface
   AC_SUBST(nc_ada_make)
   AC_SUBST(nc_ada_compiler)
   AC_SUBST(nc_ada_package)
   AC_SUBST(ADAFLAGS)
fi

### It's not possible to appease gcc 2.6.3's conversion-warnings if we're
### using a 'char' for bools.  gcc 2.7.0's conversion-warnings are broken too
### badly to consider using for development purposes, but 2.5.8 is okay.
if test -n "$with_warnings"; then
	if test -n "$GCC"; then
		case "`$CC --version`" in
		2.6.3)
			if test "$nc_cv_sizeof_bool" != "char"; then
				nc_warn_CFLAGS="$nc_warn_CFLAGS -Wconversion"
			fi
			;;
		2.5*)
			nc_warn_CFLAGS="$nc_warn_CFLAGS -Wconversion"
			;;
		esac
	fi
fi

### Construct the list of include-directories to be generated
NC_INCLUDE_DIRS
NC_ADA_INCLUDE_DIRS

### Construct the list of subdirectories for which we'll customize makefiles
### with the appropriate compile-rules.
NC_SRC_MODULES(ncurses progs panel menu form)
NC_DIRS_TO_MAKE

### Now that we're done running tests, add the compiler-warnings, if any
CFLAGS="$CFLAGS $nc_warn_CFLAGS"

################################################################################
changequote({,})dnl
AC_OUTPUT(include/config_h $SUB_MAKEFILES Makefile,{

NC_LIB_RULES

### Special editing.  We generate config.h directly to allow all filenames
### to be MSDOS-compatible, as well as to make the list of definitions be
### dynamically determined by the configuration script -- a consideration when
### doing type-clean development testing.

echo creating include/config.h
rm -f include/config.h
echo "/* generated by configure-script
 * On host: $SYS_NAME
 */
#ifndef NC_CONFIG_H
#define NC_CONFIG_H" >include/config.h
sed	-e '/^ -D/!d' \
	-e 's/ -D/\
#define /g' \
	-e 's/\(#define [A-Za-z_][A-Za-z0-9_]*\)=/\1	/g' \
	-e 's/\\//g' \
	include/config_h | sort >>include/config.h
echo "
	/* The C compiler may not treat these properly, but C++ has to */
#ifdef __cplusplus
#undef const
#undef inline
#endif

#ifdef lint
#undef inline
#define inline /* nothing */
#endif

#endif /* NC_CONFIG_H */" >> include/config.h
echo removing include/config_h
rm include/config_h
},{
### Special initialization commands, used to pass information from the
### configuration-run into config.status

SYS_NAME="`(uname -a || hostname) 2>/dev/null | sed 1q`"
if test -z "\$SYS_NAME"; then SYS_NAME=unknown;fi

AWK=$AWK
DFT_LWR_MODEL="$DFT_LWR_MODEL"
NC_LIST_MODELS="$nc_list_models"
WITH_ECHO="$with_echo"
WITH_OVERWRITE="$with_overwrite"
SRC_SUBDIRS="$SRC_SUBDIRS"
nc_cxx_library="$nc_cxx_library"
nc_cv_systype="$nc_cv_systype"
nc_cv_rel_version="$nc_cv_rel_version"
nc_cv_abi_version="$nc_cv_abi_version"
nc_cv_do_symlinks="$nc_cv_do_symlinks"
nc_cv_rm_so_locs="$nc_cv_rm_so_locs"

})
changequote([,])dnl
