diff options
Diffstat (limited to 'unix/configure.ac')
| -rw-r--r-- | unix/configure.ac | 997 | 
1 files changed, 997 insertions, 0 deletions
| diff --git a/unix/configure.ac b/unix/configure.ac new file mode 100644 index 0000000..bafb970 --- /dev/null +++ b/unix/configure.ac @@ -0,0 +1,997 @@ +#! /bin/bash -norc +dnl	This file is an input file used by the GNU "autoconf" program to +dnl	generate the file "configure", which is run during Tcl installation +dnl	to configure the system for the local environment. + +AC_INIT([tcl],[8.7]) +AC_PREREQ(2.69) + +dnl This is only used when included from macosx/configure.ac +m4_ifdef([SC_USE_CONFIG_HEADERS], [ +    AC_CONFIG_HEADERS([tclConfig.h:../unix/tclConfig.h.in]) +    AC_CONFIG_COMMANDS_PRE([DEFS="-DHAVE_TCL_CONFIG_H  -imacros tclConfig.h"]) +    AH_TOP([ +    #ifndef _TCLCONFIG +    #define _TCLCONFIG]) +    AH_BOTTOM([ +    /* Undef unused package specific autoheader defines so that we can +     * include both tclConfig.h and tkConfig.h at the same time: */ +    /* override */ #undef PACKAGE_NAME +    /* override */ #undef PACKAGE_STRING +    /* override */ #undef PACKAGE_TARNAME +    #endif /* _TCLCONFIG */]) +]) + +TCL_VERSION=8.7 +TCL_MAJOR_VERSION=8 +TCL_MINOR_VERSION=7 +TCL_PATCH_LEVEL="a0" +VERSION=${TCL_VERSION} + +EXTRA_INSTALL_BINARIES=${EXTRA_INSTALL_BINARIES:-"@:"} +EXTRA_BUILD_HTML=${EXTRA_BUILD_HTML:-"@:"} + +#------------------------------------------------------------------------ +# Setup configure arguments for bundled packages +#------------------------------------------------------------------------ + +PKG_CFG_ARGS="$ac_configure_args ${PKG_CFG_ARGS}" + +if test -r "$cache_file" -a -f "$cache_file"; then +    case $cache_file in +	[[\\/]]* | ?:[[\\/]]* ) pkg_cache_file=$cache_file ;; +	*) pkg_cache_file=../../$cache_file ;; +    esac +    PKG_CFG_ARGS="${PKG_CFG_ARGS} --cache-file=$pkg_cache_file" +fi + +#------------------------------------------------------------------------ +# Empty slate for bundled packages, to avoid stale configuration +#------------------------------------------------------------------------ +#rm -Rf pkgs +if test -f Makefile; then +    make distclean-packages +fi + +#------------------------------------------------------------------------ +# Handle the --prefix=... option +#------------------------------------------------------------------------ + +if test "${prefix}" = "NONE"; then +    prefix=/usr/local +fi +if test "${exec_prefix}" = "NONE"; then +    exec_prefix=$prefix +fi +# Make sure srcdir is fully qualified! +srcdir="`cd "$srcdir" ; pwd`" +TCL_SRC_DIR="`cd "$srcdir"/..; pwd`" + +#------------------------------------------------------------------------ +# Compress and/or soft link the manpages? +#------------------------------------------------------------------------ + +SC_CONFIG_MANPAGES + +#------------------------------------------------------------------------ +# Standard compiler checks +#------------------------------------------------------------------------ + +# If the user did not set CFLAGS, set it now to keep +# the AC_PROG_CC macro from adding "-g -O2". +if test "${CFLAGS+set}" != "set" ; then +    CFLAGS="" +fi + +AC_PROG_CC +AC_C_INLINE + +#-------------------------------------------------------------------- +# Supply substitutes for missing POSIX header files.  Special notes: +#	- stdlib.h doesn't define strtol, strtoul, or +#	  strtod insome versions of SunOS +#	- some versions of string.h don't declare procedures such +#	  as strstr +# Do this early, otherwise an autoconf bug throws errors on configure +#-------------------------------------------------------------------- + +SC_MISSING_POSIX_HEADERS + +#-------------------------------------------------------------------- +# Determines the correct executable file extension (.exe) +#-------------------------------------------------------------------- + +AC_EXEEXT + +#------------------------------------------------------------------------ +# If we're using GCC, see if the compiler understands -pipe.  If so, use it. +# It makes compiling go faster.  (This is only a performance feature.) +#------------------------------------------------------------------------ + +if test -z "$no_pipe" && test -n "$GCC"; then +    AC_CACHE_CHECK([if the compiler understands -pipe], +	tcl_cv_cc_pipe, [ +	hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" +	AC_TRY_COMPILE(,, tcl_cv_cc_pipe=yes, tcl_cv_cc_pipe=no) +	CFLAGS=$hold_cflags]) +    if test $tcl_cv_cc_pipe = yes; then +	CFLAGS="$CFLAGS -pipe" +    fi +fi + +#------------------------------------------------------------------------ +# Threads support +#------------------------------------------------------------------------ + +SC_ENABLE_THREADS + +#------------------------------------------------------------------------ +# Embedded configuration information, encoding to use for the values, TIP #59 +#------------------------------------------------------------------------ + +SC_TCL_CFG_ENCODING + +#-------------------------------------------------------------------- +# Look for libraries that we will need when compiling the Tcl shell +#-------------------------------------------------------------------- + +SC_TCL_LINK_LIBS + +# Add the threads support libraries +LIBS="$LIBS$THREADS_LIBS" + +SC_ENABLE_SHARED + +#-------------------------------------------------------------------- +# Look for a native installed tclsh binary (if available) +# If one cannot be found then use the binary we build (fails for +# cross compiling). This is used for NATIVE_TCLSH in Makefile. +#-------------------------------------------------------------------- + +SC_PROG_TCLSH +if test "$TCLSH_PROG" = ""; then +  TCLSH_PROG='./${TCL_EXE}' +fi + +#------------------------------------------------------------------------ +#	Add stuff for zlib +#------------------------------------------------------------------------ + +zlib_ok=yes +AC_CHECK_HEADER([zlib.h],[ +  AC_CHECK_TYPE([gz_header],[],[zlib_ok=no],[#include <zlib.h>])],[ +  zlib_ok=no]) +AS_IF([test $zlib_ok = yes], [ +  AC_SEARCH_LIBS([deflateSetHeader],[z],[],[ +    zlib_ok=no +  ])]) +AS_IF([test $zlib_ok = no], [ +  AC_SUBST(ZLIB_OBJS,[\${ZLIB_OBJS}]) +  AC_SUBST(ZLIB_SRCS,[\${ZLIB_SRCS}]) +  AC_SUBST(ZLIB_INCLUDE,[-I\${ZLIB_DIR}]) +]) +AC_DEFINE(HAVE_ZLIB, 1, [Is there an installed zlib?]) + +#-------------------------------------------------------------------- +# The statements below define a collection of compile flags.  This +# macro depends on the value of SHARED_BUILD, and should be called +# after SC_ENABLE_SHARED checks the configure switches. +#-------------------------------------------------------------------- + +SC_CONFIG_CFLAGS + +SC_ENABLE_SYMBOLS(bccdebug) + +AC_DEFINE(MP_PREC, 4, [Default libtommath precision.]) + +#-------------------------------------------------------------------- +#	Detect what compiler flags to set for 64-bit support. +#-------------------------------------------------------------------- + +SC_TCL_EARLY_FLAGS + +SC_TCL_64BIT_FLAGS + +#-------------------------------------------------------------------- +#	Check endianness because we can optimize comparisons of +#	Tcl_UniChar strings to memcmp on big-endian systems. +#-------------------------------------------------------------------- + +AC_C_BIGENDIAN + +#-------------------------------------------------------------------- +#	Supply substitutes for missing POSIX library procedures, or +#	set flags so Tcl uses alternate procedures. +#-------------------------------------------------------------------- + +# Check if Posix compliant getcwd exists, if not we'll use getwd. +AC_CHECK_FUNCS(getcwd, , [AC_DEFINE(USEGETWD, 1, [Is getcwd Posix-compliant?])]) +# Nb: if getcwd uses popen and pwd(1) (like SunOS 4) we should really +# define USEGETWD even if the posix getcwd exists. Add a test ? + +AC_REPLACE_FUNCS(mkstemp opendir strtol waitpid) +AC_CHECK_FUNC(strerror, , [AC_DEFINE(NO_STRERROR, 1, [Do we have strerror()])]) +AC_CHECK_FUNC(getwd, , [AC_DEFINE(NO_GETWD, 1, [Do we have getwd()])]) +AC_CHECK_FUNC(wait3, , [AC_DEFINE(NO_WAIT3, 1, [Do we have wait3()])]) +AC_CHECK_FUNC(uname, , [AC_DEFINE(NO_UNAME, 1, [Do we have uname()])]) + +if test "`uname -s`" = "Darwin" && test "${TCL_THREADS}" = 1 && \ +	test "`uname -r | awk -F. '{print [$]1}'`" -lt 7; then +    # prior to Darwin 7, realpath is not threadsafe, so don't +    # use it when threads are enabled, c.f. bug # 711232 +    ac_cv_func_realpath=no +fi +AC_CHECK_FUNC(realpath, , [AC_DEFINE(NO_REALPATH, 1, [Do we have realpath()])]) + +SC_TCL_IPV6 + +#-------------------------------------------------------------------- +#	Look for thread-safe variants of some library functions. +#-------------------------------------------------------------------- + +if test "${TCL_THREADS}" = 1; then +    SC_TCL_GETPWUID_R +    SC_TCL_GETPWNAM_R +    SC_TCL_GETGRGID_R +    SC_TCL_GETGRNAM_R +    if test "`uname -s`" = "Darwin" && \ +	    test "`uname -r | awk -F. '{print [$]1}'`" -gt 5; then +	# Starting with Darwin 6 (Mac OSX 10.2), gethostbyX +	# are actually MT-safe as they always return pointers +	# from TSD instead of static storage. +	AC_DEFINE(HAVE_MTSAFE_GETHOSTBYNAME, 1, +		[Do we have MT-safe gethostbyname() ?]) +	AC_DEFINE(HAVE_MTSAFE_GETHOSTBYADDR, 1, +		[Do we have MT-safe gethostbyaddr() ?]) + +    elif test "`uname -s`" = "HP-UX" && \ +	      test "`uname -r|sed -e 's|B\.||' -e 's|\..*$||'`" -gt 10; then +        # Starting with HPUX 11.00 (we believe), gethostbyX +        # are actually MT-safe as they always return pointers +	# from TSD instead of static storage. +	AC_DEFINE(HAVE_MTSAFE_GETHOSTBYNAME, 1, +		[Do we have MT-safe gethostbyname() ?]) +	AC_DEFINE(HAVE_MTSAFE_GETHOSTBYADDR, 1, +		[Do we have MT-safe gethostbyaddr() ?]) + +    else +	SC_TCL_GETHOSTBYNAME_R +	SC_TCL_GETHOSTBYADDR_R +    fi +fi + +#--------------------------------------------------------------------------- +#	Check for serial port interface. +# +#	termios.h is present on all POSIX systems. +#	sys/ioctl.h is almost always present, though what it contains +#	is system-specific. +#	sys/modem.h is needed on HP-UX. +#--------------------------------------------------------------------------- + +AC_CHECK_HEADERS(termios.h) +AC_CHECK_HEADERS(sys/ioctl.h) +AC_CHECK_HEADERS(sys/modem.h) + +#-------------------------------------------------------------------- +#	Include sys/select.h if it exists and if it supplies things +#	that appear to be useful and aren't already in sys/types.h. +#	This appears to be true only on the RS/6000 under AIX.  Some +#	systems like OSF/1 have a sys/select.h that's of no use, and +#	other systems like SCO UNIX have a sys/select.h that's +#	pernicious.  If "fd_set" isn't defined anywhere then set a +#	special flag. +#-------------------------------------------------------------------- + +AC_CACHE_CHECK([for fd_set in sys/types], tcl_cv_type_fd_set, [ +    AC_TRY_COMPILE([#include <sys/types.h>],[fd_set readMask, writeMask;], +	tcl_cv_type_fd_set=yes, tcl_cv_type_fd_set=no)]) +tcl_ok=$tcl_cv_type_fd_set +if test $tcl_ok = no; then +    AC_CACHE_CHECK([for fd_mask in sys/select], tcl_cv_grep_fd_mask, [ +	AC_EGREP_HEADER(fd_mask, sys/select.h, +	     tcl_cv_grep_fd_mask=present, tcl_cv_grep_fd_mask=missing)]) +    if test $tcl_cv_grep_fd_mask = present; then +	AC_DEFINE(HAVE_SYS_SELECT_H, 1, [Should we include <sys/select.h>?]) +	tcl_ok=yes +    fi +fi +if test $tcl_ok = no; then +    AC_DEFINE(NO_FD_SET, 1, [Do we have fd_set?]) +fi + +#------------------------------------------------------------------------------ +#       Find out all about time handling differences. +#------------------------------------------------------------------------------ + +SC_TIME_HANDLER + +#-------------------------------------------------------------------- +#	Some systems (e.g., IRIX 4.0.5) lack some fields in struct stat. But +#	we might be able to use fstatfs instead. Some systems (OpenBSD?) also +#	lack blkcnt_t. +#-------------------------------------------------------------------- + +if test "$ac_cv_cygwin" != "yes"; then +    AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize]) +fi +AC_CHECK_TYPES([blkcnt_t]) +AC_CHECK_FUNC(fstatfs, , [AC_DEFINE(NO_FSTATFS, 1, [Do we have fstatfs()?])]) + +#-------------------------------------------------------------------- +#       Some system have no memcmp or it does not work with 8 bit data, this +#       checks it and add memcmp.o to LIBOBJS if needed +#-------------------------------------------------------------------- + +AC_FUNC_MEMCMP + +#-------------------------------------------------------------------- +#       Some system like SunOS 4 and other BSD like systems have no memmove +#       (we assume they have bcopy instead). {The replacement define is in +#       compat/string.h} +#-------------------------------------------------------------------- + +AC_CHECK_FUNC(memmove, , [ +    AC_DEFINE(NO_MEMMOVE, 1, [Do we have memmove()?]) +    AC_DEFINE(NO_STRING_H, 1, [Do we have <string.h>?]) ]) + +#-------------------------------------------------------------------- +#	On some systems strstr is broken: it returns a pointer even even if +#	the original string is empty. +#-------------------------------------------------------------------- + +SC_TCL_CHECK_BROKEN_FUNC(strstr, [ +    extern int strstr(); +    exit(strstr("\0test", "test") ? 1 : 0); +]) + +#-------------------------------------------------------------------- +#	Check for strtoul function.  This is tricky because under some +#	versions of AIX strtoul returns an incorrect terminator +#	pointer for the string "0". +#-------------------------------------------------------------------- + +SC_TCL_CHECK_BROKEN_FUNC(strtoul, [ +    extern int strtoul(); +    char *term, *string = "0"; +    exit(strtoul(string,&term,0) != 0 || term != string+1); +]) + +#-------------------------------------------------------------------- +#	Check for the strtod function.  This is tricky because in some +#	versions of Linux strtod mis-parses strings starting with "+". +#-------------------------------------------------------------------- + +SC_TCL_CHECK_BROKEN_FUNC(strtod, [ +    extern double strtod(); +    char *term, *string = " +69"; +    exit(strtod(string,&term) != 69 || term != string+4); +]) + +#-------------------------------------------------------------------- +#	Under Solaris 2.4, strtod returns the wrong value for the +#	terminating character under some conditions.  Check for this +#	and if the problem exists use a substitute procedure +#	"fixstrtod" that corrects the error. +#-------------------------------------------------------------------- + +SC_BUGGY_STRTOD + +#-------------------------------------------------------------------- +#	Check for various typedefs and provide substitutes if +#	they don't exist. +#-------------------------------------------------------------------- + +AC_TYPE_MODE_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_TYPE_UID_T + +AC_CACHE_CHECK([for socklen_t], tcl_cv_type_socklen_t, [ +    AC_TRY_COMPILE([ +	#include <sys/types.h> +	#include <sys/socket.h> +    ],[ +    	socklen_t foo; +    ],[tcl_cv_type_socklen_t=yes],[tcl_cv_type_socklen_t=no])]) +if test $tcl_cv_type_socklen_t = no; then +    AC_DEFINE(socklen_t, int, [Define as int if socklen_t is not available]) +fi + +AC_CHECK_TYPE([intptr_t], [ +    AC_DEFINE([HAVE_INTPTR_T], 1, [Do we have the intptr_t type?])], [ +    AC_CACHE_CHECK([for pointer-size signed integer type], tcl_cv_intptr_t, [ +    for tcl_cv_intptr_t in "int" "long" "long long" none; do +	if test "$tcl_cv_intptr_t" != none; then +	    AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT], +		    [[sizeof (void *) <= sizeof ($tcl_cv_intptr_t)]])], +		[tcl_ok=yes], [tcl_ok=no]) +	    test "$tcl_ok" = yes && break; fi +    done]) +    if test "$tcl_cv_intptr_t" != none; then +	AC_DEFINE_UNQUOTED([intptr_t], [$tcl_cv_intptr_t], [Signed integer +	   type wide enough to hold a pointer.]) +    fi +]) +AC_CHECK_TYPE([uintptr_t], [ +    AC_DEFINE([HAVE_UINTPTR_T], 1, [Do we have the uintptr_t type?])], [ +    AC_CACHE_CHECK([for pointer-size unsigned integer type], tcl_cv_uintptr_t, [ +    for tcl_cv_uintptr_t in "unsigned int" "unsigned long" "unsigned long long" \ +	    none; do +	if test "$tcl_cv_uintptr_t" != none; then +	    AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT], +		    [[sizeof (void *) <= sizeof ($tcl_cv_uintptr_t)]])], +		[tcl_ok=yes], [tcl_ok=no]) +	    test "$tcl_ok" = yes && break; fi +    done]) +    if test "$tcl_cv_uintptr_t" != none; then +	AC_DEFINE_UNQUOTED([uintptr_t], [$tcl_cv_uintptr_t], [Unsigned integer +	   type wide enough to hold a pointer.]) +    fi +]) + +#-------------------------------------------------------------------- +#	If a system doesn't have an opendir function (man, that's old!) +#	then we have to supply a different version of dirent.h which +#	is compatible with the substitute version of opendir that's +#	provided.  This version only works with V7-style directories. +#-------------------------------------------------------------------- + +AC_CHECK_FUNC(opendir, , [AC_DEFINE(USE_DIRENT2_H, 1, [May we include <dirent2.h>?])]) + +#-------------------------------------------------------------------- +#	The check below checks whether <sys/wait.h> 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_CACHE_CHECK([union wait], tcl_cv_union_wait, [ +    AC_TRY_LINK([#include <sys/types.h> +#include <sys/wait.h>], [ +union wait x; +WIFEXITED(x);		/* Generates compiler error if WIFEXITED +			 * uses an int. */ +    ], tcl_cv_union_wait=yes, tcl_cv_union_wait=no)]) +if test $tcl_cv_union_wait = no; then +    AC_DEFINE(NO_UNION_WAIT, 1, [Do we have a usable 'union wait'?]) +fi + +#-------------------------------------------------------------------- +#	Check whether there is an strncasecmp function on this system. +#	This is a bit tricky because under SCO it's in -lsocket and +#	under Sequent Dynix it's in -linet. +#-------------------------------------------------------------------- + +AC_CHECK_FUNC(strncasecmp, tcl_ok=1, tcl_ok=0) +if test "$tcl_ok" = 0; then +    AC_CHECK_LIB(socket, strncasecmp, tcl_ok=1, tcl_ok=0) +fi +if test "$tcl_ok" = 0; then +    AC_CHECK_LIB(inet, strncasecmp, tcl_ok=1, tcl_ok=0) +fi +if test "$tcl_ok" = 0; then +    AC_LIBOBJ([strncasecmp]) +    USE_COMPAT=1 +fi + +#-------------------------------------------------------------------- +#	The code below deals with several issues related to gettimeofday: +#	1. Some systems don't provide a gettimeofday function at all +#	   (set NO_GETTOD if this is the case). +#	2. See if gettimeofday is declared in the <sys/time.h> header file. +#	   if not, set the GETTOD_NOT_DECLARED flag so that tclPort.h can +#	   declare it. +#-------------------------------------------------------------------- + +AC_CHECK_FUNC(gettimeofday,[],[ +    AC_DEFINE(NO_GETTOD, 1, [Do we have gettimeofday()?]) +]) +AC_CACHE_CHECK([for gettimeofday declaration], tcl_cv_grep_gettimeofday, [ +    AC_EGREP_HEADER(gettimeofday, sys/time.h, +	tcl_cv_grep_gettimeofday=present, tcl_cv_grep_gettimeofday=missing)]) +if test $tcl_cv_grep_gettimeofday = missing ; then +    AC_DEFINE(GETTOD_NOT_DECLARED, 1, [Is gettimeofday() actually declared in <sys/time.h>?]) +fi + +#-------------------------------------------------------------------- +#	The following code checks to see whether it is possible to get +#	signed chars on this platform.  This is needed in order to +#	properly generate sign-extended ints from character values. +#-------------------------------------------------------------------- + +AC_C_CHAR_UNSIGNED +AC_CACHE_CHECK([signed char declarations], tcl_cv_char_signed, [ +    AC_TRY_COMPILE(, [ +	signed char *p; +	p = 0; +	], tcl_cv_char_signed=yes, tcl_cv_char_signed=no)]) +if test $tcl_cv_char_signed = yes; then +    AC_DEFINE(HAVE_SIGNED_CHAR, 1, [Are characters signed?]) +fi + +#-------------------------------------------------------------------- +#  Does putenv() copy or not?  We need to know to avoid memory leaks. +#-------------------------------------------------------------------- + +AC_CACHE_CHECK([for a putenv() that copies the buffer], tcl_cv_putenv_copy, [ +    AC_TRY_RUN([ +	#include <stdlib.h> +	#define OURVAR "havecopy=yes" +	int main (int argc, char *argv[]) +	{ +	    char *foo, *bar; +	    foo = (char *)strdup(OURVAR); +	    putenv(foo); +	    strcpy((char *)(strchr(foo, '=') + 1), "no"); +	    bar = getenv("havecopy"); +	    if (!strcmp(bar, "no")) { +		/* doesnt copy */ +		return 0; +	    } else { +		/* does copy */ +		return 1; +	    } +	} +    ], +    tcl_cv_putenv_copy=no, +    tcl_cv_putenv_copy=yes, +    tcl_cv_putenv_copy=no)]) +if test $tcl_cv_putenv_copy = yes; then +    AC_DEFINE(HAVE_PUTENV_THAT_COPIES, 1, +	[Does putenv() copy strings or incorporate them by reference?]) +fi + +#-------------------------------------------------------------------- +# Check for support of nl_langinfo function +#-------------------------------------------------------------------- + +SC_ENABLE_LANGINFO + +#-------------------------------------------------------------------- +# Check for support of chflags and mkstemps functions +#-------------------------------------------------------------------- + +AC_CHECK_FUNCS(chflags mkstemps) + +#-------------------------------------------------------------------- +# Check for support of isnan() function or macro +#-------------------------------------------------------------------- + +AC_CACHE_CHECK([isnan], tcl_cv_isnan, [ +    AC_TRY_LINK([#include <math.h>], [ +isnan(0.0);			/* Generates an error if isnan is missing */ +], tcl_cv_isnan=yes, tcl_cv_isnan=no)]) +if test $tcl_cv_isnan = no; then +    AC_DEFINE(NO_ISNAN, 1, [Do we have a usable 'isnan'?]) +fi + +#-------------------------------------------------------------------- +# Darwin specific API checks and defines +#-------------------------------------------------------------------- + +if test "`uname -s`" = "Darwin" ; then +    AC_CHECK_FUNCS(getattrlist) +    AC_CHECK_HEADERS(copyfile.h) +    AC_CHECK_FUNCS(copyfile) +    if test $tcl_corefoundation = yes; then +	AC_CHECK_HEADERS(libkern/OSAtomic.h) +	AC_CHECK_FUNCS(OSSpinLockLock) +    fi +    AC_DEFINE(USE_VFORK, 1, [Should we use vfork() instead of fork()?]) +    AC_DEFINE(TCL_DEFAULT_ENCODING, "utf-8", +	[Are we to override what our default encoding is?]) +    AC_DEFINE(TCL_LOAD_FROM_MEMORY, 1, +	[Can this platform load code from memory?]) +    AC_DEFINE(TCL_WIDE_CLICKS, 1, +	[Does this platform have wide high-resolution clicks?]) +    AC_CHECK_HEADERS(AvailabilityMacros.h) +    if test "$ac_cv_header_AvailabilityMacros_h" = yes; then +	AC_CACHE_CHECK([if weak import is available], tcl_cv_cc_weak_import, [ +	    hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" +	    AC_TRY_LINK([ +		    #ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +		    #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1020 +		    #error __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1020 +		    #endif +		    #elif MAC_OS_X_VERSION_MIN_REQUIRED < 1020 +		    #error MAC_OS_X_VERSION_MIN_REQUIRED < 1020 +		    #endif +		    int rand(void) __attribute__((weak_import)); +		], [rand();], +		tcl_cv_cc_weak_import=yes, tcl_cv_cc_weak_import=no) +	    CFLAGS=$hold_cflags]) +	if test $tcl_cv_cc_weak_import = yes; then +	    AC_DEFINE(HAVE_WEAK_IMPORT, 1, [Is weak import available?]) +	fi +	AC_CACHE_CHECK([if Darwin SUSv3 extensions are available], +	    tcl_cv_cc_darwin_c_source, [ +	    hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" +	    AC_TRY_COMPILE([ +		    #ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +		    #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050 +		    #error __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050 +		    #endif +		    #elif MAC_OS_X_VERSION_MIN_REQUIRED < 1050 +		    #error MAC_OS_X_VERSION_MIN_REQUIRED < 1050 +		    #endif +		    #define _DARWIN_C_SOURCE 1 +		    #include <sys/cdefs.h> +		],,tcl_cv_cc_darwin_c_source=yes, tcl_cv_cc_darwin_c_source=no) +	    CFLAGS=$hold_cflags]) +	if test $tcl_cv_cc_darwin_c_source = yes; then +	    AC_DEFINE(_DARWIN_C_SOURCE, 1, +		    [Are Darwin SUSv3 extensions available?]) +	fi +    fi +    # Build .bundle dltest binaries in addition to .dylib +    DLTEST_LD='${CC} -bundle -Wl,-w ${CFLAGS} ${LDFLAGS}' +    DLTEST_SUFFIX=".bundle" +else +    DLTEST_LD='${SHLIB_LD}' +    DLTEST_SUFFIX="" +fi + +#-------------------------------------------------------------------- +#	Check for support of fts functions (readdir replacement) +#-------------------------------------------------------------------- + +AC_CACHE_CHECK([for fts], tcl_cv_api_fts, [ +    AC_TRY_LINK([ +	    #include <sys/param.h> +	    #include <sys/stat.h> +	    #include <fts.h> +	], [ +	    char*const p[2] = {"/", NULL}; +	    FTS *f = fts_open(p, FTS_PHYSICAL|FTS_NOCHDIR|FTS_NOSTAT, NULL); +	    FTSENT *e = fts_read(f); fts_close(f); +	], tcl_cv_api_fts=yes, tcl_cv_api_fts=no)]) +if test $tcl_cv_api_fts = yes; then +    AC_DEFINE(HAVE_FTS, 1, [Do we have fts functions?]) +fi + +#-------------------------------------------------------------------- +#	The statements below check for systems where POSIX-style non-blocking +#	I/O (O_NONBLOCK) doesn't work or is unimplemented. On these systems +#	(mostly older ones), use the old BSD-style FIONBIO approach instead. +#-------------------------------------------------------------------- + +SC_BLOCKING_STYLE + +#------------------------------------------------------------------------ + +AC_MSG_CHECKING([whether to use dll unloading]) +AC_ARG_ENABLE(dll-unloading, +    AC_HELP_STRING([--enable-dll-unloading], +	[enable the 'unload' command (default: on)]), +    [tcl_ok=$enableval], [tcl_ok=yes]) +if test $tcl_ok = yes; then +    AC_DEFINE(TCL_UNLOAD_DLLS, 1, [Do we allow unloading of shared libraries?]) +fi +AC_MSG_RESULT([$tcl_ok]) + +#------------------------------------------------------------------------ +#	Check whether the timezone data is supplied by the OS or has +#	to be installed by Tcl. The default is autodetection, but can +#	be overriden on the configure command line either way. +#------------------------------------------------------------------------ + +AC_MSG_CHECKING([for timezone data]) +AC_ARG_WITH(tzdata, +    AC_HELP_STRING([--with-tzdata], +	[install timezone data (default: autodetect)]), +    [tcl_ok=$withval], [tcl_ok=auto]) +# +# Any directories that get added here must also be added to the +# search path in ::tcl::clock::Initialize (library/clock.tcl). +# +case $tcl_ok in +    no) +	AC_MSG_RESULT([supplied by OS vendor]) +    ;; +    yes) +	# nothing to do here +    ;; +    auto*) +	AC_CACHE_VAL([tcl_cv_dir_zoneinfo], [ +	for dir in /usr/share/zoneinfo \ +		/usr/share/lib/zoneinfo \ +		/usr/lib/zoneinfo +	do +		if test -f $dir/UTC -o -f $dir/GMT +		then +			tcl_cv_dir_zoneinfo="$dir" +			break +		fi +	done]) +	if test -n "$tcl_cv_dir_zoneinfo"; then +	    tcl_ok=no +	    AC_MSG_RESULT([$dir]) +	else +	    tcl_ok=yes +	fi +    ;; +    *) +	AC_MSG_ERROR([invalid argument: $tcl_ok]) +    ;; +esac +if test $tcl_ok = yes +then +    AC_MSG_RESULT([supplied by Tcl]) +    INSTALL_TZDATA=install-tzdata +fi + +#-------------------------------------------------------------------- +#	DTrace support +#-------------------------------------------------------------------- + +AC_ARG_ENABLE(dtrace, +    AC_HELP_STRING([--enable-dtrace], +	[build with DTrace support (default: off)]), +    [tcl_ok=$enableval], [tcl_ok=no]) +if test $tcl_ok = yes; then +    AC_CHECK_HEADER(sys/sdt.h, [tcl_ok=yes], [tcl_ok=no]) +fi +if test $tcl_ok = yes; then +    AC_PATH_PROG(DTRACE, dtrace,, [$PATH:/usr/sbin]) +    test -z "$ac_cv_path_DTRACE" && tcl_ok=no +fi +AC_MSG_CHECKING([whether to enable DTrace support]) +MAKEFILE_SHELL='/bin/sh' +if test $tcl_ok = yes; then +    AC_DEFINE(USE_DTRACE, 1, [Are we building with DTrace support?]) +    DTRACE_SRC="\${DTRACE_SRC}" +    DTRACE_HDR="\${DTRACE_HDR}" +    if test "`uname -s`" != "Darwin" ; then +	DTRACE_OBJ="\${DTRACE_OBJ}" +	if test "`uname -s`" = "SunOS" -a "$SHARED_BUILD" = "0" ; then +	    # Need to create an intermediate object file to ensure tclDTrace.o +	    # gets included when linking against the static tcl library. +	    STLIB_LD='stlib_ld () { /usr/ccs/bin/ld -r -o $${1%.a}.o "$${@:2}" && '"${STLIB_LD}"' $${1} $${1%.a}.o ; } && stlib_ld' +	    MAKEFILE_SHELL='/bin/bash' +	    # Force use of Sun ar and ranlib, the GNU versions choke on +	    # tclDTrace.o and the combined object file above. +	    AR='/usr/ccs/bin/ar' +	    RANLIB='/usr/ccs/bin/ranlib' +	fi +    fi +fi +AC_MSG_RESULT([$tcl_ok]) + +#-------------------------------------------------------------------- +# The check below checks whether the cpuid instruction is usable. +#-------------------------------------------------------------------- + +AC_CACHE_CHECK([whether the cpuid instruction is usable], tcl_cv_cpuid, [ +    AC_TRY_LINK(, [ +	int index,regsPtr[4]; +    __asm__ __volatile__("mov %%ebx, %%edi     \n\t" +                 "cpuid            \n\t" +                 "mov %%ebx, %%esi   \n\t" +                 "mov %%edi, %%ebx  \n\t" +                 : "=a"(regsPtr[0]), "=S"(regsPtr[1]), "=c"(regsPtr[2]), "=d"(regsPtr[3]) +                 : "a"(index) : "edi"); +    ], tcl_cv_cpuid=yes, tcl_cv_cpuid=no)]) +if test $tcl_cv_cpuid = yes; then +    AC_DEFINE(HAVE_CPUID, 1, [Is the cpuid instruction usable?]) +fi + +#-------------------------------------------------------------------- +#	The statements below define a collection of symbols related to +#	building libtcl as a shared library instead of a static library. +#-------------------------------------------------------------------- + +TCL_UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX} +TCL_SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX} +eval "TCL_LIB_FILE=libtcl${LIB_SUFFIX}" + +# tclConfig.sh needs a version of the _LIB_SUFFIX that has been eval'ed +# since on some platforms TCL_LIB_FILE contains shell escapes. +# (See also: TCL_TRIM_DOTS). + +eval "TCL_LIB_FILE=${TCL_LIB_FILE}" + +TCL_LIBRARY='$(prefix)/lib/tcl$(VERSION)' +PRIVATE_INCLUDE_DIR='$(includedir)' +HTML_DIR='$(DISTDIR)/html' + +# 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. + +if test "`uname -s`" = "Darwin" ; then +    SC_ENABLE_FRAMEWORK +    TCL_SHLIB_LD_EXTRAS="-compatibility_version ${TCL_VERSION} -current_version ${TCL_VERSION}`echo ${TCL_PATCH_LEVEL} | awk ['{match($0, "\\\.[0-9]+"); print substr($0,RSTART,RLENGTH)}']`" +    TCL_SHLIB_LD_EXTRAS="${TCL_SHLIB_LD_EXTRAS}"' -install_name "${DYLIB_INSTALL_DIR}"/${TCL_LIB_FILE}' +    echo "$LDFLAGS " | grep -q -- '-prebind ' && TCL_SHLIB_LD_EXTRAS="${TCL_SHLIB_LD_EXTRAS}"' -seg1addr 0xa000000' +    TCL_SHLIB_LD_EXTRAS="${TCL_SHLIB_LD_EXTRAS}"' -sectcreate __TEXT __info_plist Tcl-Info.plist' +    EXTRA_TCLSH_LIBS='-sectcreate __TEXT __info_plist Tclsh-Info.plist' +    EXTRA_APP_CC_SWITCHES='-mdynamic-no-pic' +    AC_CONFIG_FILES([Tcl-Info.plist:../macosx/Tcl-Info.plist.in Tclsh-Info.plist:../macosx/Tclsh-Info.plist.in]) +    TCL_YEAR="`date +%Y`" +fi + +if test "$FRAMEWORK_BUILD" = "1" ; then +    AC_DEFINE(TCL_FRAMEWORK, 1, [Is Tcl built as a framework?]) +    # Construct a fake local framework structure to make linking with +    # '-framework Tcl' and running of tcltest work +    AC_CONFIG_COMMANDS([Tcl.framework], [n=Tcl && +        f=$n.framework && v=Versions/$VERSION && +        rm -rf $f && mkdir -p $f/$v/Resources && +        ln -s $v/$n $v/Resources $f && ln -s ../../../$n $f/$v && +        ln -s ../../../../$n-Info.plist $f/$v/Resources/Info.plist && +        unset n f v +    ], VERSION=${TCL_VERSION}) +    LD_LIBRARY_PATH_VAR="DYLD_FRAMEWORK_PATH" +    # default install directory for bundled packages +    if test "${libdir}" = '${exec_prefix}/lib' -o "`basename ${libdir}`" = 'Frameworks'; then +        PACKAGE_DIR="/Library/Tcl" +    else +        PACKAGE_DIR="$libdir" +    fi +    if test "${libdir}" = '${exec_prefix}/lib'; then +        # override libdir default +        libdir="/Library/Frameworks" +    fi +    TCL_LIB_FILE="Tcl" +    TCL_LIB_FLAG="-framework Tcl" +    TCL_BUILD_LIB_SPEC="-F`pwd | sed -e 's/ /\\\\ /g'` -framework Tcl" +    TCL_LIB_SPEC="-F${libdir} -framework Tcl" +    libdir="${libdir}/Tcl.framework/Versions/\${VERSION}" +    TCL_LIBRARY="${libdir}/Resources/Scripts" +    includedir="${libdir}/Headers" +    PRIVATE_INCLUDE_DIR="${libdir}/PrivateHeaders" +    HTML_DIR="${libdir}/Resources/Documentation/Reference/Tcl" +    EXTRA_INSTALL="install-private-headers html-tcl" +    EXTRA_BUILD_HTML='@ln -fs contents.htm "$(HTML_INSTALL_DIR)"/TclTOC.html' +    EXTRA_INSTALL_BINARIES='@echo "Installing Info.plist to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && $(INSTALL_DATA) Tcl-Info.plist "$(LIB_INSTALL_DIR)/Resources/Info.plist"' +    EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing license.terms to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA) "$(TOP_DIR)/license.terms" "$(LIB_INSTALL_DIR)/Resources"' +    EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Finalizing Tcl.framework" && rm -f "$(LIB_INSTALL_DIR)/../Current" && ln -s "$(VERSION)" "$(LIB_INSTALL_DIR)/../Current" && for f in "$(LIB_FILE)" tclConfig.sh Resources Headers PrivateHeaders; do rm -f "$(LIB_INSTALL_DIR)/../../$$f" && ln -s "Versions/Current/$$f" "$(LIB_INSTALL_DIR)/../.."; done && f="$(STUB_LIB_FILE)" && rm -f "$(LIB_INSTALL_DIR)/../../$$f" && ln -s "Versions/$(VERSION)/$$f" "$(LIB_INSTALL_DIR)/../.."' +    # Don't use AC_DEFINE for the following as the framework version define +    # needs to go into the Makefile even when using autoheader, so that we +    # can pick up a potential make override of VERSION. Also, don't put this +    # into CFLAGS as it should not go into tclConfig.sh +    EXTRA_CC_SWITCHES='-DTCL_FRAMEWORK_VERSION=\"$(VERSION)\"' +else +    # libdir must be a fully qualified path and not ${exec_prefix}/lib +    eval libdir="$libdir" +    # default install directory for bundled packages +    PACKAGE_DIR="$libdir" +    if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then +        TCL_LIB_FLAG="-ltcl${TCL_VERSION}" +    else +        TCL_LIB_FLAG="-ltcl`echo ${TCL_VERSION} | tr -d .`" +    fi +    TCL_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TCL_LIB_FLAG}" +    TCL_LIB_SPEC="-L${libdir} ${TCL_LIB_FLAG}" +fi +VERSION='${VERSION}' +eval "CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX}" +eval "CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX}" +VERSION=${TCL_VERSION} + +#-------------------------------------------------------------------- +#	The statements below define the symbol TCL_PACKAGE_PATH, which +#	gives a list of directories that may contain packages.  The list +#	consists of one directory for machine-dependent binaries and +#	another for platform-independent scripts. +#-------------------------------------------------------------------- + +if test "$FRAMEWORK_BUILD" = "1" ; then +    test -z "$TCL_PACKAGE_PATH" && \ +	TCL_PACKAGE_PATH="~/Library/Tcl /Library/Tcl /System/Library/Tcl ~/Library/Frameworks /Library/Frameworks /System/Library/Frameworks" +    test -z "$TCL_MODULE_PATH"  && \ +	TCL_MODULE_PATH="~/Library/Tcl /Library/Tcl /System/Library/Tcl" +elif test "$prefix/lib" != "$libdir"; then +    TCL_PACKAGE_PATH="${libdir} ${prefix}/lib ${TCL_PACKAGE_PATH}" +else +    TCL_PACKAGE_PATH="${prefix}/lib ${TCL_PACKAGE_PATH}" +fi + +#-------------------------------------------------------------------- +#       The statements below define various symbols relating to Tcl +#       stub support. +#-------------------------------------------------------------------- + +# Replace ${VERSION} with contents of ${TCL_VERSION} +# double-eval to account for TCL_TRIM_DOTS. +# +eval "TCL_STUB_LIB_FILE=libtclstub${TCL_UNSHARED_LIB_SUFFIX}" +eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" +eval "TCL_STUB_LIB_DIR=${libdir}" + +if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then +    TCL_STUB_LIB_FLAG="-ltclstub${TCL_VERSION}" +else +    TCL_STUB_LIB_FLAG="-ltclstub`echo ${TCL_VERSION} | tr -d .`" +fi + +TCL_BUILD_STUB_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" +TCL_STUB_LIB_SPEC="-L${TCL_STUB_LIB_DIR} ${TCL_STUB_LIB_FLAG}" +TCL_BUILD_STUB_LIB_PATH="`pwd`/${TCL_STUB_LIB_FILE}" +TCL_STUB_LIB_PATH="${TCL_STUB_LIB_DIR}/${TCL_STUB_LIB_FILE}" + +# Install time header dir can be set via --includedir +eval "TCL_INCLUDE_SPEC=\"-I${includedir}\"" + +#------------------------------------------------------------------------ +# tclConfig.sh refers to this by a different name +#------------------------------------------------------------------------ + +TCL_SHARED_BUILD=${SHARED_BUILD} + +AC_SUBST(TCL_VERSION) +AC_SUBST(TCL_MAJOR_VERSION) +AC_SUBST(TCL_MINOR_VERSION) +AC_SUBST(TCL_PATCH_LEVEL) +AC_SUBST(TCL_YEAR) +AC_SUBST(PKG_CFG_ARGS) + +AC_SUBST(TCL_LIB_FILE) +AC_SUBST(TCL_LIB_FLAG) +AC_SUBST(TCL_LIB_SPEC) +AC_SUBST(TCL_STUB_LIB_FILE) +AC_SUBST(TCL_STUB_LIB_FLAG) +AC_SUBST(TCL_STUB_LIB_SPEC) +AC_SUBST(TCL_STUB_LIB_PATH) +AC_SUBST(TCL_INCLUDE_SPEC) +AC_SUBST(TCL_BUILD_STUB_LIB_SPEC) +AC_SUBST(TCL_BUILD_STUB_LIB_PATH) + +AC_SUBST(TCL_SRC_DIR) +AC_SUBST(CFG_TCL_SHARED_LIB_SUFFIX) +AC_SUBST(CFG_TCL_UNSHARED_LIB_SUFFIX) + +AC_SUBST(TCL_SHARED_BUILD) +AC_SUBST(LD_LIBRARY_PATH_VAR) + +AC_SUBST(TCL_BUILD_LIB_SPEC) + +AC_SUBST(TCL_LIB_VERSIONS_OK) +AC_SUBST(TCL_SHARED_LIB_SUFFIX) +AC_SUBST(TCL_UNSHARED_LIB_SUFFIX) + +AC_SUBST(TCL_HAS_LONGLONG) + +AC_SUBST(INSTALL_TZDATA) + +AC_SUBST(DTRACE_SRC) +AC_SUBST(DTRACE_HDR) +AC_SUBST(DTRACE_OBJ) +AC_SUBST(MAKEFILE_SHELL) + +AC_SUBST(BUILD_DLTEST) +AC_SUBST(TCL_PACKAGE_PATH) +AC_SUBST(TCL_MODULE_PATH) + +AC_SUBST(TCL_LIBRARY) +AC_SUBST(PRIVATE_INCLUDE_DIR) +AC_SUBST(HTML_DIR) +AC_SUBST(PACKAGE_DIR) + +AC_SUBST(EXTRA_CC_SWITCHES) +AC_SUBST(EXTRA_APP_CC_SWITCHES) +AC_SUBST(EXTRA_INSTALL) +AC_SUBST(EXTRA_INSTALL_BINARIES) +AC_SUBST(EXTRA_BUILD_HTML) +AC_SUBST(EXTRA_TCLSH_LIBS) + +AC_SUBST(DLTEST_LD) +AC_SUBST(DLTEST_SUFFIX) + +dnl	Disable the automake-friendly normalization of LIBOBJS +dnl	performed by autoconf 2.53 and later.  It's not correct for us. +define([_AC_LIBOBJS_NORMALIZE],[]) +AC_CONFIG_FILES([ +    Makefile:../unix/Makefile.in +    dltest/Makefile:../unix/dltest/Makefile.in +    tclConfig.sh:../unix/tclConfig.sh.in +    tcl.pc:../unix/tcl.pc.in +]) +AC_OUTPUT + +dnl Local Variables: +dnl mode: autoconf +dnl End: | 
