1 dnl Process this file with aclocal to get an aclocal.m4 file. Then
2 dnl process that with autoconf.
3 dnl ====================================================================
7 dnl Various autoconf macros that are shared between different
10 dnl ====================================================================
11 dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN####
12 dnl ----------------------------------------------------------------------------
13 dnl Copyright (C) 2002, 2003 Bart Veer
14 dnl Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
16 dnl This file is part of the eCos host tools.
18 dnl This program is free software; you can redistribute it and/or modify it
19 dnl under the terms of the GNU General Public License as published by the Free
20 dnl Software Foundation; either version 2 of the License, or (at your option)
21 dnl any later version.
23 dnl This program is distributed in the hope that it will be useful, but WITHOUT
24 dnl ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
25 dnl FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
28 dnl You should have received a copy of the GNU General Public License along with
29 dnl this program; if not, write to the Free Software Foundation, Inc.,
30 dnl 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
32 dnl ----------------------------------------------------------------------------
33 dnl ####ECOSHOSTGPLCOPYRIGHTEND####
34 dnl ====================================================================
35 dnl#####DESCRIPTIONBEGIN####
42 dnl####DESCRIPTIONEND####
43 dnl ====================================================================
45 dnl ====================================================================
46 dnl Ensure that configure is not being run in the source tree, i.e.
47 dnl that a separate build tree has been created. This is not absolutely
48 dnl necessary at the time of writing but may become so in future, and
51 AC_DEFUN(ECOS_CHECK_BUILD_ne_SRC,[
52 AC_MSG_CHECKING([that a separate build tree is being used])
54 if test "${srcdir}" = "." ; then
57 if test "${ecos_cwd}" = "${srcdir}" ; then
59 AC_MSG_ERROR([This configure script should not be run inside the source tree. Instead please use a separate build tree])
65 dnl ====================================================================
66 dnl The AM_INIT_AUTOMAKE() will define a symbol VERSION for the
67 dnl package's version number. Unfortunately this symbol is rather
68 dnl hard to share if several different packages are involved, so this
69 dnl macro is used to define an alternative symbol
71 AC_DEFUN(ECOS_SUBST_VERSION,[
72 AC_REQUIRE([AM_INIT_AUTOMAKE])
73 ifelse($#,1,,AC_MSG_ERROR([Invalid number of arguments passed to ECOS SUBST_VERSION]))
74 AC_DEFINE_UNQUOTED($1, "$VERSION")
77 dnl --------------------------------------------------------------------
78 dnl Convert a cygwin pathname to something acceptable to VC++ (but
79 dnl still invoked from bash and cygwin's make). This means using
80 dnl the cygpath utility and then translating any backslashes into
81 dnl forward slashes to avoid confusing make.
83 AC_DEFUN(ECOS_MSVC_PATH, [
84 AC_REQUIRE([ECOS_PROG_MSVC])
85 ifelse($#, 1, , AC_MSG_ERROR("Invalid number of arguments passed to ECOS MSVC_PATH"))
86 if test "${MSVC}" = "yes" ; then
87 $1=`cygpath -w ${$1} | tr \\\\\\\\ /`
91 dnl ====================================================================
92 dnl An internal utility to define eCos variants of various compilation
93 dnl related flags. The aim is to avoid messing with CFLAGS, LIBS, and
94 dnl so on because those are used for feature tests as well as for
95 dnl passing on to the application.
96 AC_DEFUN(ECOS_PROG_DEFINE_COMPILER_FLAGS,[
102 AC_SUBST(ecos_CFLAGS)
103 AC_SUBST(ecos_CXXFLAGS)
105 AC_SUBST(ecos_INCLUDES)
109 dnl For historical reasons some of the eCos host-side software can be
110 dnl built with Visual C++ as well as g++. The user can specify this
111 dnl at configure time using CC=cl, where cl.exe is the compiler driver.
112 dnl This macro will set the variable MSVC to "yes" or to "no" depending
113 dnl on whether or not VC++ is being used, analogous to the variable
114 dnl GCC set by AC_PROG_CC. It provides support for an automake
115 dnl conditional thus allowing the makefile to adapt somewhat to the
116 dnl compiler being used. Finally it fills in the ECOS_INCLUDES,
117 dnl ECOS_LIBS and ECOS_LDADD variables with suitable initial values.
119 AC_DEFUN(ECOS_PROG_MSVC,[
120 AC_REQUIRE([AC_PROG_CC])
121 AC_REQUIRE([AC_PROG_CXX])
122 AC_REQUIRE([ECOS_PROG_DEFINE_COMPILER_FLAGS])
124 AC_MSG_CHECKING("for Visual C++")
126 if test "${CC}" = "cl" ; then
129 MSVC_SRCDIR=${srcdir}
130 ECOS_MSVC_PATH(MSVC_SRCDIR)
131 AC_SUBST(MSVC_SRCDIR)
132 ecos_INCLUDES="${ecos_INCLUDES} \"-I${MSVC_SRCDIR}\""
134 ecos_LIBS="advapi32.lib"
136 AM_CONDITIONAL(MSVC, test "${MSVC}" = "yes")
137 if test "${MSVC}" = "yes" ; then
138 AC_MSG_RESULT([unfortunately yes])
144 dnl ====================================================================
145 dnl Set up sensible flags for the various different compilers. This
146 dnl is achieved by manipulating AM-CFLAGS and AM-CXXFLAGS via a subst,
147 dnl plus undoing the setting of CFLAGS and CXXFLAGS done by
148 dnl the AC_PROC_CC and AC_PROG_CXX macros (e.g. setting the default
149 dnl compilation flags to -O2). Note that this relies
150 dnl on knowing about the internals of those macros.
152 dnl There is little point in checking the cache: this macro does
153 dnl not do any feature tests so checking the cache would probably
154 dnl be more expensive than doing the work here.
156 dnl For now the only supported compilers are gcc/g++ and VC++. Attempts
157 dnl to use another compiler will result in an error at configure-time.
158 AC_DEFUN(ECOS_PROG_STANDARD_COMPILER_FLAGS, [
159 AC_REQUIRE([AC_PROG_CC])
160 AC_REQUIRE([AC_PROG_CXX])
161 AC_REQUIRE([ECOS_PROG_DEFINE_COMPILER_FLAGS])
162 AC_REQUIRE([ECOS_PROG_MSVC])
164 AC_MSG_CHECKING("the default compiler flags")
166 dnl Add a user-settable flag to control whether or debugging info is
167 dnl incorporated at compile-time.
168 ecosflags_enable_debug="no"
169 AC_ARG_ENABLE(debug,[ --enable-debug do a debug rather than a release build],
170 [case "${enableval}" in
171 yes) ecosflags_enable_debug="yes" ;;
172 *) ecosflags_enable_debug="no" ;;
175 dnl For VC++ builds also provide a flag for ANSI vs. unicode builds.
176 dnl For now this does not actually affect the compiler flags.
177 dnl NOTE: there may also have to be a flag to control whether or
178 dnl the VC++ multi-threading flags are enabled.
179 ecosflags_enable_ansi="no"
180 if test "${MSVC}" = "yes" ; then
181 AC_ARG_ENABLE(ansi,[ --enable-ansi do an ANSI rather than a unicode build],
182 [case "${enableval}" in
183 yes) ecosflags_enable_ansi="yes" ;;
184 *) ecosflags_enable_ansi="no" ;;
188 dnl Now we know what the user is after.
189 if test "${GCC}" = "yes" ; then
190 ecos_CFLAGS="${ecos_CFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs"
191 ecos_CXXFLAGS="${ecos_CXXFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Woverloaded-virtual"
192 elif test "${MSVC}" = "yes" ; then
193 ecos_CFLAGS="${ecos_CFLAGS} -nologo -W3"
194 ecos_CXXFLAGS="${ecos_CXXFLAGS} -nologo -W3 -GR -GX"
196 AC_MSG_ERROR("default flags for ${CC} are not known")
199 dnl Choose between debugging and optimization.
200 if test "${ecosflags_enable_debug}" = "yes" ; then
201 if test "${GCC}" = "yes" ; then
202 ecos_CFLAGS="${ecos_CFLAGS} -g -O0"
203 ecos_CXXFLAGS="${ecos_CXXFLAGS} -g -O0"
204 elif test "${MSVC}" = "yes" ; then
205 ecos_CFLAGS="${ecos_CFLAGS} -MDd -Zi"
206 ecos_CXXFLAGS="${ecos_CXXFLAGS} -MDd -Zi"
209 dnl For now building with g++ implies -O0 rather than -O2. The
210 dnl compile-time performance of g++ at -O2 has been disappointing
211 dnl for quite some time, and the eCos host-side code is not
212 dnl sufficiently cpu-intensive to require -O2.
213 if test "${GCC}" = "yes" ; then
214 ecos_CFLAGS="${ecos_CFLAGS} -O0"
215 ecos_CXXFLAGS="${ecos_CXXFLAGS} -O0"
216 elif test "${MSVC}" = "yes" ; then
217 ecos_CFLAGS="${ecos_CFLAGS} -MD -O2"
218 ecos_CXXFLAGS="${ecos_CXXFLAGS} -MD -O2"
222 CFLAGS="${ac_save_CFLAGS}"
223 CXXFLAGS="${ac_save_CXXFLAGS}"
228 dnl --------------------------------------------------------------------
229 dnl User-settable options for assertions and tracing.
231 dnl The settable options are:
232 dnl --disable-asserts
233 dnl --disable-preconditions
234 dnl --disable-postconditions
235 dnl --disable-invariants
236 dnl --disable-loopinvariants
237 dnl --disable-tracing
238 dnl --disable-fntracing
240 AC_DEFUN(ECOS_ARG_INFRASTRUCTURE, [
242 AC_REQUIRE([ECOS_PROG_STANDARD_COMPILER_FLAGS])
244 if test "${ecosflags_enable_debug}" = "yes" ; then
245 ecosinfra_asserts="yes"
246 ecosinfra_preconditions="yes"
247 ecosinfra_postconditions="yes"
248 ecosinfra_invariants="yes"
249 ecosinfra_loopinvariants="yes"
250 ecosinfra_tracing="yes"
251 ecosinfra_fntracing="yes"
253 ecosinfra_asserts="no"
254 ecosinfra_preconditions="no"
255 ecosinfra_postconditions="no"
256 ecosinfra_invariants="no"
257 ecosinfra_loopinvariants="no"
258 ecosinfra_tracing="no"
259 ecosinfra_fntracing="no"
262 AC_ARG_ENABLE(asserts,[ --disable-asserts disable all assertions],
263 [case "${enableval}" in
264 yes) ecosinfra_asserts="yes" ;;
265 no) ecosinfra_asserts="no" ;;
266 *) AC_MSG_ERROR([bad value ${enableval} for disable-asserts option]) ;;
268 if test "${ecosinfra_asserts}" = "yes"; then
269 AC_DEFINE(CYGDBG_USE_ASSERTS)
272 AC_ARG_ENABLE(preconditions, [ --disable-preconditions disable a subset of the assertions],
273 [case "${enableval}" in
274 yes) ecosinfra_preconditions="yes" ;;
275 no) ecosinfra_preconditions="no" ;;
276 *) AC_MSG_ERROR([bad value ${enableval} for disable-preconditions option]) ;;
278 if test "${ecosinfra_preconditions}" = "yes"; then
279 AC_DEFINE(CYGDBG_INFRA_DEBUG_PRECONDITIONS)
282 AC_ARG_ENABLE(postconditions, [ --disable-postconditions disable a subset of the assertions],
283 [case "${enableval}" in
284 yes) ecosinfra_postconditions="yes" ;;
285 no) ecosinfra_postconditions="no" ;;
286 *) AC_MSG_ERROR([bad value ${enableval} for disable-postconditions option]) ;;
288 if test "${ecosinfra_postconditions}" = "yes"; then
289 AC_DEFINE(CYGDBG_INFRA_DEBUG_POSTCONDITIONS)
292 AC_ARG_ENABLE(invariants, [ --disable-invariants disable a subset of the assertions],
293 [case "${enableval}" in
294 yes) ecosinfra_invariants="yes" ;;
295 no) ecosinfra_invariants="no" ;;
296 *) AC_MSG_ERROR([bad value ${enableval} for disable-invariants option]) ;;
298 if test "${ecosinfra_invariants}" = "yes"; then
299 AC_DEFINE(CYGDBG_INFRA_DEBUG_INVARIANTS)
302 AC_ARG_ENABLE(loopinvariants, [ --disable-loopinvariants disable a subset of the assertions],
303 [case "${enableval}" in
304 yes) ecosinfra_loopinvariants="yes" ;;
305 no) ecosinfra_loopinvariants="no" ;;
306 *) AC_MSG_ERROR([bad value ${enableval} for disable-loopinvariants option]) ;;
308 if test "${ecosinfra_loopinvariants}" = "yes"; then
309 AC_DEFINE(CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS)
312 AC_ARG_ENABLE(tracing,[ --disable-tracing disable tracing],
313 [case "${enableval}" in
314 yes) ecosinfra_tracing="yes" ;;
315 no) ecosinfra_tracing="no" ;;
316 *) AC_MSG_ERROR([bad value ${enableval} for disable-tracing option]) ;;
318 if test "${ecosinfra_tracing}" = "yes"; then
319 AC_DEFINE(CYGDBG_USE_TRACING)
322 AC_ARG_ENABLE(fntracing,[ --disable-fntracing disable function entry/exit tracing],
323 [case "${enableval}" in
324 yes) ecosinfra_fntracing="yes" ;;
325 no) ecosinfra_fntracing=no ;;
326 *) AC_MSG_ERROR([bad value ${enableval} for disable-fntracing option]) ;;
328 if test "${ecosinfra_fntracing}" = "yes"; then
329 AC_DEFINE(CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS)
333 dnl ====================================================================
334 dnl Inspired by KDE's autoconfig
335 dnl This macro takes three Arguments like this:
336 dnl AC_FIND_FILE(foo.h, $incdirs, incdir)
337 dnl the filename to look for, the list of paths to check and
338 dnl the variable with the result.
340 AC_DEFUN(AC_FIND_FILE,[
343 if test -r "$i/$1"; then
350 dnl ====================================================================
351 dnl Variation of the above.
352 dnl This macro takes three Arguments like this:
353 dnl AC_FIND_DIR(infra, $incdirs, incdir)
354 dnl the directory name to look for, the list of paths to check and
355 dnl the variable with the result.
357 AC_DEFUN(AC_FIND_DIR,[
360 if test -d "$i/$1"; then
367 dnl ====================================================================
368 dnl Work out details of the Tcl/tk installation that should be used.
369 dnl In theory this is simple: when Tcl is installed in <tcl_prefix>
370 dnl (usually /usr) there should be a file <tcl_prefix>/lib/tclConfig.sh
371 dnl which defines exactly how to build Tcl-based applications. Of course
372 dnl Tcl may be installed anywhere, not just in /usr, so it is necessary
373 dnl to do some searching. There is a command-line argument
374 dnl --with-tcl=<path> to specify the Tcl installation, so the macro
375 dnl can search for <with_tcl>/lib/tclConfig.sh, <prefix>/lib/tclConfig.sh
376 dnl and /usr/lib/tclConfig.sh
378 dnl Unfortunately not all systems use this convention. For example,
379 dnl at the time of writing Debian installs tclConfig.sh in a versioned
380 dnl subdirectory /usr/lib/tcl8.3/tclConfig.sh. Hence there is an
381 dnl additional argument --with-tcl-version=<vsn> which is used to
382 dnl extend the search path.
384 dnl For VC++ builds the situation is different again. Tcl may be
385 dnl installed anywhere, so the data in tclConfig.sh is not useful
386 dnl (and that file may not be provided at all). Instead --with-tcl
387 dnl must be used to specify the path. Alternatively separate paths
388 dnl for headers and libraries can be specified using --with-tcl-header
389 dnl and --with-tcl-lib. Usually it will also be necessary to specify
390 dnl the library version number using --with-tcl-version.
392 dnl This adds two main command-line options, --with-tcl=<prefix> to
393 dnl specify the Tcl install directory, and --with-tcl-version=<vsn>
394 dnl to control which version of Tcl should be used. For finer-grained
395 dnl control there are additional options --with-tcl-header and
396 dnl --with-tcl-version. It is assumed that Tcl and Tk are installed
397 dnl in the same place.
399 dnl On Unix systems and under cygwin there should be a file
400 dnl $(tcl_prefix)/lib/tclConfig.sh containing all the information
401 dnl needed for Tcl. This file is consulted and the appropriate
402 dnl variables extracted. Similar information for Tk lives in
403 dnl tkConfig.sh. As a useful side effect all variables defined
404 dnl in those scripts can be accessed.
406 dnl To confuse matters, subtly different naming conventions are used
407 dnl under Unix and NT. Under Unix the Tcl library will be called
408 dnl libtcl8.0.a, libtcl8.1.a, etc. with a dot between the major and
409 dnl minor version. Under NT (including cygwin) the library will be
410 dnl called tcl80.lib, tcl81.lib, libtcl80.a, libtcl81.a, etc.
413 dnl Currently this macro assumes that Tcl is preinstalled, and not
414 dnl built alongside eCos. Specifically the macro checks that
415 dnl tcl.h can be found, plus on Unix systems tclConfig.sh and
416 dnl tkConfig.sh as well.
418 dnl This macro updates the build-related variables ecos_INCLUDES,
419 dnl ecos_LDADD, and ecos_LIBS. The latter assumes the application
420 dnl only needs Tcl. If Tk is needed as well then the variable
421 dnl ecos_tklibs should be used in addition.
423 AC_DEFUN(ECOS_PATH_TCL, [
425 AC_REQUIRE([ECOS_PROG_MSVC])
426 AC_REQUIRE([AC_CYGWIN])
431 dnl Where is the Tcl installation, and what version should be used?
432 AC_MSG_CHECKING(for Tcl installation)
433 AC_ARG_WITH(tcl,[ --with-tcl=<path> location of Tcl header and libraries])
434 AC_ARG_WITH(tcl-version,[ --with-tcl-version=<vsn> version of Tcl to be used])
436 dnl If using VC++ then there are no sensible default directories
437 dnl to search for a Tcl installation. Instead the user must
438 dnl supply either --with-tcl, or both --with-tcl-header and
441 dnl Also when using VC++ there is no tclConfig.sh file to
442 dnl consult about which libraries are needed. Instead that
443 dnl information is hard-wired here.
444 if test "${MSVC}" = "yes" ; then
445 AC_ARG_WITH(tcl-header,[ --with-tcl-header=<path> location of Tcl header])
446 AC_ARG_WITH(tcl-lib,[ --with-tcl-lib=<path> location of Tcl libraries])
449 if test "${with_tcl_version+set}" != set ; then
450 AC_MSG_ERROR(You must specify a Tcl version using --with-tcl-version=<vsn>)
452 if test "${with_tcl_header+set}" = set ; then
453 ecos_tcl_incdir=${with_tcl_header}
454 elif test "${with_tcl+set}" = set ; then
455 ecos_tcl_incdir="${with_tcl}/include"
457 AC_MSG_ERROR(You must specify a Tcl installation with either --with-tcl=<path> or --with-tcl-header=<path>)
459 if test "${with_tcl_lib+set}" = set; then
460 ecos_tcl_libdir=${with_tcl_lib}
461 elif test "${with_tcl+set}" = set; then
462 ecos_tcl_libdir="${with_tcl}/lib"
464 AC_MSG_ERROR(You must specify a Tcl installation with either --with-tcl=<path> or --with-tcl-lib=<path>)
467 dnl Sanity check, make sure that there is a tcl.h header file.
468 dnl If not then there is no point in proceeding.
469 if test \! -r "${ecos_tcl_incdir}/tcl.h" ; then
470 AC_MSG_ERROR([unable to locate Tcl header file tcl.h])
473 ECOS_MSVC_PATH(ecos_tcl_incdir)
474 ECOS_MSVC_PATH(ecos_tcl_libdir)
475 ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_tcl_incdir}\""
476 ecos_LIBS="${ecos_LIBS} tcl${with_tcl_version}.lib"
477 ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_tcl_libdir}\""
479 dnl FIXME: what libraries are needed for a tk application under VC++?
480 dnl and can the version be determined more accurately?
484 dnl Try to find tclConfig.sh
486 if test "${with_tcl+set}" = set ; then
487 possibles="${with_tcl}/lib"
488 if test "${with_tcl_version+set}" = set ; then
489 possibles="${possibles} ${with_tcl}/lib/tcl${with_tcl_version}"
492 possibles="${possibles} ${prefix}/lib"
493 if test "${with_tcl_version+set}" = set ; then
494 possibles="${possibles} ${prefix}/lib/tcl${with_tcl_version}"
496 possibles="${possibles} /usr/lib"
497 if test "${with_tcl_version+set}" = set ; then
498 possibles="${possibles} /usr/lib/tcl${with_tcl_version}"
500 AC_FIND_FILE("tclConfig.sh", ${possibles}, tclconfig)
501 if test \! -r "${tclconfig}/tclConfig.sh" ; then
502 AC_MSG_ERROR(unable to locate Tcl configuration file tclConfig.sh)
504 . ${tclconfig}/tclConfig.sh
506 dnl Now we need to figure out where to find the Tcl header files.
507 dnl tclConfig.sh may define a variable TCL_INC_DIR, otherwise
508 dnl use TCL_PREFIX/include
509 if test -z "${TCL_INC_DIR}" ; then
510 ecos_tcl_incdir="${TCL_PREFIX}/include"
512 ecos_tcl_incdir="${TCL_INC_DIR}"
514 if test \! -r "${ecos_tcl_incdir}/tcl.h" ; then
515 AC_MSG_ERROR(unable to locate Tcl header file tcl.h)
517 dnl On Unix systems -I/usr/include is unnecessary, and can
518 dnl cause problems on hosts where gcc is not the platform's
519 dnl default compiler because of the use of unfixed headers.
520 dnl Hence it is explicitly removed here.
521 if test "${ecos_tcl_incdir}" != "/usr/include" ; then
522 ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_tcl_incdir}"
526 dnl There should be a variable TCL_LIB_SPEC which defines
527 dnl exactly how to link with Tcl. Unfortunately this is not
528 dnl 100% guaranteed, so a backup solution is still needed.
529 dnl NOTE: there is also TCL_LIBS defining additional libraries
530 dnl such as -ldl. That may have to be added to ecos_LIBS.
531 if test -z "${TCL_LIB_SPEC}" -a "${with_tcl_version+set}" = set ; then
532 AC_FIND_FILE("libtcl${with_tcl_version}.a", ${possibles}, libtcl)
533 if test -r "${libtcl}/libtcl${with_tcl_version}.a" ; then
534 TCL_LIB_SPEC="-L${libtcl} -ltcl${with_tcl_version}"
537 if test -z "${TCL_LIB_SPEC}" ; then
538 AC_FIND_FILE("libtcl.a", ${possibles}, libtcl)
539 if test -r "${libtcl}/libtcl.a" ; then
540 TCL_LIB_SPEC="-L${libtcl} -ltcl"
543 if test -z "${TCL_LIB_SPEC}" ; then
544 AC_MSG_ERROR(${tclconfig}/tclConfig.sh does not define TCL_LIB_SPEC, and unable to find libtcl.a)
546 ecos_LIBS="${ecos_LIBS} ${TCL_LIB_SPEC}"
548 dnl Next, look for tkConfig.sh
549 possibles=`echo ${possibles} | sed -e 's,tcl,tk,g'`
550 AC_FIND_FILE("tkConfig.sh", ${possibles}, tkconfig)
551 if test \! -r "${tkconfig}/tkConfig.sh" ; then
552 AC_MSG_ERROR(unable to locate Tk config file tkConfig.sh)
554 . ${tkconfig}/tkConfig.sh
555 if test -z "${TK_INC_DIR}" ; then
556 if test "${TK_PREFIX}" = "/usr" ; then
557 ecos_tk_includes="${TK_XINCLUDES}"
559 ecos_tk_includes="-I${TK_PREFIX}/include ${TK_XINCLUDES}"
562 ecos_tk_includes="-I${TK_INC_DIR} ${TK_XINCLUDES}"
565 dnl As with TCL_LIB_SPEC, TK_LIB_SPEC may be empty
566 if test -z "${TK_LIB_SPEC}" -a "${with_tcl_version+set}" = set ; then
567 AC_FIND_FILE("libtk${with_tcl_version}.a", ${possibles}, libtk)
568 if test -r "${libtk}/libtk${with_tcl_version}.a" ; then
569 TK_LIB_SPEC="-L${libtk} -ltk${with_tcl_version}"
572 if test -z "${TK_LIB_SPEC}" ; then
573 AC_FIND_FILE("libtk.a", ${possibles}, libtk)
574 if test -r "${libtk}/libtk.a" ; then
575 TK_LIB_SPEC="-L${libtk} -ltk"
578 if test -z "${TK_LIB_SPEC}" ; then
579 AC_MSG_ERROR(${tkconfig}/tkConfig.sh does not define TK_LIB_SPEC, and unable to find libtk.a)
581 ecos_tk_libs="${TK_LIB_SPEC} ${TK_LIBS}"
586 AC_MSG_RESULT([-I${ecos_tcl_incdir} ${TCL_LIB_SPEC}])
587 AC_SUBST(ecos_tk_includes)
588 AC_SUBST(ecos_tk_libs)
591 dnl ====================================================================
592 dnl Search for the infrastructure headers. Usually these can be picked
593 dnl up from host/infra in the build tree. This macro updates
594 dnl ecos_INCLUDES, ecos_LDADD and ecos_LIBS appropriately. In addition
595 dnl it defines new variables ecos_infra_incdir and ecos_infra_libdir,
596 dnl useful for listing explicit dependencies.
598 dnl This macro should only be used in configure scripts that run after
599 dnl the infrastructure has been configured because it relies on the
600 dnl infra directory already having been created in the build tree.
602 AC_DEFUN(ECOS_PATH_INFRA, [
603 AC_MSG_CHECKING([for eCos host-side infrastructure])
605 dnl Where are we in the build tree? First assume that we are in the host
606 dnl tree, thus allowing configury of just the host-side. If that fails
607 dnl assume we can be anywhere.
609 possibles=".. ../.. ../../.. ../../../.. ../../../../.."
610 AC_FIND_DIR("infra", ${possibles}, infra_builddir)
611 if test "${infra_builddir}" = "" ; then
612 possibles="../host ../../host ../../../host ../../../../host ../../../../../host ../../../../../../host"
613 AC_FIND_DIR("infra", ${possibles}, infra_builddir)
615 if test "${infra_builddir}" != "" ; then
616 infra_builddir="${infra_builddir}/infra"
617 infra_builddir=`cd ${infra_builddir} && /bin/pwd`
624 AC_ARG_WITH(infra-header,[ --with-infra-header=<path> location of eCos infrastructure headers])
625 AC_ARG_WITH(infra-lib,[ --with-infra-lib=<path> location of eCos infrastructure library])
626 AC_ARG_WITH(infra,[ --with-infra=<path> location of eCos infrastructure installation])
628 if test "${with_infra_header+set}" = "set"; then
629 ecos_infra_incdir="${with_infra_header}"
630 elif test "${with_infra+set}" = "set"; then
631 ecos_infra_incdir="${with_infra}/include"
632 elif test "${infra_builddir}" != "" ; then
633 ecos_infra_incdir="${infra_builddir}"
635 AC_MSG_ERROR([infrastructure headers not found])
637 if test "${MSVC}" = "yes" ; then
638 ecos_msvc_infra_incdir=${ecos_infra_incdir}
639 ECOS_MSVC_PATH(ecos_msvc_infra_incdir)
640 ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_msvc_infra_incdir}\""
642 ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_infra_incdir}"
645 if test "${with_infra_lib+set}" = "set"; then
646 ecos_infra_libdir="${with_infra_lib}"
647 elif test "${with_infra+set}" = "set"; then
648 ecos_infra_libdir="${with_infra}/lib"
649 elif test "${infra_builddir}" != "" ; then
650 ecos_infra_libdir="${infra_builddir}"
652 AC_MSG_ERROR([infrastructure library not found])
654 if test "${MSVC}" = "yes" ; then
655 ecos_msvc_infra_libdir=${ecos_infra_libdir}
656 ECOS_MSVC_PATH(ecos_msvc_infra_libdir)
657 ecos_LIBS="${ecos_LIBS} cyginfra.lib"
658 ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_msvc_infra_libdir}\""
660 ecos_LIBS="${ecos_LIBS} -lcyginfra"
661 ecos_LDADD="${ecos_LDADD} -L${ecos_infra_libdir}"
664 AC_SUBST(ecos_infra_incdir)
665 AC_SUBST(ecos_infra_libdir)
666 AC_MSG_RESULT(-I[${ecos_infra_incdir} -L${ecos_infra_libdir}])
669 dnl ====================================================================
670 dnl And a very similar macro for libcdl, but note that the headers
671 dnl are in the source tree rather than the build tree.
673 AC_DEFUN(ECOS_PATH_LIBCDL, [
674 AC_MSG_CHECKING([for libcdl])
676 dnl Where are we in the source tree?
678 possibles="${srcdir}/.. ${srcdir}/../.. ${srcdir}/../../.. ${srcdir}/../../../.. ${srcdir}/../../../../.."
679 AC_FIND_DIR("libcdl", ${possibles}, libcdl_srcdir)
680 if test "${libcdl_srcdir}" = "" ; then
681 possibles="${srcdir}/../host ${srcdir}/../../host ${srcdir}/../../../host ${srcdir}/../../../../host ${srcdir}/../../../../../host ${srcdir}/../../../../../../host"
682 AC_FIND_DIR("libcdl", ${possibles}, libcdl_srcdir)
684 if test "${libcdl_srcdir}" != "" ; then
685 libcdl_srcdir="${libcdl_srcdir}/libcdl"
686 libcdl_srcdir=`cd ${libcdl_srcdir} && /bin/pwd`
689 dnl And where are we in the build tree?
691 possibles=".. ../.. ../../.. ../../../.. ../../../../.."
692 AC_FIND_DIR("libcdl", ${possibles}, libcdl_builddir)
693 if test "${libcdl_builddir}" = "" ; then
694 possibles="../host ../../host ../../../host ../../../../host ../../../../../host ../../../../../../host"
695 AC_FIND_DIR("libcdl", ${possibles}, libcdl_builddir)
697 if test "${libcdl_builddir}" != "" ; then
698 libcdl_builddir="${libcdl_builddir}/libcdl"
699 libcdl_builddir=`cd ${libcdl_builddir} && /bin/pwd`
702 ecos_libcdl_incdir=""
703 ecos_libcdl_libdir=""
706 AC_ARG_WITH(libcdl-header,[ --with-libcdl-header=<path> location of eCos libcdl headers])
707 AC_ARG_WITH(libcdl-lib,[ --with-libcdl-lib=<path> location of eCos libcdl library])
708 AC_ARG_WITH(libcdl,[ --with-libcdl=<path> location of eCos libcdl installation])
710 if test "${with_libcdl_header+set}" = "set"; then
711 ecos_libcdl_incdir="${with_libcdl_header}"
712 elif test "${with_libcdl+set}" = "set"; then
713 ecos_libcdl_incdir="${with_libcdl}/include"
714 elif test "${libcdl_srcdir}" != "" ; then
715 ecos_libcdl_incdir="${libcdl_srcdir}"
717 if test \! -r "${ecos_libcdl_incdir}/cdl.hxx" ; then
718 AC_MSG_ERROR([libcdl headers not found])
720 if test "${MSVC}" = "yes" ; then
721 ecos_msvc_libcdl_incdir="${ecos_libcdl_incdir}"
722 ECOS_MSVC_PATH(ecos_msvc_libcdl_incdir)
723 ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_msvc_libcdl_incdir}\""
725 ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_libcdl_incdir}"
728 if test "${with_libcdl_lib+set}" = "set"; then
729 ecos_libcdl_libdir="${with_libcdl_lib}"
730 elif test "${with_libcdl+set}" = "set"; then
731 ecos_libcdl_libdir="${with_libcdl}/lib"
732 elif test "${libcdl_builddir}" != "" ; then
733 ecos_libcdl_libdir="${libcdl_builddir}"
735 AC_MSG_ERROR([libcdl library not found])
737 if test "${MSVC}" = "yes" ; then
738 ecos_msvc_libcdl_libdir=${ecos_libcdl_libdir}
739 ECOS_MSVC_PATH(ecos_msvc_libcdl_libdir)
740 ecos_LIBS="${ecos_LIBS} cdl.lib"
741 ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_msvc_libcdl_libdir}\""
743 ecos_LIBS="${ecos_LIBS} -lcdl"
744 ecos_LDADD="${ecos_LDADD} -L${ecos_libcdl_libdir}"
747 AC_SUBST(ecos_libcdl_incdir)
748 AC_SUBST(ecos_libcdl_libdir)
749 AC_MSG_RESULT([-I${ecos_libcdl_incdir} -L${ecos_libcdl_libdir}])
752 dnl ====================================================================
753 dnl Look for a 64 bit data type. It is necessary to check both C and C++
756 dnl A better implementation would check whether or not AC_PROG_CC and
757 dnl AC_PROG_CXX have been invoked and only test the appropriate
760 dnl When cross-compiling, default to long long on the assumption that
761 dnl gcc/g++ must be used and long long is likely to be the 64 bit data
762 dnl type. This is not guaranteed, but sufficiently likely to meet
763 dnl the requirements for the time being. The CHECK_SIZEOF() macro
764 dnl might be another way to get the desired information.
766 AC_DEFUN(ECOS_TYPE_64bit, [
767 AC_REQUIRE([AC_PROG_CC])
768 AC_REQUIRE([AC_PROG_CXX])
770 AC_CACHE_CHECK("for a 64 bit data type",ecos_cv_type_64bit,[
771 for type in "long" "long long" "__int64"; do
776 return 8 != sizeof($type);
778 ],ctype_64bit=$type,ctype_64bit="unknown",ctype_64bit="long long")
781 int main(int argc, char ** argv) {
782 return 8 != sizeof($type);
784 ],cxxtype_64bit=$type,cxxtype_64bit="unknown",cxxtype_64bit="long long")
786 if test "${ctype_64bit}" = "${type}" -a "${cxxtype_64bit}" = "${type}"; then
787 ecos_cv_type_64bit="${type}"
792 if test "${ecos_cv_type_64bit}" = ""; then
793 AC_MSG_ERROR(Unable to figure out how to do 64 bit arithmetic)
795 if test "${ecos_cv_type_64bit}" != "long long"; then
796 AC_DEFINE_UNQUOTED(cyg_halint64,${ecos_cv_type_64bit})
797 AC_DEFINE_UNQUOTED(cyg_halcount64,${ecos_cv_type_64bit})
802 dnl ====================================================================
803 dnl Check that both the C and C++ compilers support __PRETTY_FUNCTION__
805 AC_DEFUN(ECOS_C_PRETTY_FUNCTION,[
806 AC_REQUIRE([AC_PROG_CC])
807 AC_REQUIRE([AC_PROG_CXX])
809 AC_CACHE_CHECK("for __PRETTY_FUNCTION__ support",ecos_cv_c_pretty_function,[
813 [#include <stdio.h>],
814 [puts(__PRETTY_FUNCTION__);],
821 [puts(__PRETTY_FUNCTION__);],
826 if test "${c_ok}" = "yes" -a "${cxx_ok}" = "yes"; then
827 ecos_cv_c_pretty_function="yes"
830 if test "${ecos_cv_c_pretty_function}" = "yes"; then
831 AC_DEFINE(CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO)
835 dnl ====================================================================
836 dnl During installation eCos package-specific host-side code should be
837 dnl versioned in the same way as the packages themselves, allowing
838 dnl different versions to coexist in one installation. This is analogous
839 dnl to having multiple versions of a shared library installed so that
840 dnl applications can load whichever one they were linked with.
842 dnl To support all this the host-side code needs access to a number
843 dnl of directory names:
844 dnl ECOS_REPOSITORY e.g. ~/ecc/ecc
845 dnl PACKAGE_DIR e.g. hal/synth/arch
846 dnl PACKAGE_VERSION e.g. current
847 dnl PACKAGE_INSTALL e.g. hal/synth/arch/current
849 dnl These, together with the standard variable libexecdir, allow
850 dnl the host-side code to navigate around both source and install
853 AC_DEFUN(ECOS_PACKAGE_DIRS,[
855 dnl srcdir will be something like <path>/packages/<package_path>/<version>/host
856 package_dir=`cd ${srcdir} && /bin/pwd`
857 PACKAGE_VERSION=`dirname ${package_dir}`
858 PACKAGE_VERSION=`basename ${PACKAGE_VERSION}`
860 dnl Now look for an "acsupport" directory as a good way of identifying
861 dnl the root of the repository. Assume that this does not clash with
862 dnl any real packages in the repository. Also assume that no silly games
863 dnl are being played with symlinks.
864 package_dir=`dirname ${package_dir}`
865 package_dir=`dirname ${package_dir}`
867 possibles="${package_dir}/.. ${package_dir}/../.. ${package_dir}/../../.. ${package_dir}/../../../.."
868 possibles="${possibles} ${package_dir}/../../../../.. ${package_dir}/../../../../../.."
869 AC_FIND_DIR("acsupport", ${possibles}, repository_root)
870 if test "${repository_root}" = "" ; then
871 AC_MSG_ERROR([Failed to identify this package's position within the eCos repository])
873 dnl repository_root will still contain the ..'s, instead of an absolute path
874 ECOS_REPOSITORY=`cd "${repository_root}/packages/pkgconf/.." && /bin/pwd`
876 dnl Now we have two absolute paths, so just remove one from the other
877 PACKAGE_DIR=`echo ${package_dir} | sed -e "s:${ECOS_REPOSITORY}/::"`
879 dnl To avoid creating too many subdirectories on the host-side, turn
880 dnl e.g. hal/synth/arch into hal_synth_arch. Theoretically this could
881 dnl go wrong because multiple packages could map onto the same string,
882 dnl but in practice there should be a net reduction in complexity.
883 dnl bartv: / to _ conversion disabled for now, 5 March 2002
884 PACKAGE_INSTALL="${PACKAGE_DIR}/${PACKAGE_VERSION}"
885 dnl PACKAGE_INSTALL=`echo ${PACKAGE_INSTALL} | sed -e "s:/:_:g"`
887 AC_SUBST(ECOS_REPOSITORY)
888 AC_SUBST(PACKAGE_DIR)
889 AC_SUBST(PACKAGE_VERSION)
890 AC_SUBST(PACKAGE_INSTALL)