]> git.kernelconcepts.de Git - karo-tx-redboot.git/blobdiff - tools/acsupport/acinclude.m4
Initial revision
[karo-tx-redboot.git] / tools / acsupport / acinclude.m4
diff --git a/tools/acsupport/acinclude.m4 b/tools/acsupport/acinclude.m4
new file mode 100644 (file)
index 0000000..c537de2
--- /dev/null
@@ -0,0 +1,891 @@
+dnl Process this file with aclocal to get an aclocal.m4 file. Then
+dnl process that with autoconf.
+dnl ====================================================================
+dnl
+dnl     acinclude.m4
+dnl
+dnl     Various autoconf macros that are shared between different
+dnl     eCos packages.
+dnl
+dnl ====================================================================
+dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN####
+dnl ----------------------------------------------------------------------------
+dnl Copyright (C) 2002, 2003 Bart Veer
+dnl Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+dnl
+dnl This file is part of the eCos host tools.
+dnl
+dnl This program is free software; you can redistribute it and/or modify it 
+dnl under the terms of the GNU General Public License as published by the Free 
+dnl Software Foundation; either version 2 of the License, or (at your option) 
+dnl any later version.
+dnl 
+dnl This program is distributed in the hope that it will be useful, but WITHOUT 
+dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+dnl FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
+dnl more details.
+dnl 
+dnl You should have received a copy of the GNU General Public License along with
+dnl this program; if not, write to the Free Software Foundation, Inc., 
+dnl 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+dnl
+dnl ----------------------------------------------------------------------------
+dnl ####ECOSHOSTGPLCOPYRIGHTEND####
+dnl ====================================================================
+dnl#####DESCRIPTIONBEGIN####
+dnl
+dnl Author(s):  bartv
+dnl Contact(s): bartv
+dnl Date:       1998/12/16
+dnl Version:    0.01
+dnl
+dnl####DESCRIPTIONEND####
+dnl ====================================================================
+
+dnl ====================================================================
+dnl Ensure that configure is not being run in the source tree, i.e.
+dnl that a separate build tree has been created. This is not absolutely
+dnl necessary at the time of writing but may become so in future, and
+dnl is good practice.
+
+AC_DEFUN(ECOS_CHECK_BUILD_ne_SRC,[
+    AC_MSG_CHECKING([that a separate build tree is being used])
+    ecos_cwd=`/bin/pwd`
+    if test "${srcdir}" = "." ; then
+        srcdir=${ecos_cwd}
+    fi
+    if test "${ecos_cwd}" = "${srcdir}" ; then
+        AC_MSG_RESULT([no])
+        AC_MSG_ERROR([This configure script should not be run inside the source tree. Instead please use a separate build tree])
+    else
+        AC_MSG_RESULT(yes)
+    fi
+])
+
+dnl ====================================================================
+dnl The AM_INIT_AUTOMAKE() will define a symbol VERSION for the
+dnl package's version number. Unfortunately this symbol is rather
+dnl hard to share if several different packages are involved, so this
+dnl macro is used to define an alternative symbol
+
+AC_DEFUN(ECOS_SUBST_VERSION,[
+    AC_REQUIRE([AM_INIT_AUTOMAKE])
+    ifelse($#,1,,AC_MSG_ERROR([Invalid number of arguments passed to ECOS SUBST_VERSION]))
+    AC_DEFINE_UNQUOTED($1, "$VERSION")
+])
+
+dnl --------------------------------------------------------------------
+dnl Convert a cygwin pathname to something acceptable to VC++ (but
+dnl still invoked from bash and cygwin's make). This means using
+dnl the cygpath utility and then translating any backslashes into
+dnl forward slashes to avoid confusing make.
+
+AC_DEFUN(ECOS_MSVC_PATH, [
+    AC_REQUIRE([ECOS_PROG_MSVC])
+    ifelse($#, 1, , AC_MSG_ERROR("Invalid number of arguments passed to ECOS MSVC_PATH"))
+    if test "${MSVC}" = "yes" ; then
+      $1=`cygpath -w ${$1} | tr \\\\\\\\ /`
+    fi
+])
+
+dnl ====================================================================
+dnl An internal utility to define eCos variants of various compilation
+dnl related flags. The aim is to avoid messing with CFLAGS, LIBS, and
+dnl so on because those are used for feature tests as well as for
+dnl passing on to the application.
+AC_DEFUN(ECOS_PROG_DEFINE_COMPILER_FLAGS,[
+    ecos_CFLAGS=""
+    ecos_CXXFLAGS=""
+    ecos_LDADD=""
+    ecos_INCLUDES=""
+    ecos_LIBS=""
+    AC_SUBST(ecos_CFLAGS)
+    AC_SUBST(ecos_CXXFLAGS)
+    AC_SUBST(ecos_LDADD)
+    AC_SUBST(ecos_INCLUDES)
+    AC_SUBST(ecos_LIBS)
+])
+
+dnl For historical reasons some of the eCos host-side software can be
+dnl built with Visual C++ as well as g++. The user can specify this
+dnl at configure time using CC=cl, where cl.exe is the compiler driver.
+dnl This macro will set the variable MSVC to "yes" or to "no" depending
+dnl on whether or not VC++ is being used, analogous to the variable
+dnl GCC set by AC_PROG_CC. It provides support for an automake
+dnl conditional thus allowing the makefile to adapt somewhat to the
+dnl compiler being used. Finally it fills in the ECOS_INCLUDES,
+dnl ECOS_LIBS and ECOS_LDADD variables with suitable initial values.
+
+AC_DEFUN(ECOS_PROG_MSVC,[
+    AC_REQUIRE([AC_PROG_CC])
+    AC_REQUIRE([AC_PROG_CXX])
+    AC_REQUIRE([ECOS_PROG_DEFINE_COMPILER_FLAGS])
+
+    AC_MSG_CHECKING("for Visual C++")
+    MSVC="no";
+    if test "${CC}" = "cl" ; then
+       MSVC="yes"
+       CXX="cl"
+       MSVC_SRCDIR=${srcdir}
+       ECOS_MSVC_PATH(MSVC_SRCDIR)
+       AC_SUBST(MSVC_SRCDIR)
+       ecos_INCLUDES="${ecos_INCLUDES} \"-I${MSVC_SRCDIR}\""
+       ecos_LDADD="-link"
+       ecos_LIBS="advapi32.lib"
+    fi
+    AM_CONDITIONAL(MSVC, test "${MSVC}" = "yes")
+    if test "${MSVC}" = "yes" ; then
+        AC_MSG_RESULT([unfortunately yes])
+    else
+        AC_MSG_RESULT([no])
+    fi
+])
+
+dnl ====================================================================
+dnl Set up sensible flags for the various different compilers. This
+dnl is achieved by manipulating AM-CFLAGS and AM-CXXFLAGS via a subst,
+dnl plus undoing the setting of CFLAGS and CXXFLAGS done by
+dnl the AC_PROC_CC and AC_PROG_CXX macros (e.g. setting the default
+dnl compilation flags to -O2). Note that this relies
+dnl on knowing about the internals of those macros.
+dnl
+dnl There is little point in checking the cache: this macro does
+dnl not do any feature tests so checking the cache would probably
+dnl be more expensive than doing the work here.
+dnl
+dnl For now the only supported compilers are gcc/g++ and VC++. Attempts
+dnl to use another compiler will result in an error at configure-time.
+AC_DEFUN(ECOS_PROG_STANDARD_COMPILER_FLAGS, [
+    AC_REQUIRE([AC_PROG_CC])
+    AC_REQUIRE([AC_PROG_CXX])
+    AC_REQUIRE([ECOS_PROG_DEFINE_COMPILER_FLAGS])
+    AC_REQUIRE([ECOS_PROG_MSVC])
+
+    AC_MSG_CHECKING("the default compiler flags")
+
+    dnl Add a user-settable flag to control whether or debugging info is
+    dnl incorporated at compile-time.
+    ecosflags_enable_debug="no"
+    AC_ARG_ENABLE(debug,[ --enable-debug           do a debug rather than a release build],
+    [case "${enableval}" in
+       yes) ecosflags_enable_debug="yes" ;;
+       *)   ecosflags_enable_debug="no" ;;
+    esac])
+
+    dnl For VC++ builds also provide a flag for ANSI vs. unicode builds.
+    dnl For now this does not actually affect the compiler flags.
+    dnl NOTE: there may also have to be a flag to control whether or
+    dnl the VC++ multi-threading flags are enabled.
+    ecosflags_enable_ansi="no"
+    if test "${MSVC}" = "yes" ; then
+      AC_ARG_ENABLE(ansi,[ --enable-ansi            do an ANSI rather than a unicode build],
+      [case "${enableval}" in
+         yes) ecosflags_enable_ansi="yes" ;;
+         *)   ecosflags_enable_ansi="no" ;;
+      esac])
+    fi
+
+    dnl Now we know what the user is after.
+    if test "${GCC}" = "yes" ; then
+        ecos_CFLAGS="${ecos_CFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs"
+        ecos_CXXFLAGS="${ecos_CXXFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Woverloaded-virtual"
+    elif test "${MSVC}" = "yes" ; then
+        ecos_CFLAGS="${ecos_CFLAGS} -nologo -W3"
+        ecos_CXXFLAGS="${ecos_CXXFLAGS} -nologo -W3 -GR -GX"
+    else
+        AC_MSG_ERROR("default flags for ${CC} are not known")
+    fi
+
+    dnl Choose between debugging and optimization.
+    if test "${ecosflags_enable_debug}" = "yes" ; then
+        if test "${GCC}" = "yes" ; then
+            ecos_CFLAGS="${ecos_CFLAGS} -g -O0"
+            ecos_CXXFLAGS="${ecos_CXXFLAGS} -g -O0"
+        elif test "${MSVC}" = "yes" ; then
+            ecos_CFLAGS="${ecos_CFLAGS} -MDd -Zi"
+            ecos_CXXFLAGS="${ecos_CXXFLAGS} -MDd -Zi"
+        fi
+    else
+        dnl For now building with g++ implies -O0 rather than -O2. The
+        dnl compile-time performance of g++ at -O2 has been disappointing
+        dnl for quite some time, and the eCos host-side code is not
+        dnl sufficiently cpu-intensive to require -O2.
+        if test "${GCC}" = "yes" ; then
+            ecos_CFLAGS="${ecos_CFLAGS} -O0"
+            ecos_CXXFLAGS="${ecos_CXXFLAGS} -O0"
+        elif test "${MSVC}" = "yes" ; then
+            ecos_CFLAGS="${ecos_CFLAGS} -MD -O2"
+            ecos_CXXFLAGS="${ecos_CXXFLAGS} -MD -O2"
+        fi
+    fi
+
+    CFLAGS="${ac_save_CFLAGS}"
+    CXXFLAGS="${ac_save_CXXFLAGS}"
+
+    AC_MSG_RESULT(done)
+])
+
+dnl --------------------------------------------------------------------
+dnl User-settable options for assertions and tracing.
+dnl
+dnl The settable options are:
+dnl   --disable-asserts
+dnl   --disable-preconditions
+dnl   --disable-postconditions
+dnl   --disable-invariants
+dnl   --disable-loopinvariants
+dnl   --disable-tracing
+dnl   --disable-fntracing
+
+AC_DEFUN(ECOS_ARG_INFRASTRUCTURE, [
+
+    AC_REQUIRE([ECOS_PROG_STANDARD_COMPILER_FLAGS])
+
+    if test "${ecosflags_enable_debug}" = "yes" ; then
+        ecosinfra_asserts="yes"
+        ecosinfra_preconditions="yes"
+        ecosinfra_postconditions="yes"
+        ecosinfra_invariants="yes"
+        ecosinfra_loopinvariants="yes"
+        ecosinfra_tracing="yes"
+        ecosinfra_fntracing="yes"
+    else
+        ecosinfra_asserts="no"
+        ecosinfra_preconditions="no"
+        ecosinfra_postconditions="no"
+        ecosinfra_invariants="no"
+        ecosinfra_loopinvariants="no"
+        ecosinfra_tracing="no"
+        ecosinfra_fntracing="no"
+    fi
+
+    AC_ARG_ENABLE(asserts,[ --disable-asserts        disable all assertions],
+        [case "${enableval}" in
+            yes) ecosinfra_asserts="yes" ;;
+            no)  ecosinfra_asserts="no"  ;;
+            *)   AC_MSG_ERROR([bad value ${enableval} for disable-asserts option]) ;;
+        esac])
+    if test "${ecosinfra_asserts}" = "yes"; then
+        AC_DEFINE(CYGDBG_USE_ASSERTS)
+    fi
+
+    AC_ARG_ENABLE(preconditions, [ --disable-preconditions  disable a subset of the assertions],
+        [case "${enableval}" in
+            yes) ecosinfra_preconditions="yes" ;;
+            no)  ecosinfra_preconditions="no"  ;;
+            *)   AC_MSG_ERROR([bad value ${enableval} for disable-preconditions option]) ;;
+        esac])
+    if test "${ecosinfra_preconditions}" = "yes"; then
+        AC_DEFINE(CYGDBG_INFRA_DEBUG_PRECONDITIONS)
+    fi
+
+    AC_ARG_ENABLE(postconditions, [ --disable-postconditions disable a subset of the assertions],
+        [case "${enableval}" in
+            yes) ecosinfra_postconditions="yes" ;;
+            no)  ecosinfra_postconditions="no"  ;;
+            *)   AC_MSG_ERROR([bad value ${enableval} for disable-postconditions option]) ;;
+        esac])
+    if test "${ecosinfra_postconditions}" = "yes"; then
+        AC_DEFINE(CYGDBG_INFRA_DEBUG_POSTCONDITIONS)
+    fi
+
+    AC_ARG_ENABLE(invariants, [ --disable-invariants     disable a subset of the assertions],
+        [case "${enableval}" in
+            yes) ecosinfra_invariants="yes" ;;
+            no)  ecosinfra_invariants="no"  ;;
+            *)   AC_MSG_ERROR([bad value ${enableval} for disable-invariants option]) ;;
+        esac])
+    if test "${ecosinfra_invariants}" = "yes"; then
+        AC_DEFINE(CYGDBG_INFRA_DEBUG_INVARIANTS)
+    fi
+
+    AC_ARG_ENABLE(loopinvariants, [ --disable-loopinvariants disable a subset of the assertions],
+        [case "${enableval}" in
+            yes) ecosinfra_loopinvariants="yes" ;;
+            no)  ecosinfra_loopinvariants="no"  ;;
+            *)   AC_MSG_ERROR([bad value ${enableval} for disable-loopinvariants option]) ;;
+        esac])
+    if test "${ecosinfra_loopinvariants}" = "yes"; then
+        AC_DEFINE(CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS)
+    fi
+
+    AC_ARG_ENABLE(tracing,[ --disable-tracing        disable tracing],
+        [case "${enableval}" in
+            yes) ecosinfra_tracing="yes" ;;
+            no)  ecosinfra_tracing="no"  ;;
+            *)   AC_MSG_ERROR([bad value ${enableval} for disable-tracing option]) ;;
+        esac])
+    if test "${ecosinfra_tracing}" = "yes"; then
+        AC_DEFINE(CYGDBG_USE_TRACING)
+    fi
+
+    AC_ARG_ENABLE(fntracing,[ --disable-fntracing      disable function entry/exit tracing],
+        [case "${enableval}" in
+            yes) ecosinfra_fntracing="yes" ;;
+            no)  ecosinfra_fntracing=no  ;;
+            *)   AC_MSG_ERROR([bad value ${enableval} for disable-fntracing option]) ;;
+    esac])
+    if test "${ecosinfra_fntracing}" = "yes"; then
+        AC_DEFINE(CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS)
+    fi
+])
+
+dnl ====================================================================
+dnl Inspired by KDE's autoconfig
+dnl This macro takes three Arguments like this:
+dnl AC_FIND_FILE(foo.h, $incdirs, incdir)
+dnl the filename to look for, the list of paths to check and
+dnl the variable with the result.
+
+AC_DEFUN(AC_FIND_FILE,[
+    $3=""
+    for i in $2; do
+        if test -r "$i/$1"; then
+            $3=$i
+            break
+        fi
+    done
+])
+
+dnl ====================================================================
+dnl Variation of the above.
+dnl This macro takes three Arguments like this:
+dnl AC_FIND_DIR(infra, $incdirs, incdir)
+dnl the directory name to look for, the list of paths to check and
+dnl the variable with the result.
+
+AC_DEFUN(AC_FIND_DIR,[
+    $3=""
+    for i in $2; do
+        if test -d "$i/$1"; then
+            $3=$i
+            break
+        fi
+    done
+])
+
+dnl ====================================================================
+dnl Work out details of the Tcl/tk installation that should be used.
+dnl In theory this is simple: when Tcl is installed in <tcl_prefix>
+dnl (usually /usr) there should be a file <tcl_prefix>/lib/tclConfig.sh
+dnl which defines exactly how to build Tcl-based applications. Of course
+dnl Tcl may be installed anywhere, not just in /usr, so it is necessary
+dnl to do some searching. There is a command-line argument
+dnl --with-tcl=<path> to specify the Tcl installation, so the macro
+dnl can search for <with_tcl>/lib/tclConfig.sh, <prefix>/lib/tclConfig.sh
+dnl and /usr/lib/tclConfig.sh
+dnl
+dnl Unfortunately not all systems use this convention. For example,
+dnl at the time of writing Debian installs tclConfig.sh in a versioned
+dnl subdirectory /usr/lib/tcl8.3/tclConfig.sh. Hence there is an
+dnl additional argument --with-tcl-version=<vsn> which is used to
+dnl extend the search path.
+dnl
+dnl For VC++ builds the situation is different again. Tcl may be
+dnl installed anywhere, so the data in tclConfig.sh is not useful
+dnl (and that file may not be provided at all). Instead --with-tcl
+dnl must be used to specify the path. Alternatively separate paths
+dnl for headers and libraries can be specified using --with-tcl-header
+dnl and --with-tcl-lib. Usually it will also be necessary to specify
+dnl the library version number using --with-tcl-version.
+
+dnl This adds two main command-line options, --with-tcl=<prefix> to
+dnl specify the Tcl install directory, and --with-tcl-version=<vsn>
+dnl to control which version of Tcl should be used. For finer-grained
+dnl control there are additional options --with-tcl-header and
+dnl --with-tcl-version. It is assumed that Tcl and Tk are installed
+dnl in the same place.
+dnl
+dnl On Unix systems and under cygwin there should be a file
+dnl $(tcl_prefix)/lib/tclConfig.sh containing all the information
+dnl needed for Tcl. This file is consulted and the appropriate
+dnl variables extracted. Similar information for Tk lives in
+dnl tkConfig.sh. As a useful side effect all variables defined
+dnl in those scripts can be accessed.
+dnl
+dnl To confuse matters, subtly different naming conventions are used
+dnl under Unix and NT. Under Unix the Tcl library will be called
+dnl libtcl8.0.a, libtcl8.1.a, etc. with a dot between the major and
+dnl minor version. Under NT (including cygwin) the library will be
+dnl called tcl80.lib, tcl81.lib, libtcl80.a, libtcl81.a, etc.
+dnl without a dot.
+dnl
+dnl Currently this macro assumes that Tcl is preinstalled, and not
+dnl built alongside eCos. Specifically the macro checks that
+dnl tcl.h  can be found, plus on Unix systems tclConfig.sh and
+dnl tkConfig.sh as well.
+dnl
+dnl This macro updates the build-related variables ecos_INCLUDES,
+dnl ecos_LDADD, and ecos_LIBS. The latter assumes the application
+dnl only needs Tcl. If Tk is needed as well then the variable
+dnl ecos_tklibs should be used in addition.
+
+AC_DEFUN(ECOS_PATH_TCL, [
+
+    AC_REQUIRE([ECOS_PROG_MSVC])
+    AC_REQUIRE([AC_CYGWIN])
+
+    ecos_tk_libs=""
+    ecos_tk_libdir=""
+
+    dnl Where is the Tcl installation, and what version should be used?
+    AC_MSG_CHECKING(for Tcl installation)
+    AC_ARG_WITH(tcl,[ --with-tcl=<path>        location of Tcl header and libraries])
+    AC_ARG_WITH(tcl-version,[ --with-tcl-version=<vsn> version of Tcl to be used])
+
+    dnl If using VC++ then there are no sensible default directories
+    dnl to search for a Tcl installation. Instead the user must
+    dnl supply either --with-tcl, or both --with-tcl-header and
+    dnl --with-tcl-lib.
+    dnl
+    dnl Also when using VC++ there is no tclConfig.sh file to
+    dnl consult about which libraries are needed. Instead that
+    dnl information is hard-wired here.
+    if test "${MSVC}" = "yes" ; then
+        AC_ARG_WITH(tcl-header,[ --with-tcl-header=<path> location of Tcl header])
+        AC_ARG_WITH(tcl-lib,[ --with-tcl-lib=<path>    location of Tcl libraries])
+        ecos_tcl_incdir=""
+       ecos_tcl_libdir=""
+        if test "${with_tcl_version+set}" != set ; then
+            AC_MSG_ERROR(You must specify a Tcl version using --with-tcl-version=<vsn>)
+        fi
+        if test "${with_tcl_header+set}" = set ; then
+            ecos_tcl_incdir=${with_tcl_header}
+        elif test "${with_tcl+set}" = set ; then
+            ecos_tcl_incdir="${with_tcl}/include"
+        else
+            AC_MSG_ERROR(You must specify a Tcl installation with either --with-tcl=<path> or --with-tcl-header=<path>)
+        fi
+        if test "${with_tcl_lib+set}" = set; then
+            ecos_tcl_libdir=${with_tcl_lib}
+        elif test "${with_tcl+set}" = set; then
+            ecos_tcl_libdir="${with_tcl}/lib"
+        else
+            AC_MSG_ERROR(You must specify a Tcl installation with either --with-tcl=<path> or --with-tcl-lib=<path>)
+        fi
+  
+        dnl Sanity check, make sure that there is a tcl.h header file.
+        dnl If not then there is no point in proceeding.
+        if test \! -r "${ecos_tcl_incdir}/tcl.h" ; then
+            AC_MSG_ERROR([unable to locate Tcl header file tcl.h])
+        fi
+
+        ECOS_MSVC_PATH(ecos_tcl_incdir)
+        ECOS_MSVC_PATH(ecos_tcl_libdir)
+        ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_tcl_incdir}\""
+        ecos_LIBS="${ecos_LIBS} tcl${with_tcl_version}.lib"
+        ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_tcl_libdir}\""
+
+        dnl FIXME: what libraries are needed for a tk application under VC++?
+        dnl        and can the version be determined more accurately?
+        ecos_tk_libs=""
+
+    else
+       dnl Try to find tclConfig.sh
+       possibles=""
+       if test "${with_tcl+set}" = set ; then
+           possibles="${with_tcl}/lib"
+            if test "${with_tcl_version+set}" = set ; then
+               possibles="${possibles} ${with_tcl}/lib/tcl${with_tcl_version}"
+           fi
+        fi
+       possibles="${possibles} ${prefix}/lib"
+       if test "${with_tcl_version+set}" = set ; then
+           possibles="${possibles} ${prefix}/lib/tcl${with_tcl_version}"
+       fi
+       possibles="${possibles} /usr/lib"
+       if test "${with_tcl_version+set}" = set ; then
+           possibles="${possibles} /usr/lib/tcl${with_tcl_version}"
+       fi
+       AC_FIND_FILE("tclConfig.sh", ${possibles}, tclconfig)
+       if test \! -r "${tclconfig}/tclConfig.sh" ; then
+           AC_MSG_ERROR(unable to locate Tcl configuration file tclConfig.sh)
+       else
+           . ${tclconfig}/tclConfig.sh
+
+           dnl Now we need to figure out where to find the Tcl header files.
+           dnl tclConfig.sh may define a variable TCL_INC_DIR, otherwise
+           dnl use TCL_PREFIX/include
+           if test -z "${TCL_INC_DIR}" ; then
+               ecos_tcl_incdir="${TCL_PREFIX}/include"
+           else
+               ecos_tcl_incdir="${TCL_INC_DIR}"
+           fi
+            if test \! -r "${ecos_tcl_incdir}/tcl.h" ; then
+               AC_MSG_ERROR(unable to locate Tcl header file tcl.h)
+           else
+               dnl On Unix systems -I/usr/include is unnecessary, and can
+               dnl cause problems on hosts where gcc is not the platform's
+               dnl default compiler because of the use of unfixed headers.
+               dnl Hence it is explicitly removed here.
+               if test "${ecos_tcl_incdir}" != "/usr/include" ; then
+                   ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_tcl_incdir}"
+               fi
+           fi
+
+           dnl There should be a variable TCL_LIB_SPEC which defines
+           dnl exactly how to link with Tcl. Unfortunately this is not
+           dnl 100% guaranteed, so a backup solution is still needed.
+           dnl NOTE: there is also TCL_LIBS defining additional libraries
+           dnl such as -ldl. That may have to be added to ecos_LIBS.
+           if test -z "${TCL_LIB_SPEC}" -a "${with_tcl_version+set}" = set ; then
+               AC_FIND_FILE("libtcl${with_tcl_version}.a", ${possibles}, libtcl)
+               if test -r "${libtcl}/libtcl${with_tcl_version}.a" ; then
+                   TCL_LIB_SPEC="-L${libtcl} -ltcl${with_tcl_version}"
+               fi
+           fi
+           if test -z "${TCL_LIB_SPEC}" ; then
+               AC_FIND_FILE("libtcl.a", ${possibles}, libtcl)
+               if test -r "${libtcl}/libtcl.a" ; then
+                   TCL_LIB_SPEC="-L${libtcl} -ltcl"
+               fi
+           fi
+           if test -z "${TCL_LIB_SPEC}" ; then
+               AC_MSG_ERROR(${tclconfig}/tclConfig.sh does not define TCL_LIB_SPEC, and unable to find libtcl.a)
+           fi
+           ecos_LIBS="${ecos_LIBS} ${TCL_LIB_SPEC}"
+
+           dnl Next, look for tkConfig.sh
+           possibles=`echo ${possibles} | sed -e 's,tcl,tk,g'`
+           AC_FIND_FILE("tkConfig.sh", ${possibles}, tkconfig)
+           if test \! -r "${tkconfig}/tkConfig.sh" ; then
+               AC_MSG_ERROR(unable to locate Tk config file tkConfig.sh)
+           else
+               . ${tkconfig}/tkConfig.sh
+               if test -z "${TK_INC_DIR}" ; then
+                   if test "${TK_PREFIX}" = "/usr" ; then
+                       ecos_tk_includes="${TK_XINCLUDES}"
+                   else
+                       ecos_tk_includes="-I${TK_PREFIX}/include ${TK_XINCLUDES}"
+                   fi
+               else
+                   ecos_tk_includes="-I${TK_INC_DIR} ${TK_XINCLUDES}"
+               fi
+
+               dnl As with TCL_LIB_SPEC, TK_LIB_SPEC may be empty
+               if test -z "${TK_LIB_SPEC}" -a "${with_tcl_version+set}" = set ; then
+                   AC_FIND_FILE("libtk${with_tcl_version}.a", ${possibles}, libtk)
+                   if test -r "${libtk}/libtk${with_tcl_version}.a" ; then
+                       TK_LIB_SPEC="-L${libtk} -ltk${with_tcl_version}"
+                   fi
+               fi
+               if test -z "${TK_LIB_SPEC}" ; then
+                   AC_FIND_FILE("libtk.a", ${possibles}, libtk)
+                   if test -r "${libtk}/libtk.a" ; then
+                       TK_LIB_SPEC="-L${libtk} -ltk"
+                   fi
+               fi
+               if test -z "${TK_LIB_SPEC}" ; then
+                   AC_MSG_ERROR(${tkconfig}/tkConfig.sh does not define TK_LIB_SPEC, and unable to find libtk.a)
+               fi
+               ecos_tk_libs="${TK_LIB_SPEC} ${TK_LIBS}"
+           fi
+       fi
+    fi
+
+    AC_MSG_RESULT([-I${ecos_tcl_incdir} ${TCL_LIB_SPEC}])
+    AC_SUBST(ecos_tk_includes)
+    AC_SUBST(ecos_tk_libs)
+])
+
+dnl ====================================================================
+dnl Search for the infrastructure headers. Usually these can be picked
+dnl up from host/infra in the build tree. This macro updates
+dnl ecos_INCLUDES, ecos_LDADD and ecos_LIBS appropriately. In addition
+dnl it defines new variables ecos_infra_incdir and ecos_infra_libdir,
+dnl useful for listing explicit dependencies.
+dnl
+dnl This macro should only be used in configure scripts that run after
+dnl the infrastructure has been configured because it relies on the
+dnl infra directory already having been created in the build tree.
+
+AC_DEFUN(ECOS_PATH_INFRA, [
+    AC_MSG_CHECKING([for eCos host-side infrastructure])
+
+    dnl Where are we in the build tree? First assume that we are in the host
+    dnl tree, thus allowing configury of just the host-side. If that fails
+    dnl assume we can be anywhere.
+    infra_builddir=""
+    possibles=".. ../.. ../../.. ../../../.. ../../../../.."
+    AC_FIND_DIR("infra", ${possibles}, infra_builddir)
+    if test "${infra_builddir}" = "" ; then
+      possibles="../host ../../host ../../../host ../../../../host ../../../../../host ../../../../../../host"
+      AC_FIND_DIR("infra", ${possibles}, infra_builddir)
+    fi
+    if test "${infra_builddir}" != "" ; then
+        infra_builddir="${infra_builddir}/infra"
+        infra_builddir=`cd ${infra_builddir} && /bin/pwd`
+    fi
+
+    ecos_infra_incdir=""
+    ecos_infra_libdir=""
+    ecos_infra_libs=""
+
+    AC_ARG_WITH(infra-header,[ --with-infra-header=<path> location of eCos infrastructure headers])
+    AC_ARG_WITH(infra-lib,[ --with-infra-lib=<path>    location of eCos infrastructure library])
+    AC_ARG_WITH(infra,[ --with-infra=<path>        location of eCos infrastructure installation])
+
+    if test "${with_infra_header+set}" = "set"; then
+        ecos_infra_incdir="${with_infra_header}"
+    elif test "${with_infra+set}" = "set"; then
+        ecos_infra_incdir="${with_infra}/include"
+    elif test "${infra_builddir}" != "" ; then
+        ecos_infra_incdir="${infra_builddir}"
+    else
+        AC_MSG_ERROR([infrastructure headers not found])
+    fi
+    if test "${MSVC}" = "yes" ; then
+        ecos_msvc_infra_incdir=${ecos_infra_incdir}
+        ECOS_MSVC_PATH(ecos_msvc_infra_incdir)
+        ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_msvc_infra_incdir}\""
+    else
+        ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_infra_incdir}"
+    fi
+
+    if test "${with_infra_lib+set}" = "set"; then
+        ecos_infra_libdir="${with_infra_lib}"
+    elif test "${with_infra+set}" = "set"; then
+        ecos_infra_libdir="${with_infra}/lib"
+    elif test "${infra_builddir}" != "" ; then
+        ecos_infra_libdir="${infra_builddir}"
+    else
+        AC_MSG_ERROR([infrastructure library not found])
+    fi
+    if test "${MSVC}" = "yes" ; then
+        ecos_msvc_infra_libdir=${ecos_infra_libdir}
+        ECOS_MSVC_PATH(ecos_msvc_infra_libdir)
+        ecos_LIBS="${ecos_LIBS} cyginfra.lib"
+        ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_msvc_infra_libdir}\""
+    else
+        ecos_LIBS="${ecos_LIBS} -lcyginfra"
+        ecos_LDADD="${ecos_LDADD} -L${ecos_infra_libdir}"
+    fi
+
+    AC_SUBST(ecos_infra_incdir)
+    AC_SUBST(ecos_infra_libdir)
+    AC_MSG_RESULT(-I[${ecos_infra_incdir} -L${ecos_infra_libdir}])
+])
+
+dnl ====================================================================
+dnl And a very similar macro for libcdl, but note that the headers
+dnl are in the source tree rather than the build tree.
+
+AC_DEFUN(ECOS_PATH_LIBCDL, [
+    AC_MSG_CHECKING([for libcdl])
+
+    dnl Where are we in the source tree?
+    libcdl_srcdir=""
+    possibles="${srcdir}/.. ${srcdir}/../.. ${srcdir}/../../.. ${srcdir}/../../../.. ${srcdir}/../../../../.."
+    AC_FIND_DIR("libcdl", ${possibles}, libcdl_srcdir)
+    if test "${libcdl_srcdir}" = "" ; then
+      possibles="${srcdir}/../host ${srcdir}/../../host ${srcdir}/../../../host ${srcdir}/../../../../host ${srcdir}/../../../../../host ${srcdir}/../../../../../../host"
+      AC_FIND_DIR("libcdl", ${possibles}, libcdl_srcdir)
+    fi
+    if test "${libcdl_srcdir}" != "" ; then
+        libcdl_srcdir="${libcdl_srcdir}/libcdl"
+        libcdl_srcdir=`cd ${libcdl_srcdir} && /bin/pwd`
+    fi
+
+    dnl And where are we in the build tree?
+    libcdl_builddir=""
+    possibles=".. ../.. ../../.. ../../../.. ../../../../.."
+    AC_FIND_DIR("libcdl", ${possibles}, libcdl_builddir)
+    if test "${libcdl_builddir}" = "" ; then
+      possibles="../host ../../host ../../../host ../../../../host ../../../../../host ../../../../../../host"
+      AC_FIND_DIR("libcdl", ${possibles}, libcdl_builddir)
+    fi
+    if test "${libcdl_builddir}" != "" ; then
+        libcdl_builddir="${libcdl_builddir}/libcdl"
+        libcdl_builddir=`cd ${libcdl_builddir} && /bin/pwd`
+    fi
+
+    ecos_libcdl_incdir=""
+    ecos_libcdl_libdir=""
+    ecos_libcdl_libs=""
+
+    AC_ARG_WITH(libcdl-header,[ --with-libcdl-header=<path> location of eCos libcdl headers])
+    AC_ARG_WITH(libcdl-lib,[ --with-libcdl-lib=<path>    location of eCos libcdl library])
+    AC_ARG_WITH(libcdl,[ --with-libcdl=<path>        location of eCos libcdl installation])
+
+    if test "${with_libcdl_header+set}" = "set"; then
+        ecos_libcdl_incdir="${with_libcdl_header}"
+    elif test "${with_libcdl+set}" = "set"; then
+        ecos_libcdl_incdir="${with_libcdl}/include"
+    elif test "${libcdl_srcdir}" != "" ; then
+        ecos_libcdl_incdir="${libcdl_srcdir}"
+    fi
+    if test \! -r "${ecos_libcdl_incdir}/cdl.hxx" ; then
+        AC_MSG_ERROR([libcdl headers not found])
+    fi
+    if test "${MSVC}" = "yes" ; then
+        ecos_msvc_libcdl_incdir="${ecos_libcdl_incdir}"
+        ECOS_MSVC_PATH(ecos_msvc_libcdl_incdir)
+        ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_msvc_libcdl_incdir}\""
+    else
+        ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_libcdl_incdir}"
+    fi
+
+    if test "${with_libcdl_lib+set}" = "set"; then
+        ecos_libcdl_libdir="${with_libcdl_lib}"
+    elif test "${with_libcdl+set}" = "set"; then
+        ecos_libcdl_libdir="${with_libcdl}/lib"
+    elif test "${libcdl_builddir}" != "" ; then
+        ecos_libcdl_libdir="${libcdl_builddir}"
+    else
+        AC_MSG_ERROR([libcdl library not found])
+    fi
+    if test "${MSVC}" = "yes" ; then
+        ecos_msvc_libcdl_libdir=${ecos_libcdl_libdir}
+        ECOS_MSVC_PATH(ecos_msvc_libcdl_libdir)
+        ecos_LIBS="${ecos_LIBS} cdl.lib"
+        ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_msvc_libcdl_libdir}\""
+    else
+        ecos_LIBS="${ecos_LIBS} -lcdl"
+        ecos_LDADD="${ecos_LDADD} -L${ecos_libcdl_libdir}"
+    fi
+
+    AC_SUBST(ecos_libcdl_incdir)
+    AC_SUBST(ecos_libcdl_libdir)
+    AC_MSG_RESULT([-I${ecos_libcdl_incdir} -L${ecos_libcdl_libdir}])
+])
+
+dnl ====================================================================
+dnl Look for a 64 bit data type. It is necessary to check both C and C++
+dnl compilers.
+dnl
+dnl A better implementation would check whether or not AC_PROG_CC and
+dnl AC_PROG_CXX have been invoked and only test the appropriate
+dnl compiler.
+dnl
+dnl When cross-compiling, default to long long on the assumption that
+dnl gcc/g++ must be used and long long is likely to be the 64 bit data
+dnl type. This is not guaranteed, but sufficiently likely to meet
+dnl the requirements for the time being. The CHECK_SIZEOF() macro
+dnl might be another way to get the desired information.
+
+AC_DEFUN(ECOS_TYPE_64bit, [
+    AC_REQUIRE([AC_PROG_CC])
+    AC_REQUIRE([AC_PROG_CXX])
+
+    AC_CACHE_CHECK("for a 64 bit data type",ecos_cv_type_64bit,[
+        for type in "long" "long long" "__int64"; do
+            AC_LANG_SAVE
+            AC_LANG_C
+            AC_TRY_RUN([
+                main() {
+                    return 8 != sizeof($type);
+                }
+            ],ctype_64bit=$type,ctype_64bit="unknown",ctype_64bit="long long")
+            AC_LANG_CPLUSPLUS
+            AC_TRY_RUN([
+                int main(int argc, char ** argv) {
+                    return 8 != sizeof($type);
+                }
+            ],cxxtype_64bit=$type,cxxtype_64bit="unknown",cxxtype_64bit="long long")
+            AC_LANG_RESTORE
+            if test "${ctype_64bit}" = "${type}" -a "${cxxtype_64bit}" = "${type}"; then
+                ecos_cv_type_64bit="${type}"
+                break
+            fi
+        done
+    ])
+    if test "${ecos_cv_type_64bit}" = ""; then
+        AC_MSG_ERROR(Unable to figure out how to do 64 bit arithmetic)
+    else
+        if test "${ecos_cv_type_64bit}" != "long long"; then
+            AC_DEFINE_UNQUOTED(cyg_halint64,${ecos_cv_type_64bit})
+            AC_DEFINE_UNQUOTED(cyg_halcount64,${ecos_cv_type_64bit})
+        fi
+    fi
+])
+
+dnl ====================================================================
+dnl Check that both the C and C++ compilers support __PRETTY_FUNCTION__
+
+AC_DEFUN(ECOS_C_PRETTY_FUNCTION,[
+    AC_REQUIRE([AC_PROG_CC])
+    AC_REQUIRE([AC_PROG_CXX])
+
+    AC_CACHE_CHECK("for __PRETTY_FUNCTION__ support",ecos_cv_c_pretty_function,[
+        AC_LANG_SAVE
+        AC_LANG_C
+        AC_TRY_LINK(
+            [#include <stdio.h>],
+            [puts(__PRETTY_FUNCTION__);],
+            c_ok="yes",
+            c_ok="no"
+        )
+        AC_LANG_CPLUSPLUS
+        AC_TRY_LINK(
+            [#include <cstdio>],
+            [puts(__PRETTY_FUNCTION__);],
+            cxx_ok="yes",
+            cxx_ok="no"
+        )
+        AC_LANG_RESTORE
+        if test "${c_ok}" = "yes" -a "${cxx_ok}" = "yes"; then
+            ecos_cv_c_pretty_function="yes"
+        fi
+    ])
+    if test "${ecos_cv_c_pretty_function}" = "yes"; then
+        AC_DEFINE(CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO)
+    fi
+])
+
+dnl ====================================================================
+dnl During installation eCos package-specific host-side code should be
+dnl versioned in the same way as the packages themselves, allowing
+dnl different versions to coexist in one installation. This is analogous
+dnl to having multiple versions of a shared library installed so that
+dnl applications can load whichever one they were linked with.
+dnl
+dnl To support all this the host-side code needs access to a number
+dnl of directory names:
+dnl     ECOS_REPOSITORY    e.g. ~/ecc/ecc
+dnl     PACKAGE_DIR        e.g. hal/synth/arch
+dnl     PACKAGE_VERSION    e.g. current
+dnl     PACKAGE_INSTALL    e.g. hal/synth/arch/current
+dnl
+dnl These, together with the standard variable libexecdir, allow
+dnl the host-side code to navigate around both source and install
+dnl trees.
+
+AC_DEFUN(ECOS_PACKAGE_DIRS,[
+
+    dnl srcdir will be something like <path>/packages/<package_path>/<version>/host
+    package_dir=`cd ${srcdir} && /bin/pwd`
+    PACKAGE_VERSION=`dirname ${package_dir}`
+    PACKAGE_VERSION=`basename ${PACKAGE_VERSION}`
+
+    dnl Now look for an "acsupport" directory as a good way of identifying
+    dnl the root of the repository. Assume that this does not clash with
+    dnl any real packages in the repository. Also assume that no silly games
+    dnl are being played with symlinks.
+    package_dir=`dirname ${package_dir}`
+    package_dir=`dirname ${package_dir}`
+
+    possibles="${package_dir}/.. ${package_dir}/../.. ${package_dir}/../../.. ${package_dir}/../../../.."
+    possibles="${possibles} ${package_dir}/../../../../.. ${package_dir}/../../../../../.." 
+    AC_FIND_DIR("acsupport", ${possibles}, repository_root)
+    if test "${repository_root}" = "" ; then
+        AC_MSG_ERROR([Failed to identify this package's position within the eCos repository])
+    fi
+    dnl repository_root will still contain the ..'s, instead of an absolute path
+    ECOS_REPOSITORY=`cd "${repository_root}/packages/pkgconf/.." && /bin/pwd`
+
+    dnl Now we have two absolute paths, so just remove one from the other
+    PACKAGE_DIR=`echo ${package_dir} | sed -e "s:${ECOS_REPOSITORY}/::"`
+
+    dnl To avoid creating too many subdirectories on the host-side, turn
+    dnl e.g. hal/synth/arch into hal_synth_arch. Theoretically this could
+    dnl go wrong because multiple packages could map onto the same string,
+    dnl but in practice there should be a net reduction in complexity.
+    dnl bartv: / to _ conversion disabled for now, 5 March 2002
+    PACKAGE_INSTALL="${PACKAGE_DIR}/${PACKAGE_VERSION}"
+    dnl PACKAGE_INSTALL=`echo ${PACKAGE_INSTALL} | sed -e "s:/:_:g"`
+
+    AC_SUBST(ECOS_REPOSITORY)
+    AC_SUBST(PACKAGE_DIR)
+    AC_SUBST(PACKAGE_VERSION)
+    AC_SUBST(PACKAGE_INSTALL)
+])