dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.9)
AC_INIT(ncurses/lib_initscr.c)

NC_VERSION
NC_SYSTYPE

###	Default install-location
AC_PREFIX_DEFAULT(/usr/local)

###	Checks for programs.
AC_PROG_CC
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
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_RANLIB

NC_MAKEFLAGS

### 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
CC_G_OPT='-g'
test -n "$GCC" && test "$ac_cv_prog_gcc_g" != yes && CC_G_OPT=''
AC_SUBST(CC_G_OPT)

CXX_G_OPT='-g'
test -n "$GXX" && test "$ac_cv_prog_gxx_g" != yes && CXX_G_OPT=''
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 --with-datadir=DIR to specify an alternate data-directory
AC_ARG_WITH(datadir,
	[  --with-datadir=DIR      specify alternate terminfo data-directory],
	[datadir=$withval],
	[datadir='$(exec_prefix)/lib/terminfo'])
AC_SUBST(datadir)

###	use option --with-includedir=DIR to specify an alternate includedir
AC_ARG_WITH(includedir,
	[  --with-includedir=DIR   specify alternate include-directory],
	[includedir=$withval],
	[includedir='$(exec_prefix)/include'])
AC_SUBST(includedir)

###	use option --disable-overwrite to leave out the link to -lcurses
AC_ARG_ENABLE(overwrite,
	[  --disable-overwrite     leave out the link to -lcurses],
	[with_overwrite=$enableval
	 test "$with_overwrite" = no && \
	 test -z "$with_includedir" && \
	 	includedir='$(exec_prefix)/include/ncurses'
	],
	[with_overwrite=yes])

###	use option --disable-termcap to leave out the termcap fallback support
AC_ARG_ENABLE(termcap,
	[  --disable-termcap       leave out the termcap fallback support],
	[with_termcap=$enableval],
	[with_termcap=yes])
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 "$GCC"
then
	# gcc 2.5.8 doesn't recognize some other useful options that could
	# be configured if you have gcc 2.6.3:
	# -Wbad-function-cast
	# -Wmissing-declarations
	if test -n "$with_warnings"
	then
		CFLAGS="$CFLAGS -W -Wall -Winline -Wshadow -Wstrict-prototypes -Wmissing-prototypes"
		case `gcc --version` in
		2.6.*|2.7.*) CFLAGS="$CFLAGS -Wbad-function-cast -Wmissing-declarations" ;;
		esac
	fi
fi

###	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
	# gcc 2.5.8 doesn't recognize some other useful options that could
	# be configured if you have gcc 2.6.3:
	# -Wbad-function-cast
	# -Wmissing-declarations
	if test -z "$with_assertions"
	then
		CPPFLAGS="$CPPFLAGS -DNDEBUG"
	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 \
sys/ioctl.h \
sys/param.h \
sys/select.h \
sys/time.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)
if test "$ISC" = yes ; then
	AC_CHECK_LIB(main,cposix)
	AC_CHECK_LIB(main,inet,,,"$LIBS")
	AC_CHECK_HEADERS( sys/bsdtypes.h 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 \
setbuffer \
setvbuf \
sigaction \
strdup \
tcgetattr \
usleep \
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

NC_TYPE_SIGACTION
NC_TIOCGWINSZ

dnl FIXME checks we don't do (but neither does the old Configure script):
dnl -DGOOD_SELECT

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

### 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 "`gcc --version`" in
		2.6.3)
			if test "$nc_cv_sizeof_bool" != "char"; then
				CFLAGS="$CFLAGS -Wconversion"
			fi
			;;
		2.5*)
			CFLAGS="$CFLAGS -Wconversion"
			;;
		esac
	fi
fi

### Construct the list of include-directories to be generated
NC_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

################################################################################
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

#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
