dnl dnl Process this file with autoconf to produce a configure script. dnl AC_REVISION($Id: configure.in,v 5.68 2007/09/24 18:34:13 andreas_kupries Exp $) AC_INIT([expect],[5.44.1.4]) TEA_INIT([3.5]) AC_CONFIG_AUX_DIR(tclconfig) # Too many people send me configure output without identifying the version. # This forced identification should reduce my pain significantly. echo "configuring $PACKAGE_NAME $PACKAGE_VERSION" # while Expect is in alpha/beta, disable caching so as not to confuse # people trying to fix configure bugs define([AC_CACHE_LOAD], ) define([AC_CACHE_SAVE], ) # People (when downloading Expect from CVS archive) sometimes run into # Make thinking configure is old and needs to be rebuilt. If they # don't have a clue about autoconf, they get confused. This is # particular irritating because the problem only crops up after # configure has successfully completed. Help them out by checking it # right now and giving some advice. Alas, we cannot summarily fix the # problem because it might conceivably be someone doing real # development. # Test if configure is older than configure.in and explain if no autoconf AC_CHECK_PROG(found,autoconf,yes,no,) # AK: Removed the checking and complaint. It makes automatic building # straight out of the CVS a true hassle simply because the build can # stop anytime and randomly (platform dependent, cvs dependent) #-------------------------------------------------------------------- # Configure script for package 'Expect'. # TEA compliant. #-------------------------------------------------------------------- #-------------------------------------------------------------------- # Load the tclConfig.sh file #-------------------------------------------------------------------- TEA_PATH_TCLCONFIG TEA_LOAD_TCLCONFIG TEA_PATH_TKCONFIG TEA_LOAD_TKCONFIG #----------------------------------------------------------------------- # Handle the --prefix=... option by defaulting to what Tcl gave. # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. #----------------------------------------------------------------------- TEA_PREFIX #----------------------------------------------------------------------- # Standard compiler checks. # This sets up CC by using the CC env var, or looks for gcc otherwise. # This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create # the basic setup necessary to compile executables. #----------------------------------------------------------------------- TEA_SETUP_COMPILER #-------------------------------------------------------------------- # __CHANGE__ # Choose which headers you need. Extension authors should try very # hard to only rely on the Tcl public header files. Internal headers # contain private data structures and are subject to change without # notice. # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG #-------------------------------------------------------------------- #TEA_PUBLIC_TCL_HEADERS TEA_PRIVATE_TCL_HEADERS TEA_PUBLIC_TK_HEADERS #-------------------------------------------------------------------- # A few miscellaneous platform-specific items: # # We have to define a special symbol for Windows (BUILD_Expect in this # case) so that we create the export library with the dll. # # Windows creates a few extra files that need to be cleaned up. # We can add more files to clean if our extension creates any extra # files in the future. # # Define any extra compiler flags in the PACKAGE_CFLAGS variable. # These will be appended to the current set of compiler flags for # your system. #-------------------------------------------------------------------- if test "${TEA_PLATFORM}" = "windows" ; then AC_DEFINE(BUILD_Expect) CLEANFILES="pkgIndex.tcl *.lib *.dll *.exp *.ilk *.pdb vc*.pch" else CLEANFILES="pkgIndex.tcl" fi AC_SUBST(CLEANFILES) #-------------------------------------------------------------------- # Check whether --enable-threads or --disable-threads was given. # So far only Tcl responds to this one. # # Hook for when threading is supported in Expect. The --enable-threads # flag currently has no effect. #------------------------------------------------------------------------ TEA_ENABLE_THREADS #-------------------------------------------------------------------- # The statement below defines a collection of symbols related to # building as a shared library instead of a static library. #-------------------------------------------------------------------- TEA_ENABLE_SHARED #-------------------------------------------------------------------- # This macro figures out what flags to use with the compiler/linker # when building shared/static debug/optimized objects. This information # can be taken from the tclConfig.sh file, but this figures it all out. #-------------------------------------------------------------------- dnl AC_PROG_CC and thus TEA_CONFIG_CFLAGS insists on sticking crap dnl -g and -O in CFLAGS but I want to control it. Can't just throw dnl it out at the end alas, because the user might have defined CFLAGS. dnl NEW: We have to save/restore DEBUG and OPTIMIZE, but not the dnl regular CFLAGS. It does not contain the crap anymore, was split dnl into the aforementioned other variables. And its contents are dnl required for proper 64bit support. dnl echo ____BEFORE dnl echo CFLAGS_DEBUG... = $CFLAGS_DEBUG dnl echo CFLAGS_OPTIMIZE = $CFLAGS_OPTIMIZE dnl echo CFLAGS......... = $CFLAGS dnl echo DEFS........... = $DEFS dnl echo LIBS........... = $LIBS dnl echo ____ OLD_CFLAGD=$CFLAGS_DEBUG OLD_CFLAGO=$CFLAGS_OPTIMIZE TEA_CONFIG_CFLAGS dnl echo ____AFTER dnl echo CFLAGS_DEBUG... = $CFLAGS_DEBUG dnl echo CFLAGS_OPTIMIZE = $CFLAGS_OPTIMIZE dnl echo CFLAGS......... = $CFLAGS dnl echo ____ CFLAGS_DEBUG=$OLD_CFLAGD CFLAGS_OPTIMIZE=$OLD_CFLAGO dnl echo ____AFTER RESTORE dnl echo CFLAGS_DEBUG... = $CFLAGS_DEBUG dnl echo CFLAGS_OPTIMIZE = $CFLAGS_OPTIMIZE dnl echo CFLAGS......... = $CFLAGS dnl echo DEFS........... = $DEFS dnl echo LIBS........... = $LIBS dnl echo ____ #-------------------------------------------------------------------- # Set the default compiler switches based on the --enable-symbols option. #-------------------------------------------------------------------- TEA_ENABLE_SYMBOLS #-------------------------------------------------------------------- # Everyone should be linking against the Tcl stub library. If you # can't for some reason, remove this definition. If you aren't using # stubs, you also need to modify the SHLIB_LD_LIBS setting below to # link against the non-stubbed Tcl library. #-------------------------------------------------------------------- AC_DEFINE(USE_TCL_STUBS) #------------------------------------------------------------------------- # Check for system header files. #------------------------------------------------------------------------- AC_CHECK_HEADER(sys/select.h, AC_DEFINE(HAVE_SYS_SELECT_H)) AC_CHECK_HEADER(sys/sysmacros.h, AC_DEFINE(HAVE_SYSMACROS_H)) # Oddly, some systems have stdarg but don't support prototypes # Tcl avoids the whole issue by not using stdarg on UNIX at all! dnl AC_CHECK_HEADER(stdarg.h, AC_DEFINE(HAVE_STDARG_H)) AC_CHECK_HEADER(varargs.h, AC_DEFINE(HAVE_VARARGS_H)) # If no stropts.h, then the svr4 implementation is broken. # At least it is on my Debian "potato" system. - Rob Savoye AC_CHECK_HEADER(sys/stropts.h, AC_DEFINE(HAVE_STROPTS_H), svr4_ptys_broken=1) AC_CHECK_HEADER(sys/sysconfig.h, AC_DEFINE(HAVE_SYSCONF_H)) AC_CHECK_HEADER(sys/fcntl.h, AC_DEFINE(HAVE_SYS_FCNTL_H)) AC_CHECK_HEADER(sys/ptem.h, AC_DEFINE(HAVE_SYS_PTEM_H)) AC_CHECK_HEADER(sys/strredir.h, AC_DEFINE(HAVE_STRREDIR_H)) AC_CHECK_HEADER(sys/strpty.h, AC_DEFINE(HAVE_STRPTY_H)) dnl #echo checking for ucbinclude/sys/ioctl.h (ucb-style ioctl.h under SV) dnl #if test -f /usr/ucbinclude/sys/ioctl.h ; then dnl # AC_DEFINE(HAVE_UCB_IOCTL_H) dnl #fi AC_MSG_CHECKING([for sys/bsdtypes.h]) if test "ISC_${ISC}" = "ISC_1" ; then AC_MSG_RESULT(yes) # if on ISC 1, we need to get FD_SET macros AC_HAVE_HEADERS(sys/bsdtypes.h) else AC_MSG_RESULT(no) fi #------------------------------------------------------------------------- # What type do signals return? #------------------------------------------------------------------------- AC_TYPE_SIGNAL #------------------------------------------------------------------------- # Find out all about time handling differences. #------------------------------------------------------------------------- TEA_TIME_HANDLER #-------------------------------------------------------------------- # The check below checks whether defines the type # "union wait" correctly. It's needed because of weirdness in # HP-UX where "union wait" is defined in both the BSD and SYS-V # environments. Checking the usability of WIFEXITED seems to do # the trick. #-------------------------------------------------------------------- AC_MSG_CHECKING([union wait]) AC_CACHE_VAL(tcl_cv_union_wait, AC_TRY_LINK([#include #include ], [ union wait x; WIFEXITED(x); /* Generates compiler error if WIFEXITED uses an int. */ ], tcl_cv_union_wait=yes, tcl_cv_union_wait=no)) AC_MSG_RESULT($tcl_cv_union_wait) if test $tcl_cv_union_wait = no; then AC_DEFINE(NO_UNION_WAIT) fi ###################################################################### # required by Sequent ptx2 AC_CHECK_FUNC(gethostname, gethostname=1 , gethostname=0) if test $gethostname -eq 0 ; then AC_CHECK_LIB(inet, gethostname, LIBS="$LIBS -linet") fi ###################################################################### # required by Fischman's ISC 4.0 AC_CHECK_FUNC(socket, socket=1 , socket=0) if test $socket -eq 0 ; then AC_CHECK_LIB(inet, socket, LIBS="$LIBS -linet") fi ###################################################################### AC_CHECK_FUNC(select, select=1 , select=0) if test $select -eq 0 ; then AC_CHECK_LIB(inet, select, LIBS="$LIBS -linet") fi ###################################################################### AC_CHECK_FUNC(getpseudotty, getpseudotty=1 , getpseudotty=0) if test $getpseudotty -eq 0 ; then AC_CHECK_LIB(seq, getpseudotty) fi ###################################################################### # Check for FreeBSD/NetBSD openpty() unset ac_cv_func_openpty AC_CHECK_FUNC(openpty, openpty=1 , openpty=0) if test $openpty -eq 0 ; then AC_CHECK_LIB(util, openpty, [ # we only need to define OPENPTY once, but since we are overriding # the default behavior, we must also handle augment LIBS too. # This needn't be done in the 2nd and 3rd tests. AC_DEFINE(HAVE_OPENPTY) LIBS="$LIBS -lutil" ]) fi ###################################################################### # End of library/func checking ###################################################################### # Hand patches to library/func checking. dnl From: Michael Kuhl dnl To get expect to compile on a Sequent NUMA-Q running DYNIX/ptx v4.4.2. AC_MSG_CHECKING([if running Sequent running SVR4]) if test "$host_alias" = "i386-sequent-sysv4" ; then LIBS="-lnsl -lsocket -lm" AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi #-------------------------------------------------------------------- #-------------------------------------------------------------------- #-------------------------------------------------------------------- #-------------------------------------------------------------------- # From here on comes original expect configure code. # At the end we will have another section of TEA 3.2 code. # # Note specialities # # - Runs a sub configure (Dbgconfigure) for the expect tcl debugger # #-------------------------------------------------------------------- #-------------------------------------------------------------------- dnl AC_CONFIG_AUX_DIR(`cd $srcdir;pwd`/..) AC_CANONICAL_SYSTEM # /bin/sh on some systems is too deficient (in particular, Ultrix 4.3 # sh lacks unset and we *need* that), but all these systems come with # alternatives, so take user's choice or whatever we're using here and # allow it to be seen by Make. AC_MSG_CHECKING([shell to use within Make]) EXP_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} AC_MSG_RESULT($CONFIG_SHELL) # If `configure' is invoked (in)directly via `make', ensure that it # encounters no `make' conflicts. # dnl unset MFLAGS MAKEFLAGS MFLAGS= MAKEFLAGS= # An explanation is in order for the strange things going on with the # various LIBS. There are three separate definitions for LIBS. The # reason is that some systems require shared libraries include # references to their dependent libraries, i.e., any additional # libraries that must be linked to. And some systems get upset if the # references are repeated on the link line. So therefore, we create # one for Expect and Tk (EXP_AND_TK_LIBS), one for Expect and Tcl # (EXP_AND_TCL_LIBS), and finally, one for building Expect's own # shared library. Tcl's tclConfig.sh insists that any shared libs # that it "helps" build must pass the libraries as LIBS (see comment # near end of this configure file). I would do but since we're close # to hitting config's max symbols, we take one short cut and pack the # LIBS into EXP_SHLIB_LD_LIBS (which is basically what Tcl wants to do # for us). The point, however, is that there's no separate LIBS or # EXP_LIBS symbol passed out of configure. One additional point for # confusion is that LIBS is what configure uses to do all library # tests, so we have to swap definitions of LIBS periodically. When we # are swapping out the one for Expect's shared library, we save it in # EXP_LIBS. Sigh. eval "LIBS=\"$TCL_LIBS\"" # these are the other subdirectories we need to configure AC_CONFIG_SUBDIRS(testsuite) # This is for LynxOS, which needs a flag to force true POSIX when # building. The flag varies depending how old the compiler is. # -X is for the old "cc" and "gcc" (based on 1.42) # -mposix is for the new gcc (at least 2.5.8) # This modifies the value of $CC to have the POSIX flag added # so it'll configure correctly CY_AC_TCL_LYNX_POSIX AC_TYPE_PID_T AC_MSG_CHECKING([if running Mach]) mach=0 case "${host}" in # Both Next and pure Mach behave identically with respect # to a few things, so just lump them together as "mach" *-*-mach*) mach=1 ;; *-*-next*) mach=1 ; next=1 ;; esac if test $mach -eq 1 ; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING([if running MachTen]) # yet another Mach clone if test -r /MachTen ; then AC_MSG_RESULT(yes) mach=1 else AC_MSG_RESULT(no) fi AC_MSG_CHECKING([if on Pyramid]) if test -r /bin/pyr ; then AC_MSG_RESULT(yes) pyr=1 else AC_MSG_RESULT(no) pyr=0 fi AC_MSG_CHECKING([if on Apollo]) if test -r /usr/apollo/bin ; then AC_MSG_RESULT(yes) apollo=1 else AC_MSG_RESULT(no) apollo=0 fi AC_MSG_CHECKING([if on Interactive]) if test "x`(uname -s) 2>/dev/null`" = xIUNIX; then AC_MSG_RESULT(yes) iunix=1 else AC_MSG_RESULT(no) iunix=0 fi AC_MSG_CHECKING([stty to use]) if test -r /usr/local/bin/stty ; then STTY_BIN=/usr/local/bin/stty else STTY_BIN=/bin/stty fi AC_MSG_RESULT($STTY_BIN) AC_MSG_CHECKING([if stty reads stdout]) # On some systems stty can't be run in the background (svr4) or get it # wrong because they fail to complain (next, mach), so don't attempt # the test on some systems. stty_reads_stdout="" case "${host}" in *-*-solaris*) stty_reads_stdout=0 ;; *-*-irix*) stty_reads_stdout=0 ;; *-*-sco3.2v[[45]]*) stty_reads_stdout=1 ;; i[[3456]]86-*-sysv4.2MP) stty_reads_stdout=0 ;; i[[3456]]86-*-linux*) stty_reads_stdout=0 ;; # Not sure about old convex but 5.2 definitely reads from stdout c[[12]]-*-*) stty_reads_stdout=1 ;; *-*-aix[[34]]*) stty_reads_stdout=0 ;; *-*-hpux9*) stty_reads_stdout=0 ;; *-*-hpux10*) stty_reads_stdout=0 ;; *-*-osf[[234]]*) stty_reads_stdout=0 ;; *-*-ultrix4.4) stty_reads_stdout=0 ;; *-*-dgux*) stty_reads_stdout=0 ;; esac if test $mach -eq 1 ; then stty_reads_stdout=1 fi if test $apollo -eq 1 ; then stty_reads_stdout=1 fi if test $pyr -eq 1 ; then stty_reads_stdout=1 fi # if we still don't know, test if test x"${stty_reads_stdout}" = x"" ; then $STTY_BIN > /dev/null 2> /dev/null if test $? -ne 0 ; then stty_reads_stdout=1 else stty_reads_stdout=0 fi fi if test ${stty_reads_stdout} -eq 1 ; then AC_MSG_RESULT(yes) AC_DEFINE(STTY_READS_STDOUT) else AC_MSG_RESULT(no) fi # Solaris 2.4 and later requires __EXTENSIONS__ in order to see all sorts # of traditional but nonstandard stuff in header files. AC_MSG_CHECKING([if running Solaris]) solaris=0 case "${host}" in *-*-solaris*) solaris=1;; esac if test $solaris -eq 1 ; then AC_MSG_RESULT(yes) AC_DEFINE(SOLARIS) else AC_MSG_RESULT(no) fi # On Interactive UNIX, -Xp must be added to LIBS in order to find strftime. # This test should really be done by Tcl. So just check Tcl's definition. # If defective, add to all three LIBS. (It's not actually necessary for # EXP_LIBS since -Xp will just be ignored the way that EXP_LIBS is used in # the Makefile, but we include it for consistency.) if test $iunix -eq 1 ; then AC_CHECK_FUNC(strftime, , [ LIBS="${LIBS} -Xp" ]) fi # # Now that we've found the Tcl sources, configure the debugger # this is a little tricky because it has its own configure script # which produces a Makefile and cf file. We only want the cf file, # so switch to a temporary directory and run the debugger's configure. # Then save the cf file and delete the rest. # # Incidentally, the debugger can't depend on Expect's cf file, because # the debugger is designed to be independent of Expect. # test -n "$verbose" && echo "configuring Tcl debugger" tmpdir=./Dbg$$ mkdir ${tmpdir} #if test "${enable_shared+set}" = set; then if test "${enable_shared}" = "yes"; then dbg_config_flags='--enable-shared' else dbg_config_flags='--disable-shared' fi # (cd;pwd) in next several commands converts relative dirs to absolute. # This is required because the debugger src is at a different level in # the filesystem than Expect src (where we are presently), thereby # making the relative pathnames incorrect. if test "x$with_tclconfig" != "x" ; then dbg_config_flags="$dbg_config_flags --with-tclconfig=`(cd ${with_tclconfig}; pwd)`" fi if test "x$with_tcllibdir" != "x" ; then dbg_config_flags="$dbg_config_flags --with-tcllibdir=`(cd ${with_tcllibdir}; pwd)`" fi if test "x$with_tcllib" != "x" ; then dbg_config_flags="$dbg_config_flags --with-tcllib=`(cd ${with_tcllib}; pwd)`" fi if test "x$with_tclinclude" != "x" ; then dbg_config_flags="$dbg_config_flags --with-tclinclude=`(cd ${with_tclinclude}; pwd)`" fi case "$cache_file" in /*) dbg_config_flags="$dbg_config_flags --cache-file=$cache_file" ;; *) dbg_config_flags="$dbg_config_flags --cache-file=../$cache_file" ;; esac cp ${srcdir}/Dbgconfigure ${srcdir}/tcldbg.h ${srcdir}/tcldbgcf.h.in ${srcdir}/install-sh ${tmpdir} cp $srcdir/DbgMkfl.in ${tmpdir}/Makefile.in cp $srcdir/DbgpkgInd.in ${tmpdir}/pkgIndex.in (cd $tmpdir; ${CONFIG_SHELL-/bin/sh} Dbgconfigure --with-tclinclude=$TCLHDIR $dbg_config_flags) cp ${tmpdir}/tcldbgcf.h . rm -rf $tmpdir test -n "$verbose" && echo "configured Tcl debugger" # some people would complain if this explanation wasn't provided... ###################################################################### # # Look for various header files # # # Look for functions that may be missing # dnl AC_CHECK_FUNC(memcpy, AC_DEFINE(HAVE_MEMCPY)) AC_CHECK_FUNC(memmove, AC_DEFINE(HAVE_MEMMOVE)) AC_CHECK_FUNC(sysconf, AC_DEFINE(HAVE_SYSCONF)) AC_CHECK_FUNC(strftime, AC_DEFINE(HAVE_STRFTIME)) AC_CHECK_FUNC(strchr, AC_DEFINE(HAVE_STRCHR)) AC_CHECK_FUNC(timezone, AC_DEFINE(HAVE_TIMEZONE)) AC_CHECK_FUNC(siglongjmp, AC_DEFINE(HAVE_SIGLONGJMP)) # dnl check for memcpy by hand # because Unixware 2.0 handles it specially and refuses to compile # autoconf's automatic test that is a call with no arguments AC_MSG_CHECKING([for memcpy]) AC_TRY_LINK(,[ char *s1, *s2; memcpy(s1,s2,0); ], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_MEMCPY) , AC_MSG_RESULT(no) ) # Some systems only define WNOHANG if _POSIX_SOURCE is defined # The following merely tests that sys/wait.h can be included # and if so that WNOHANG is not defined. The only place I've # seen this is ISC. AC_MSG_CHECKING([if WNOHANG requires _POSIX_SOURCE]) AC_TRY_RUN([ #include main() { #ifndef WNOHANG return 0; #else return 1; #endif }], AC_MSG_RESULT(yes) AC_DEFINE(WNOHANG_REQUIRES_POSIX_SOURCE) , AC_MSG_RESULT(no) , AC_MSG_ERROR([Expect can't be cross compiled]) ) AC_MSG_CHECKING([if any value exists for WNOHANG]) rm -rf wnohang AC_TRY_RUN([ #include #include main() { #ifdef WNOHANG FILE *fp = fopen("wnohang","w"); fprintf(fp,"%d",WNOHANG); fclose(fp); return 0; #else return 1; #endif }], AC_MSG_RESULT(yes) AC_DEFINE_UNQUOTED(WNOHANG_BACKUP_VALUE, `cat wnohang`) rm -f wnohang , AC_MSG_RESULT(no) AC_DEFINE(WNOHANG_BACKUP_VALUE, 1) , AC_MSG_ERROR([Expect can't be cross compiled]) ) # # check how signals work # # Check for the data type of the mask used in select(). # This picks up HP braindamage which defines fd_set and then # proceeds to ignore it and use int. # Pattern matching on int could be loosened. # Can't use ac_header_egrep since that doesn't see prototypes with K&R cpp. AC_MSG_CHECKING([mask type of select]) if egrep "select\(size_t, int" /usr/include/sys/time.h >/dev/null 2>&1; then AC_MSG_RESULT(int) AC_DEFINE(SELECT_MASK_TYPE, int) else AC_MSG_RESULT(none) AC_DEFINE(SELECT_MASK_TYPE, fd_set) fi dnl # Check for the data type of the function used in signal(). This dnl # must be before the test for rearming. dnl # echo checking return type of signal handlers dnl AC_HEADER_EGREP([(void|sighandler_t).*signal], signal.h, retsigtype=void,AC_DEFINE(RETSIGTYPE, int) retsigtype=int) # FIXME: check if alarm exists AC_MSG_CHECKING([if signals need to be re-armed]) AC_TRY_RUN([ #include #define RETSIGTYPE $retsigtype int signal_rearms = 0; RETSIGTYPE child_sigint_handler(n) int n; { } RETSIGTYPE parent_sigint_handler(n) int n; { signal_rearms++; } main() { signal(SIGINT,parent_sigint_handler); if (0 == fork()) { signal(SIGINT,child_sigint_handler); kill(getpid(),SIGINT); kill(getpid(),SIGINT); kill(getppid(),SIGINT); } else { int status; wait(&status); unlink("core"); exit(signal_rearms); } }], AC_MSG_RESULT(yes) AC_DEFINE(REARM_SIG) , AC_MSG_RESULT(no) , AC_MSG_WARN([Expect can't be cross compiled]) ) # HPUX7 has trouble with the big cat so split it # Owen Rees 29Mar93 SEDDEFS="${SEDDEFS}CONFEOF cat >> conftest.sed </dev/null`" = xHP-UX; then AC_MSG_RESULT(yes) hp=1 else AC_MSG_RESULT(no) hp=0 fi AC_MSG_CHECKING([sane default stty arguments]) DEFAULT_STTY_ARGS="sane" if test $mach -eq 1 ; then DEFAULT_STTY_ARGS="cooked" fi if test $hp -eq 1 ; then DEFAULT_STTY_ARGS="sane kill " fi AC_MSG_RESULT($DEFAULT_STTY_ARG) # Look for various features to determine what kind of pty # we have. For some weird reason, ac_compile_check would not # work, but ac_test_program does. # AC_MSG_CHECKING([for HP style pty allocation]) # following test fails on DECstations and other things that don't grok -c # but that's ok, since they don't have PTYMs anyway if test -r /dev/ptym/ptyp0 2>/dev/null ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PTYM) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING([for HP style pty trapping]) AC_HEADER_EGREP([struct.*request_info], sys/ptyio.h, AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PTYTRAP) , AC_MSG_RESULT(no) ) AC_MSG_CHECKING([for AIX new-style pty allocation]) if test -r /dev/ptc -a -r /dev/pts ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PTC_PTS) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING([for SGI old-style pty allocation]) if test -r /dev/ptc -a ! -r /dev/pts ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PTC) else AC_MSG_RESULT(no) fi # On SCO OpenServer, two types of ptys are available: SVR4 streams and c-list. # The library routines to open the SVR4 ptys are broken on certain systems and # the SCO command to increase the number of ptys only configure c-list ones # anyway. So we chose these, which have a special numbering scheme. # AC_MSG_CHECKING([for SCO style pty allocation]) sco_ptys="" case "${host}" in *-sco3.2v[[45]]*) sco_clist_ptys=1 svr4_ptys_broken=1;; esac if test x"${sco_clist_ptys}" != x"" ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_SCO_CLIST_PTYS) else AC_MSG_RESULT(no) fi AC_MSG_CHECKING([for SVR4 style pty allocation]) if test -r /dev/ptmx -a "x$svr4_ptys_broken" = x ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PTMX) # aargg. Some systems need libpt.a to use /dev/ptmx AC_CHECK_LIB(pt, libpts="-lpt", libpts="") AC_CHECK_FUNC(ptsname, , LIBS="${LIBS} $libpts") else AC_MSG_RESULT(no) fi # In OSF/1 case, SVR4 are somewhat different. # Gregory Depp 17Aug93 AC_MSG_CHECKING([for OSF/1 style pty allocation]) if test -r /dev/ptmx_bsd ; then AC_DEFINE(HAVE_PTMX_BSD) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi tcgetattr=0 tcsetattr=0 AC_CHECK_FUNC(tcgetattr, tcgetattr=1) AC_CHECK_FUNC(tcsetattr, tcsetattr=1) if test $tcgetattr -eq 1 -a $tcsetattr -eq 1 ; then AC_DEFINE(HAVE_TCSETATTR) AC_DEFINE(POSIX) fi # first check for the pure bsd AC_MSG_CHECKING([for struct sgttyb]) AC_TRY_RUN([ #include main() { struct sgttyb tmp; exit(0); }], AC_MSG_RESULT(yes) AC_DEFINE(HAVE_SGTTYB) PTY_TYPE=sgttyb , AC_MSG_RESULT(no) , AC_MSG_ERROR([Expect can't be cross compiled]) ) # mach systems have include files for unimplemented features # so avoid doing following test on those systems if test $mach -eq 0 ; then # next check for the older style ttys # note that if we detect termio.h (only), we still set PTY_TYPE=termios # since that just controls which of pty_XXXX.c file is use and # pty_termios.c is set up to handle pty_termio. AC_MSG_CHECKING([for struct termio]) AC_TRY_RUN([#include main() { struct termio tmp; exit(0); }], AC_DEFINE(HAVE_TERMIO) PTY_TYPE=termios AC_MSG_RESULT(yes) , AC_MSG_RESULT(no) , AC_MSG_ERROR([Expect can't be cross compiled]) ) # now check for the new style ttys (not yet posix) AC_MSG_CHECKING([for struct termios]) AC_TRY_RUN([ /* including termios.h on Solaris 5.6 fails unless inttypes.h included */ # ifdef HAVE_INTTYPES_H # include # endif # include main() { struct termios tmp; exit(0); }], AC_DEFINE(HAVE_TERMIOS) PTY_TYPE=termios AC_MSG_RESULT(yes) , AC_MSG_RESULT(no) , AC_MSG_ERROR([Expect can't be cross compiled]) ) fi AC_MSG_CHECKING([if TCGETS or TCGETA in termios.h]) AC_TRY_RUN([ /* including termios.h on Solaris 5.6 fails unless inttypes.h included */ #ifdef HAVE_INTTYPES_H #include #endif #include main() { #if defined(TCGETS) || defined(TCGETA) return 0; #else return 1; #endif }], AC_DEFINE(HAVE_TCGETS_OR_TCGETA_IN_TERMIOS_H) AC_MSG_RESULT(yes) , AC_MSG_RESULT(no) , AC_MSG_ERROR([Expect can't be cross compiled]) ) AC_MSG_CHECKING([if TIOCGWINSZ in termios.h]) AC_TRY_RUN([ /* including termios.h on Solaris 5.6 fails unless inttypes.h included */ #ifdef HAVE_INTTYPES_H #include #endif #include main() { #ifdef TIOCGWINSZ return 0; #else return 1; #endif }], AC_DEFINE(HAVE_TIOCGWINSZ_IN_TERMIOS_H) AC_MSG_RESULT(yes) , AC_MSG_RESULT(no) , AC_MSG_ERROR([Expect can't be cross compiled]) ) # finally check for Cray style ttys AC_MSG_CHECKING([for Cray-style ptys]) SETUID=":" AC_TRY_RUN([ main(){ #ifdef CRAY return 0; #else return 1; #endif } ], PTY_TYPE=unicos SETUID="chmod u+s" AC_MSG_RESULT(yes) , AC_MSG_RESULT(no) , AC_MSG_ERROR([Expect can't be cross compiled]) ) # # Check for select and/or poll. If both exist, we prefer select. # if neither exists, define SIMPLE_EVENT. # select=0 poll=0 unset ac_cv_func_select AC_CHECK_FUNC(select, select=1) AC_CHECK_FUNC(poll, poll=1) AC_MSG_CHECKING([event handling]) if test $select -eq 1 ; then EVENT_TYPE=select EVENT_ABLE=event AC_MSG_RESULT(via select) elif test $poll -eq 1 ; then EVENT_TYPE=poll EVENT_ABLE=event AC_MSG_RESULT(via poll) else EVENT_TYPE=simple EVENT_ABLE=noevent AC_MSG_RESULT(none) AC_DEFINE(SIMPLE_EVENT) fi AC_HAVE_FUNCS(_getpty) AC_HAVE_FUNCS(getpty) # following test sets SETPGRP_VOID if setpgrp takes 0 args, else takes 2 AC_FUNC_SETPGRP # # check for timezones # AC_MSG_CHECKING([for SV-style timezone]) AC_TRY_RUN([ extern char *tzname[2]; extern int daylight; main() { int *x = &daylight; char **y = tzname; exit(0); }], AC_DEFINE(HAVE_SV_TIMEZONE) AC_MSG_RESULT(yes), AC_MSG_RESULT(no) , AC_MSG_ERROR([Expect can't be cross compiled]) ) # Following comment stolen from Tcl's configure.in: # Note: in the following variable, it's important to use the absolute # path name of the Tcl directory rather than "..": this is because # AIX remembers this path and will attempt to use it at run-time to look # up the Tcl library. PACKAGE_VERSION_NODOTS="`echo $PACKAGE_VERSION | sed -e 's/\.//g'`" if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then EXP_LIB_VERSION=$PACKAGE_VERSION else EXP_LIB_VERSION=$PACKAGE_VERSION_NODOTS fi if test $iunix -eq 1 ; then EXP_LIB_VERSION=$PACKAGE_VERSION_NODOTS fi # also remove dots on systems that don't support filenames > 14 # (are there systems which support shared libs and restrict filename lengths!?) AC_SYS_LONG_FILE_NAMES if test $ac_cv_sys_long_file_names = no; then EXP_LIB_VERSION=$PACKAGE_VERSION_NODOTS fi if test "$FRAMEWORK_BUILD" = "1" ; then EXP_BUILD_LIB_SPEC="-F`pwd` -framework Expect" EXP_LIB_SPEC="-framework Expect" EXP_LIB_FILE="Expect" AC_DEFINE(EXP_FRAMEWORK) elif test "$SHARED_BUILD" = "0" || test "$TCL_NEEDS_EXP_FILE" = "0"; then if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then EXP_LIB_FLAG="-lexpect${EXP_LIB_VERSION}" else EXP_LIB_FLAG="-lexpect`echo ${EXP_LIB_VERSION} | tr -d .`" fi EXP_BUILD_LIB_SPEC="-L`pwd` ${EXP_LIB_FLAG}" EXP_LIB_SPEC="-L${libdir} ${EXP_LIB_FLAG}" else EXP_EXPORT_FILE_SUFFIX="${EXP_LIB_VERSION}.exp" EXP_BUILD_EXP_FILE="lib.exp" eval "EXP_EXP_FILE=libexpect${EXP_EXPORT_FILE_SUFFIX}" # Replace DBGX with EXP_DBGX eval "EXP_EXP_FILE=\"${EXP_EXP_FILE}\"" if test "$GCC" = "yes" ; then EXP_BUILD_LIB_SPEC="-Wl,-bI:`pwd`/${EXP_BUILD_EXP_FILE} -L`pwd`" EXP_LIB_SPEC="-Wl,-bI:${libdir}/${EXP_EXP_FILE} -L`pwd`" else EXP_BUILD_LIB_SPEC="-bI:`pwd`/${EXP_BUILD_EXP_FILE}" EXP_LIB_SPEC="-bI:${libdir}/${EXP_EXP_FILE}" fi fi EXP_UNSHARED_LIB_FILE=libexpect${EXP_LIB_VERSION}.a # The TCL_SHARED_LIB_SUFFIX macro below relies on the DBGX macro, # which is set way far above here. Don't set it to the value of # TCL_DBGX, or you'll run into problems if you build Tcl with symbols # and expect without (and vice versa?) AC_MSG_CHECKING([for type of library to build]) if test "$enable_shared" = "yes" && test "x${TCL_SHLIB_SUFFIX}" != "x" ; then EXP_SHLIB_CFLAGS=$TCL_SHLIB_CFLAGS eval "EXP_SHARED_LIB_FILE=libexpect${TCL_SHARED_LIB_SUFFIX}" EXP_LIB_FILE=$EXP_SHARED_LIB_FILE EXP_LIB_FILES="$EXP_SHARED_LIB_FILE $EXP_UNSHARED_LIB_FILE" AC_MSG_RESULT(both shared and unshared) else EXP_SHLIB_CFLAGS= EXP_SHARED_LIB_FILE="reconfigure_Tcl_for_shared_library" EXP_LIB_FILE=$EXP_UNSHARED_LIB_FILE EXP_LIB_FILES="$EXP_UNSHARED_LIB_FILE" AC_MSG_RESULT(unshared) fi # Sigh - Tcl defines SHLIB_LD_LIBS to be either empty or ${LIBS} and # LIBS is intended to be expanded by Make. But since we're too close # to hitting config's max symbols, pack everything together here and # do test ourselves. Ugh. # if test "$enable_stubs" = "yes"; then EXP_SHLIB_LD_LIBS="$TCL_BUILD_STUB_LIB_SPEC $TCL_DL_LIBS $LIBS $LIBS -lc" elif test "x$TCL_SHLIB_LD_LIBS" = "x" ; then EXP_SHLIB_LD_LIBS="$LIBS" else # seems a little strange to build in Tcl's build-lib, but # that's what Tk does. EXP_SHLIB_LD_LIBS="$TCL_BUILD_LIB_SPEC $TCL_DL_LIBS $LIBS -lc" fi #-------------------------------------------------------------------- # This section is based on analogous thing in Tk installation. - DEL # Various manipulations on the search path used at runtime to # find shared libraries: # 2. On systems such as AIX and Ultrix that use "-L" as the # search path option, colons cannot be used to separate # directories from each other. Change colons to " -L". # 3. Create two sets of search flags, one for use in cc lines # and the other for when the linker is invoked directly. In # the second case, '-Wl,' must be stripped off and commas must # be replaced by spaces. #-------------------------------------------------------------------- LIB_RUNTIME_DIR='${LIB_RUNTIME_DIR}/${PACKAGE_NAME}${PACKAGE_VERSION}' # If Tcl and Expect are installed in different places, adjust the library # search path to reflect this. if test "$TCL_EXEC_PREFIX" != "$exec_prefix"; then LIB_RUNTIME_DIR="${LIB_RUNTIME_DIR}:${TCL_EXEC_PREFIX}/lib" fi if test "${TCL_LD_SEARCH_FLAGS}" = '-L${LIB_RUNTIME_DIR}'; then LIB_RUNTIME_DIR=`echo ${LIB_RUNTIME_DIR} |sed -e 's/:/ -L/g'` fi # The eval below is tricky! It *evaluates* the string in # ..._CC_SEARCH_FLAGS, which causes a substitution of the # variable LIB_RUNTIME_DIR. eval "EXP_CC_SEARCH_FLAGS=\"$TCL_CC_SEARCH_FLAGS\"" eval "EXP_LD_SEARCH_FLAGS=\"$TCL_LD_SEARCH_FLAGS\"" # now broken out into EXP_AND_TCL_LIBS and EXP_AND_TK_LIBS. Had to do this # in order to avoid repeating lib specs to which some systems object. LIBS="$LIBS $LD_SEARCH_FLAGS" # # Set up makefile substitutions # AC_SUBST(EXP_CONFIG_SHELL) AC_SUBST(EXP_SHARED_LIB_FILE) AC_SUBST(EXP_UNSHARED_LIB_FILE) AC_SUBST(EXP_SHLIB_CFLAGS) AC_SUBST(EXP_LIB_FILE) AC_SUBST(EXP_LIB_FILES) AC_SUBST(EXP_BUILD_LIB_SPEC) AC_SUBST(EXP_LIB_SPEC) AC_SUBST(EXP_CFLAGS) AC_SUBST(EXP_LDFLAGS) AC_SUBST(EXP_LD_SEARCH_FLAGS) AC_SUBST(TCL_LD_SEARCH_FLAGS) AC_SUBST(EXP_CC_SEARCH_FLAGS) AC_SUBST(TCL_CC_SEARCH_FLAGS) AC_SUBST(EXP_SHLIB_LD_LIBS) AC_SUBST(SETUID) AC_SUBST(SETPGRP_VOID) AC_SUBST(DEFAULT_STTY_ARGS) #-------------------------------------------------------------------- #-------------------------------------------------------------------- # More TEA 3.2 code based on data we got from the original expect # configure code. #-------------------------------------------------------------------- #-------------------------------------------------------------------- dnl echo ____BEFORE TEA POST dnl echo DEFS........... = $DEFS dnl echo LIBS........... = $LIBS dnl echo ____ #----------------------------------------------------------------------- # Specify the C source files to compile in TEA_ADD_SOURCES, # public headers that need to be installed in TEA_ADD_HEADERS, # stub library C source files to compile in TEA_ADD_STUB_SOURCES, # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS # and PKG_TCL_SOURCES. #----------------------------------------------------------------------- TEA_ADD_SOURCES([ exp_command.c expect.c exp_inter.c exp_regexp.c exp_tty.c exp_log.c exp_main_sub.c exp_pty.c exp_trap.c exp_strf.c exp_console.c exp_glob.c exp_win.c exp_clib.c exp_closetcl.c exp_memmove.c exp_tty_comm.c exp_chan.c Dbg.c ]) # Variant sources. Comments in the Makefile indicate that the # event_type/able stuff can be overidden in the Makefile, and should # be for particular systems. IMHO this requires a configure option. # # See at the end, where we select the sources based on the collect # information. TEA_ADD_SOURCES([ pty_${PTY_TYPE}.c exp_${EVENT_TYPE}.c exp_${EVENT_ABLE}.c ]) TEA_ADD_HEADERS([expect.h expect_tcl.h expect_comm.h tcldbg.h]) TEA_ADD_INCLUDES([-I.]) TEA_ADD_INCLUDES([-I\"`\${CYGPATH} \${srcdir}`\"]) dnl echo ____ dnl echo SCRIPTDIR.... = $SCRIPTDIR dnl echo EXECSCRIPTDIR = $EXECSCRIPTDIR dnl echo STTY_BIN..... = $STTY_BIN dnl echo ____ TEA_ADD_LIBS([]) TEA_ADD_CFLAGS([-DTCL_DEBUGGER -DUSE_NON_CONST]) TEA_ADD_CFLAGS([-DSCRIPTDIR=\\\"\${DESTDIR}\${prefix}/lib/\${PKG_DIR}\\\"]) TEA_ADD_CFLAGS([-DEXECSCRIPTDIR=\\\"\${DESTDIR}\${pkglibdir}\\\"]) TEA_ADD_CFLAGS([-DSTTY_BIN=\\\"${STTY_BIN}\\\"]) TEA_ADD_CFLAGS([-DDFLT_STTY=\"\\\"$DEFAULT_STTY_ARGS\\\"\"]) TEA_ADD_STUB_SOURCES([]) TEA_ADD_TCL_SOURCES([]) #-------------------------------------------------------------------- # This macro generates a line to use when building a library. It # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, # and TEA_LOAD_TCLCONFIG macros above. #-------------------------------------------------------------------- TEA_MAKE_LIB #-------------------------------------------------------------------- # Find tclsh so that we can run pkg_mkIndex to generate the pkgIndex.tcl # file during the install process. Don't run the TCLSH_PROG through # ${CYGPATH} because it's being used directly by make. # Require that we use a tclsh shell version 8.2 or later since earlier # versions have bugs in the pkg_mkIndex routine. # Add WISH as well if this is a Tk extension. #-------------------------------------------------------------------- TEA_PROG_TCLSH #-------------------------------------------------------------------- # Finally, substitute all of the various values into the Makefile. # You may alternatively have a special pkgIndex.tcl.in or other files # which require substituting th AC variables in. Include these here. #-------------------------------------------------------------------- touch expect_cf.h AC_OUTPUT([Makefile], chmod +x ${srcdir}/install-sh)