1 |
786 |
skrzyp |
dnl Process this file with aclocal to get an aclocal.m4 file. Then
|
2 |
|
|
dnl process that with autoconf.
|
3 |
|
|
dnl ====================================================================
|
4 |
|
|
dnl
|
5 |
|
|
dnl acinclude.m4
|
6 |
|
|
dnl
|
7 |
|
|
dnl Various autoconf macros that are shared between different
|
8 |
|
|
dnl eCos packages.
|
9 |
|
|
dnl
|
10 |
|
|
dnl ====================================================================
|
11 |
|
|
dnl ####ECOSHOSTGPLCOPYRIGHTBEGIN####
|
12 |
|
|
dnl -------------------------------------------
|
13 |
|
|
dnl This file is part of the eCos host tools.
|
14 |
|
|
dnl Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
15 |
|
|
dnl
|
16 |
|
|
dnl This program is free software; you can redistribute it and/or modify
|
17 |
|
|
dnl it under the terms of the GNU General Public License as published by
|
18 |
|
|
dnl the Free Software Foundation; either version 2 or (at your option) any
|
19 |
|
|
dnl later version.
|
20 |
|
|
dnl
|
21 |
|
|
dnl This program is distributed in the hope that it will be useful, but
|
22 |
|
|
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
|
23 |
|
|
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
24 |
|
|
dnl General Public License for more details.
|
25 |
|
|
dnl
|
26 |
|
|
dnl You should have received a copy of the GNU General Public License
|
27 |
|
|
dnl along with this program; if not, write to the
|
28 |
|
|
dnl Free Software Foundation, Inc., 51 Franklin Street,
|
29 |
|
|
dnl Fifth Floor, Boston, MA 02110-1301, USA.
|
30 |
|
|
dnl -------------------------------------------
|
31 |
|
|
dnl ####ECOSHOSTGPLCOPYRIGHTEND####
|
32 |
|
|
dnl ====================================================================
|
33 |
|
|
dnl#####DESCRIPTIONBEGIN####
|
34 |
|
|
dnl
|
35 |
|
|
dnl Author(s): bartv
|
36 |
|
|
dnl Contact(s): bartv
|
37 |
|
|
dnl Date: 1998/12/16
|
38 |
|
|
dnl Version: 0.01
|
39 |
|
|
dnl
|
40 |
|
|
dnl####DESCRIPTIONEND####
|
41 |
|
|
dnl ====================================================================
|
42 |
|
|
|
43 |
|
|
dnl ====================================================================
|
44 |
|
|
dnl Ensure that configure is not being run in the source tree, i.e.
|
45 |
|
|
dnl that a separate build tree has been created. This is not absolutely
|
46 |
|
|
dnl necessary at the time of writing but may become so in future, and
|
47 |
|
|
dnl is good practice.
|
48 |
|
|
|
49 |
|
|
AC_DEFUN([ECOS_CHECK_BUILD_ne_SRC],[
|
50 |
|
|
AC_MSG_CHECKING([that a separate build tree is being used])
|
51 |
|
|
ecos_cwd=`/bin/pwd`
|
52 |
|
|
if test "${srcdir}" = "." ; then
|
53 |
|
|
srcdir=${ecos_cwd}
|
54 |
|
|
fi
|
55 |
|
|
if test "${ecos_cwd}" = "${srcdir}" ; then
|
56 |
|
|
AC_MSG_RESULT([no])
|
57 |
|
|
AC_MSG_ERROR([This configure script should not be run inside the source tree. Instead please use a separate build tree])
|
58 |
|
|
else
|
59 |
|
|
AC_MSG_RESULT([yes])
|
60 |
|
|
fi
|
61 |
|
|
])
|
62 |
|
|
|
63 |
|
|
dnl ====================================================================
|
64 |
|
|
dnl The AM_INIT_AUTOMAKE() will define a symbol VERSION for the
|
65 |
|
|
dnl package's version number. Unfortunately this symbol is rather
|
66 |
|
|
dnl hard to share if several different packages are involved, so this
|
67 |
|
|
dnl macro is used to define an alternative symbol
|
68 |
|
|
|
69 |
|
|
AC_DEFUN([ECOS_SUBST_VERSION],[
|
70 |
|
|
AC_REQUIRE([AM_INIT_AUTOMAKE])
|
71 |
|
|
ifelse($#,1,,AC_MSG_ERROR([Invalid number of arguments passed to ECOS SUBST_VERSION]))
|
72 |
|
|
AC_DEFINE_UNQUOTED($1, "$VERSION", "eCos host-side package version")
|
73 |
|
|
])
|
74 |
|
|
|
75 |
|
|
dnl --------------------------------------------------------------------
|
76 |
|
|
dnl Convert a cygwin pathname to something acceptable to VC++ (but
|
77 |
|
|
dnl still invoked from bash and cygwin's make). This means using
|
78 |
|
|
dnl the cygpath utility and then translating any backslashes into
|
79 |
|
|
dnl forward slashes to avoid confusing make.
|
80 |
|
|
|
81 |
|
|
AC_DEFUN([ECOS_MSVC_PATH], [
|
82 |
|
|
dnl AC_REQUIRE([ECOS_PROG_MSVC])
|
83 |
|
|
ifelse($#, 1, , AC_MSG_ERROR("Invalid number of arguments passed to ECOS MSVC_PATH"))
|
84 |
|
|
if test "${MSVC}" = "yes" ; then
|
85 |
|
|
$1=`cygpath -w ${$1} | tr \\\\\\\\ /`
|
86 |
|
|
fi
|
87 |
|
|
])
|
88 |
|
|
|
89 |
|
|
dnl ====================================================================
|
90 |
|
|
dnl An internal utility to define eCos variants of various compilation
|
91 |
|
|
dnl related flags. The aim is to avoid messing with CFLAGS, LIBS, and
|
92 |
|
|
dnl so on because those are used for feature tests as well as for
|
93 |
|
|
dnl passing on to the application.
|
94 |
|
|
AC_DEFUN([ECOS_PROG_DEFINE_COMPILER_FLAGS],[
|
95 |
|
|
ecos_CFLAGS=""
|
96 |
|
|
ecos_CXXFLAGS=""
|
97 |
|
|
ecos_LDADD=""
|
98 |
|
|
ecos_INCLUDES=""
|
99 |
|
|
ecos_LIBS=""
|
100 |
|
|
AC_SUBST(ecos_CFLAGS)
|
101 |
|
|
AC_SUBST(ecos_CXXFLAGS)
|
102 |
|
|
AC_SUBST(ecos_LDADD)
|
103 |
|
|
AC_SUBST(ecos_INCLUDES)
|
104 |
|
|
AC_SUBST(ecos_LIBS)
|
105 |
|
|
])
|
106 |
|
|
|
107 |
|
|
dnl For historical reasons some of the eCos host-side software can be
|
108 |
|
|
dnl built with Visual C++ as well as g++. The user can specify this
|
109 |
|
|
dnl at configure time using CC=cl, where cl.exe is the compiler driver.
|
110 |
|
|
dnl This macro will set the variable MSVC to "yes" or to "no" depending
|
111 |
|
|
dnl on whether or not VC++ is being used, analogous to the variable
|
112 |
|
|
dnl GCC set by AC_PROG_CC. It provides support for an automake
|
113 |
|
|
dnl conditional thus allowing the makefile to adapt somewhat to the
|
114 |
|
|
dnl compiler being used. Finally it fills in the ECOS_INCLUDES,
|
115 |
|
|
dnl ECOS_LIBS and ECOS_LDADD variables with suitable initial values.
|
116 |
|
|
|
117 |
|
|
AC_DEFUN([ECOS_PROG_MSVC],[
|
118 |
|
|
AC_REQUIRE([AC_PROG_CC])
|
119 |
|
|
AC_REQUIRE([AC_PROG_CXX])
|
120 |
|
|
AC_REQUIRE([ECOS_PROG_DEFINE_COMPILER_FLAGS])
|
121 |
|
|
|
122 |
|
|
AC_MSG_CHECKING("for Visual C++")
|
123 |
|
|
MSVC="no";
|
124 |
|
|
if test "${CC}" = "cl" ; then
|
125 |
|
|
MSVC="yes"
|
126 |
|
|
CXX="cl"
|
127 |
|
|
MSVC_SRCDIR=${srcdir}
|
128 |
|
|
ECOS_MSVC_PATH(MSVC_SRCDIR)
|
129 |
|
|
AC_SUBST(MSVC_SRCDIR)
|
130 |
|
|
ecos_INCLUDES="${ecos_INCLUDES} \"-I${MSVC_SRCDIR}\""
|
131 |
|
|
ecos_LDADD="-link"
|
132 |
|
|
ecos_LIBS="advapi32.lib"
|
133 |
|
|
fi
|
134 |
|
|
AM_CONDITIONAL(MSVC, test "${MSVC}" = "yes")
|
135 |
|
|
if test "${MSVC}" = "yes" ; then
|
136 |
|
|
AC_MSG_RESULT([unfortunately yes])
|
137 |
|
|
else
|
138 |
|
|
AC_MSG_RESULT([no])
|
139 |
|
|
fi
|
140 |
|
|
])
|
141 |
|
|
|
142 |
|
|
dnl ====================================================================
|
143 |
|
|
dnl Set up sensible flags for the various different compilers. This
|
144 |
|
|
dnl is achieved by manipulating AM-CFLAGS and AM-CXXFLAGS via a subst,
|
145 |
|
|
dnl plus undoing the setting of CFLAGS and CXXFLAGS done by
|
146 |
|
|
dnl the AC_PROC_CC and AC_PROG_CXX macros (e.g. setting the default
|
147 |
|
|
dnl compilation flags to -O2). Note that this relies
|
148 |
|
|
dnl on knowing about the internals of those macros.
|
149 |
|
|
dnl
|
150 |
|
|
dnl There is little point in checking the cache: this macro does
|
151 |
|
|
dnl not do any feature tests so checking the cache would probably
|
152 |
|
|
dnl be more expensive than doing the work here.
|
153 |
|
|
dnl
|
154 |
|
|
dnl For now the only supported compilers are gcc/g++ and VC++. Attempts
|
155 |
|
|
dnl to use another compiler will result in an error at configure-time.
|
156 |
|
|
AC_DEFUN([ECOS_PROG_STANDARD_COMPILER_FLAGS], [
|
157 |
|
|
AC_REQUIRE([AC_PROG_CC])
|
158 |
|
|
AC_REQUIRE([AC_PROG_CXX])
|
159 |
|
|
AC_REQUIRE([ECOS_PROG_DEFINE_COMPILER_FLAGS])
|
160 |
|
|
AC_REQUIRE([ECOS_PROG_MSVC])
|
161 |
|
|
|
162 |
|
|
AC_MSG_CHECKING("the default compiler flags")
|
163 |
|
|
|
164 |
|
|
dnl Add a user-settable flag to control whether or debugging info is
|
165 |
|
|
dnl incorporated at compile-time.
|
166 |
|
|
ecosflags_enable_debug="no"
|
167 |
|
|
AC_ARG_ENABLE(debug,[ --enable-debug do a debug rather than a release build],
|
168 |
|
|
[case "${enableval}" in
|
169 |
|
|
yes) ecosflags_enable_debug="yes" ;;
|
170 |
|
|
*) ecosflags_enable_debug="no" ;;
|
171 |
|
|
esac])
|
172 |
|
|
|
173 |
|
|
dnl For VC++ builds also provide a flag for ANSI vs. unicode builds.
|
174 |
|
|
dnl For now this does not actually affect the compiler flags.
|
175 |
|
|
dnl NOTE: there may also have to be a flag to control whether or
|
176 |
|
|
dnl the VC++ multi-threading flags are enabled.
|
177 |
|
|
ecosflags_enable_ansi="no"
|
178 |
|
|
if test "${MSVC}" = "yes" ; then
|
179 |
|
|
AC_ARG_ENABLE(ansi,[ --enable-ansi do an ANSI rather than a unicode build],
|
180 |
|
|
[case "${enableval}" in
|
181 |
|
|
yes) ecosflags_enable_ansi="yes" ;;
|
182 |
|
|
*) ecosflags_enable_ansi="no" ;;
|
183 |
|
|
esac])
|
184 |
|
|
fi
|
185 |
|
|
|
186 |
|
|
dnl Now we know what the user is after.
|
187 |
|
|
if test "${GCC}" = "yes" ; then
|
188 |
|
|
ecos_CFLAGS="${ecos_CFLAGS} -pipe -Wall -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs"
|
189 |
|
|
ecos_CXXFLAGS="${ecos_CXXFLAGS} -pipe -Wall -Wpointer-arith -Wcast-qual -Woverloaded-virtual"
|
190 |
|
|
elif test "${MSVC}" = "yes" ; then
|
191 |
|
|
ecos_CFLAGS="${ecos_CFLAGS} -nologo -W3"
|
192 |
|
|
ecos_CXXFLAGS="${ecos_CXXFLAGS} -nologo -W3 -GR -GX"
|
193 |
|
|
else
|
194 |
|
|
AC_MSG_ERROR("default flags for ${CC} are not known")
|
195 |
|
|
fi
|
196 |
|
|
|
197 |
|
|
dnl Choose between debugging and optimization.
|
198 |
|
|
if test "${ecosflags_enable_debug}" = "yes" ; then
|
199 |
|
|
if test "${GCC}" = "yes" ; then
|
200 |
|
|
ecos_CFLAGS="${ecos_CFLAGS} -g -O0"
|
201 |
|
|
ecos_CXXFLAGS="${ecos_CXXFLAGS} -g -O0"
|
202 |
|
|
elif test "${MSVC}" = "yes" ; then
|
203 |
|
|
ecos_CFLAGS="${ecos_CFLAGS} -MDd -Zi"
|
204 |
|
|
ecos_CXXFLAGS="${ecos_CXXFLAGS} -MDd -Zi"
|
205 |
|
|
fi
|
206 |
|
|
else
|
207 |
|
|
dnl With older versions of g++ building the host-side tools with
|
208 |
|
|
dnl -O2 took forever. These problems should now have gone away.
|
209 |
|
|
if test "${GCC}" = "yes" ; then
|
210 |
|
|
ecos_CFLAGS="${ecos_CFLAGS} -O2"
|
211 |
|
|
ecos_CXXFLAGS="${ecos_CXXFLAGS} -O2"
|
212 |
|
|
elif test "${MSVC}" = "yes" ; then
|
213 |
|
|
ecos_CFLAGS="${ecos_CFLAGS} -MD -O2"
|
214 |
|
|
ecos_CXXFLAGS="${ecos_CXXFLAGS} -MD -O2"
|
215 |
|
|
fi
|
216 |
|
|
fi
|
217 |
|
|
|
218 |
|
|
CFLAGS="${ac_save_CFLAGS}"
|
219 |
|
|
CXXFLAGS="${ac_save_CXXFLAGS}"
|
220 |
|
|
|
221 |
|
|
AC_MSG_RESULT(done)
|
222 |
|
|
])
|
223 |
|
|
|
224 |
|
|
dnl --------------------------------------------------------------------
|
225 |
|
|
dnl User-settable options for assertions and tracing.
|
226 |
|
|
dnl
|
227 |
|
|
dnl The settable options are:
|
228 |
|
|
dnl --disable-asserts
|
229 |
|
|
dnl --disable-preconditions
|
230 |
|
|
dnl --disable-postconditions
|
231 |
|
|
dnl --disable-invariants
|
232 |
|
|
dnl --disable-loopinvariants
|
233 |
|
|
dnl --disable-tracing
|
234 |
|
|
dnl --disable-fntracing
|
235 |
|
|
|
236 |
|
|
AC_DEFUN([ECOS_ARG_INFRASTRUCTURE], [
|
237 |
|
|
|
238 |
|
|
AC_REQUIRE([ECOS_PROG_STANDARD_COMPILER_FLAGS])
|
239 |
|
|
|
240 |
|
|
if test "${ecosflags_enable_debug}" = "yes" ; then
|
241 |
|
|
ecosinfra_asserts="yes"
|
242 |
|
|
ecosinfra_preconditions="yes"
|
243 |
|
|
ecosinfra_postconditions="yes"
|
244 |
|
|
ecosinfra_invariants="yes"
|
245 |
|
|
ecosinfra_loopinvariants="yes"
|
246 |
|
|
ecosinfra_tracing="yes"
|
247 |
|
|
ecosinfra_fntracing="yes"
|
248 |
|
|
else
|
249 |
|
|
ecosinfra_asserts="no"
|
250 |
|
|
ecosinfra_preconditions="no"
|
251 |
|
|
ecosinfra_postconditions="no"
|
252 |
|
|
ecosinfra_invariants="no"
|
253 |
|
|
ecosinfra_loopinvariants="no"
|
254 |
|
|
ecosinfra_tracing="no"
|
255 |
|
|
ecosinfra_fntracing="no"
|
256 |
|
|
fi
|
257 |
|
|
|
258 |
|
|
AC_ARG_ENABLE(asserts,[ --disable-asserts disable all assertions],
|
259 |
|
|
[case "${enableval}" in
|
260 |
|
|
yes) ecosinfra_asserts="yes" ;;
|
261 |
|
|
no) ecosinfra_asserts="no" ;;
|
262 |
|
|
*) AC_MSG_ERROR([bad value ${enableval} for disable-asserts option]) ;;
|
263 |
|
|
esac])
|
264 |
|
|
if test "${ecosinfra_asserts}" = "yes"; then
|
265 |
|
|
AC_DEFINE(CYGDBG_USE_ASSERTS,[1],[assertions enabled])
|
266 |
|
|
fi
|
267 |
|
|
|
268 |
|
|
AC_ARG_ENABLE(preconditions, [ --disable-preconditions disable a subset of the assertions],
|
269 |
|
|
[case "${enableval}" in
|
270 |
|
|
yes) ecosinfra_preconditions="yes" ;;
|
271 |
|
|
no) ecosinfra_preconditions="no" ;;
|
272 |
|
|
*) AC_MSG_ERROR([bad value ${enableval} for disable-preconditions option]) ;;
|
273 |
|
|
esac])
|
274 |
|
|
if test "${ecosinfra_preconditions}" = "yes"; then
|
275 |
|
|
AC_DEFINE(CYGDBG_INFRA_DEBUG_PRECONDITIONS,[1],[precondition asserts enabled])
|
276 |
|
|
fi
|
277 |
|
|
|
278 |
|
|
AC_ARG_ENABLE(postconditions, [ --disable-postconditions disable a subset of the assertions],
|
279 |
|
|
[case "${enableval}" in
|
280 |
|
|
yes) ecosinfra_postconditions="yes" ;;
|
281 |
|
|
no) ecosinfra_postconditions="no" ;;
|
282 |
|
|
*) AC_MSG_ERROR([bad value ${enableval} for disable-postconditions option]) ;;
|
283 |
|
|
esac])
|
284 |
|
|
if test "${ecosinfra_postconditions}" = "yes"; then
|
285 |
|
|
AC_DEFINE(CYGDBG_INFRA_DEBUG_POSTCONDITIONS,[1], [postcondition asserts enabled])
|
286 |
|
|
fi
|
287 |
|
|
|
288 |
|
|
AC_ARG_ENABLE(invariants, [ --disable-invariants disable a subset of the assertions],
|
289 |
|
|
[case "${enableval}" in
|
290 |
|
|
yes) ecosinfra_invariants="yes" ;;
|
291 |
|
|
no) ecosinfra_invariants="no" ;;
|
292 |
|
|
*) AC_MSG_ERROR([bad value ${enableval} for disable-invariants option]) ;;
|
293 |
|
|
esac])
|
294 |
|
|
if test "${ecosinfra_invariants}" = "yes"; then
|
295 |
|
|
AC_DEFINE(CYGDBG_INFRA_DEBUG_INVARIANTS,[1],[invariant asserts enabled])
|
296 |
|
|
fi
|
297 |
|
|
|
298 |
|
|
AC_ARG_ENABLE(loopinvariants, [ --disable-loopinvariants disable a subset of the assertions],
|
299 |
|
|
[case "${enableval}" in
|
300 |
|
|
yes) ecosinfra_loopinvariants="yes" ;;
|
301 |
|
|
no) ecosinfra_loopinvariants="no" ;;
|
302 |
|
|
*) AC_MSG_ERROR([bad value ${enableval} for disable-loopinvariants option]) ;;
|
303 |
|
|
esac])
|
304 |
|
|
if test "${ecosinfra_loopinvariants}" = "yes"; then
|
305 |
|
|
AC_DEFINE(CYGDBG_INFRA_DEBUG_LOOP_INVARIANTS,[1],[loop invariant asserts enabled])
|
306 |
|
|
fi
|
307 |
|
|
|
308 |
|
|
AC_ARG_ENABLE(tracing,[ --disable-tracing disable tracing],
|
309 |
|
|
[case "${enableval}" in
|
310 |
|
|
yes) ecosinfra_tracing="yes" ;;
|
311 |
|
|
no) ecosinfra_tracing="no" ;;
|
312 |
|
|
*) AC_MSG_ERROR([bad value ${enableval} for disable-tracing option]) ;;
|
313 |
|
|
esac])
|
314 |
|
|
if test "${ecosinfra_tracing}" = "yes"; then
|
315 |
|
|
AC_DEFINE(CYGDBG_USE_TRACING,[1],[tracing enabled])
|
316 |
|
|
fi
|
317 |
|
|
|
318 |
|
|
AC_ARG_ENABLE(fntracing,[ --disable-fntracing disable function entry/exit tracing],
|
319 |
|
|
[case "${enableval}" in
|
320 |
|
|
yes) ecosinfra_fntracing="yes" ;;
|
321 |
|
|
no) ecosinfra_fntracing=no ;;
|
322 |
|
|
*) AC_MSG_ERROR([bad value ${enableval} for disable-fntracing option]) ;;
|
323 |
|
|
esac])
|
324 |
|
|
if test "${ecosinfra_fntracing}" = "yes"; then
|
325 |
|
|
AC_DEFINE(CYGDBG_INFRA_DEBUG_FUNCTION_REPORTS,[1],[function entry/exit reporting enabled])
|
326 |
|
|
fi
|
327 |
|
|
])
|
328 |
|
|
|
329 |
|
|
dnl ====================================================================
|
330 |
|
|
dnl Inspired by KDE's autoconfig
|
331 |
|
|
dnl This macro takes three Arguments like this:
|
332 |
|
|
dnl AC_FIND_FILE(foo.h, $incdirs, incdir)
|
333 |
|
|
dnl the filename to look for, the list of paths to check and
|
334 |
|
|
dnl the variable with the result.
|
335 |
|
|
|
336 |
|
|
AC_DEFUN([AC_FIND_FILE],[
|
337 |
|
|
$3=""
|
338 |
|
|
for i in $2; do
|
339 |
|
|
if test -r "$i/$1"; then
|
340 |
|
|
$3=$i
|
341 |
|
|
break
|
342 |
|
|
fi
|
343 |
|
|
done
|
344 |
|
|
])
|
345 |
|
|
|
346 |
|
|
dnl ====================================================================
|
347 |
|
|
dnl Variation of the above.
|
348 |
|
|
dnl This macro takes three Arguments like this:
|
349 |
|
|
dnl AC_FIND_DIR(infra, $incdirs, incdir)
|
350 |
|
|
dnl the directory name to look for, the list of paths to check and
|
351 |
|
|
dnl the variable with the result.
|
352 |
|
|
|
353 |
|
|
AC_DEFUN([AC_FIND_DIR],[
|
354 |
|
|
$3=""
|
355 |
|
|
for i in $2; do
|
356 |
|
|
if test -d "$i/$1"; then
|
357 |
|
|
$3=$i
|
358 |
|
|
break
|
359 |
|
|
fi
|
360 |
|
|
done
|
361 |
|
|
])
|
362 |
|
|
|
363 |
|
|
dnl ====================================================================
|
364 |
|
|
dnl Work out details of the Tcl/tk installation that should be used.
|
365 |
|
|
dnl In theory this is simple: when Tcl is installed in <tcl_prefix>
|
366 |
|
|
dnl (usually /usr) there should be a file <tcl_prefix>/lib/tclConfig.sh
|
367 |
|
|
dnl which defines exactly how to build Tcl-based applications. Of course
|
368 |
|
|
dnl Tcl may be installed anywhere, not just in /usr, so it is necessary
|
369 |
|
|
dnl to do some searching. There is a command-line argument
|
370 |
|
|
dnl --with-tcl=<path> to specify the Tcl installation, so the macro
|
371 |
|
|
dnl can search for <with_tcl>/lib/tclConfig.sh, <prefix>/lib/tclConfig.sh
|
372 |
|
|
dnl and /usr/lib/tclConfig.sh
|
373 |
|
|
dnl
|
374 |
|
|
dnl Unfortunately not all systems use this convention. For example,
|
375 |
|
|
dnl at the time of writing Debian installs tclConfig.sh in a versioned
|
376 |
|
|
dnl subdirectory /usr/lib/tcl8.3/tclConfig.sh. Hence there is an
|
377 |
|
|
dnl additional argument --with-tcl-version=<vsn> which is used to
|
378 |
|
|
dnl extend the search path.
|
379 |
|
|
dnl
|
380 |
|
|
dnl For VC++ builds the situation is different again. Tcl may be
|
381 |
|
|
dnl installed anywhere, so the data in tclConfig.sh is not useful
|
382 |
|
|
dnl (and that file may not be provided at all). Instead --with-tcl
|
383 |
|
|
dnl must be used to specify the path. Alternatively separate paths
|
384 |
|
|
dnl for headers and libraries can be specified using --with-tcl-header
|
385 |
|
|
dnl and --with-tcl-lib. Usually it will also be necessary to specify
|
386 |
|
|
dnl the library version number using --with-tcl-version.
|
387 |
|
|
|
388 |
|
|
dnl This adds two main command-line options, --with-tcl=<prefix> to
|
389 |
|
|
dnl specify the Tcl install directory, and --with-tcl-version=<vsn>
|
390 |
|
|
dnl to control which version of Tcl should be used. For finer-grained
|
391 |
|
|
dnl control there are additional options --with-tcl-header and
|
392 |
|
|
dnl --with-tcl-version. It is assumed that Tcl and Tk are installed
|
393 |
|
|
dnl in the same place.
|
394 |
|
|
dnl
|
395 |
|
|
dnl On Unix systems and under cygwin there should be a file
|
396 |
|
|
dnl $(tcl_prefix)/lib/tclConfig.sh containing all the information
|
397 |
|
|
dnl needed for Tcl. This file is consulted and the appropriate
|
398 |
|
|
dnl variables extracted. Similar information for Tk lives in
|
399 |
|
|
dnl tkConfig.sh. As a useful side effect all variables defined
|
400 |
|
|
dnl in those scripts can be accessed.
|
401 |
|
|
dnl
|
402 |
|
|
dnl To confuse matters, subtly different naming conventions are used
|
403 |
|
|
dnl under Unix and NT. Under Unix the Tcl library will be called
|
404 |
|
|
dnl libtcl8.0.a, libtcl8.1.a, etc. with a dot between the major and
|
405 |
|
|
dnl minor version. Under NT (including cygwin) the library will be
|
406 |
|
|
dnl called tcl80.lib, tcl81.lib, libtcl80.a, libtcl81.a, etc.
|
407 |
|
|
dnl without a dot.
|
408 |
|
|
dnl
|
409 |
|
|
dnl Currently this macro assumes that Tcl is preinstalled, and not
|
410 |
|
|
dnl built alongside eCos. Specifically the macro checks that
|
411 |
|
|
dnl tcl.h can be found, plus on Unix systems tclConfig.sh and
|
412 |
|
|
dnl tkConfig.sh as well.
|
413 |
|
|
dnl
|
414 |
|
|
dnl This macro updates the build-related variables ecos_INCLUDES,
|
415 |
|
|
dnl ecos_LDADD, and ecos_LIBS. The latter assumes the application
|
416 |
|
|
dnl only needs Tcl. If Tk is needed as well then the variable
|
417 |
|
|
dnl ecos_tklibs should be used in addition.
|
418 |
|
|
|
419 |
|
|
AC_DEFUN([ECOS_PATH_TCL], [
|
420 |
|
|
|
421 |
|
|
AC_REQUIRE([ECOS_PROG_MSVC])
|
422 |
|
|
|
423 |
|
|
dnl Where is the Tcl installation, and what version should be used?
|
424 |
|
|
dnl This macro is rather more verbose than usual because of the many
|
425 |
|
|
dnl problems encountered over the years with Tcl installations.
|
426 |
|
|
AC_MSG_CHECKING(for Tcl/Tk installation)
|
427 |
|
|
AC_MSG_RESULT()
|
428 |
|
|
|
429 |
|
|
AC_ARG_WITH(tcl,[ --with-tcl=<path> location of Tcl header and libraries])
|
430 |
|
|
AC_ARG_WITH(tcl,[ --with-tk=<path> location of Tk header and libraries])
|
431 |
|
|
AC_ARG_WITH(tcl-version,[ --with-tcl-version=<vsn> version of Tcl/Tk to be used])
|
432 |
|
|
|
433 |
|
|
dnl If using VC++ then there are no sensible default directories
|
434 |
|
|
dnl to search for a Tcl installation. Instead the user must
|
435 |
|
|
dnl supply either --with-tcl, or both --with-tcl-header and
|
436 |
|
|
dnl --with-tcl-lib.
|
437 |
|
|
dnl
|
438 |
|
|
dnl Also when using VC++ there is no tclConfig.sh file to
|
439 |
|
|
dnl consult about which libraries are needed. Instead that
|
440 |
|
|
dnl information is hard-wired here.
|
441 |
|
|
if test "${MSVC}" = "yes" ; then
|
442 |
|
|
AC_ARG_WITH(tcl-header,[ --with-tcl-header=<path> location of Tcl header])
|
443 |
|
|
AC_ARG_WITH(tcl-lib,[ --with-tcl-lib=<path> location of Tcl libraries])
|
444 |
|
|
ecos_tcl_incdir=""
|
445 |
|
|
ecos_tcl_libdir=""
|
446 |
|
|
if test "${with_tcl_version+set}" != set ; then
|
447 |
|
|
AC_MSG_ERROR(You must specify a Tcl version using --with-tcl-version=<vsn>)
|
448 |
|
|
fi
|
449 |
|
|
if test "${with_tcl_header+set}" = set ; then
|
450 |
|
|
ecos_tcl_incdir=${with_tcl_header}
|
451 |
|
|
elif test "${with_tcl+set}" = set ; then
|
452 |
|
|
ecos_tcl_incdir="${with_tcl}/include"
|
453 |
|
|
else
|
454 |
|
|
AC_MSG_ERROR(You must specify a Tcl installation with either --with-tcl=<path> or --with-tcl-header=<path>)
|
455 |
|
|
fi
|
456 |
|
|
if test "${with_tcl_lib+set}" = set; then
|
457 |
|
|
ecos_tcl_libdir=${with_tcl_lib}
|
458 |
|
|
elif test "${with_tcl+set}" = set; then
|
459 |
|
|
ecos_tcl_libdir="${with_tcl}/lib"
|
460 |
|
|
else
|
461 |
|
|
AC_MSG_ERROR(You must specify a Tcl installation with either --with-tcl=<path> or --with-tcl-lib=<path>)
|
462 |
|
|
fi
|
463 |
|
|
|
464 |
|
|
dnl Sanity check, make sure that there is a tcl.h header file.
|
465 |
|
|
dnl If not then there is no point in proceeding.
|
466 |
|
|
if test \! -r "${ecos_tcl_incdir}/tcl.h" ; then
|
467 |
|
|
AC_MSG_ERROR([unable to locate Tcl header file tcl.h])
|
468 |
|
|
fi
|
469 |
|
|
|
470 |
|
|
ECOS_MSVC_PATH(ecos_tcl_incdir)
|
471 |
|
|
ECOS_MSVC_PATH(ecos_tcl_libdir)
|
472 |
|
|
ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_tcl_incdir}\""
|
473 |
|
|
ecos_LIBS="${ecos_LIBS} tcl${with_tcl_version}.lib"
|
474 |
|
|
ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_tcl_libdir}\""
|
475 |
|
|
|
476 |
|
|
dnl FIXME: what libraries are needed for a tk application under VC++?
|
477 |
|
|
dnl and can the version be determined more accurately?
|
478 |
|
|
ecos_tk_libs=""
|
479 |
|
|
|
480 |
|
|
else
|
481 |
|
|
dnl ------------------------------------------------------------
|
482 |
|
|
dnl Not Visual C++ so try to do things properly by finding and
|
483 |
|
|
dnl using tclConfig.sh
|
484 |
|
|
possibles=""
|
485 |
|
|
if test "${with_tcl+set}" = set ; then
|
486 |
|
|
possibles="${with_tcl}/lib"
|
487 |
|
|
if test "${with_tcl_version+set}" = set ; then
|
488 |
|
|
possibles="${possibles} ${with_tcl}/lib/tcl${with_tcl_version}"
|
489 |
|
|
fi
|
490 |
|
|
fi
|
491 |
|
|
possibles="${possibles} ${prefix}/lib"
|
492 |
|
|
if test "${with_tcl_version+set}" = set ; then
|
493 |
|
|
possibles="${possibles} ${prefix}/lib/tcl${with_tcl_version}"
|
494 |
|
|
fi
|
495 |
|
|
possibles="${possibles} /usr/lib"
|
496 |
|
|
if test "${with_tcl_version+set}" = set ; then
|
497 |
|
|
possibles="${possibles} /usr/lib/tcl${with_tcl_version}"
|
498 |
|
|
fi
|
499 |
|
|
AC_MSG_NOTICE(looking for tclConfig.sh in ${possibles})
|
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)
|
503 |
|
|
else
|
504 |
|
|
AC_MSG_NOTICE(found ${tclconfig}/tclConfig.sh)
|
505 |
|
|
. ${tclconfig}/tclConfig.sh
|
506 |
|
|
|
507 |
|
|
dnl Now we need to figure out where to find the Tcl header files.
|
508 |
|
|
dnl tclConfig.sh may define a variable TCL_INCLUDE_SPEC or
|
509 |
|
|
dnl TCL_INCLUDE_DIR, otherwise use TCL_PREFIX/include
|
510 |
|
|
if test -n "${TCL_INCLUDE_SPEC}" ; then
|
511 |
|
|
ecos_tcl_incdir="${TCL_INCLUDE_SPEC}"
|
512 |
|
|
AC_MSG_NOTICE(trying TCL_INCLUDE_SPEC - looking for tcl.h in ${ecos_tcl_incdir})
|
513 |
|
|
elif test -n "${TCL_INC_DIR}" ; then
|
514 |
|
|
ecos_tcl_incdir="${TCL_INC_DIR}"
|
515 |
|
|
AC_MSG_NOTICE(trying TCL_INC_DIR - looking for tcl.h in ${ecos_tcl_incdir})
|
516 |
|
|
else
|
517 |
|
|
ecos_tcl_incdir="-I${TCL_PREFIX}/include"
|
518 |
|
|
AC_MSG_WARN(no TCL_INCLUDE_SPEC or TCL_INC_DIR in tclConfig.sh)
|
519 |
|
|
AC_MSG_NOTICE(fallback - looking for tcl.h in ${ecos_tcl_incdir})
|
520 |
|
|
fi
|
521 |
|
|
dnl But verify that the resulting incdir is valid.
|
522 |
|
|
ecos_tcl_tmpdir=`echo ${ecos_tcl_incdir} | sed -e "s:-I::g"`
|
523 |
|
|
if test \! -r "${ecos_tcl_tmpdir}/tcl.h" ; then
|
524 |
|
|
AC_MSG_ERROR(unable to locate Tcl header file tcl.h)
|
525 |
|
|
else
|
526 |
|
|
dnl On Unix systems -I/usr/include is unnecessary, and can
|
527 |
|
|
dnl cause problems on hosts where gcc is not the platform's
|
528 |
|
|
dnl default compiler because of the use of unfixed headers.
|
529 |
|
|
dnl Hence it is explicitly removed here.
|
530 |
|
|
AC_MSG_NOTICE(using ${ecos_tcl_incdir})
|
531 |
|
|
if test "${ecos_tcl_incdir}" != "-I/usr/include" ; then
|
532 |
|
|
ecos_INCLUDES="${ecos_INCLUDES} ${ecos_tcl_incdir}"
|
533 |
|
|
fi
|
534 |
|
|
fi
|
535 |
|
|
|
536 |
|
|
dnl There should be a variable TCL_LIB_SPEC which defines
|
537 |
|
|
dnl exactly how to link with Tcl. Without that, try to search
|
538 |
|
|
dnl for a libtcl.a
|
539 |
|
|
ecos_tcl_libs=""
|
540 |
|
|
if test -n "${TCL_LIB_SPEC}" ; then
|
541 |
|
|
ecos_tcl_libs="${ecos_LIBS} ${TCL_LIB_SPEC}"
|
542 |
|
|
AC_MSG_NOTICE(using TCL_LIB_SPEC ${TCL_LIB_SPEC})
|
543 |
|
|
else
|
544 |
|
|
AC_MSG_WARN(no TCL_LIB_SPEC in tclConfig.sh)
|
545 |
|
|
if test "${with_tcl_version+set}" = set ; then
|
546 |
|
|
AC_MSG_NOTICE(fallback - looking for libtcl${with_tcl_version}.a in ${possibles})
|
547 |
|
|
AC_FIND_FILE("libtcl${with_tcl_version}.a", ${possibles}, libtcl)
|
548 |
|
|
if test -r "${libtcl}/libtcl${with_tcl_version}.a" ; then
|
549 |
|
|
ecos_tcl_libs="-L${libtcl} -ltcl${with_tcl_version}"
|
550 |
|
|
AC_MSG_NOTICE(using ${ecos_tcl_libs})
|
551 |
|
|
fi
|
552 |
|
|
fi
|
553 |
|
|
if test -z "${ecos_tcl_libs}" ; then
|
554 |
|
|
AC_MSG_NOTICE(fallback - looking for libtcl.a in ${possibles})
|
555 |
|
|
AC_FIND_FILE("libtcl.a", ${possibles}, libtcl)
|
556 |
|
|
if test -r "${libtcl}/libtcl.a" ; then
|
557 |
|
|
ecos_tcl_libs="-L${libtcl} -ltcl"
|
558 |
|
|
AC_MSG_NOTICE(using ${ecos_tcl_libs})
|
559 |
|
|
fi
|
560 |
|
|
fi
|
561 |
|
|
fi
|
562 |
|
|
|
563 |
|
|
dnl If at this stage we have not found a libtcl.a, complain.
|
564 |
|
|
if test -z "${ecos_tcl_libs}" ; then
|
565 |
|
|
AC_MSG_ERROR(${tclconfig}/tclConfig.sh does not define TCL_LIB_SPEC, and unable to find libtcl.a)
|
566 |
|
|
fi
|
567 |
|
|
|
568 |
|
|
dnl tclConfig.sh may specify additional flags and libraries.
|
569 |
|
|
if test -n "${TCL_LIBS}" ; then
|
570 |
|
|
ecos_tcl_libs="${ecos_tcl_libs} ${TCL_LIBS}"
|
571 |
|
|
AC_MSG_NOTICE(using additional libraries for Tcl ${TCL_LIBS})
|
572 |
|
|
fi
|
573 |
|
|
if test -n "${TCL_LD_FLAGS}" ; then
|
574 |
|
|
ecos_tcl_libs="${ecos_tcl_libs} ${TCL_LD_FLAGS}"
|
575 |
|
|
AC_MSG_NOTICE(using additional linker flags for Tcl ${TCL_LD_FLAGS})
|
576 |
|
|
fi
|
577 |
|
|
ecos_LIBS="${ecos_LIBS} ${ecos_tcl_libs}"
|
578 |
|
|
fi
|
579 |
|
|
|
580 |
|
|
|
581 |
|
|
dnl --------------------------------------------------------
|
582 |
|
|
dnl We now repeat the exercise for tk and tkConfig.sh.
|
583 |
|
|
dnl Typically this will be in a similar location to tclConfig.sh,
|
584 |
|
|
dnl but allow for separate
|
585 |
|
|
dnl we assume that the Tk installation is in a similar
|
586 |
|
|
dnl location to the Tcl one, but allow for different ones
|
587 |
|
|
dnl just in case.
|
588 |
|
|
possibles=""
|
589 |
|
|
if test "${with_tk+set}" = set ; then
|
590 |
|
|
possibles="${possibles} ${with_tk}/lib"
|
591 |
|
|
if test "${with_tcl_version+set}" = set ; then
|
592 |
|
|
possibles="${possibles} ${with_tk}/lib/tcl${with_tcl_version}"
|
593 |
|
|
possibles="${possibles} ${with_tk}/lib/tk${with_tcl_version}"
|
594 |
|
|
fi
|
595 |
|
|
fi
|
596 |
|
|
if test "${with_tcl+set}" = set ; then
|
597 |
|
|
possibles="${possibles} ${with_tcl}/lib"
|
598 |
|
|
if test "${with_tcl_version+set}" = set ; then
|
599 |
|
|
possibles="${possibles} ${with_tcl}/lib/tcl${with_tcl_version}"
|
600 |
|
|
possibles="${possibles} ${with_tcl}/lib/tk${with_tcl_version}"
|
601 |
|
|
fi
|
602 |
|
|
fi
|
603 |
|
|
possibles="${possibles} ${prefix}/lib"
|
604 |
|
|
if test "${with_tcl_version+set}" = set ; then
|
605 |
|
|
possibles="${possibles} ${prefix}/lib/tcl${with_tcl_version}"
|
606 |
|
|
possibles="${possibles} ${prefix}/lib/tk${with_tcl_version}"
|
607 |
|
|
fi
|
608 |
|
|
possibles="${possibles} /usr/lib"
|
609 |
|
|
if test "${with_tcl_version+set}" = set ; then
|
610 |
|
|
possibles="${possibles} /usr/lib/tcl${with_tcl_version}"
|
611 |
|
|
possibles="${possibles} /usr/lib/tk${with_tcl_version}"
|
612 |
|
|
fi
|
613 |
|
|
|
614 |
|
|
AC_MSG_NOTICE(looking for tkConfig.sh in ${possibles})
|
615 |
|
|
AC_FIND_FILE("tkConfig.sh", ${possibles}, tkconfig)
|
616 |
|
|
if test \! -r "${tkconfig}/tkConfig.sh" ; then
|
617 |
|
|
AC_MSG_ERROR(unable to locate Tk config file tkConfig.sh)
|
618 |
|
|
else
|
619 |
|
|
AC_MSG_NOTICE(found ${tkconfig}/tkConfig.sh)
|
620 |
|
|
. ${tkconfig}/tkConfig.sh
|
621 |
|
|
|
622 |
|
|
if test -n "${TK_INCLUDE_SPEC}" ; then
|
623 |
|
|
ecos_tk_includes="${TK_INCLUDE_SPEC}"
|
624 |
|
|
AC_MSG_NOTICE(trying TK_INCLUDE_SPEC - looking for tk.h in ${ecos_tk_includes})
|
625 |
|
|
elif test -n "${TK_INC_DIR}" ; then
|
626 |
|
|
ecos_tk_includes="${TK_INC_DIR}"
|
627 |
|
|
AC_MSG_NOTICE(trying TK_INC_DIR - looking for tk.h in ${ecos_tk_includes})
|
628 |
|
|
else
|
629 |
|
|
ecos_tk_includes="-I${TCL_PREFIX}/include"
|
630 |
|
|
AC_MSG_WARN(no TK_INCLUDE_SPEC or TK_INC_DIR in tkConfig.sh)
|
631 |
|
|
AC_MSG_NOTICE(fallback - looking for tk.h in ${ecos_tk_includes})
|
632 |
|
|
fi
|
633 |
|
|
dnl But verify that the resulting incdir is valid.
|
634 |
|
|
ecos_tk_tmpdir=`echo ${ecos_tk_includes} | sed -e "s:-I::g"`
|
635 |
|
|
if test \! -r "${ecos_tk_tmpdir}/tk.h" ; then
|
636 |
|
|
AC_MSG_ERROR(unable to locate Tk header file tk.h)
|
637 |
|
|
else
|
638 |
|
|
dnl On Unix systems -I/usr/include is unnecessary, and can
|
639 |
|
|
dnl cause problems on hosts where gcc is not the platform's
|
640 |
|
|
dnl default compiler because of the use of unfixed headers.
|
641 |
|
|
dnl Hence it is explicitly removed here.
|
642 |
|
|
AC_MSG_NOTICE(using ${ecos_tk_includes})
|
643 |
|
|
if test "${ecos_tk_includes}" = "-I/usr/include" ; then
|
644 |
|
|
ecos_tk_includes=""
|
645 |
|
|
fi
|
646 |
|
|
fi
|
647 |
|
|
dnl There may be additional include directories for X, although
|
648 |
|
|
dnl unlikely on a Unix system.
|
649 |
|
|
if test -n "${TK_XINCLUDES}" ; then
|
650 |
|
|
AC_MSG_NOTICE(adding TK_XINCLUDES ${TK_XINCLUDES})
|
651 |
|
|
ecos_tk_includes="${ecos_tk_includes} ${TK_XINCLUDES}"
|
652 |
|
|
fi
|
653 |
|
|
|
654 |
|
|
ecos_tk_libs=""
|
655 |
|
|
if test -n "${TK_LIB_SPEC}" ; then
|
656 |
|
|
ecos_tk_libs="${TK_LIB_SPEC}"
|
657 |
|
|
AC_MSG_NOTICE(trying TK_LIB_SPEC ${TK_LIB_SPEC})
|
658 |
|
|
else
|
659 |
|
|
AC_MSG_WARN(no TK_LIB_SPEC in tkConfig.sh)
|
660 |
|
|
if test "${with_tcl_version+set}" = set ; then
|
661 |
|
|
AC_MSG_NOTICE(fallback - looking for libtk${with_tcl_version}.a in ${possibles})
|
662 |
|
|
AC_FIND_FILE("libtk${with_tcl_version}.a", ${possibles}, libtk)
|
663 |
|
|
if test -r "${libtk}/libtk${with_tcl_version}.a" ; then
|
664 |
|
|
ecos_tk_libs="-L${libtk} -ltk${with_tcl_version}"
|
665 |
|
|
fi
|
666 |
|
|
fi
|
667 |
|
|
if test -z "${ecos_tk_libs}" ; then
|
668 |
|
|
AC_MSG_NOTICE(fallback - looking for libtk.a in ${possibles})
|
669 |
|
|
AC_FIND_FILE("libtk.a", ${possibles}, libtk)
|
670 |
|
|
if test -r "${libtk}/libtk.a" ; then
|
671 |
|
|
ecos_tk_libs="-L${libtk} -ltk"
|
672 |
|
|
fi
|
673 |
|
|
fi
|
674 |
|
|
fi
|
675 |
|
|
if test -z "${ecos_tk_libs}" ; then
|
676 |
|
|
AC_MSG_ERROR(${tkconfig}/tkConfig.sh does not define TK_LIB_SPEC, and unable to find libtk.a)
|
677 |
|
|
else
|
678 |
|
|
AC_MSG_NOTICE(using ${ecos_tk_libs})
|
679 |
|
|
fi
|
680 |
|
|
|
681 |
|
|
dnl Tk may need additional libraries. Unfortunately some of these
|
682 |
|
|
dnl duplicate the Tcl ones, causing occasional linker upsets. It
|
683 |
|
|
dnl is assumed here that Tk will only be used in conjunction with
|
684 |
|
|
dnl tcl.
|
685 |
|
|
if test -n "${TK_LIBS}" ; then
|
686 |
|
|
if test -n "${TCL_LIBS}" ; then
|
687 |
|
|
ecos_tk_tmp="${TK_LIBS}"
|
688 |
|
|
for i in ${TCL_LIBS} ; do
|
689 |
|
|
ecos_tk_tmp=`echo ${ecos_tk_tmp} | sed -e "s:${i}::g"`
|
690 |
|
|
done
|
691 |
|
|
ecos_tk_libs="${ecos_tk_libs} ${ecos_tk_tmp}"
|
692 |
|
|
AC_MSG_NOTICE(using additional libraries for Tk ${ecos_tk_tmp})
|
693 |
|
|
else
|
694 |
|
|
ecos_tk_libs="${ecos_tk_libs} ${TK_LIBS}"
|
695 |
|
|
AC_MSG_NOTICE(using additional libraries for Tk ${TK_LIBS})
|
696 |
|
|
fi
|
697 |
|
|
fi
|
698 |
|
|
fi
|
699 |
|
|
fi
|
700 |
|
|
|
701 |
|
|
AC_MSG_CHECKING(for Tcl/Tk installation)
|
702 |
|
|
AC_MSG_RESULT(done)
|
703 |
|
|
AC_SUBST(ecos_tk_includes)
|
704 |
|
|
AC_SUBST(ecos_tk_libs)
|
705 |
|
|
])
|
706 |
|
|
|
707 |
|
|
dnl ====================================================================
|
708 |
|
|
dnl Search for the infrastructure headers. Usually these can be picked
|
709 |
|
|
dnl up from host/infra in the build tree. This macro updates
|
710 |
|
|
dnl ecos_INCLUDES, ecos_LDADD and ecos_LIBS appropriately. In addition
|
711 |
|
|
dnl it defines new variables ecos_infra_incdir and ecos_infra_libdir,
|
712 |
|
|
dnl useful for listing explicit dependencies.
|
713 |
|
|
dnl
|
714 |
|
|
dnl This macro should only be used in configure scripts that run after
|
715 |
|
|
dnl the infrastructure has been configured because it relies on the
|
716 |
|
|
dnl infra directory already having been created in the build tree.
|
717 |
|
|
|
718 |
|
|
AC_DEFUN([ECOS_PATH_INFRA], [
|
719 |
|
|
AC_MSG_CHECKING([for eCos host-side infrastructure])
|
720 |
|
|
|
721 |
|
|
dnl Where are we in the build tree? First assume that we are in the host
|
722 |
|
|
dnl tree, thus allowing configury of just the host-side. If that fails
|
723 |
|
|
dnl assume we can be anywhere.
|
724 |
|
|
infra_builddir=""
|
725 |
|
|
possibles=".. ../.. ../../.. ../../../.. ../../../../.."
|
726 |
|
|
AC_FIND_DIR("infra", ${possibles}, infra_builddir)
|
727 |
|
|
if test "${infra_builddir}" = "" ; then
|
728 |
|
|
possibles="../host ../../host ../../../host ../../../../host ../../../../../host ../../../../../../host"
|
729 |
|
|
AC_FIND_DIR("infra", ${possibles}, infra_builddir)
|
730 |
|
|
fi
|
731 |
|
|
if test "${infra_builddir}" != "" ; then
|
732 |
|
|
infra_builddir="${infra_builddir}/infra"
|
733 |
|
|
infra_builddir=`cd ${infra_builddir} && /bin/pwd`
|
734 |
|
|
fi
|
735 |
|
|
|
736 |
|
|
ecos_infra_incdir=""
|
737 |
|
|
ecos_infra_libdir=""
|
738 |
|
|
ecos_infra_libs=""
|
739 |
|
|
|
740 |
|
|
AC_ARG_WITH(infra-header,[ --with-infra-header=<path> location of eCos infrastructure headers])
|
741 |
|
|
AC_ARG_WITH(infra-lib,[ --with-infra-lib=<path> location of eCos infrastructure library])
|
742 |
|
|
AC_ARG_WITH(infra,[ --with-infra=<path> location of eCos infrastructure installation])
|
743 |
|
|
|
744 |
|
|
if test "${with_infra_header+set}" = "set"; then
|
745 |
|
|
ecos_infra_incdir="${with_infra_header}"
|
746 |
|
|
elif test "${with_infra+set}" = "set"; then
|
747 |
|
|
ecos_infra_incdir="${with_infra}/include"
|
748 |
|
|
elif test "${infra_builddir}" != "" ; then
|
749 |
|
|
ecos_infra_incdir="${infra_builddir}"
|
750 |
|
|
else
|
751 |
|
|
AC_MSG_ERROR([infrastructure headers not found])
|
752 |
|
|
fi
|
753 |
|
|
if test "${MSVC}" = "yes" ; then
|
754 |
|
|
ecos_msvc_infra_incdir=${ecos_infra_incdir}
|
755 |
|
|
ECOS_MSVC_PATH(ecos_msvc_infra_incdir)
|
756 |
|
|
ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_msvc_infra_incdir}\""
|
757 |
|
|
else
|
758 |
|
|
ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_infra_incdir}"
|
759 |
|
|
fi
|
760 |
|
|
|
761 |
|
|
if test "${with_infra_lib+set}" = "set"; then
|
762 |
|
|
ecos_infra_libdir="${with_infra_lib}"
|
763 |
|
|
elif test "${with_infra+set}" = "set"; then
|
764 |
|
|
ecos_infra_libdir="${with_infra}/lib"
|
765 |
|
|
elif test "${infra_builddir}" != "" ; then
|
766 |
|
|
ecos_infra_libdir="${infra_builddir}"
|
767 |
|
|
else
|
768 |
|
|
AC_MSG_ERROR([infrastructure library not found])
|
769 |
|
|
fi
|
770 |
|
|
if test "${MSVC}" = "yes" ; then
|
771 |
|
|
ecos_msvc_infra_libdir=${ecos_infra_libdir}
|
772 |
|
|
ECOS_MSVC_PATH(ecos_msvc_infra_libdir)
|
773 |
|
|
ecos_LIBS="${ecos_LIBS} cyginfra.lib"
|
774 |
|
|
ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_msvc_infra_libdir}\""
|
775 |
|
|
else
|
776 |
|
|
ecos_LIBS="${ecos_LIBS} -lcyginfra"
|
777 |
|
|
ecos_LDADD="${ecos_LDADD} -L${ecos_infra_libdir}"
|
778 |
|
|
fi
|
779 |
|
|
|
780 |
|
|
AC_SUBST(ecos_infra_incdir)
|
781 |
|
|
AC_SUBST(ecos_infra_libdir)
|
782 |
|
|
AC_MSG_RESULT(-I[${ecos_infra_incdir} -L${ecos_infra_libdir}])
|
783 |
|
|
])
|
784 |
|
|
|
785 |
|
|
dnl ====================================================================
|
786 |
|
|
dnl And a very similar macro for libcdl, but note that the headers
|
787 |
|
|
dnl are in the source tree rather than the build tree.
|
788 |
|
|
|
789 |
|
|
AC_DEFUN([ECOS_PATH_LIBCDL], [
|
790 |
|
|
AC_MSG_CHECKING([for libcdl])
|
791 |
|
|
|
792 |
|
|
dnl Where are we in the source tree?
|
793 |
|
|
libcdl_srcdir=""
|
794 |
|
|
possibles="${srcdir}/.. ${srcdir}/../.. ${srcdir}/../../.. ${srcdir}/../../../.. ${srcdir}/../../../../.."
|
795 |
|
|
AC_FIND_DIR("libcdl", ${possibles}, libcdl_srcdir)
|
796 |
|
|
if test "${libcdl_srcdir}" = "" ; then
|
797 |
|
|
possibles="${srcdir}/../host ${srcdir}/../../host ${srcdir}/../../../host ${srcdir}/../../../../host ${srcdir}/../../../../../host ${srcdir}/../../../../../../host"
|
798 |
|
|
AC_FIND_DIR("libcdl", ${possibles}, libcdl_srcdir)
|
799 |
|
|
fi
|
800 |
|
|
if test "${libcdl_srcdir}" != "" ; then
|
801 |
|
|
libcdl_srcdir="${libcdl_srcdir}/libcdl"
|
802 |
|
|
libcdl_srcdir=`cd ${libcdl_srcdir} && /bin/pwd`
|
803 |
|
|
fi
|
804 |
|
|
|
805 |
|
|
dnl And where are we in the build tree?
|
806 |
|
|
libcdl_builddir=""
|
807 |
|
|
possibles=".. ../.. ../../.. ../../../.. ../../../../.."
|
808 |
|
|
AC_FIND_DIR("libcdl", ${possibles}, libcdl_builddir)
|
809 |
|
|
if test "${libcdl_builddir}" = "" ; then
|
810 |
|
|
possibles="../host ../../host ../../../host ../../../../host ../../../../../host ../../../../../../host"
|
811 |
|
|
AC_FIND_DIR("libcdl", ${possibles}, libcdl_builddir)
|
812 |
|
|
fi
|
813 |
|
|
if test "${libcdl_builddir}" != "" ; then
|
814 |
|
|
libcdl_builddir="${libcdl_builddir}/libcdl"
|
815 |
|
|
libcdl_builddir=`cd ${libcdl_builddir} && /bin/pwd`
|
816 |
|
|
fi
|
817 |
|
|
|
818 |
|
|
ecos_libcdl_incdir=""
|
819 |
|
|
ecos_libcdl_libdir=""
|
820 |
|
|
ecos_libcdl_libs=""
|
821 |
|
|
|
822 |
|
|
AC_ARG_WITH(libcdl-header,[ --with-libcdl-header=<path> location of eCos libcdl headers])
|
823 |
|
|
AC_ARG_WITH(libcdl-lib,[ --with-libcdl-lib=<path> location of eCos libcdl library])
|
824 |
|
|
AC_ARG_WITH(libcdl,[ --with-libcdl=<path> location of eCos libcdl installation])
|
825 |
|
|
|
826 |
|
|
if test "${with_libcdl_header+set}" = "set"; then
|
827 |
|
|
ecos_libcdl_incdir="${with_libcdl_header}"
|
828 |
|
|
elif test "${with_libcdl+set}" = "set"; then
|
829 |
|
|
ecos_libcdl_incdir="${with_libcdl}/include"
|
830 |
|
|
elif test "${libcdl_srcdir}" != "" ; then
|
831 |
|
|
ecos_libcdl_incdir="${libcdl_srcdir}"
|
832 |
|
|
fi
|
833 |
|
|
if test \! -r "${ecos_libcdl_incdir}/cdl.hxx" ; then
|
834 |
|
|
AC_MSG_ERROR([libcdl headers not found])
|
835 |
|
|
fi
|
836 |
|
|
if test "${MSVC}" = "yes" ; then
|
837 |
|
|
ecos_msvc_libcdl_incdir="${ecos_libcdl_incdir}"
|
838 |
|
|
ECOS_MSVC_PATH(ecos_msvc_libcdl_incdir)
|
839 |
|
|
ecos_INCLUDES="${ecos_INCLUDES} \"-I${ecos_msvc_libcdl_incdir}\""
|
840 |
|
|
else
|
841 |
|
|
ecos_INCLUDES="${ecos_INCLUDES} -I${ecos_libcdl_incdir}"
|
842 |
|
|
fi
|
843 |
|
|
|
844 |
|
|
if test "${with_libcdl_lib+set}" = "set"; then
|
845 |
|
|
ecos_libcdl_libdir="${with_libcdl_lib}"
|
846 |
|
|
elif test "${with_libcdl+set}" = "set"; then
|
847 |
|
|
ecos_libcdl_libdir="${with_libcdl}/lib"
|
848 |
|
|
elif test "${libcdl_builddir}" != "" ; then
|
849 |
|
|
ecos_libcdl_libdir="${libcdl_builddir}"
|
850 |
|
|
else
|
851 |
|
|
AC_MSG_ERROR([libcdl library not found])
|
852 |
|
|
fi
|
853 |
|
|
if test "${MSVC}" = "yes" ; then
|
854 |
|
|
ecos_msvc_libcdl_libdir=${ecos_libcdl_libdir}
|
855 |
|
|
ECOS_MSVC_PATH(ecos_msvc_libcdl_libdir)
|
856 |
|
|
ecos_LIBS="${ecos_LIBS} cdl.lib"
|
857 |
|
|
ecos_LDADD="${ecos_LDADD} \"-libpath=${ecos_msvc_libcdl_libdir}\""
|
858 |
|
|
else
|
859 |
|
|
ecos_LIBS="${ecos_LIBS} -lcdl"
|
860 |
|
|
ecos_LDADD="${ecos_LDADD} -L${ecos_libcdl_libdir}"
|
861 |
|
|
fi
|
862 |
|
|
|
863 |
|
|
AC_SUBST(ecos_libcdl_incdir)
|
864 |
|
|
AC_SUBST(ecos_libcdl_libdir)
|
865 |
|
|
AC_MSG_RESULT([-I${ecos_libcdl_incdir} -L${ecos_libcdl_libdir}])
|
866 |
|
|
])
|
867 |
|
|
|
868 |
|
|
dnl ====================================================================
|
869 |
|
|
dnl Look for a 64 bit data type. It is necessary to check both C and C++
|
870 |
|
|
dnl compilers.
|
871 |
|
|
dnl
|
872 |
|
|
dnl A better implementation would check whether or not AC_PROG_CC and
|
873 |
|
|
dnl AC_PROG_CXX have been invoked and only test the appropriate
|
874 |
|
|
dnl compiler.
|
875 |
|
|
dnl
|
876 |
|
|
dnl When cross-compiling, default to long long on the assumption that
|
877 |
|
|
dnl gcc/g++ must be used and long long is likely to be the 64 bit data
|
878 |
|
|
dnl type. This is not guaranteed, but sufficiently likely to meet
|
879 |
|
|
dnl the requirements for the time being. The CHECK_SIZEOF() macro
|
880 |
|
|
dnl might be another way to get the desired information.
|
881 |
|
|
|
882 |
|
|
AC_DEFUN([ECOS_TYPE_64bit], [
|
883 |
|
|
AC_REQUIRE([AC_PROG_CC])
|
884 |
|
|
AC_REQUIRE([AC_PROG_CXX])
|
885 |
|
|
|
886 |
|
|
AC_CACHE_CHECK("for a 64 bit data type",ecos_cv_type_64bit,[
|
887 |
|
|
for type in "long" "long long" "__int64"; do
|
888 |
|
|
AC_LANG_SAVE
|
889 |
|
|
AC_LANG_C
|
890 |
|
|
AC_TRY_RUN([
|
891 |
|
|
main() {
|
892 |
|
|
return 8 != sizeof($type);
|
893 |
|
|
}
|
894 |
|
|
],ctype_64bit=$type,ctype_64bit="unknown",ctype_64bit="long long")
|
895 |
|
|
AC_LANG_CPLUSPLUS
|
896 |
|
|
AC_TRY_RUN([
|
897 |
|
|
int main(int argc, char ** argv) {
|
898 |
|
|
return 8 != sizeof($type);
|
899 |
|
|
}
|
900 |
|
|
],cxxtype_64bit=$type,cxxtype_64bit="unknown",cxxtype_64bit="long long")
|
901 |
|
|
AC_LANG_RESTORE
|
902 |
|
|
if test "${ctype_64bit}" = "${type}" -a "${cxxtype_64bit}" = "${type}"; then
|
903 |
|
|
ecos_cv_type_64bit="${type}"
|
904 |
|
|
break
|
905 |
|
|
fi
|
906 |
|
|
done
|
907 |
|
|
])
|
908 |
|
|
if test "${ecos_cv_type_64bit}" = ""; then
|
909 |
|
|
AC_MSG_ERROR(Unable to figure out how to do 64 bit arithmetic)
|
910 |
|
|
else
|
911 |
|
|
if test "${ecos_cv_type_64bit}" != "long long"; then
|
912 |
|
|
AC_DEFINE_UNQUOTED(cyg_halint64,${ecos_cv_type_64bit},[size of 64-bit datatype])
|
913 |
|
|
AC_DEFINE_UNQUOTED(cyg_halcount64,${ecos_cv_type_64bit},[size of >= 64-bit datatype])
|
914 |
|
|
fi
|
915 |
|
|
fi
|
916 |
|
|
])
|
917 |
|
|
|
918 |
|
|
dnl ====================================================================
|
919 |
|
|
dnl Check that both the C and C++ compilers support __PRETTY_FUNCTION__
|
920 |
|
|
|
921 |
|
|
AC_DEFUN([ECOS_C_PRETTY_FUNCTION],[
|
922 |
|
|
AC_REQUIRE([AC_PROG_CC])
|
923 |
|
|
AC_REQUIRE([AC_PROG_CXX])
|
924 |
|
|
|
925 |
|
|
AC_CACHE_CHECK("for __PRETTY_FUNCTION__ support",ecos_cv_c_pretty_function,[
|
926 |
|
|
AC_LANG_SAVE
|
927 |
|
|
AC_LANG_C
|
928 |
|
|
AC_TRY_LINK(
|
929 |
|
|
[#include <stdio.h>],
|
930 |
|
|
[puts(__PRETTY_FUNCTION__);],
|
931 |
|
|
c_ok="yes",
|
932 |
|
|
c_ok="no"
|
933 |
|
|
)
|
934 |
|
|
AC_LANG_CPLUSPLUS
|
935 |
|
|
AC_TRY_LINK(
|
936 |
|
|
[#include <cstdio>],
|
937 |
|
|
[puts(__PRETTY_FUNCTION__);],
|
938 |
|
|
cxx_ok="yes",
|
939 |
|
|
cxx_ok="no"
|
940 |
|
|
)
|
941 |
|
|
AC_LANG_RESTORE
|
942 |
|
|
if test "${c_ok}" = "yes" -a "${cxx_ok}" = "yes"; then
|
943 |
|
|
ecos_cv_c_pretty_function="yes"
|
944 |
|
|
fi
|
945 |
|
|
])
|
946 |
|
|
if test "${ecos_cv_c_pretty_function}" = "yes"; then
|
947 |
|
|
AC_DEFINE(CYGDBG_INFRA_DEBUG_FUNCTION_PSEUDOMACRO,[1],[compiler supports __PRETTY_FUNCTION__])
|
948 |
|
|
fi
|
949 |
|
|
])
|
950 |
|
|
|
951 |
|
|
dnl ====================================================================
|
952 |
|
|
dnl During installation eCos package-specific host-side code should be
|
953 |
|
|
dnl versioned in the same way as the packages themselves, allowing
|
954 |
|
|
dnl different versions to coexist in one installation. This is analogous
|
955 |
|
|
dnl to having multiple versions of a shared library installed so that
|
956 |
|
|
dnl applications can load whichever one they were linked with.
|
957 |
|
|
dnl
|
958 |
|
|
dnl To support all this the host-side code needs access to a number
|
959 |
|
|
dnl of directory names:
|
960 |
|
|
dnl ECOS_REPOSITORY e.g. ~/ecc/ecc
|
961 |
|
|
dnl PACKAGE_DIR e.g. hal/synth/arch
|
962 |
|
|
dnl PACKAGE_VERSION e.g. current
|
963 |
|
|
dnl PACKAGE_INSTALL e.g. hal/synth/arch/current
|
964 |
|
|
dnl
|
965 |
|
|
dnl These, together with the standard variable libexecdir, allow
|
966 |
|
|
dnl the host-side code to navigate around both source and install
|
967 |
|
|
dnl trees.
|
968 |
|
|
|
969 |
|
|
AC_DEFUN([ECOS_PACKAGE_DIRS],[
|
970 |
|
|
|
971 |
|
|
dnl srcdir will be something like <path>/packages/<package_path>/<version>/host
|
972 |
|
|
package_dir=`cd ${srcdir} && /bin/pwd`
|
973 |
|
|
PACKAGE_VERSION=`dirname ${package_dir}`
|
974 |
|
|
PACKAGE_VERSION=`basename ${PACKAGE_VERSION}`
|
975 |
|
|
|
976 |
|
|
dnl Now look for an "acsupport" directory as a good way of identifying
|
977 |
|
|
dnl the root of the repository. Assume that this does not clash with
|
978 |
|
|
dnl any real packages in the repository. Also assume that no silly games
|
979 |
|
|
dnl are being played with symlinks.
|
980 |
|
|
package_dir=`dirname ${package_dir}`
|
981 |
|
|
package_dir=`dirname ${package_dir}`
|
982 |
|
|
|
983 |
|
|
possibles="${package_dir}/.. ${package_dir}/../.. ${package_dir}/../../.. ${package_dir}/../../../.."
|
984 |
|
|
possibles="${possibles} ${package_dir}/../../../../.. ${package_dir}/../../../../../.."
|
985 |
|
|
AC_FIND_DIR("acsupport", ${possibles}, repository_root)
|
986 |
|
|
if test "${repository_root}" = "" ; then
|
987 |
|
|
AC_MSG_ERROR([Failed to identify this package's position within the eCos repository])
|
988 |
|
|
fi
|
989 |
|
|
dnl repository_root will still contain the ..'s, instead of an absolute path
|
990 |
|
|
ECOS_REPOSITORY=`cd "${repository_root}/packages/pkgconf/.." && /bin/pwd`
|
991 |
|
|
|
992 |
|
|
dnl Now we have two absolute paths, so just remove one from the other
|
993 |
|
|
PACKAGE_DIR=`echo ${package_dir} | sed -e "s:${ECOS_REPOSITORY}/::"`
|
994 |
|
|
|
995 |
|
|
dnl To avoid creating too many subdirectories on the host-side, turn
|
996 |
|
|
dnl e.g. hal/synth/arch into hal_synth_arch. Theoretically this could
|
997 |
|
|
dnl go wrong because multiple packages could map onto the same string,
|
998 |
|
|
dnl but in practice there should be a net reduction in complexity.
|
999 |
|
|
dnl bartv: / to _ conversion disabled for now, 5 March 2002
|
1000 |
|
|
PACKAGE_INSTALL="${PACKAGE_DIR}/${PACKAGE_VERSION}"
|
1001 |
|
|
dnl PACKAGE_INSTALL=`echo ${PACKAGE_INSTALL} | sed -e "s:/:_:g"`
|
1002 |
|
|
|
1003 |
|
|
AC_SUBST(ECOS_REPOSITORY)
|
1004 |
|
|
AC_SUBST(PACKAGE_DIR)
|
1005 |
|
|
AC_SUBST(PACKAGE_VERSION)
|
1006 |
|
|
AC_SUBST(PACKAGE_INSTALL)
|
1007 |
|
|
])
|