Index: configure.ac =================================================================== diff -u --- configure.ac (revision 0) +++ configure.ac (revision 22b50004f421fa78b868079b268f8f5a48c84538) @@ -0,0 +1,467 @@ + +#-------------------------------------------------------------------- +# Sample configure.in for Tcl Extensions. The only places you should +# need to modify this file are marked by the string __CHANGE__ +#-------------------------------------------------------------------- + +#-------------------------------------------------------------------- +# __CHANGE__ +# This very first macro is used to verify that the configure script can +# find the sources. The argument to AC_INIT should be a unique filename +# for this package, and can be a relative path, such as: +# +#-------------------------------------------------------------------- +define(NsfVersion, 2.0b4) +AC_INIT([nsf], [NsfVersion]) + +#-------------------------------------------------------------------- +# Call TEA_INIT as the first TEA_ macro to set up initial vars. +# This will define a ${TEA_PLATFORM} variable == "unix" or "windows". +#-------------------------------------------------------------------- + +TEA_INIT([3.9]) +AC_CONFIG_AUX_DIR(config) + +#-------------------------------------------------------------------- +# specify some extra flags +#-------------------------------------------------------------------- +# According to http://www.gnu.org/software/autoconf/manual/autoconf.html +# - "with" is for external software (optional packages) +# - "enable" is for optional features +# +AC_ARG_WITH(aolserver3, + AC_HELP_STRING([--with-aolserver3=AOL_SERVER_DIR], + [build an AOLserver 3 module; + point to directory containing aolsever/include (default: off)]), + [with_aol3=$withval], [with_aol3=no]) +AC_ARG_WITH(dtrace, + AC_HELP_STRING([--with-dtrace], [build nsf with dtrace (default: without)]), + [with_dtrace=$withval], [with_dtrace=no]) +AC_ARG_ENABLE(profile, + AC_HELP_STRING([--enable-profile], [build nsf with profile support (default: disabled)]), + [enable_profile=$enableval], [enable_profile=no]) +AC_ARG_ENABLE(memcount, + AC_HELP_STRING([--enable-memcount=yes|trace], + [build nsf with memcount debug support (default: disabled)]), + [enable_memcount=$enableval], [enable_memcount=no]) +AC_ARG_ENABLE(development, + AC_HELP_STRING([--enable-development], + [build nsf with development support (intensive runtime checking, etc.; default: disabled)]), + [enable_development=$enableval], [enable_development=no]) +AC_ARG_ENABLE(assertions, + AC_HELP_STRING([--enable-assertions], + [build nsf with assertion support (default: enabled)]), + [enable_assertions=$enableval], [enable_assertions=yes]) +AC_ARG_ENABLE(assemble, + AC_HELP_STRING([--enable-assemble=yes|label|call], + [build nsf with assemble support (default: disabled)]), + [enable_assemble=$enableval], [enable_assemble=no]) + +subdirs="" + +test_actiweb="" +libdirs_actiweb="" +apps_actiweb="" + +AC_SUBST(subdirs) + + +#-------------------------------------------------------------------- +# __CHANGE__ +# Set your package name and version numbers here. The NODOT_VERSION is +# required for constructing the library name on systems that don't like +# dots in library names (Windows). The VERSION variable is used on the +# other systems. +#-------------------------------------------------------------------- + +NSF_MAJOR_VERSION=2 +NSF_MINOR_VERSION=0 + +NSF_PATCH_LEVEL=$PACKAGE_VERSION + +NSF_VERSION=${NSF_MAJOR_VERSION}.${NSF_MINOR_VERSION} +NODOT_VERSION=${NSF_MAJOR_VERSION}${NSF_MINOR_VERSION} + +AC_SUBST(NSF_VERSION) +AC_SUBST(NSF_MAJOR_VERSION) +AC_SUBST(NSF_MINOR_VERSION) +AC_SUBST(NSF_PATCH_LEVEL) + +echo "Configuring next Version $PACKAGE_VERSION" + +#-------------------------------------------------------------------- +# Load the tclConfig.sh file +#-------------------------------------------------------------------- + +TEA_PATH_TCLCONFIG +TEA_LOAD_TCLCONFIG + +AC_CHECK_FUNCS([strnstr]) + +#-------------------------------------------------------------------- +# check for TK +#-------------------------------------------------------------------- + + +#-------------------------------------------------------------------- +# 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 + +#-------------------------------------------------------------------- +# check for extra flags +# +# FORCE_NO_STUBS is deactivated for now +if ! test "$with_aol3" = "no"; then + echo "Pre-configuring AOL-Server (nsf)" + AOL_DEFINES="-DAOL_SERVER -DUSE_TCL8X -I$with_aol3/include -I$TCL_SRC_DIR/generic" + FORCE_NO_STUBS=1 +else + AOL_DEFINES="" + FORCE_NO_STUBS=0 +fi + +# set the default aol_prefix +aol_prefix="/usr/local/aolserver" +# if we have under ${prefix} either modules/tcl/init.tcl (aolserver +# style) or modules/tcl/init.tcl (naviserver style), then use +# ${prefix} as aol_prefix (path for the installation of +# aolserver/naviserver specific tcl files). +if test -f "${prefix}/modules/tcl/init.tcl" ; then + aol_prefix="${prefix}" +else + if test -f "${prefix}/tcl/init.tcl" ; then + aol_prefix="${prefix}" + fi +fi +AC_SUBST(aol_prefix) + +#-------------------------------------------------------------------- +# check for tclCompile.h (needed, when compiled without full source) +if test -f "$TCL_SRC_DIR/generic/tclCompile.h"; then + AC_DEFINE(HAVE_TCL_COMPILE_H, 1, [Do we have tclCompile.h installed?]) +fi + +if test "$enable_assertions" = yes; then + AC_DEFINE(NSF_WITH_ASSERTIONS, 1, [Are we building with assertions support?]) +fi + +if test "$enable_profile" = yes; then + AC_DEFINE(NSF_PROFILE, 1, [Are we building with profile support?]) +fi + +if test "$enable_development" = yes; then + AC_DEFINE(NSF_DEVELOPMENT, 1, [Are we building with development support?]) +fi + +if test "$enable_memcount" = yes; then + AC_DEFINE(NSF_MEM_COUNT, 1, [Are we building with memcount support?]) +fi +if test "$enable_memcount" = trace; then + AC_DEFINE(NSF_MEM_TRACE, 1, [Are we building with memcount tracing support?]) +fi + +if test "$enable_assemble" = yes; then + AC_DEFINE(NSF_ASSEMBLE, 1, [Are we building with assembly support?]) +fi +if test "$enable_assemble" = call; then + AC_DEFINE(NSF_ASSEMBLE_CT, 1, [Are we building with assembly call threading support?]) +fi +if test "$enable_assemble" = call; then + AC_DEFINE(NSF_ASSEMBLE_LT, 1, [Are we building with assembly label threading support?]) +fi + +DTRACE_OBJ= +if test "$with_dtrace" = yes; then + AC_DEFINE(NSF_DTRACE, 1, [Are we building with DTrace support?]) + # Under Mac OS X, we need no nsfDTrace.o + if test "`uname -s`" != "Darwin" ; then + DTRACE_OBJ=nsfDTrace.o + fi +fi +AC_SUBST(DTRACE_OBJ) + +#----------------------------------------------------------------------- +# __CHANGE__ +# 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([nsf.c nsfError.c nsfObjectData.c nsfProfile.c \ + nsfDebug.c nsfUtil.c nsfObj.c nsfPointer.c \ + nsfShadow.c nsfCompile.c aolstub.c nsfStubInit.c]) +TEA_ADD_HEADERS([generic/nsf.h generic/nsfInt.h generic/nsfDecls.h generic/nsfIntDecls.h]) +TEA_ADD_INCLUDES([]) +TEA_ADD_LIBS([]) +TEA_ADD_CFLAGS([-DNSF_VERSION=\\\"$NSF_VERSION\\\" -DNSF_PATCHLEVEL=\\\"$NSF_PATCH_LEVEL\\\" \ + $AOL_DEFINES ]) +TEA_ADD_STUB_SOURCES([nsfStubLib.c]) +TEA_ADD_TCL_SOURCES([]) + +#-------------------------------------------------------------------- +# __CHANGE__ +# +# You can add more files to clean if your extension creates any extra +# files by extending CLEANFILES. +# Add pkgIndex.tcl if it is generated in the Makefile instead of ./configure +# and change Makefile.in to move it from CONFIG_CLEAN_FILES to BINARIES var. +# +# A few miscellaneous platform-specific items: +# TEA_ADD_* any platform specific compiler/build info here. +#-------------------------------------------------------------------- + +if test "${TEA_PLATFORM}" = "windows" ; then + if test "$GCC" != "yes" ; then + AC_DEFINE(VISUAL_CC) + fi + CLEANFILES="*.lib *.dll *.exp *.ilk *.pdb vc50.pch vc60.pch " + #TEA_ADD_SOURCES([win/winFile.c]) + #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) +else + CLEANFILES="*.a *.so *~ core gmon.out" + #TEA_ADD_SOURCES([unix/unixFile.c]) + #TEA_ADD_LIBS([-lsuperfly]) +fi +CLEANFILES="$CLEANFILES *.${OBJEXT} pkgIndex.tcl" + +#-------------------------------------------------------------------- +# __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 done AFTER calling TEA_PATH_TCLCONFIG/TEA_LOAD_TCLCONFIG +# so that we can extract TCL_SRC_DIR from the config file (in the case +# of private headers +#-------------------------------------------------------------------- + +#TEA_PUBLIC_TCL_HEADERS +TEA_PRIVATE_TCL_HEADERS + +#TEA_PUBLIC_TK_HEADERS +#TEA_PRIVATE_TK_HEADERS +#TEA_PATH_X + +#-------------------------------------------------------------------- +# Check whether --enable-threads or --disable-threads was given. +#-------------------------------------------------------------------- + +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. +#-------------------------------------------------------------------- + +TEA_CONFIG_CFLAGS + +# Without the following two eval statements, NSF_SHARED_LIB_SUFFIX +# in nsfConfig.sh has $PACKAGE_VERSION unresolved. When another +# app links against nsf, the PACKAGE_VERSIONs are confused. +# +# Without the first eval, we get +# NSF_SHARED_LIB_SUFFIX=${PACKAGE_VERSION}\$\{DBGX\}${SHLIB_SUFFIX} +# NSF_UNSHARED_LIB_SUFFIX=${PACKAGE_VERSION}\$\{DBGX\}.a +# +# after the first eval, we get +# NSF_SHARED_LIB_SUFFIX=1.2.1${DBGX}.so +# NSF_UNSHARED_LIB_SUFFIX=1.2.1${DBGX}.a +# after the second eval, all variables are resolved. + + +eval "SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX}" +eval "UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX}" + +#eval "SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX}" +#eval "UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX}" + +#-------------------------------------------------------------------- +# 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, 1, [Use Tcl stubs]) + +#-------------------------------------------------------------------- +# 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. +#-------------------------------------------------------------------- + +TEA_PROG_TCLSH + +# make this available, for such as nsfConfig.sh +NSF_COMPATIBLE_TCLSH=${TCLSH_PROG} +AC_SUBST(NSF_COMPATIBLE_TCLSH) + +# +# Next Scripting specific configs +# + +if test "${TEA_PLATFORM}" != "windows" ; then + +NSF_BUILD_LIB_SPEC="-L`pwd` -lnsf${PACKAGE_VERSION}" +NSF_LIB_SPEC="-L${pkglibdir} -lnsf${PACKAGE_VERSION}" + +# If someone wants to build without stubs, as it was the case for +# earlier Tcl versions, we keep the following block as a reference. +if test "${TCL_MAJOR_VERSION}" = "8" -a "${TCL_MINOR_VERSION}" = "0"; then + NSF_BUILD_STUB_LIB_PATH="" + NSF_STUB_LIB_PATH="" + NSF_BUILD_STUB_LIB_SPEC="" + NSF_STUB_LIB_SPEC="" +else + NSF_BUILD_STUB_LIB_PATH="`pwd`/${PKG_STUB_LIB_FILE}" + NSF_STUB_LIB_PATH="${pkglibdir}/${PKG_STUB_LIB_FILE}" + NSF_BUILD_STUB_LIB_SPEC="-L`pwd` -lnsfstub${PACKAGE_VERSION}" + NSF_STUB_LIB_SPEC="-L${pkglibdir} -lnsfstub${PACKAGE_VERSION}" + AC_DEFINE(COMPILE_NSF_STUBS) +fi + +else + +NSF_BUILD_LIB_SPEC="`pwd`/${PKG_LIB_FILE}" +NSF_LIB_SPEC="${pkglibdir}/${PKG_LIB_FILE}" +NSF_BUILD_STUB_LIB_PATH="`pwd`/${PKG_STUB_LIB_FILE}" +NSF_STUB_LIB_PATH="${pkglibdir}/${PKG_STUB_LIB_FILE}" +NSF_BUILD_STUB_LIB_SPEC="`pwd`/${PKG_STUB_LIB_FILE}" +NSF_STUB_LIB_SPEC="${pkglibdir}/${PKG_STUB_LIB_FILE}" + +fi + +AC_SUBST(SHARED_LIB_SUFFIX) +AC_SUBST(UNSHARED_LIB_SUFFIX) +AC_SUBST(NSF_BUILD_LIB_SPEC) +AC_SUBST(NSF_LIB_SPEC) +AC_SUBST(NSF_BUILD_STUB_LIB_SPEC) +AC_SUBST(NSF_STUB_LIB_SPEC) +AC_SUBST(NSF_BUILD_STUB_LIB_PATH) +AC_SUBST(NSF_STUB_LIB_PATH) +NSF_SRC_DIR=$srcdir +AC_SUBST(NSF_SRC_DIR) +AC_SUBST(NXSH) +AC_SUBST(XOWISH) + +# include dirs for nsf during build process (i.e., does not assume installed) +NSF_BUILD_INCLUDE_DIR="${NSF_SRC_DIR}/generic" +NSF_BUILD_INCLUDE_SPEC="-I${NSF_BUILD_INCLUDE_DIR}" +AC_SUBST(NSF_BUILD_INCLUDE_DIR) +AC_SUBST(NSF_BUILD_INCLUDE_SPEC) + +AC_SUBST(test_actiweb) +AC_SUBST(libdirs_actiweb) +AC_SUBST(apps_actiweb) + +AC_SUBST(TEA_PLATFORM) + +dnl macro expanding to the names of files ./configure is to generate. +dnl reasoning: this is a factoring; I use this value elsewhere. +dnl +dnl Change the value of -this- macro if you want to add or remove +dnl such files. + +AC_DEFUN(CONFIG_OUTPUT_FILES, [[Makefile nsfConfig.sh library/xotcl/xotclsh library/xotcl/xowish unix/pkgIndex.unix nxsh nxwish]]) + +#-------------------------------------------------------------------- +# the value of this variable is set to the files which are to be +# removed when the user invokes 'make distclean' (i.e., those +# files generated by ./configure) and is used in the make distclean +# target, defined in Makefile.in +#-------------------------------------------------------------------- + +CONFIG_CLEAN_FILES="CONFIG_OUTPUT_FILES autom4te.cache/" +AC_SUBST(CONFIG_CLEAN_FILES) +AC_CONFIG_FILES(CONFIG_OUTPUT_FILES) + +#-------------------------------------------------------------------- +# Finally, substitute all of the various values into the Makefile, +# and generate the other output files. (this is done by invoking +# config.status) +# +# NOTE the lack of parameters! AC_OUTPUT with params is deprecated; +# use macros such as AC_CONFIG_FILES, AC_HEADER_FILES, etc to add +# to the files output by ./configure. +#-------------------------------------------------------------------- + +AC_OUTPUT + +chmod +x nxsh nxwish library/xotcl/xotclsh library/xotcl/xowish +echo "==================== building genstubs (needed for Tcl 8.6)" +make genstubs +echo "==================== genstubs built" + +here=${PWD} + +for subdir in ${subdirs} +do + echo "==================== configure $subdir" + if test x"${srcdir}" = x. ; then + confdir=. + else + mkdir -p $subdir + confdir=${srcdir}/$subdir + fi + (cd $subdir; echo $SHELL ${confdir}/configure ${ac_configure_args} --prefix=${prefix} --with-xotcl=${here}; eval $SHELL ${confdir}/configure ${ac_configure_args} --prefix=${prefix} --with-xotcl=${here}) +done + + + + + + + + + + + + + + + + + + + + Fisheye: Tag 22b50004f421fa78b868079b268f8f5a48c84538 refers to a dead (removed) revision in file `configure.in'. Fisheye: No comparison available. Pass `N' to diff? Index: tcl.m4 =================================================================== diff -u -r85e95479856b97a27083b3a7d3513ee417f1371a -r22b50004f421fa78b868079b268f8f5a48c84538 --- tcl.m4 (.../tcl.m4) (revision 85e95479856b97a27083b3a7d3513ee417f1371a) +++ tcl.m4 (.../tcl.m4) (revision 22b50004f421fa78b868079b268f8f5a48c84538) @@ -8,8 +8,6 @@ # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# -# RCS: @(#) $Id: tcl.m4,v 1.145 2010/08/17 00:33:40 hobbs Exp $ AC_PREREQ(2.57) @@ -170,7 +168,7 @@ if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" - AC_MSG_ERROR([Can't find Tcl configuration definitions]) + AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh]) else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" @@ -323,7 +321,7 @@ if test x"${ac_cv_c_tkconfig}" = x ; then TK_BIN_DIR="# no Tk configs found" - AC_MSG_ERROR([Can't find Tk configuration definitions]) + AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh]) else no_tk= TK_BIN_DIR="${ac_cv_c_tkconfig}" @@ -344,11 +342,10 @@ # # Results: # -# Subst the following vars: +# Substitutes the following vars: # TCL_BIN_DIR # TCL_SRC_DIR # TCL_LIB_FILE -# #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_TCLCONFIG], [ @@ -417,32 +414,26 @@ AC_SUBST(TCL_STUB_LIB_FLAG) AC_SUBST(TCL_STUB_LIB_SPEC) - case "`uname -s`" in - *CYGWIN_*) - AC_MSG_CHECKING([for cygwin variant]) - case ${TCL_EXTRA_CFLAGS} in - *-mwin32*|*-mno-cygwin*) - TEA_PLATFORM="windows" - CFLAGS="$CFLAGS -mwin32" - AC_MSG_RESULT([win32]) - ;; - *) - TEA_PLATFORM="unix" - AC_MSG_RESULT([unix]) - ;; - esac - EXEEXT=".exe" - ;; - *) - ;; - esac + AC_MSG_CHECKING([platform]) + hold_cc=$CC; CC="$TCL_CC" + AC_TRY_COMPILE(,[ + #ifdef _WIN32 + #error win32 + #endif + ], TEA_PLATFORM="unix", + TEA_PLATFORM="windows" + ) + CC=$hold_cc + AC_MSG_RESULT($TEA_PLATFORM) + # The BUILD_$pkg is to define the correct extern storage class + # handling when making this package + AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}, [], + [Building extension source?]) # Do this here as we have fully defined TEA_PLATFORM now if test "${TEA_PLATFORM}" = "windows" ; then - # The BUILD_$pkg is to define the correct extern storage class - # handling when making this package - AC_DEFINE_UNQUOTED(BUILD_${PACKAGE_NAME}) - CLEANFILES="$CLEANFILES *.lib *.dll *.pdb" + EXEEXT=".exe" + CLEANFILES="$CLEANFILES *.lib *.dll *.pdb *.exp" fi # TEA specific: @@ -566,11 +557,11 @@ # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # -# Arguments +# Arguments: # none # -# Results -# Subst's the following values: +# Results: +# Substitutes the following vars: # TCLSH_PROG #------------------------------------------------------------------------ @@ -616,11 +607,11 @@ # only for running extension test cases. It should never be # or generation of files (like pkgIndex.tcl) at build time. # -# Arguments +# Arguments: # none # -# Results -# Subst's the following values: +# Results: +# Substitutes the following vars: # WISH_PROG #------------------------------------------------------------------------ @@ -731,7 +722,6 @@ # TCL_THREADS # _REENTRANT # _THREAD_SAFE -# #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_THREADS], [ @@ -855,12 +845,11 @@ # # Defines the following vars: # CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true -# Sets to $(CFLAGS_OPTIMIZE) if false +# Sets to "$(CFLAGS_OPTIMIZE) -DNDEBUG" if false # LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true # Sets to $(LDFLAGS_OPTIMIZE) if false # DBGX Formerly used as debug library extension; # always blank now. -# #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_SYMBOLS], [ @@ -873,7 +862,7 @@ [tcl_ok=$enableval], [tcl_ok=no]) DBGX="" if test "$tcl_ok" = "no"; then - CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE}" + CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE} -DNDEBUG" LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}" AC_MSG_RESULT([no]) else @@ -920,7 +909,6 @@ # # Defines the following vars: # HAVE_LANGINFO Triggers use of nl_langinfo if defined. -# #------------------------------------------------------------------------ AC_DEFUN([TEA_ENABLE_LANGINFO], [ @@ -961,7 +949,6 @@ # Defines the following var: # # system - System/platform/version identification code. -# #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_SYSTEM], [ @@ -1044,7 +1031,6 @@ # CFLAGS_OPTIMIZE - # Flags used when running the compiler in optimize mode # CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) -# #-------------------------------------------------------------------- AC_DEFUN([TEA_CONFIG_CFLAGS], [ @@ -1134,15 +1120,14 @@ ECHO_VERSION='`echo ${PACKAGE_VERSION}`' TCL_LIB_VERSIONS_OK=ok CFLAGS_DEBUG=-g - CFLAGS_OPTIMIZE=-O AS_IF([test "$GCC" = yes], [ - # TEA specific: CFLAGS_OPTIMIZE=-O2 CFLAGS_WARNING="-Wall" - ], [CFLAGS_WARNING=""]) -dnl FIXME: Replace AC_CHECK_PROG with AC_CHECK_TOOL once cross compiling is fixed. -dnl AC_CHECK_TOOL(AR, ar) - AC_CHECK_PROG(AR, ar, ar) + ], [ + CFLAGS_OPTIMIZE=-O + CFLAGS_WARNING="" + ]) + AC_CHECK_TOOL(AR, ar) STLIB_LD='${AR} cr' LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" AS_IF([test "x$SHLIB_VERSION" = x],[SHLIB_VERSION="1.0"]) @@ -1171,7 +1156,7 @@ PATH64="${MSSDK}/Bin/Win64" ;; esac - if test ! -d "${PATH64}" ; then + if test "$GCC" != "yes" -a ! -d "${PATH64}" ; then AC_MSG_WARN([Could not find 64-bit $MACHINE SDK to enable 64bit mode]) AC_MSG_WARN([Ensure latest Platform SDK is installed]) do64bit="no" @@ -1296,13 +1281,43 @@ if test "$GCC" = "yes"; then # mingw gcc mode - RC="windres" + AC_CHECK_TOOL(RC, windres) CFLAGS_DEBUG="-g" CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" - SHLIB_LD="$CC -shared" + SHLIB_LD='${CC} -shared' UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' LDFLAGS_CONSOLE="-wl,--subsystem,console ${lflags}" LDFLAGS_WINDOW="-wl,--subsystem,windows ${lflags}" + + AC_CACHE_CHECK(for cross-compile version of gcc, + ac_cv_cross, + AC_TRY_COMPILE([ + #ifdef __WIN32__ + #error cross-compiler + #endif + ], [], + ac_cv_cross=yes, + ac_cv_cross=no) + ) + if test "$ac_cv_cross" = "yes"; then + case "$do64bit" in + amd64|x64|yes) + CC="x86_64-w64-mingw32-gcc" + LD="x86_64-w64-mingw32-ld" + AR="x86_64-w64-mingw32-ar" + RANLIB="x86_64-w64-mingw32-ranlib" + RC="x86_64-w64-mingw32-windres" + ;; + *) + CC="i686-w64-mingw32-gcc" + LD="i686-w64-mingw32-ld" + AR="i686-w64-mingw32-ar" + RANLIB="i686-w64-mingw32-ranlib" + RC="i686-w64-mingw32-windres" + ;; + esac + fi + else SHLIB_LD="${LINKBIN} -dll ${lflags}" # link -lib only works when -lib is the first arg @@ -1409,7 +1424,7 @@ SHLIB_CFLAGS="" SHLIB_LD='${CC} -shared' SHLIB_SUFFIX=".dll" - EXE_SUFFIX=".exe" + EXEEXT=".exe" CC_SEARCH_FLAGS="" LD_SEARCH_FLAGS="" ;; @@ -1438,7 +1453,7 @@ ]) AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) AS_IF([test "$tcl_ok" = yes], [ - LDFLAGS="$LDFLAGS -E" + LDFLAGS="$LDFLAGS -Wl,-E" CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' LD_LIBRARY_PATH_VAR="SHLIB_PATH" @@ -1576,13 +1591,30 @@ LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) ;; OpenBSD-*) - SHLIB_CFLAGS="-fPIC" - SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' - SHLIB_SUFFIX=".so" - AS_IF([test $doRpath = yes], [ - CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' + arch=`arch -s` + case "$arch" in + m88k|vax) + SHLIB_SUFFIX="" + SHARED_LIB_SUFFIX="" + ;; + *) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD='${CC} -shared ${SHLIB_CFLAGS}' + SHLIB_SUFFIX=".so" + AS_IF([test $doRpath = yes], [ + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}']) + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' + ;; + esac + case "$arch" in + m88k|vax) + CFLAGS_OPTIMIZE="-O1" + ;; + *) + CFLAGS_OPTIMIZE="-O2" + ;; + esac AC_CACHE_CHECK([for ELF], tcl_cv_ld_elf, [ AC_EGREP_CPP(yes, [ #ifdef __ELF__ @@ -1593,10 +1625,10 @@ LDFLAGS=-Wl,-export-dynamic ], [LDFLAGS=""]) AS_IF([test "${TCL_THREADS}" = "1"], [ - # OpenBSD builds and links with -pthread, never -lpthread. + # On OpenBSD: Compile with -pthread + # Don't link with -lpthread LIBS=`echo $LIBS | sed s/-lpthread//` CFLAGS="$CFLAGS -pthread" - SHLIB_CFLAGS="$SHLIB_CFLAGS -pthread" ]) # OpenBSD doesn't do version numbers with dots. UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' @@ -1705,7 +1737,7 @@ AS_IF([test $tcl_cv_ld_single_module = yes], [ SHLIB_LD="${SHLIB_LD} -Wl,-single_module" ]) - # TEA specific: link shlib with current and compatiblity version flags + # TEA specific: link shlib with current and compatibility version flags vers=`echo ${PACKAGE_VERSION} | sed -e 's/^\([[0-9]]\{1,5\}\)\(\(\.[[0-9]]\{1,3\}\)\{0,2\}\).*$/\1\2/p' -e d` SHLIB_LD="${SHLIB_LD} -current_version ${vers:-0} -compatibility_version ${vers:-0}" SHLIB_SUFFIX=".dylib" @@ -1977,16 +2009,111 @@ AS_IF([test "$tcl_cv_cc_visibility_hidden" != yes], [ AC_DEFINE(MODULE_SCOPE, [extern], [No Compiler support for module scope symbols]) - AC_DEFINE(NO_VIZ) + AC_DEFINE(NO_VIZ, [], [No visibility hidden passed to zlib?]) ]) AS_IF([test "$SHARED_LIB_SUFFIX" = ""], [ - # TEA specific: use PACKAGE_VERSION instead of VERSION - SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) + # TEA specific: use PACKAGE_VERSION instead of VERSION + SHARED_LIB_SUFFIX='${PACKAGE_VERSION}${SHLIB_SUFFIX}']) AS_IF([test "$UNSHARED_LIB_SUFFIX" = ""], [ - # TEA specific: use PACKAGE_VERSION instead of VERSION - UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) + # TEA specific: use PACKAGE_VERSION instead of VERSION + UNSHARED_LIB_SUFFIX='${PACKAGE_VERSION}.a']) + if test "${GCC}" = "yes" ; then + AC_CACHE_CHECK(for SEH support in compiler, + tcl_cv_seh, + AC_TRY_RUN([ + #define WIN32_LEAN_AND_MEAN + #include + #undef WIN32_LEAN_AND_MEAN + + int main(int argc, char** argv) { + int a, b = 0; + __try { + a = 666 / b; + } + __except (EXCEPTION_EXECUTE_HANDLER) { + return 0; + } + return 1; + } + ], + tcl_cv_seh=yes, + tcl_cv_seh=no, + tcl_cv_seh=no) + ) + if test "$tcl_cv_seh" = "no" ; then + AC_DEFINE(HAVE_NO_SEH, 1, + [Defined when mingw does not support SEH]) + fi + + # + # Check to see if the excpt.h include file provided contains the + # definition for EXCEPTION_DISPOSITION; if not, which is the case + # with Cygwin's version as of 2002-04-10, define it to be int, + # sufficient for getting the current code to work. + # + AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files, + tcl_cv_eh_disposition, + AC_TRY_COMPILE([ +# define WIN32_LEAN_AND_MEAN +# include +# undef WIN32_LEAN_AND_MEAN + ],[ + EXCEPTION_DISPOSITION x; + ], + tcl_cv_eh_disposition=yes, + tcl_cv_eh_disposition=no) + ) + if test "$tcl_cv_eh_disposition" = "no" ; then + AC_DEFINE(EXCEPTION_DISPOSITION, int, + [Defined when cygwin/mingw does not support EXCEPTION DISPOSITION]) + fi + + # Check to see if winnt.h defines CHAR, SHORT, and LONG + # even if VOID has already been #defined. The win32api + # used by mingw and cygwin is known to do this. + + AC_CACHE_CHECK(for winnt.h that ignores VOID define, + tcl_cv_winnt_ignore_void, + AC_TRY_COMPILE([ + #define VOID void + #define WIN32_LEAN_AND_MEAN + #include + #undef WIN32_LEAN_AND_MEAN + ], [ + CHAR c; + SHORT s; + LONG l; + ], + tcl_cv_winnt_ignore_void=yes, + tcl_cv_winnt_ignore_void=no) + ) + if test "$tcl_cv_winnt_ignore_void" = "yes" ; then + AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1, + [Defined when cygwin/mingw ignores VOID define in winnt.h]) + fi + + # See if the compiler supports casting to a union type. + # This is used to stop gcc from printing a compiler + # warning when initializing a union member. + + AC_CACHE_CHECK(for cast to union support, + tcl_cv_cast_to_union, + AC_TRY_COMPILE([], + [ + union foo { int i; double d; }; + union foo f = (union foo) (int) 0; + ], + tcl_cv_cast_to_union=yes, + tcl_cv_cast_to_union=no) + ) + if test "$tcl_cv_cast_to_union" = "yes"; then + AC_DEFINE(HAVE_CAST_TO_UNION, 1, + [Defined when compiler supports casting to union type.]) + fi + fi + AC_SUBST(CFLAGS_DEBUG) AC_SUBST(CFLAGS_OPTIMIZE) AC_SUBST(CFLAGS_WARNING) @@ -2024,7 +2151,6 @@ # USE_TERMIOS # USE_TERMIO # USE_SGTTY -# #-------------------------------------------------------------------- AC_DEFUN([TEA_SERIAL_PORT], [ @@ -2236,7 +2362,6 @@ # XINCLUDES # XLIBSW # PKG_LIBS (appends to) -# #-------------------------------------------------------------------- AC_DEFUN([TEA_PATH_X], [ @@ -2332,7 +2457,6 @@ # HAVE_SYS_FILIO_H # USE_FIONBIO # O_NONBLOCK -# #-------------------------------------------------------------------- AC_DEFUN([TEA_BLOCKING_STYLE], [ @@ -2367,7 +2491,6 @@ # HAVE_TM_GMTOFF # HAVE_TM_TZADJ # HAVE_TIMEZONE_VAR -# #-------------------------------------------------------------------- AC_DEFUN([TEA_TIME_HANDLER], [ @@ -2436,7 +2559,6 @@ # # Might defines some of the following vars: # strtod (=fixstrtod) -# #-------------------------------------------------------------------- AC_DEFUN([TEA_BUGGY_STRTOD], [ @@ -2487,7 +2609,7 @@ # # Results: # -# Subst's the following var: +# Substitutes the following vars: # TCL_LIBS # MATH_LIBS # @@ -2496,7 +2618,6 @@ # # Might define the following vars: # HAVE_NET_ERRNO_H -# #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_LINK_LIBS], [ @@ -2574,7 +2695,6 @@ # _ISOC99_SOURCE # _LARGEFILE64_SOURCE # _LARGEFILE_SOURCE64 -# #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_EARLY_FLAG],[ @@ -2622,7 +2742,6 @@ # HAVE_STRUCT_DIRENT64 # HAVE_STRUCT_STAT64 # HAVE_TYPE_OFF64_T -# #-------------------------------------------------------------------- AC_DEFUN([TEA_TCL_64BIT_FLAGS], [ @@ -2739,6 +2858,13 @@ else AC_MSG_RESULT([ok (TEA ${TEA_VERSION})]) fi + + # If the user did not set CFLAGS, set it now to keep macros + # like AC_PROG_CC and AC_TRY_COMPILE from adding "-g -O2". + if test "${CFLAGS+set}" != "set" ; then + CFLAGS="" + fi + case "`uname -s`" in *win32*|*WIN32*|*MINGW32_*) AC_CHECK_PROG(CYGPATH, cygpath, cygpath -w, echo) @@ -2752,8 +2878,17 @@ ;; *) CYGPATH=echo - EXEEXT="" - TEA_PLATFORM="unix" + # Maybe we are cross-compiling.... + case ${host_alias} in + *mingw32*) + EXEEXT=".exe" + TEA_PLATFORM="windows" + ;; + *) + EXEEXT="" + TEA_PLATFORM="unix" + ;; + esac ;; esac @@ -2766,6 +2901,8 @@ exec_prefix=$prefix fi + AC_MSG_NOTICE([configuring ${PACKAGE_NAME} ${PACKAGE_VERSION}]) + AC_SUBST(EXEEXT) AC_SUBST(CYGPATH) @@ -3002,6 +3139,22 @@ ]) #------------------------------------------------------------------------ +# TEA_ADD_CLEANFILES -- +# +# Specify one or more CLEANFILES. +# +# Arguments: +# one or more file names to clean target +# +# Results: +# +# Appends to CLEANFILES, already defined for subst in LOAD_TCLCONFIG +#------------------------------------------------------------------------ +AC_DEFUN([TEA_ADD_CLEANFILES], [ + CLEANFILES="$CLEANFILES $@" +]) + +#------------------------------------------------------------------------ # TEA_PREFIX -- # # Handle the --prefix=... option by defaulting to what Tcl gave @@ -3055,17 +3208,9 @@ # Don't put any macros that use the compiler (e.g. AC_TRY_COMPILE) # in this macro, they need to go into TEA_SETUP_COMPILER instead. - # 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_PROG_CPP - AC_PROG_INSTALL - #-------------------------------------------------------------------- # Checks to see if the make program sets the $MAKE variable. #-------------------------------------------------------------------- @@ -3076,7 +3221,7 @@ # Find ranlib #-------------------------------------------------------------------- - AC_PROG_RANLIB + AC_CHECK_TOOL(RANLIB, ranlib) #-------------------------------------------------------------------- # Determines the correct binary file extension (.o, .obj, .exe etc.) @@ -3155,12 +3300,25 @@ # MAKE_SHARED_LIB Makefile rule for building a shared library # MAKE_STATIC_LIB Makefile rule for building a static library # MAKE_STUB_LIB Makefile rule for building a stub library +# VC_MANIFEST_EMBED_DLL Makefile rule for embedded VC manifest in DLL +# VC_MANIFEST_EMBED_EXE Makefile rule for embedded VC manifest in EXE #------------------------------------------------------------------------ AC_DEFUN([TEA_MAKE_LIB], [ if test "${TEA_PLATFORM}" = "windows" -a "$GCC" != "yes"; then MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_OBJECTS)" MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LD_LIBS} \${LDFLAGS_DEFAULT} -out:\[$]@ \$(PKG_OBJECTS)" + AC_EGREP_CPP([manifest needed], [ +#if defined(_MSC_VER) && _MSC_VER >= 1400 +print("manifest needed") +#endif + ], [ + # Could do a CHECK_PROG for mt, but should always be with MSVC8+ + VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;2 ; fi" + VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest -outputresource:\[$]@\;1 ; fi" + MAKE_SHARED_LIB="${MAKE_SHARED_LIB} ; ${VC_MANIFEST_EMBED_DLL}" + TEA_ADD_CLEANFILES([*.manifest]) + ]) MAKE_STUB_LIB="\${STLIB_LD} -out:\[$]@ \$(PKG_STUB_OBJECTS)" else MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(PKG_OBJECTS)" @@ -3228,6 +3386,8 @@ AC_SUBST(MAKE_STATIC_LIB) AC_SUBST(MAKE_STUB_LIB) AC_SUBST(RANLIB_STUB) + AC_SUBST(VC_MANIFEST_EMBED_DLL) + AC_SUBST(VC_MANIFEST_EMBED_EXE) ]) #------------------------------------------------------------------------ @@ -3316,7 +3476,7 @@ # # Results: # -# Substs the following vars: +# Substitutes the following vars: # TCL_TOP_DIR_NATIVE # TCL_INCLUDES #------------------------------------------------------------------------ @@ -3394,7 +3554,7 @@ # Adds a --with-tclinclude switch to configure. # Result is cached. # -# Substs the following vars: +# Substitutes the following vars: # TCL_INCLUDES #------------------------------------------------------------------------ @@ -3484,7 +3644,7 @@ # # Results: # -# Substs the following vars: +# Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ @@ -3573,7 +3733,7 @@ # Adds a --with-tkinclude switch to configure. # Result is cached. # -# Substs the following vars: +# Substitutes the following vars: # TK_INCLUDES #------------------------------------------------------------------------ @@ -3791,11 +3951,10 @@ # # Results: # -# Subst the following vars: +# Substitutes the following vars: # $1_SRC_DIR # $1_LIB_FILE # $1_LIB_SPEC -# #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG], [ @@ -3822,6 +3981,8 @@ $1_LIB_SPEC=${$1_BUILD_LIB_SPEC} $1_STUB_LIB_SPEC=${$1_BUILD_STUB_LIB_SPEC} $1_STUB_LIB_PATH=${$1_BUILD_STUB_LIB_PATH} + $1_INCLUDE_SPEC=${$1_BUILD_INCLUDE_SPEC} + $1_LIBRARY_PATH=${$1_LIBRARY_PATH} fi AC_SUBST($1_VERSION) @@ -3854,7 +4015,6 @@ # # Results: # Adds to LIBS the appropriate extension library -# #------------------------------------------------------------------------ AC_DEFUN([TEA_LOAD_CONFIG_LIB], [ AC_MSG_CHECKING([For $1 library for LIBS]) @@ -3886,11 +4046,10 @@ # $1 # # Results: -# Subst the following vars: -# +# Substitutes the following vars: #------------------------------------------------------------------------ -AC_DEFUN(TEA_EXPORT_CONFIG, [ +AC_DEFUN([TEA_EXPORT_CONFIG], [ #-------------------------------------------------------------------- # These are for $1Config.sh #--------------------------------------------------------------------