OSDN Git Service

Missed in last commit.
[pf3gnuchains/gcc-fork.git] / config / tcl.m4
1 #------------------------------------------------------------------------
2 # SC_PATH_TCLCONFIG --
3 #
4 #       Locate the tclConfig.sh file and perform a sanity check on
5 #       the Tcl compile flags
6 #
7 # Arguments:
8 #       none
9 #
10 # Results:
11 #
12 #       Adds the following arguments to configure:
13 #               --with-tcl=...
14 #
15 #       Defines the following vars:
16 #               TCL_BIN_DIR     Full path to the directory containing
17 #                               the tclConfig.sh file
18 #------------------------------------------------------------------------
19
20 AC_DEFUN([SC_PATH_TCLCONFIG], [
21     #
22     # Ok, lets find the tcl configuration
23     # First, look for one uninstalled.
24     # the alternative search directory is invoked by --with-tcl
25     #
26
27     if test x"${no_tcl}" = x ; then
28         # we reset no_tcl in case something fails here
29         no_tcl=true
30         AC_ARG_WITH(tcl, [  --with-tcl              directory containing tcl configuration (tclConfig.sh)], with_tclconfig=${withval})
31         AC_MSG_CHECKING([for Tcl configuration])
32         AC_CACHE_VAL(ac_cv_c_tclconfig,[
33
34             # First check to see if --with-tcl was specified.
35             case "${host}" in
36                 *-*-cygwin*) platDir="win" ;;
37                 *) platDir="unix" ;;
38             esac
39             if test x"${with_tclconfig}" != x ; then
40                 if test -f "${with_tclconfig}/tclConfig.sh" ; then
41                     ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)`
42                 else
43                     AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
44                 fi
45             fi
46
47             # then check for a private Tcl installation
48             if test x"${ac_cv_c_tclconfig}" = x ; then
49                 for i in \
50                         ../tcl \
51                         `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
52                         `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
53                         `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
54                         ../../tcl \
55                         `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
56                         `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
57                         `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
58                         ../../../tcl \
59                         `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
60                         `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
61                         `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
62                     if test -f "$i/$platDir/tclConfig.sh" ; then
63                         ac_cv_c_tclconfig=`(cd $i/$platDir; pwd)`
64                         break
65                     fi
66                 done
67             fi
68
69             # on Darwin, check in Framework installation locations
70             if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then
71                 for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
72                         `ls -d /Library/Frameworks 2>/dev/null` \
73                         `ls -d /Network/Library/Frameworks 2>/dev/null` \
74                         `ls -d /System/Library/Frameworks 2>/dev/null` \
75                         ; do
76                     if test -f "$i/Tcl.framework/tclConfig.sh" ; then
77                         ac_cv_c_tclconfig=`(cd $i/Tcl.framework; pwd)`
78                         break
79                     fi
80                 done
81             fi
82
83             # check in a few common install locations
84             if test x"${ac_cv_c_tclconfig}" = x ; then
85                 for i in `ls -d ${libdir} 2>/dev/null` \
86                         `ls -d ${exec_prefix}/lib 2>/dev/null` \
87                         `ls -d ${prefix}/lib 2>/dev/null` \
88                         `ls -d /usr/local/lib 2>/dev/null` \
89                         `ls -d /usr/contrib/lib 2>/dev/null` \
90                         `ls -d /usr/lib 2>/dev/null` \
91                         ; do
92                     if test -f "$i/tclConfig.sh" ; then
93                         ac_cv_c_tclconfig=`(cd $i; pwd)`
94                         break
95                     fi
96                 done
97             fi
98
99             # check in a few other private locations
100             if test x"${ac_cv_c_tclconfig}" = x ; then
101                 for i in \
102                         ${srcdir}/../tcl \
103                         `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
104                         `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
105                         `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
106                     if test -f "$i/$platDir/tclConfig.sh" ; then
107                     ac_cv_c_tclconfig=`(cd $i/$platDir; pwd)`
108                     break
109                 fi
110                 done
111             fi
112         ])
113
114         if test x"${ac_cv_c_tclconfig}" = x ; then
115             TCL_BIN_DIR="# no Tcl configs found"
116             AC_MSG_WARN([Can't find Tcl configuration definitions])
117         else
118             no_tcl=
119             TCL_BIN_DIR=${ac_cv_c_tclconfig}
120             AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh])
121         fi
122     fi
123 ])
124
125 #------------------------------------------------------------------------
126 # SC_PATH_TKCONFIG --
127 #
128 #       Locate the tkConfig.sh file
129 #
130 # Arguments:
131 #       none
132 #
133 # Results:
134 #
135 #       Adds the following arguments to configure:
136 #               --with-tk=...
137 #
138 #       Defines the following vars:
139 #               TK_BIN_DIR      Full path to the directory containing
140 #                               the tkConfig.sh file
141 #------------------------------------------------------------------------
142
143 AC_DEFUN([SC_PATH_TKCONFIG], [
144     #
145     # Ok, lets find the tk configuration
146     # First, look for one uninstalled.
147     # the alternative search directory is invoked by --with-tk
148     #
149
150     if test x"${no_tk}" = x ; then
151         # we reset no_tk in case something fails here
152         no_tk=true
153         AC_ARG_WITH(tk, [  --with-tk               directory containing tk configuration (tkConfig.sh)], with_tkconfig=${withval})
154         AC_MSG_CHECKING([for Tk configuration])
155         AC_CACHE_VAL(ac_cv_c_tkconfig,[
156
157             # First check to see if --with-tkconfig was specified.
158             if test x"${with_tkconfig}" != x ; then
159                 if test -f "${with_tkconfig}/tkConfig.sh" ; then
160                     ac_cv_c_tkconfig=`(cd ${with_tkconfig}; pwd)`
161                 else
162                     AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
163                 fi
164             fi
165
166             # then check for a private Tk library
167             case "${host}" in
168                 *-*-cygwin*) platDir="win" ;;
169                 *) platDir="unix" ;;
170             esac
171             if test x"${ac_cv_c_tkconfig}" = x ; then
172                 for i in \
173                         ../tk \
174                         `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
175                         `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
176                         `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
177                         ../../tk \
178                         `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
179                         `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
180                         `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
181                         ../../../tk \
182                         `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
183                         `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
184                         `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
185                     if test -f "$i/$platDir/tkConfig.sh" ; then
186                         ac_cv_c_tkconfig=`(cd $i/$platDir; pwd)`
187                         break
188                     fi
189                 done
190             fi
191
192             # on Darwin, check in Framework installation locations
193             if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then
194                 for i in `ls -d ~/Library/Frameworks 2>/dev/null` \
195                         `ls -d /Library/Frameworks 2>/dev/null` \
196                         `ls -d /Network/Library/Frameworks 2>/dev/null` \
197                         `ls -d /System/Library/Frameworks 2>/dev/null` \
198                         ; do
199                     if test -f "$i/Tk.framework/tkConfig.sh" ; then
200                         ac_cv_c_tkconfig=`(cd $i/Tk.framework; pwd)`
201                         break
202                     fi
203                 done
204             fi
205
206             # check in a few common install locations
207             if test x"${ac_cv_c_tkconfig}" = x ; then
208                 for i in `ls -d ${libdir} 2>/dev/null` \
209                         `ls -d ${exec_prefix}/lib 2>/dev/null` \
210                         `ls -d ${prefix}/lib 2>/dev/null` \
211                         `ls -d /usr/local/lib 2>/dev/null` \
212                         `ls -d /usr/contrib/lib 2>/dev/null` \
213                         `ls -d /usr/lib 2>/dev/null` \
214                         ; do
215                     if test -f "$i/tkConfig.sh" ; then
216                         ac_cv_c_tkconfig=`(cd $i; pwd)`
217                         break
218                     fi
219                 done
220             fi
221             # check in a few other private locations
222             if test x"${ac_cv_c_tkconfig}" = x ; then
223                 for i in \
224                         ${srcdir}/../tk \
225                         `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
226                         `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
227                         `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
228                     if test -f "$i/$platDir/tkConfig.sh" ; then
229                         ac_cv_c_tkconfig=`(cd $i/$platDir; pwd)`
230                         break
231                     fi
232                 done
233             fi
234         ])
235
236         if test x"${ac_cv_c_tkconfig}" = x ; then
237             TK_BIN_DIR="# no Tk configs found"
238             AC_MSG_WARN([Can't find Tk configuration definitions])
239         else
240             no_tk=
241             TK_BIN_DIR=${ac_cv_c_tkconfig}
242             AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
243         fi
244     fi
245 ])
246
247 #------------------------------------------------------------------------
248 # SC_LOAD_TCLCONFIG --
249 #
250 #       Load the tclConfig.sh file
251 #
252 # Arguments:
253 #       
254 #       Requires the following vars to be set:
255 #               TCL_BIN_DIR
256 #
257 # Results:
258 #
259 #       Subst the following vars:
260 #               TCL_BIN_DIR
261 #               TCL_SRC_DIR
262 #               TCL_LIB_FILE
263 #
264 #------------------------------------------------------------------------
265
266 AC_DEFUN([SC_LOAD_TCLCONFIG], [
267     AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh])
268
269     if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
270         AC_MSG_RESULT([loading])
271         . ${TCL_BIN_DIR}/tclConfig.sh
272     else
273         AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh])
274     fi
275
276     # eval is required to do the TCL_DBGX substitution
277     eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
278     eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
279
280     # If the TCL_BIN_DIR is the build directory (not the install directory),
281     # then set the common variable name to the value of the build variables.
282     # For example, the variable TCL_LIB_SPEC will be set to the value
283     # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
284     # instead of TCL_BUILD_LIB_SPEC since it will work with both an
285     # installed and uninstalled version of Tcl.
286     if test -f "${TCL_BIN_DIR}/Makefile" ; then
287         TCL_LIB_SPEC=${TCL_BUILD_LIB_SPEC}
288         TCL_STUB_LIB_SPEC=${TCL_BUILD_STUB_LIB_SPEC}
289         TCL_STUB_LIB_PATH=${TCL_BUILD_STUB_LIB_PATH}
290     elif test "`uname -s`" = "Darwin"; then
291         # If Tcl was built as a framework, attempt to use the libraries
292         # from the framework at the given location so that linking works
293         # against Tcl.framework installed in an arbitary location.
294         case ${TCL_DEFS} in
295             *TCL_FRAMEWORK*)
296                 if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then
297                     for i in "`cd ${TCL_BIN_DIR}; pwd`" \
298                              "`cd ${TCL_BIN_DIR}/../..; pwd`"; do
299                         if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then
300                             TCL_LIB_SPEC="-F`dirname "$i"` -framework ${TCL_LIB_FILE}"
301                             break
302                         fi
303                     done
304                 fi
305                 if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then
306                     TCL_STUB_LIB_SPEC="-L${TCL_BIN_DIR} ${TCL_STUB_LIB_FLAG}"
307                     TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"
308                 fi
309                 ;;
310         esac
311     fi
312
313     # eval is required to do the TCL_DBGX substitution
314     eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
315     eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
316     eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
317     eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
318
319     AC_SUBST(TCL_VERSION)
320     AC_SUBST(TCL_PATCH_LEVEL)
321     AC_SUBST(TCL_BIN_DIR)
322     AC_SUBST(TCL_SRC_DIR)
323
324     AC_SUBST(TCL_LIB_FILE)
325     AC_SUBST(TCL_LIB_FLAG)
326     AC_SUBST(TCL_LIB_SPEC)
327
328     AC_SUBST(TCL_STUB_LIB_FILE)
329     AC_SUBST(TCL_STUB_LIB_FLAG)
330     AC_SUBST(TCL_STUB_LIB_SPEC)
331 ])
332
333 #------------------------------------------------------------------------
334 # SC_LOAD_TKCONFIG --
335 #
336 #       Load the tkConfig.sh file
337 #
338 # Arguments:
339 #       
340 #       Requires the following vars to be set:
341 #               TK_BIN_DIR
342 #
343 # Results:
344 #
345 #       Sets the following vars that should be in tkConfig.sh:
346 #               TK_BIN_DIR
347 #------------------------------------------------------------------------
348
349 AC_DEFUN([SC_LOAD_TKCONFIG], [
350     AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
351
352     if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
353         AC_MSG_RESULT([loading])
354         . ${TK_BIN_DIR}/tkConfig.sh
355     else
356         AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
357     fi
358
359     # eval is required to do the TK_DBGX substitution
360     eval "TK_LIB_FILE=\"${TK_LIB_FILE}\""
361     eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\""
362
363     # If the TK_BIN_DIR is the build directory (not the install directory),
364     # then set the common variable name to the value of the build variables.
365     # For example, the variable TK_LIB_SPEC will be set to the value
366     # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC
367     # instead of TK_BUILD_LIB_SPEC since it will work with both an
368     # installed and uninstalled version of Tcl.
369     if test -f "${TK_BIN_DIR}/Makefile" ; then
370         TK_LIB_SPEC=${TK_BUILD_LIB_SPEC}
371         TK_STUB_LIB_SPEC=${TK_BUILD_STUB_LIB_SPEC}
372         TK_STUB_LIB_PATH=${TK_BUILD_STUB_LIB_PATH}
373     elif test "`uname -s`" = "Darwin"; then
374         # If Tk was built as a framework, attempt to use the libraries
375         # from the framework at the given location so that linking works
376         # against Tk.framework installed in an arbitary location.
377         case ${TK_DEFS} in
378             *TK_FRAMEWORK*)
379                 if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then
380                     for i in "`cd ${TK_BIN_DIR}; pwd`" \
381                              "`cd ${TK_BIN_DIR}/../..; pwd`"; do
382                         if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then
383                             TK_LIB_SPEC="-F`dirname "$i"` -framework ${TK_LIB_FILE}"
384                             break
385                         fi
386                     done
387                 fi
388                 if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then
389                     TK_STUB_LIB_SPEC="-L${TK_BIN_DIR} ${TK_STUB_LIB_FLAG}"
390                     TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"
391                 fi
392                 ;;
393         esac
394     fi
395
396     # eval is required to do the TK_DBGX substitution
397     eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\""
398     eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\""
399     eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\""
400     eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\""
401
402     AC_SUBST(TK_VERSION)
403     AC_SUBST(TK_BIN_DIR)
404     AC_SUBST(TK_SRC_DIR)
405
406     AC_SUBST(TK_LIB_FILE)
407     AC_SUBST(TK_LIB_FLAG)
408     AC_SUBST(TK_LIB_SPEC)
409
410     AC_SUBST(TK_STUB_LIB_FILE)
411     AC_SUBST(TK_STUB_LIB_FLAG)
412     AC_SUBST(TK_STUB_LIB_SPEC)
413 ])
414
415 #------------------------------------------------------------------------
416 # SC_PROG_TCLSH
417 #       Locate a tclsh shell installed on the system path. This macro
418 #       will only find a Tcl shell that already exists on the system.
419 #       It will not find a Tcl shell in the Tcl build directory or
420 #       a Tcl shell that has been installed from the Tcl build directory.
421 #       If a Tcl shell can't be located on the PATH, then TCLSH_PROG will
422 #       be set to "". Extensions should take care not to create Makefile
423 #       rules that are run by default and depend on TCLSH_PROG. An
424 #       extension can't assume that an executable Tcl shell exists at
425 #       build time.
426 #
427 # Arguments
428 #       none
429 #
430 # Results
431 #       Subst's the following values:
432 #               TCLSH_PROG
433 #------------------------------------------------------------------------
434
435 AC_DEFUN([SC_PROG_TCLSH], [
436     AC_MSG_CHECKING([for tclsh])
437     AC_CACHE_VAL(ac_cv_path_tclsh, [
438         search_path=`echo ${PATH} | sed -e 's/:/ /g'`
439         for dir in $search_path ; do
440             for j in `ls -r $dir/tclsh[[8-9]]* 2> /dev/null` \
441                     `ls -r $dir/tclsh* 2> /dev/null` ; do
442                 if test x"$ac_cv_path_tclsh" = x ; then
443                     if test -f "$j" ; then
444                         ac_cv_path_tclsh=$j
445                         break
446                     fi
447                 fi
448             done
449         done
450     ])
451
452     if test -f "$ac_cv_path_tclsh" ; then
453         TCLSH_PROG="$ac_cv_path_tclsh"
454         AC_MSG_RESULT([$TCLSH_PROG])
455     else
456         # It is not an error if an installed version of Tcl can't be located.
457         TCLSH_PROG=""
458         AC_MSG_RESULT([No tclsh found on PATH])
459     fi
460     AC_SUBST(TCLSH_PROG)
461 ])
462
463 #------------------------------------------------------------------------
464 # SC_BUILD_TCLSH
465 #       Determine the fully qualified path name of the tclsh executable
466 #       in the Tcl build directory. This macro will correctly determine
467 #       the name of the tclsh executable even if tclsh has not yet
468 #       been built in the build directory. The build tclsh must be used
469 #       when running tests from an extension build directory. It is not
470 #       correct to use the TCLSH_PROG in cases like this.
471 #
472 # Arguments
473 #       none
474 #
475 # Results
476 #       Subst's the following values:
477 #               BUILD_TCLSH
478 #------------------------------------------------------------------------
479
480 AC_DEFUN([SC_BUILD_TCLSH], [
481     AC_MSG_CHECKING([for tclsh in Tcl build directory])
482     BUILD_TCLSH=${TCL_BIN_DIR}/tclsh
483     AC_MSG_RESULT([$BUILD_TCLSH])
484     AC_SUBST(BUILD_TCLSH)
485 ])
486
487 #------------------------------------------------------------------------
488 # SC_ENABLE_SHARED --
489 #
490 #       Allows the building of shared libraries
491 #
492 # Arguments:
493 #       none
494 #       
495 # Results:
496 #
497 #       Adds the following arguments to configure:
498 #               --enable-shared=yes|no
499 #
500 #       Defines the following vars:
501 #               STATIC_BUILD    Used for building import/export libraries
502 #                               on Windows.
503 #
504 #       Sets the following vars:
505 #               SHARED_BUILD    Value of 1 or 0
506 #------------------------------------------------------------------------
507
508 AC_DEFUN([SC_ENABLE_SHARED], [
509     AC_MSG_CHECKING([how to build libraries])
510     AC_ARG_ENABLE(shared,
511         [  --enable-shared         build and link with shared libraries [--enable-shared]],
512         [tcl_ok=$enableval], [tcl_ok=yes])
513
514     if test "${enable_shared+set}" = set; then
515         enableval="$enable_shared"
516         tcl_ok=$enableval
517     else
518         tcl_ok=yes
519     fi
520
521     if test "$tcl_ok" = "yes" ; then
522         AC_MSG_RESULT([shared])
523         SHARED_BUILD=1
524     else
525         AC_MSG_RESULT([static])
526         SHARED_BUILD=0
527         AC_DEFINE(STATIC_BUILD)
528     fi
529 ])
530
531 #------------------------------------------------------------------------
532 # SC_ENABLE_FRAMEWORK --
533 #
534 #       Allows the building of shared libraries into frameworks
535 #
536 # Arguments:
537 #       none
538 #       
539 # Results:
540 #
541 #       Adds the following arguments to configure:
542 #               --enable-framework=yes|no
543 #
544 #       Sets the following vars:
545 #               FRAMEWORK_BUILD Value of 1 or 0
546 #------------------------------------------------------------------------
547
548 AC_DEFUN([SC_ENABLE_FRAMEWORK], [
549     if test "`uname -s`" = "Darwin" ; then
550         AC_MSG_CHECKING([how to package libraries])
551         AC_ARG_ENABLE(framework,
552             [  --enable-framework      package shared libraries in MacOSX frameworks [--disable-framework]],
553             [enable_framework=$enableval], [enable_framework=no])
554         if test $enable_framework = yes; then
555             if test $SHARED_BUILD = 0; then
556                 AC_MSG_WARN([Frameworks can only be built if --enable-shared is yes])
557                 enable_framework=no
558             fi
559             if test $tcl_corefoundation = no; then
560                 AC_MSG_WARN([Frameworks can only be used when CoreFoundation is available])
561                 enable_framework=no
562             fi
563         fi
564         if test $enable_framework = yes; then
565             AC_MSG_RESULT([framework])
566             FRAMEWORK_BUILD=1
567         else
568             if test $SHARED_BUILD = 1; then
569                 AC_MSG_RESULT([shared library])
570             else
571                 AC_MSG_RESULT([static library])
572             fi
573             FRAMEWORK_BUILD=0
574         fi
575     fi
576 ])
577
578 #------------------------------------------------------------------------
579 # SC_ENABLE_THREADS --
580 #
581 #       Specify if thread support should be enabled.  TCL_THREADS is
582 #       checked so that if you are compiling an extension against a
583 #       threaded core, your extension must be compiled threaded as well.
584 #
585 # Arguments:
586 #       none
587 #       
588 # Results:
589 #
590 #       Adds the following arguments to configure:
591 #               --enable-threads
592 #
593 #       Sets the following vars:
594 #               THREADS_LIBS    Thread library(s)
595 #
596 #       Defines the following vars:
597 #               TCL_THREADS
598 #               _REENTRANT
599 #               _THREAD_SAFE
600 #
601 #------------------------------------------------------------------------
602
603 AC_DEFUN([SC_ENABLE_THREADS], [
604     AC_ARG_ENABLE(threads, [  --enable-threads        build with threads],
605         [tcl_ok=$enableval], [tcl_ok=no])
606
607     if test "${TCL_THREADS}" = 1; then
608         tcl_threaded_core=1;
609     fi
610
611     if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then
612         TCL_THREADS=1
613         # USE_THREAD_ALLOC tells us to try the special thread-based
614         # allocator that significantly reduces lock contention
615         AC_DEFINE(USE_THREAD_ALLOC)
616         AC_DEFINE(_REENTRANT)
617         if test "`uname -s`" = "SunOS" ; then
618             AC_DEFINE(_POSIX_PTHREAD_SEMANTICS)
619         fi
620         AC_DEFINE(_THREAD_SAFE)
621         AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
622         if test "$tcl_ok" = "no"; then
623             # Check a little harder for __pthread_mutex_init in the same
624             # library, as some systems hide it there until pthread.h is
625             # defined.  We could alternatively do an AC_TRY_COMPILE with
626             # pthread.h, but that will work with libpthread really doesn't
627             # exist, like AIX 4.2.  [Bug: 4359]
628             AC_CHECK_LIB(pthread, __pthread_mutex_init,
629                 tcl_ok=yes, tcl_ok=no)
630         fi
631
632         if test "$tcl_ok" = "yes"; then
633             # The space is needed
634             THREADS_LIBS=" -lpthread"
635         else
636             AC_CHECK_LIB(pthreads, pthread_mutex_init,
637                 tcl_ok=yes, tcl_ok=no)
638             if test "$tcl_ok" = "yes"; then
639                 # The space is needed
640                 THREADS_LIBS=" -lpthreads"
641             else
642                 AC_CHECK_LIB(c, pthread_mutex_init,
643                     tcl_ok=yes, tcl_ok=no)
644                 if test "$tcl_ok" = "no"; then
645                     AC_CHECK_LIB(c_r, pthread_mutex_init,
646                         tcl_ok=yes, tcl_ok=no)
647                     if test "$tcl_ok" = "yes"; then
648                         # The space is needed
649                         THREADS_LIBS=" -pthread"
650                     else
651                         TCL_THREADS=0
652                         AC_MSG_WARN([Don't know how to find pthread lib on your system - you must disable thread support or edit the LIBS in the Makefile...])
653                     fi
654                 fi
655             fi
656         fi
657
658         # Does the pthread-implementation provide
659         # 'pthread_attr_setstacksize' ?
660
661         ac_saved_libs=$LIBS
662         LIBS="$LIBS $THREADS_LIBS"
663         AC_CHECK_FUNCS(pthread_attr_setstacksize)
664         AC_CHECK_FUNCS(pthread_atfork)
665         LIBS=$ac_saved_libs
666     else
667         TCL_THREADS=0
668     fi
669     # Do checking message here to not mess up interleaved configure output
670     AC_MSG_CHECKING([for building with threads])
671     if test "${TCL_THREADS}" = 1; then
672         AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?])
673         if test "${tcl_threaded_core}" = 1; then
674             AC_MSG_RESULT([yes (threaded core)])
675         else
676             AC_MSG_RESULT([yes])
677         fi
678     else
679         AC_MSG_RESULT([no (default)])
680     fi
681
682     AC_SUBST(TCL_THREADS)
683 ])
684
685 #------------------------------------------------------------------------
686 # SC_ENABLE_SYMBOLS --
687 #
688 #       Specify if debugging symbols should be used.
689 #       Memory (TCL_MEM_DEBUG) and compile (TCL_COMPILE_DEBUG) debugging
690 #       can also be enabled.
691 #
692 # Arguments:
693 #       none
694 #       
695 #       Requires the following vars to be set in the Makefile:
696 #               CFLAGS_DEBUG
697 #               CFLAGS_OPTIMIZE
698 #               LDFLAGS_DEBUG
699 #               LDFLAGS_OPTIMIZE
700 #       
701 # Results:
702 #
703 #       Adds the following arguments to configure:
704 #               --enable-symbols
705 #
706 #       Defines the following vars:
707 #               CFLAGS_DEFAULT  Sets to $(CFLAGS_DEBUG) if true
708 #                               Sets to $(CFLAGS_OPTIMIZE) if false
709 #               LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true
710 #                               Sets to $(LDFLAGS_OPTIMIZE) if false
711 #               DBGX            Debug library extension
712 #
713 #------------------------------------------------------------------------
714
715 AC_DEFUN([SC_ENABLE_SYMBOLS], [
716     AC_MSG_CHECKING([for build with symbols])
717     AC_ARG_ENABLE(symbols, [  --enable-symbols        build with debugging symbols [--disable-symbols]],    [tcl_ok=$enableval], [tcl_ok=no])
718 # FIXME: Currently, LDFLAGS_DEFAULT is not used, it should work like CFLAGS_DEFAULT.
719     if test "$tcl_ok" = "no"; then
720         CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)'
721         LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)'
722         DBGX=""
723         AC_MSG_RESULT([no])
724     else
725         CFLAGS_DEFAULT='$(CFLAGS_DEBUG)'
726         LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)'
727         DBGX=g
728         if test "$tcl_ok" = "yes"; then
729             AC_MSG_RESULT([yes (standard debugging)])
730         fi
731     fi
732     AC_SUBST(CFLAGS_DEFAULT)
733     AC_SUBST(LDFLAGS_DEFAULT)
734
735     if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
736         AC_DEFINE(TCL_MEM_DEBUG)
737     fi
738
739     if test "$tcl_ok" = "compile" -o "$tcl_ok" = "all"; then
740         AC_DEFINE(TCL_COMPILE_DEBUG)
741         AC_DEFINE(TCL_COMPILE_STATS)
742     fi
743
744     if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
745         if test "$tcl_ok" = "all"; then
746             AC_MSG_RESULT([enabled symbols mem compile debugging])
747         else
748             AC_MSG_RESULT([enabled $tcl_ok debugging])
749         fi
750     fi
751 ])
752
753 #------------------------------------------------------------------------
754 # SC_ENABLE_LANGINFO --
755 #
756 #       Allows use of modern nl_langinfo check for better l10n.
757 #       This is only relevant for Unix.
758 #
759 # Arguments:
760 #       none
761 #       
762 # Results:
763 #
764 #       Adds the following arguments to configure:
765 #               --enable-langinfo=yes|no (default is yes)
766 #
767 #       Defines the following vars:
768 #               HAVE_LANGINFO   Triggers use of nl_langinfo if defined.
769 #
770 #------------------------------------------------------------------------
771
772 AC_DEFUN([SC_ENABLE_LANGINFO], [
773     AC_ARG_ENABLE(langinfo,
774         [  --enable-langinfo      use nl_langinfo if possible to determine
775                           encoding at startup, otherwise use old heuristic],
776         [langinfo_ok=$enableval], [langinfo_ok=yes])
777
778     HAVE_LANGINFO=0
779     if test "$langinfo_ok" = "yes"; then
780         AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no])
781     fi
782     AC_MSG_CHECKING([whether to use nl_langinfo])
783     if test "$langinfo_ok" = "yes"; then
784         AC_CACHE_VAL(tcl_cv_langinfo_h, [
785             AC_TRY_COMPILE([#include <langinfo.h>], [nl_langinfo(CODESET);],
786                     [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])])
787         AC_MSG_RESULT([$tcl_cv_langinfo_h])
788         if test $tcl_cv_langinfo_h = yes; then
789             AC_DEFINE(HAVE_LANGINFO)
790         fi
791     else 
792         AC_MSG_RESULT([$langinfo_ok])
793     fi
794 ])
795
796 #--------------------------------------------------------------------
797 # SC_CONFIG_MANPAGES
798 #       
799 #       Decide whether to use symlinks for linking the manpages,
800 #       whether to compress the manpages after installation, and
801 #       whether to add a package name suffix to the installed
802 #       manpages to avoidfile name clashes.
803 #       If compression is enabled also find out what file name suffix
804 #       the given compression program is using.
805 #
806 # Arguments:
807 #       none
808 #
809 # Results:
810 #
811 #       Adds the following arguments to configure:
812 #               --enable-man-symlinks
813 #               --enable-man-compression=PROG
814 #               --enable-man-suffix[=STRING]
815 #
816 #       Defines the following variable:
817 #
818 #       MAN_FLAGS -     The apropriate flags for installManPage
819 #                       according to the user's selection.
820 #
821 #--------------------------------------------------------------------
822
823 AC_DEFUN([SC_CONFIG_MANPAGES], [
824     AC_MSG_CHECKING([whether to use symlinks for manpages])
825     AC_ARG_ENABLE(man-symlinks,
826             [  --enable-man-symlinks   use symlinks for the manpages],
827         test "$enableval" != "no" && MAN_FLAGS="$MAN_FLAGS --symlinks",
828         enableval="no")
829     AC_MSG_RESULT([$enableval])
830
831     AC_MSG_CHECKING([whether to compress the manpages])
832     AC_ARG_ENABLE(man-compression,
833             [  --enable-man-compression=PROG
834                       compress the manpages with PROG],
835         [case $enableval in
836             yes) AC_MSG_ERROR([missing argument to --enable-man-compression]);;
837             no)  ;;
838             *)   MAN_FLAGS="$MAN_FLAGS --compress $enableval";;
839         esac],
840         enableval="no")
841     AC_MSG_RESULT([$enableval])
842     if test "$enableval" != "no"; then
843         AC_MSG_CHECKING([for compressed file suffix])
844         touch TeST
845         $enableval TeST
846         Z=`ls TeST* | sed 's/^....//'`
847         rm -f TeST*
848         MAN_FLAGS="$MAN_FLAGS --extension $Z"
849         AC_MSG_RESULT([$Z])
850     fi
851
852     AC_MSG_CHECKING([whether to add a package name suffix for the manpages])
853     AC_ARG_ENABLE(man-suffix,
854             [  --enable-man-suffix=STRING
855                       use STRING as a suffix to manpage file names
856                       (default: $1)],
857         [case $enableval in
858             yes) enableval="$1" MAN_FLAGS="$MAN_FLAGS --suffix $enableval";;
859             no)  ;;
860             *)   MAN_FLAGS="$MAN_FLAGS --suffix $enableval";;
861         esac],
862         enableval="no")
863     AC_MSG_RESULT([$enableval])
864
865     AC_SUBST(MAN_FLAGS)
866 ])
867
868 #--------------------------------------------------------------------
869 # SC_CONFIG_SYSTEM
870 #
871 #       Determine what the system is (some things cannot be easily checked
872 #       on a feature-driven basis, alas). This can usually be done via the
873 #       "uname" command, but there are a few systems, like Next, where
874 #       this doesn't work.
875 #
876 # Arguments:
877 #       none
878 #
879 # Results:
880 #       Defines the following var:
881 #
882 #       system -        System/platform/version identification code.
883 #
884 #--------------------------------------------------------------------
885
886 AC_DEFUN([SC_CONFIG_SYSTEM], [
887     AC_CACHE_CHECK([system version], tcl_cv_sys_version, [
888         if test -f /usr/lib/NextStep/software_version; then
889             tcl_cv_sys_version=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version`
890         else
891             tcl_cv_sys_version=`uname -s`-`uname -r`
892             if test "$?" -ne 0 ; then
893                 AC_MSG_WARN([can't find uname command])
894                 tcl_cv_sys_version=unknown
895             else
896                 # Special check for weird MP-RAS system (uname returns weird
897                 # results, and the version is kept in special file).
898
899                 if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then
900                     tcl_cv_sys_version=MP-RAS-`awk '{print $[3]}' /etc/.relid`
901                 fi
902                 if test "`uname -s`" = "AIX" ; then
903                     tcl_cv_sys_version=AIX-`uname -v`.`uname -r`
904                 fi
905             fi
906         fi
907     ])
908     system=$tcl_cv_sys_version
909 ])
910
911 #--------------------------------------------------------------------
912 # SC_CONFIG_CFLAGS
913 #
914 #       Try to determine the proper flags to pass to the compiler
915 #       for building shared libraries and other such nonsense.
916 #
917 # Arguments:
918 #       none
919 #
920 # Results:
921 #
922 #       Defines and substitutes the following vars:
923 #
924 #       DL_OBJS -       Name of the object file that implements dynamic
925 #                       loading for Tcl on this system.
926 #       DL_LIBS -       Library file(s) to include in tclsh and other base
927 #                       applications in order for the "load" command to work.
928 #       LDFLAGS -      Flags to pass to the compiler when linking object
929 #                       files into an executable application binary such
930 #                       as tclsh.
931 #       LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
932 #                       that tell the run-time dynamic linker where to look
933 #                       for shared libraries such as libtcl.so.  Depends on
934 #                       the variable LIB_RUNTIME_DIR in the Makefile. Could
935 #                       be the same as CC_SEARCH_FLAGS if ${CC} is used to link.
936 #       CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib",
937 #                       that tell the run-time dynamic linker where to look
938 #                       for shared libraries such as libtcl.so.  Depends on
939 #                       the variable LIB_RUNTIME_DIR in the Makefile.
940 #       MAKE_LIB -      Command to execute to build the a library;
941 #                       differs when building shared or static.
942 #       MAKE_STUB_LIB -
943 #                       Command to execute to build a stub library.
944 #       INSTALL_LIB -   Command to execute to install a library;
945 #                       differs when building shared or static.
946 #       INSTALL_STUB_LIB -
947 #                       Command to execute to install a stub library.
948 #       STLIB_LD -      Base command to use for combining object files
949 #                       into a static library.
950 #       SHLIB_CFLAGS -  Flags to pass to cc when compiling the components
951 #                       of a shared library (may request position-independent
952 #                       code, among other things).
953 #       SHLIB_LD -      Base command to use for combining object files
954 #                       into a shared library.
955 #       SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
956 #                       creating shared libraries.  This symbol typically
957 #                       goes at the end of the "ld" commands that build
958 #                       shared libraries. The value of the symbol is
959 #                       "${LIBS}" if all of the dependent libraries should
960 #                       be specified when creating a shared library.  If
961 #                       dependent libraries should not be specified (as on
962 #                       SunOS 4.x, where they cause the link to fail, or in
963 #                       general if Tcl and Tk aren't themselves shared
964 #                       libraries), then this symbol has an empty string
965 #                       as its value.
966 #       SHLIB_SUFFIX -  Suffix to use for the names of dynamically loadable
967 #                       extensions.  An empty string means we don't know how
968 #                       to use shared libraries on this platform.
969 # TCL_SHLIB_LD_EXTRAS - Additional element which are added to SHLIB_LD_LIBS
970 #  TK_SHLIB_LD_EXTRAS   for the build of Tcl and Tk, but not recorded in the
971 #                       tclConfig.sh, since they are only used for the build
972 #                       of Tcl and Tk. 
973 #                       Examples: MacOS X records the library version and
974 #                       compatibility version in the shared library.  But
975 #                       of course the Tcl version of this is only used for Tcl.
976 #       LIB_SUFFIX -    Specifies everything that comes after the "libfoo"
977 #                       in a static or shared library name, using the $VERSION variable
978 #                       to put the version in the right place.  This is used
979 #                       by platforms that need non-standard library names.
980 #                       Examples:  ${VERSION}.so.1.1 on NetBSD, since it needs
981 #                       to have a version after the .so, and ${VERSION}.a
982 #                       on AIX, since a shared library needs to have
983 #                       a .a extension whereas shared objects for loadable
984 #                       extensions have a .so extension.  Defaults to
985 #                       ${VERSION}${SHLIB_SUFFIX}.
986 #       TCL_NEEDS_EXP_FILE -
987 #                       1 means that an export file is needed to link to a
988 #                       shared library.
989 #       TCL_EXP_FILE -  The name of the installed export / import file which
990 #                       should be used to link to the Tcl shared library.
991 #                       Empty if Tcl is unshared.
992 #       TCL_BUILD_EXP_FILE -
993 #                       The name of the built export / import file which
994 #                       should be used to link to the Tcl shared library.
995 #                       Empty if Tcl is unshared.
996 #       CFLAGS_DEBUG -
997 #                       Flags used when running the compiler in debug mode
998 #       CFLAGS_OPTIMIZE -
999 #                       Flags used when running the compiler in optimize mode
1000 #       CFLAGS -        Additional CFLAGS added as necessary (usually 64-bit)
1001 #
1002 #--------------------------------------------------------------------
1003
1004 AC_DEFUN([SC_CONFIG_CFLAGS], [
1005
1006     # Step 0.a: Enable 64 bit support?
1007
1008     AC_MSG_CHECKING([if 64bit support is requested])
1009     AC_ARG_ENABLE(64bit,[  --enable-64bit          enable 64bit support (where applicable)],
1010         [do64bit=$enableval], [do64bit=no])
1011     AC_MSG_RESULT([$do64bit])
1012
1013     # Step 0.b: Enable Solaris 64 bit VIS support?
1014
1015     AC_MSG_CHECKING([if 64bit Sparc VIS support is requested])
1016     AC_ARG_ENABLE(64bit-vis,[  --enable-64bit-vis      enable 64bit Sparc VIS support],
1017         [do64bitVIS=$enableval], [do64bitVIS=no])
1018     AC_MSG_RESULT([$do64bitVIS])
1019
1020     if test "$do64bitVIS" = "yes"; then
1021         # Force 64bit on with VIS
1022         do64bit=yes
1023     fi
1024
1025     # Step 1: set the variable "system" to hold the name and version number
1026     # for the system.
1027
1028     SC_CONFIG_SYSTEM
1029
1030     # Step 2: check for existence of -ldl library.  This is needed because
1031     # Linux can use either -ldl or -ldld for dynamic loading.
1032
1033     AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no)
1034
1035     # Require ranlib early so we can override it in special cases below.
1036
1037     AC_REQUIRE([AC_PROG_RANLIB])
1038
1039     # Step 3: set configuration options based on system name and version.
1040
1041     do64bit_ok=no
1042     LDFLAGS_ORIG="$LDFLAGS"
1043     TCL_EXPORT_FILE_SUFFIX=""
1044     UNSHARED_LIB_SUFFIX=""
1045     TCL_TRIM_DOTS='`echo ${VERSION} | tr -d .`'
1046     ECHO_VERSION='`echo ${VERSION}`'
1047     TCL_LIB_VERSIONS_OK=ok
1048     CFLAGS_DEBUG=-g
1049     CFLAGS_OPTIMIZE=-O
1050     if test "$GCC" = "yes" ; then
1051         CFLAGS_WARNING="-Wall -Wno-implicit-int -fno-strict-aliasing"
1052     else
1053         CFLAGS_WARNING=""
1054     fi
1055     TCL_NEEDS_EXP_FILE=0
1056     TCL_BUILD_EXP_FILE=""
1057     TCL_EXP_FILE=""
1058 dnl FIXME: Replace AC_CHECK_PROG with AC_CHECK_TOOL once cross compiling is fixed.
1059 dnl AC_CHECK_TOOL(AR, ar)
1060     AC_CHECK_PROG(AR, ar, ar)
1061     if test "${AR}" = "" ; then
1062         AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.])
1063     fi
1064     STLIB_LD='${AR} cr'
1065     LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH"
1066     PLAT_OBJS=""
1067     PLAT_SRCS=""
1068     case $system in
1069         AIX-*)
1070             if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then
1071                 # AIX requires the _r compiler when gcc isn't being used
1072                 case "${CC}" in
1073                     *_r)
1074                         # ok ...
1075                         ;;
1076                     *)
1077                         CC=${CC}_r
1078                         ;;
1079                 esac
1080                 AC_MSG_RESULT([Using $CC for compiling with threads])
1081             fi
1082             LIBS="$LIBS -lc"
1083             SHLIB_CFLAGS=""
1084             # Note: need the LIBS below, otherwise Tk won't find Tcl's
1085             # symbols when dynamically loaded into tclsh.
1086             SHLIB_LD_LIBS='${LIBS}'
1087             SHLIB_SUFFIX=".so"
1088
1089             DL_OBJS="tclLoadDl.o"
1090             LD_LIBRARY_PATH_VAR="LIBPATH"
1091
1092             # Check to enable 64-bit flags for compiler/linker on AIX 4+
1093             if test "$do64bit" = "yes" -a "`uname -v`" -gt "3" ; then
1094                 if test "$GCC" = "yes" ; then
1095                     AC_MSG_WARN([64bit mode not supported with GCC on $system])
1096                 else 
1097                     do64bit_ok=yes
1098                     CFLAGS="$CFLAGS -q64"
1099                     LDFLAGS="$LDFLAGS -q64"
1100                     RANLIB="${RANLIB} -X64"
1101                     AR="${AR} -X64"
1102                     SHLIB_LD_FLAGS="-b64"
1103                 fi
1104             fi
1105
1106             if test "`uname -m`" = "ia64" ; then
1107                 # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC
1108                 SHLIB_LD="/usr/ccs/bin/ld -G -z text"
1109                 # AIX-5 has dl* in libc.so
1110                 DL_LIBS=""
1111                 if test "$GCC" = "yes" ; then
1112                     CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
1113                 else
1114                     CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}'
1115                 fi
1116                 LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
1117             else
1118                 if test "$GCC" = "yes" ; then
1119                     SHLIB_LD="gcc -shared"
1120                 else
1121                     SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry"
1122                 fi
1123                 SHLIB_LD="${TCL_SRC_DIR}/unix/ldAix ${SHLIB_LD} ${SHLIB_LD_FLAGS}"
1124                 DL_LIBS="-ldl"
1125                 CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
1126                 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1127                 TCL_NEEDS_EXP_FILE=1
1128                 TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp'
1129             fi
1130
1131             # AIX v<=4.1 has some different flags than 4.2+
1132             if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then
1133                 LIBOBJS="$LIBOBJS tclLoadAix.o"
1134                 DL_LIBS="-lld"
1135             fi
1136
1137             # On AIX <=v4 systems, libbsd.a has to be linked in to support
1138             # non-blocking file IO.  This library has to be linked in after
1139             # the MATH_LIBS or it breaks the pow() function.  The way to
1140             # insure proper sequencing, is to add it to the tail of MATH_LIBS.
1141             # This library also supplies gettimeofday.
1142             #
1143             # AIX does not have a timezone field in struct tm. When the AIX
1144             # bsd library is used, the timezone global and the gettimeofday
1145             # methods are to be avoided for timezone deduction instead, we
1146             # deduce the timezone by comparing the localtime result on a
1147             # known GMT value.
1148
1149             AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes, libbsd=no)
1150             if test $libbsd = yes; then
1151                 MATH_LIBS="$MATH_LIBS -lbsd"
1152                 AC_DEFINE(USE_DELTA_FOR_TZ)
1153             fi
1154             ;;
1155         BeOS*)
1156             SHLIB_CFLAGS="-fPIC"
1157             SHLIB_LD="${CC} -nostart"
1158             SHLIB_LD_LIBS='${LIBS}'
1159             SHLIB_SUFFIX=".so"
1160             DL_OBJS="tclLoadDl.o"
1161             DL_LIBS="-ldl"
1162
1163             #-----------------------------------------------------------
1164             # Check for inet_ntoa in -lbind, for BeOS (which also needs
1165             # -lsocket, even if the network functions are in -lnet which
1166             # is always linked to, for compatibility.
1167             #-----------------------------------------------------------
1168             AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"])
1169             ;;
1170         BSD/OS-2.1*|BSD/OS-3*)
1171             SHLIB_CFLAGS=""
1172             SHLIB_LD="shlicc -r"
1173             SHLIB_LD_LIBS='${LIBS}'
1174             SHLIB_SUFFIX=".so"
1175             DL_OBJS="tclLoadDl.o"
1176             DL_LIBS="-ldl"
1177             CC_SEARCH_FLAGS=""
1178             LD_SEARCH_FLAGS=""
1179             ;;
1180         BSD/OS-4.*)
1181             SHLIB_CFLAGS="-export-dynamic -fPIC"
1182             SHLIB_LD="cc -shared"
1183             SHLIB_LD_LIBS='${LIBS}'
1184             SHLIB_SUFFIX=".so"
1185             DL_OBJS="tclLoadDl.o"
1186             DL_LIBS="-ldl"
1187             LDFLAGS="$LDFLAGS -export-dynamic"
1188             CC_SEARCH_FLAGS=""
1189             LD_SEARCH_FLAGS=""
1190             ;;
1191         dgux*)
1192             SHLIB_CFLAGS="-K PIC"
1193             SHLIB_LD="cc -G"
1194             SHLIB_LD_LIBS=""
1195             SHLIB_SUFFIX=".so"
1196             DL_OBJS="tclLoadDl.o"
1197             DL_LIBS="-ldl"
1198             CC_SEARCH_FLAGS=""
1199             LD_SEARCH_FLAGS=""
1200             ;;
1201         HP-UX-*.11.*)
1202             # Use updated header definitions where possible
1203             AC_DEFINE(_XOPEN_SOURCE)          # Use the XOPEN network library
1204             AC_DEFINE(_XOPEN_SOURCE_EXTENDED) # Use the XOPEN network library
1205             LIBS="$LIBS -lxnet"               # Use the XOPEN network library
1206
1207             if test "`uname -m`" = "ia64" ; then
1208                 SHLIB_SUFFIX=".so"
1209             else
1210                 SHLIB_SUFFIX=".sl"
1211             fi
1212             AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
1213             if test "$tcl_ok" = yes; then
1214                 SHLIB_CFLAGS="+z"
1215                 SHLIB_LD="ld -b"
1216                 SHLIB_LD_LIBS='${LIBS}'
1217                 DL_OBJS="tclLoadShl.o"
1218                 DL_LIBS="-ldld"
1219                 LDFLAGS="$LDFLAGS -Wl,-E"
1220                 CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
1221                 LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
1222                 LD_LIBRARY_PATH_VAR="SHLIB_PATH"
1223             fi
1224             if test "$GCC" = "yes" ; then
1225                 SHLIB_LD="gcc -shared"
1226                 SHLIB_LD_LIBS='${LIBS}'
1227                 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1228             fi
1229
1230             # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc
1231             #CFLAGS="$CFLAGS +DAportable"
1232
1233             # Check to enable 64-bit flags for compiler/linker
1234             if test "$do64bit" = "yes" ; then
1235                 if test "$GCC" = "yes" ; then
1236                     hpux_arch=`${CC} -dumpmachine`
1237                     case $hpux_arch in
1238                         hppa64*)
1239                             # 64-bit gcc in use.  Fix flags for GNU ld.
1240                             do64bit_ok=yes
1241                             SHLIB_LD="${CC} -shared"
1242                             SHLIB_LD_LIBS='${LIBS}'
1243                             CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1244                             LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1245                             ;;
1246                         *)
1247                             AC_MSG_WARN([64bit mode not supported with GCC on $system])
1248                             ;;
1249                     esac
1250                 else
1251                     do64bit_ok=yes
1252                     CFLAGS="$CFLAGS +DD64"
1253                     LDFLAGS="$LDFLAGS +DD64"
1254                 fi
1255             fi
1256             ;;
1257         HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*)
1258             SHLIB_SUFFIX=".sl"
1259             AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
1260             if test "$tcl_ok" = yes; then
1261                 SHLIB_CFLAGS="+z"
1262                 SHLIB_LD="ld -b"
1263                 SHLIB_LD_LIBS=""
1264                 DL_OBJS="tclLoadShl.o"
1265                 DL_LIBS="-ldld"
1266                 LDFLAGS="$LDFLAGS -Wl,-E"
1267                 CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
1268                 LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.'
1269                 LD_LIBRARY_PATH_VAR="SHLIB_PATH"
1270             fi
1271             ;;
1272         IRIX-4.*)
1273             SHLIB_CFLAGS="-G 0"
1274             SHLIB_SUFFIX=".a"
1275             SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
1276             SHLIB_LD_LIBS='${LIBS}'
1277             DL_OBJS="tclLoadAout.o"
1278             DL_LIBS=""
1279             LDFLAGS="$LDFLAGS -Wl,-D,08000000"
1280             CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
1281             LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1282             SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
1283             ;;
1284         IRIX-5.*)
1285             SHLIB_CFLAGS=""
1286             SHLIB_LD="ld -shared -rdata_shared"
1287             SHLIB_LD_LIBS='${LIBS}'
1288             SHLIB_SUFFIX=".so"
1289             DL_OBJS="tclLoadDl.o"
1290             DL_LIBS=""
1291             CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1292             LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
1293             ;;
1294         IRIX-6.*)
1295             SHLIB_CFLAGS=""
1296             SHLIB_LD="ld -n32 -shared -rdata_shared"
1297             SHLIB_LD_LIBS='${LIBS}'
1298             SHLIB_SUFFIX=".so"
1299             DL_OBJS="tclLoadDl.o"
1300             DL_LIBS=""
1301             CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1302             LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
1303             if test "$GCC" = "yes" ; then
1304                 CFLAGS="$CFLAGS -mabi=n32"
1305                 LDFLAGS="$LDFLAGS -mabi=n32"
1306             else
1307                 case $system in
1308                     IRIX-6.3)
1309                         # Use to build 6.2 compatible binaries on 6.3.
1310                         CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS"
1311                         ;;
1312                     *)
1313                         CFLAGS="$CFLAGS -n32"
1314                         ;;
1315                 esac
1316                 LDFLAGS="$LDFLAGS -n32"
1317             fi
1318             ;;
1319         IRIX64-6.*)
1320             SHLIB_CFLAGS=""
1321             SHLIB_LD="ld -n32 -shared -rdata_shared"
1322             SHLIB_LD_LIBS='${LIBS}'
1323             SHLIB_SUFFIX=".so"
1324             DL_OBJS="tclLoadDl.o"
1325             DL_LIBS=""
1326             CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1327             LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
1328
1329             # Check to enable 64-bit flags for compiler/linker
1330
1331             if test "$do64bit" = "yes" ; then
1332                 if test "$GCC" = "yes" ; then
1333                     AC_MSG_WARN([64bit mode not supported by gcc])
1334                 else
1335                     do64bit_ok=yes
1336                     SHLIB_LD="ld -64 -shared -rdata_shared"
1337                     CFLAGS="$CFLAGS -64"
1338                     LDFLAGS="$LDFLAGS -64"
1339                 fi
1340             fi
1341             ;;
1342         Linux*)
1343             SHLIB_CFLAGS="-fPIC"
1344             SHLIB_LD_LIBS='${LIBS}'
1345             SHLIB_SUFFIX=".so"
1346
1347             CFLAGS_OPTIMIZE=-O2
1348             # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings 
1349             # when you inline the string and math operations.  Turn this off to
1350             # get rid of the warnings.
1351             #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
1352
1353             if test "$have_dl" = yes; then
1354                 SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}'
1355                 DL_OBJS="tclLoadDl.o"
1356                 DL_LIBS="-ldl"
1357                 LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
1358                 CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1359                 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1360             else
1361                 AC_CHECK_HEADER(dld.h, [
1362                     SHLIB_LD="ld -shared"
1363                     DL_OBJS="tclLoadDld.o"
1364                     DL_LIBS="-ldld"
1365                     CC_SEARCH_FLAGS=""
1366                     LD_SEARCH_FLAGS=""])
1367             fi
1368             if test "`uname -m`" = "alpha" ; then
1369                 CFLAGS="$CFLAGS -mieee"
1370             fi
1371             if test $do64bit = yes; then
1372                 AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [
1373                     hold_cflags=$CFLAGS
1374                     CFLAGS="$CFLAGS -m64"
1375                     AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no)
1376                     CFLAGS=$hold_cflags])
1377                 if test $tcl_cv_cc_m64 = yes; then
1378                     CFLAGS="$CFLAGS -m64"
1379                     do64bit_ok=yes
1380                 fi
1381             fi
1382
1383             # The combo of gcc + glibc has a bug related
1384             # to inlining of functions like strtod(). The
1385             # -fno-builtin flag should address this problem
1386             # but it does not work. The -fno-inline flag
1387             # is kind of overkill but it works.
1388             # Disable inlining only when one of the
1389             # files in compat/*.c is being linked in.
1390             if test x"${LIBOBJS}" != x ; then
1391                 CFLAGS="$CFLAGS -fno-inline"
1392             fi
1393
1394             # XIM peeking works under XFree86.
1395             AC_DEFINE(PEEK_XCLOSEIM)
1396
1397             ;;
1398         GNU*)
1399             SHLIB_CFLAGS="-fPIC"
1400             SHLIB_LD_LIBS='${LIBS}'
1401             SHLIB_SUFFIX=".so"
1402
1403             if test "$have_dl" = yes; then
1404                 SHLIB_LD="${CC} -shared"
1405                 DL_OBJS=""
1406                 DL_LIBS="-ldl"
1407                 LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
1408                 CC_SEARCH_FLAGS=""
1409                 LD_SEARCH_FLAGS=""
1410             else
1411                 AC_CHECK_HEADER(dld.h, [
1412                     SHLIB_LD="ld -shared"
1413                     DL_OBJS=""
1414                     DL_LIBS="-ldld"
1415                     CC_SEARCH_FLAGS=""
1416                     LD_SEARCH_FLAGS=""])
1417             fi
1418             if test "`uname -m`" = "alpha" ; then
1419                 CFLAGS="$CFLAGS -mieee"
1420             fi
1421             ;;
1422         Lynx*)
1423             SHLIB_CFLAGS="-fPIC"
1424             SHLIB_LD_LIBS='${LIBS}'
1425             SHLIB_SUFFIX=".so"
1426             CFLAGS_OPTIMIZE=-02
1427             SHLIB_LD="${CC} -shared "
1428             DL_OBJS="tclLoadDl.o"
1429             DL_LIBS="-mshared -ldl"
1430             LD_FLAGS="-Wl,--export-dynamic"
1431             CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1432             LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1433             ;;
1434         MP-RAS-02*)
1435             SHLIB_CFLAGS="-K PIC"
1436             SHLIB_LD="cc -G"
1437             SHLIB_LD_LIBS=""
1438             SHLIB_SUFFIX=".so"
1439             DL_OBJS="tclLoadDl.o"
1440             DL_LIBS="-ldl"
1441             CC_SEARCH_FLAGS=""
1442             LD_SEARCH_FLAGS=""
1443             ;;
1444         MP-RAS-*)
1445             SHLIB_CFLAGS="-K PIC"
1446             SHLIB_LD="cc -G"
1447             SHLIB_LD_LIBS=""
1448             SHLIB_SUFFIX=".so"
1449             DL_OBJS="tclLoadDl.o"
1450             DL_LIBS="-ldl"
1451             LDFLAGS="$LDFLAGS -Wl,-Bexport"
1452             CC_SEARCH_FLAGS=""
1453             LD_SEARCH_FLAGS=""
1454             ;;
1455         NetBSD-*|FreeBSD-[[1-2]].*)
1456             # Not available on all versions:  check for include file.
1457             AC_CHECK_HEADER(dlfcn.h, [
1458                 # NetBSD/SPARC needs -fPIC, -fpic will not do.
1459                 SHLIB_CFLAGS="-fPIC"
1460                 SHLIB_LD="ld -Bshareable -x"
1461                 SHLIB_LD_LIBS='${LIBS}'
1462                 SHLIB_SUFFIX=".so"
1463                 DL_OBJS="tclLoadDl.o"
1464                 DL_LIBS=""
1465                 CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1466                 LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
1467                 AC_CACHE_CHECK([for ELF], tcl_cv_ld_elf, [
1468                     AC_EGREP_CPP(yes, [
1469 #ifdef __ELF__
1470         yes
1471 #endif
1472                     ], tcl_cv_ld_elf=yes, tcl_cv_ld_elf=no)])
1473                 if test $tcl_cv_ld_elf = yes; then
1474                     SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so'
1475                 else
1476                     SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
1477                 fi
1478             ], [
1479                 SHLIB_CFLAGS=""
1480                 SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r"
1481                 SHLIB_LD_LIBS='${LIBS}'
1482                 SHLIB_SUFFIX=".a"
1483                 DL_OBJS="tclLoadAout.o"
1484                 DL_LIBS=""
1485                 CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
1486                 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1487                 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
1488             ])
1489
1490             # FreeBSD doesn't handle version numbers with dots.
1491
1492             UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
1493             TCL_LIB_VERSIONS_OK=nodots
1494             ;;
1495         OpenBSD-*)
1496             case `arch -s` in
1497             m88k|vax)
1498                 SHLIB_CFLAGS=""
1499                 SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r"
1500                 SHLIB_LD_LIBS='${LIBS}'
1501                 SHLIB_SUFFIX=".a"
1502                 DL_OBJS="tclLoadAout.o"
1503                 DL_LIBS=""
1504                 LDFLAGS=""
1505                 CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
1506                 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1507                 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
1508                 ;;
1509             *)
1510                 # OpenBSD/SPARC[64] needs -fPIC, -fpic will not do.
1511                 case `machine` in
1512                 sparc|sparc64)
1513                     SHLIB_CFLAGS="-fPIC";;
1514                 *)
1515                     SHLIB_CFLAGS="-fpic";;
1516                 esac
1517                 SHLIB_LD="${CC} -shared ${SHLIB_CFLAGS}"
1518                 SHLIB_LD_LIBS='${LIBS}'
1519                 SHLIB_SUFFIX=".so"
1520                 DL_OBJS="tclLoadDl.o"
1521                 DL_LIBS=""
1522                 CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1523                 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1524                 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
1525                 AC_CACHE_CHECK([for ELF], tcl_cv_ld_elf, [
1526                     AC_EGREP_CPP(yes, [
1527 #ifdef __ELF__
1528         yes
1529 #endif
1530                     ], tcl_cv_ld_elf=yes, tcl_cv_ld_elf=no)])
1531                 if test $tcl_cv_ld_elf = yes; then
1532                     LDFLAGS=-Wl,-export-dynamic
1533                 else
1534                     LDFLAGS=""
1535                 fi
1536                 ;;
1537             esac
1538
1539             # OpenBSD doesn't do version numbers with dots.
1540             UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
1541             TCL_LIB_VERSIONS_OK=nodots
1542             ;;
1543         FreeBSD-*)
1544             # FreeBSD 3.* and greater have ELF.
1545             SHLIB_CFLAGS="-fPIC"
1546             SHLIB_LD="ld -Bshareable -x"
1547             SHLIB_LD_LIBS='${LIBS}'
1548             SHLIB_SUFFIX=".so"
1549             DL_OBJS="tclLoadDl.o"
1550             DL_LIBS=""
1551             LDFLAGS="$LDFLAGS -export-dynamic"
1552             CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1553             LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
1554             if test "${TCL_THREADS}" = "1" ; then
1555                 # The -pthread needs to go in the CFLAGS, not LIBS
1556                 LIBS=`echo $LIBS | sed s/-pthread//`
1557                 CFLAGS="$CFLAGS -pthread"
1558                 LDFLAGS="$LDFLAGS -pthread"
1559             fi
1560             case $system in
1561             FreeBSD-3.*)
1562                 # FreeBSD-3 doesn't handle version numbers with dots.
1563                 UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
1564                 SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so'
1565                 TCL_LIB_VERSIONS_OK=nodots
1566                 ;;
1567             esac
1568             ;;
1569         Darwin-*)
1570             CFLAGS_OPTIMIZE="-Os"
1571             SHLIB_CFLAGS="-fno-common"
1572             # To avoid discrepancies between what headers configure sees during
1573             # preprocessing tests and compiling tests, move any -isysroot and
1574             # -mmacosx-version-min flags from CFLAGS to CPPFLAGS:
1575             CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \
1576                 awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
1577                 if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`"
1578             CFLAGS="`echo " ${CFLAGS}" | \
1579                 awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \
1580                 if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`"
1581             if test $do64bit = yes; then
1582                 case `arch` in
1583                     ppc)
1584                         AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag],
1585                                 tcl_cv_cc_arch_ppc64, [
1586                             hold_cflags=$CFLAGS
1587                             CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
1588                             AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes,
1589                                     tcl_cv_cc_arch_ppc64=no)
1590                             CFLAGS=$hold_cflags])
1591                         if test $tcl_cv_cc_arch_ppc64 = yes; then
1592                             CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5"
1593                             do64bit_ok=yes
1594                         fi;;
1595                     i386)
1596                         AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag],
1597                                 tcl_cv_cc_arch_x86_64, [
1598                             hold_cflags=$CFLAGS
1599                             CFLAGS="$CFLAGS -arch x86_64"
1600                             AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes,
1601                                     tcl_cv_cc_arch_x86_64=no)
1602                             CFLAGS=$hold_cflags])
1603                         if test $tcl_cv_cc_arch_x86_64 = yes; then
1604                             CFLAGS="$CFLAGS -arch x86_64"
1605                             do64bit_ok=yes
1606                         fi;;
1607                     *)
1608                         AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);;
1609                 esac
1610             else
1611                 # Check for combined 32-bit and 64-bit fat build
1612                 echo "$CFLAGS " | grep -E -q -- '-arch (ppc64|x86_64) ' && \
1613                     echo "$CFLAGS " | grep -E -q -- '-arch (ppc|i386) ' && \
1614                     fat_32_64=yes
1615             fi
1616             SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS}'
1617             AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [
1618                 hold_ldflags=$LDFLAGS
1619                 LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module"
1620                 AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no)
1621                 LDFLAGS=$hold_ldflags])
1622             if test $tcl_cv_ld_single_module = yes; then
1623                 SHLIB_LD="${SHLIB_LD} -Wl,-single_module"
1624             fi
1625             SHLIB_LD_LIBS='${LIBS}'
1626             SHLIB_SUFFIX=".dylib"
1627             DL_OBJS="tclLoadDyld.o"
1628             DL_LIBS=""
1629             # Don't use -prebind when building for Mac OS X 10.4 or later only:
1630             test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \
1631                 "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4 && \
1632                 LDFLAGS="$LDFLAGS -prebind"
1633             LDFLAGS="$LDFLAGS -headerpad_max_install_names"
1634             AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [
1635                 hold_ldflags=$LDFLAGS
1636                 LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
1637                 AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no)
1638                 LDFLAGS=$hold_ldflags])
1639             if test $tcl_cv_ld_search_paths_first = yes; then
1640                 LDFLAGS="$LDFLAGS -Wl,-search_paths_first"
1641             fi
1642             CC_SEARCH_FLAGS=""
1643             LD_SEARCH_FLAGS=""
1644             LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH"
1645             PLAT_OBJS=\$\(MAC\_OSX_OBJS\)
1646             PLAT_SRCS=\$\(MAC\_OSX_SRCS\)
1647             AC_MSG_CHECKING([whether to use CoreFoundation])
1648             AC_ARG_ENABLE(corefoundation, [  --enable-corefoundation use CoreFoundation API [--enable-corefoundation]],
1649                 [tcl_corefoundation=$enableval], [tcl_corefoundation=yes])
1650             AC_MSG_RESULT([$tcl_corefoundation])
1651             if test $tcl_corefoundation = yes; then
1652                 AC_CACHE_CHECK([for CoreFoundation.framework], tcl_cv_lib_corefoundation, [
1653                     hold_libs=$LIBS
1654                     if test "$fat_32_64" = yes; then for v in CFLAGS CPPFLAGS LDFLAGS; do
1655                         # On Tiger there is no 64-bit CF, so remove 64-bit archs
1656                         # from CFLAGS et al. while testing for presence of CF.
1657                         # 64-bit CF is disabled in tclUnixPort.h if necessary.
1658                         eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"'
1659                     done; fi
1660                     LIBS="$LIBS -framework CoreFoundation"
1661                     AC_TRY_LINK([#include <CoreFoundation/CoreFoundation.h>], 
1662                         [CFBundleRef b = CFBundleGetMainBundle();], 
1663                         tcl_cv_lib_corefoundation=yes, tcl_cv_lib_corefoundation=no)
1664                     if test "$fat_32_64" = yes; then for v in CFLAGS CPPFLAGS LDFLAGS; do
1665                         eval $v'="$hold_'$v'"'
1666                     done; fi; LIBS=$hold_libs])
1667                 if test $tcl_cv_lib_corefoundation = yes; then
1668                     LIBS="$LIBS -framework CoreFoundation"
1669                     AC_DEFINE(HAVE_COREFOUNDATION)
1670                 else
1671                     tcl_corefoundation=no
1672                 fi
1673                 if test "$fat_32_64" = yes -a $tcl_corefoundation = yes; then
1674                     AC_CACHE_CHECK([for 64-bit CoreFoundation], tcl_cv_lib_corefoundation_64, [
1675                         for v in CFLAGS CPPFLAGS LDFLAGS; do
1676                             eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"'
1677                         done
1678                         AC_TRY_LINK([#include <CoreFoundation/CoreFoundation.h>], 
1679                             [CFBundleRef b = CFBundleGetMainBundle();], 
1680                             tcl_cv_lib_corefoundation_64=yes, tcl_cv_lib_corefoundation_64=no)
1681                         for v in CFLAGS CPPFLAGS LDFLAGS; do
1682                             eval $v'="$hold_'$v'"'
1683                         done])
1684                     if test $tcl_cv_lib_corefoundation_64 = no; then
1685                         AC_DEFINE(NO_COREFOUNDATION_64)
1686                     fi
1687                 fi
1688             fi
1689             AC_DEFINE(MAC_OSX_TCL)
1690             ;;
1691         NEXTSTEP-*)
1692             SHLIB_CFLAGS=""
1693             SHLIB_LD="cc -nostdlib -r"
1694             SHLIB_LD_LIBS=""
1695             SHLIB_SUFFIX=".so"
1696             DL_OBJS="tclLoadNext.o"
1697             DL_LIBS=""
1698             CC_SEARCH_FLAGS=""
1699             LD_SEARCH_FLAGS=""
1700             ;;
1701         OS/390-*)
1702             CFLAGS_OPTIMIZE=""          # Optimizer is buggy
1703             AC_DEFINE(_OE_SOCKETS)      # needed in sys/socket.h
1704             ;;      
1705         OSF1-1.0|OSF1-1.1|OSF1-1.2)
1706             # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1
1707             SHLIB_CFLAGS=""
1708             # Hack: make package name same as library name
1709             SHLIB_LD='ld -R -export $@:'
1710             SHLIB_LD_LIBS=""
1711             SHLIB_SUFFIX=".so"
1712             DL_OBJS="tclLoadOSF.o"
1713             DL_LIBS=""
1714             CC_SEARCH_FLAGS=""
1715             LD_SEARCH_FLAGS=""
1716             ;;
1717         OSF1-1.*)
1718             # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2
1719             SHLIB_CFLAGS="-fPIC"
1720             if test "$SHARED_BUILD" = "1" ; then
1721                 SHLIB_LD="ld -shared"
1722             else
1723                 SHLIB_LD="ld -non_shared"
1724             fi
1725             SHLIB_LD_LIBS=""
1726             SHLIB_SUFFIX=".so"
1727             DL_OBJS="tclLoadDl.o"
1728             DL_LIBS=""
1729             CC_SEARCH_FLAGS=""
1730             LD_SEARCH_FLAGS=""
1731             ;;
1732         OSF1-V*)
1733             # Digital OSF/1
1734             SHLIB_CFLAGS=""
1735             if test "$SHARED_BUILD" = "1" ; then
1736                 SHLIB_LD='ld -shared -expect_unresolved "*"'
1737             else
1738                 SHLIB_LD='ld -non_shared -expect_unresolved "*"'
1739             fi
1740             SHLIB_LD_LIBS=""
1741             SHLIB_SUFFIX=".so"
1742             DL_OBJS="tclLoadDl.o"
1743             DL_LIBS=""
1744             CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
1745             LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}'
1746             if test "$GCC" = "yes" ; then
1747                 CFLAGS="$CFLAGS -mieee"
1748             else
1749                 CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee"
1750             fi
1751             # see pthread_intro(3) for pthread support on osf1, k.furukawa
1752             if test "${TCL_THREADS}" = "1" ; then
1753                 CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE"
1754                 CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64"
1755                 LIBS=`echo $LIBS | sed s/-lpthreads//`
1756                 if test "$GCC" = "yes" ; then
1757                     LIBS="$LIBS -lpthread -lmach -lexc"
1758                 else
1759                     CFLAGS="$CFLAGS -pthread"
1760                     LDFLAGS="$LDFLAGS -pthread"
1761                 fi
1762             fi
1763
1764             ;;
1765         QNX-6*)
1766             # QNX RTP
1767             # This may work for all QNX, but it was only reported for v6.
1768             SHLIB_CFLAGS="-fPIC"
1769             SHLIB_LD="ld -Bshareable -x"
1770             SHLIB_LD_LIBS=""
1771             SHLIB_SUFFIX=".so"
1772             DL_OBJS="tclLoadDl.o"
1773             # dlopen is in -lc on QNX
1774             DL_LIBS=""
1775             CC_SEARCH_FLAGS=""
1776             LD_SEARCH_FLAGS=""
1777             ;;
1778         RISCos-*)
1779             SHLIB_CFLAGS="-G 0"
1780             SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
1781             SHLIB_LD_LIBS='${LIBS}'
1782             SHLIB_SUFFIX=".a"
1783             DL_OBJS="tclLoadAout.o"
1784             DL_LIBS=""
1785             LDFLAGS="$LDFLAGS -Wl,-D,08000000"
1786             CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
1787             LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1788             ;;
1789         SCO_SV-3.2*)
1790             # Note, dlopen is available only on SCO 3.2.5 and greater. However,
1791             # this test works, since "uname -s" was non-standard in 3.2.4 and
1792             # below.
1793             if test "$GCC" = "yes" ; then
1794                 SHLIB_CFLAGS="-fPIC -melf"
1795                 LDFLAGS="$LDFLAGS -melf -Wl,-Bexport"
1796             else
1797                 SHLIB_CFLAGS="-Kpic -belf"
1798                 LDFLAGS="$LDFLAGS -belf -Wl,-Bexport"
1799             fi
1800             SHLIB_LD="ld -G"
1801             SHLIB_LD_LIBS=""
1802             SHLIB_SUFFIX=".so"
1803             DL_OBJS="tclLoadDl.o"
1804             DL_LIBS=""
1805             CC_SEARCH_FLAGS=""
1806             LD_SEARCH_FLAGS=""
1807             ;;
1808         SINIX*5.4*)
1809             SHLIB_CFLAGS="-K PIC"
1810             SHLIB_LD="cc -G"
1811             SHLIB_LD_LIBS=""
1812             SHLIB_SUFFIX=".so"
1813             DL_OBJS="tclLoadDl.o"
1814             DL_LIBS="-ldl"
1815             CC_SEARCH_FLAGS=""
1816             LD_SEARCH_FLAGS=""
1817             ;;
1818         SunOS-4*)
1819             SHLIB_CFLAGS="-PIC"
1820             SHLIB_LD="ld"
1821             SHLIB_LD_LIBS=""
1822             SHLIB_SUFFIX=".so"
1823             DL_OBJS="tclLoadDl.o"
1824             DL_LIBS="-ldl"
1825             CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
1826             LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1827
1828             # SunOS can't handle version numbers with dots in them in library
1829             # specs, like -ltcl7.5, so use -ltcl75 instead.  Also, it
1830             # requires an extra version number at the end of .so file names.
1831             # So, the library has to have a name like libtcl75.so.1.0
1832
1833             SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
1834             UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
1835             TCL_LIB_VERSIONS_OK=nodots
1836             ;;
1837         SunOS-5.[[0-6]])
1838             # Careful to not let 5.10+ fall into this case
1839
1840             # Note: If _REENTRANT isn't defined, then Solaris
1841             # won't define thread-safe library routines.
1842
1843             AC_DEFINE(_REENTRANT)
1844             AC_DEFINE(_POSIX_PTHREAD_SEMANTICS)
1845
1846             SHLIB_CFLAGS="-KPIC"
1847
1848             # Note: need the LIBS below, otherwise Tk won't find Tcl's
1849             # symbols when dynamically loaded into tclsh.
1850
1851             SHLIB_LD_LIBS='${LIBS}'
1852             SHLIB_SUFFIX=".so"
1853             DL_OBJS="tclLoadDl.o"
1854             DL_LIBS="-ldl"
1855             if test "$GCC" = "yes" ; then
1856                 SHLIB_LD="$CC -shared"
1857                 CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
1858                 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1859             else
1860                 SHLIB_LD="/usr/ccs/bin/ld -G -z text"
1861                 CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
1862                 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1863             fi
1864             ;;
1865         SunOS-5*)
1866             # Note: If _REENTRANT isn't defined, then Solaris
1867             # won't define thread-safe library routines.
1868
1869             AC_DEFINE(_REENTRANT)
1870             AC_DEFINE(_POSIX_PTHREAD_SEMANTICS)
1871
1872             SHLIB_CFLAGS="-KPIC"
1873
1874             # Check to enable 64-bit flags for compiler/linker
1875             if test "$do64bit" = "yes" ; then
1876                 arch=`isainfo`
1877                 if test "$arch" = "sparcv9 sparc" ; then
1878                         if test "$GCC" = "yes" ; then
1879                             if test "`gcc -dumpversion | awk -F. '{print [$]1}'`" -lt "3" ; then
1880                                 AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system])
1881                             else
1882                                 do64bit_ok=yes
1883                                 CFLAGS="$CFLAGS -m64 -mcpu=v9"
1884                                 LDFLAGS="$LDFLAGS -m64 -mcpu=v9"
1885                                 SHLIB_CFLAGS="-fPIC"
1886                             fi
1887                         else
1888                             do64bit_ok=yes
1889                             if test "$do64bitVIS" = "yes" ; then
1890                                 CFLAGS="$CFLAGS -xarch=v9a"
1891                                 LDFLAGS="$LDFLAGS -xarch=v9a"
1892                             else
1893                                 CFLAGS="$CFLAGS -xarch=v9"
1894                                 LDFLAGS="$LDFLAGS -xarch=v9"
1895                             fi
1896                             # Solaris 64 uses this as well
1897                             #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64"
1898                         fi
1899                 elif test "$arch" = "amd64 i386" ; then
1900                     if test "$GCC" = "yes" ; then
1901                         AC_MSG_WARN([64bit mode not supported with GCC on $system])
1902                     else
1903                         do64bit_ok=yes
1904                         CFLAGS="$CFLAGS -xarch=amd64"
1905                         LDFLAGS="$LDFLAGS -xarch=amd64"
1906                     fi
1907                 else
1908                     AC_MSG_WARN([64bit mode not supported for $arch])
1909                 fi
1910             fi
1911             
1912             # Note: need the LIBS below, otherwise Tk won't find Tcl's
1913             # symbols when dynamically loaded into tclsh.
1914
1915             SHLIB_LD_LIBS='${LIBS}'
1916             SHLIB_SUFFIX=".so"
1917             DL_OBJS="tclLoadDl.o"
1918             DL_LIBS="-ldl"
1919             if test "$GCC" = "yes" ; then
1920                 SHLIB_LD="$CC -shared"
1921                 CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
1922                 LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1923                 if test "$do64bit_ok" = "yes" ; then
1924                     # We need to specify -static-libgcc or we need to
1925                     # add the path to the sparv9 libgcc.
1926                     SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc"
1927                     # for finding sparcv9 libgcc, get the regular libgcc
1928                     # path, remove so name and append 'sparcv9'
1929                     #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..."
1930                     #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir"
1931                 fi
1932             else
1933                 case $system in
1934                     SunOS-5.[[1-9]][[0-9]]*)
1935                         SHLIB_LD='${CC} -G -z text';;
1936                     *)
1937                         SHLIB_LD="/usr/ccs/bin/ld -G -z text";;
1938                 esac
1939                 CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
1940                 LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
1941             fi
1942             ;;
1943         ULTRIX-4.*)
1944             SHLIB_CFLAGS="-G 0"
1945             SHLIB_SUFFIX=".a"
1946             SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
1947             SHLIB_LD_LIBS='${LIBS}'
1948             DL_OBJS="tclLoadAout.o"
1949             DL_LIBS=""
1950             LDFLAGS="$LDFLAGS -Wl,-D,08000000"
1951             CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
1952             LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS}
1953             if test "$GCC" != "yes" ; then
1954                 CFLAGS="$CFLAGS -DHAVE_TZSET -std1"
1955             fi
1956             ;;
1957         UNIX_SV* | UnixWare-5*)
1958             SHLIB_CFLAGS="-KPIC"
1959             SHLIB_LD="cc -G"
1960             SHLIB_LD_LIBS=""
1961             SHLIB_SUFFIX=".so"
1962             DL_OBJS="tclLoadDl.o"
1963             DL_LIBS="-ldl"
1964             # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
1965             # that don't grok the -Bexport option.  Test that it does.
1966             AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [
1967                 hold_ldflags=$LDFLAGS
1968                 LDFLAGS="$LDFLAGS -Wl,-Bexport"
1969                 AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no)
1970                 LDFLAGS=$hold_ldflags])
1971             if test $tcl_cv_ld_Bexport = yes; then
1972                 LDFLAGS="$LDFLAGS -Wl,-Bexport"
1973             fi
1974             CC_SEARCH_FLAGS=""
1975             LD_SEARCH_FLAGS=""
1976             ;;
1977     esac
1978
1979     if test "$do64bit" = "yes" -a "$do64bit_ok" = "no" ; then
1980         AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform])
1981     fi
1982
1983 dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so
1984 dnl # until the end of configure, as configure's compile and link tests use
1985 dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's
1986 dnl # preprocessing tests use only CPPFLAGS.
1987     SC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""])
1988
1989     # Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic
1990     # Loading for Tcl -- What Became of It?".  Proc. 2nd Tcl/Tk Workshop,
1991     # New Orleans, LA, Computerized Processes Unlimited, 1994), then we need
1992     # to determine which of several header files defines the a.out file
1993     # format (a.out.h, sys/exec.h, or sys/exec_aout.h).  At present, we
1994     # support only a file format that is more or less version-7-compatible. 
1995     # In particular,
1996     #   - a.out files must begin with `struct exec'.
1997     #   - the N_TXTOFF on the `struct exec' must compute the seek address
1998     #     of the text segment
1999     #   - The `struct exec' must contain a_magic, a_text, a_data, a_bss
2000     #     and a_entry fields.
2001     # The following compilation should succeed if and only if either sys/exec.h
2002     # or a.out.h is usable for the purpose.
2003     #
2004     # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the
2005     # `struct exec' includes a second header that contains information that
2006     # duplicates the v7 fields that are needed.
2007
2008     if test "x$DL_OBJS" = "xtclLoadAout.o" ; then
2009         AC_CACHE_CHECK([sys/exec.h], tcl_cv_sysexec_h, [
2010         AC_TRY_COMPILE([#include <sys/exec.h>],[
2011             struct exec foo;
2012             unsigned long seek;
2013             int flag;
2014 #if defined(__mips) || defined(mips)
2015             seek = N_TXTOFF (foo.ex_f, foo.ex_o);
2016 #else
2017             seek = N_TXTOFF (foo);
2018 #endif
2019             flag = (foo.a_magic == OMAGIC);
2020             return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
2021     ], tcl_cv_sysexec_h=usable, tcl_cv_sysexec_h=unusable)])
2022         if test $tcl_cv_sysexec_h = usable; then
2023             AC_DEFINE(USE_SYS_EXEC_H)
2024         else
2025             AC_CACHE_CHECK([a.out.h], tcl_cv_aout_h, [
2026             AC_TRY_COMPILE([#include <a.out.h>],[
2027                 struct exec foo;
2028                 unsigned long seek;
2029                 int flag;
2030 #if defined(__mips) || defined(mips)
2031                 seek = N_TXTOFF (foo.ex_f, foo.ex_o);
2032 #else
2033                 seek = N_TXTOFF (foo);
2034 #endif
2035                 flag = (foo.a_magic == OMAGIC);
2036                 return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
2037             ], tcl_cv_aout_h=usable, tcl_cv_aout_h=unusable)])
2038             if test $tcl_cv_aout_h = usable; then
2039                 AC_DEFINE(USE_A_OUT_H)
2040             else
2041                 AC_CACHE_CHECK([sys/exec_aout.h], tcl_cv_sysexecaout_h, [
2042                 AC_TRY_COMPILE([#include <sys/exec_aout.h>],[
2043                     struct exec foo;
2044                     unsigned long seek;
2045                     int flag;
2046 #if defined(__mips) || defined(mips)
2047                     seek = N_TXTOFF (foo.ex_f, foo.ex_o);
2048 #else
2049                     seek = N_TXTOFF (foo);
2050 #endif
2051                     flag = (foo.a_midmag == OMAGIC);
2052                     return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
2053                 ], tcl_cv_sysexecaout_h=usable, tcl_cv_sysexecaout_h=unusable)])
2054                 if test $tcl_cv_sysexecaout_h = usable; then
2055                     AC_DEFINE(USE_SYS_EXEC_AOUT_H)
2056                 else
2057                     DL_OBJS=""
2058                 fi
2059             fi
2060         fi
2061     fi
2062
2063     # Step 5: disable dynamic loading if requested via a command-line switch.
2064
2065     AC_ARG_ENABLE(load, [  --disable-load          disallow dynamic loading and "load" command],
2066         [tcl_ok=$enableval], [tcl_ok=yes])
2067     if test "$tcl_ok" = "no"; then
2068         DL_OBJS=""
2069     fi
2070
2071     if test "x$DL_OBJS" != "x" ; then
2072         BUILD_DLTEST="\$(DLTEST_TARGETS)"
2073     else
2074         echo "Can't figure out how to do dynamic loading or shared libraries"
2075         echo "on this system."
2076         SHLIB_CFLAGS=""
2077         SHLIB_LD=""
2078         SHLIB_SUFFIX=""
2079         DL_OBJS="tclLoadNone.o"
2080         DL_LIBS=""
2081         LDFLAGS="$LDFLAGS_ORIG"
2082         CC_SEARCH_FLAGS=""
2083         LD_SEARCH_FLAGS=""
2084         BUILD_DLTEST=""
2085     fi
2086
2087     # If we're running gcc, then change the C flags for compiling shared
2088     # libraries to the right flags for gcc, instead of those for the
2089     # standard manufacturer compiler.
2090
2091     if test "$DL_OBJS" != "tclLoadNone.o" ; then
2092         if test "$GCC" = "yes" ; then
2093             case $system in
2094                 AIX-*)
2095                     ;;
2096                 BSD/OS*)
2097                     ;;
2098                 IRIX*)
2099                     ;;
2100                 NetBSD-*|FreeBSD-*|OpenBSD-*)
2101                     ;;
2102                 Darwin-*)
2103                     ;;
2104                 RISCos-*)
2105                     ;;
2106                 SCO_SV-3.2*)
2107                     ;;
2108                 ULTRIX-4.*)
2109                     ;;
2110                 *)
2111                     SHLIB_CFLAGS="-fPIC"
2112                     ;;
2113             esac
2114         fi
2115     fi
2116
2117     if test "$SHARED_LIB_SUFFIX" = "" ; then
2118         SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}${SHLIB_SUFFIX}'
2119     fi
2120     if test "$UNSHARED_LIB_SUFFIX" = "" ; then
2121         UNSHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
2122     fi
2123
2124     if test "${SHARED_BUILD}" = "1" && test "${SHLIB_SUFFIX}" != "" ; then
2125         LIB_SUFFIX=${SHARED_LIB_SUFFIX}
2126         MAKE_LIB='${SHLIB_LD} -o [$]@ ${OBJS} ${SHLIB_LD_LIBS} ${TCL_SHLIB_LD_EXTRAS} ${TK_SHLIB_LD_EXTRAS} ${LD_SEARCH_FLAGS}'
2127         INSTALL_LIB='$(INSTALL_LIBRARY) $(LIB_FILE) $(LIB_INSTALL_DIR)/$(LIB_FILE)'
2128     else
2129         LIB_SUFFIX=${UNSHARED_LIB_SUFFIX}
2130
2131         if test "$RANLIB" = "" ; then
2132             MAKE_LIB='$(STLIB_LD) [$]@ ${OBJS}'
2133             INSTALL_LIB='$(INSTALL_LIBRARY) $(LIB_FILE) $(LIB_INSTALL_DIR)/$(LIB_FILE)'
2134         else
2135             MAKE_LIB='${STLIB_LD} [$]@ ${OBJS} ; ${RANLIB} [$]@'
2136             INSTALL_LIB='$(INSTALL_LIBRARY) $(LIB_FILE) $(LIB_INSTALL_DIR)/$(LIB_FILE) ; (cd $(LIB_INSTALL_DIR) ; $(RANLIB) $(LIB_FILE))'
2137         fi
2138
2139 dnl        Not at all clear what this was doing in Tcl's configure.in
2140 dnl        or why it was needed was needed. In any event, this sort of
2141 dnl        things needs to be done in the big loop above.
2142 dnl        REMOVE THIS BLOCK LATER! (mdejong)
2143 dnl        case $system in
2144 dnl            BSD/OS*)
2145 dnl                ;;
2146 dnl            AIX-[[1-4]].*)
2147 dnl                ;;
2148 dnl            *)
2149 dnl                SHLIB_LD_LIBS=""
2150 dnl                ;;
2151 dnl        esac
2152     fi
2153
2154
2155     # Stub lib does not depend on shared/static configuration
2156     if test "$RANLIB" = "" ; then
2157         MAKE_STUB_LIB='${STLIB_LD} [$]@ ${STUB_LIB_OBJS}'
2158         INSTALL_STUB_LIB='$(INSTALL_LIBRARY) $(STUB_LIB_FILE) $(LIB_INSTALL_DIR)/$(STUB_LIB_FILE)'
2159     else
2160         MAKE_STUB_LIB='${STLIB_LD} [$]@ ${STUB_LIB_OBJS} ; ${RANLIB} [$]@'
2161         INSTALL_STUB_LIB='$(INSTALL_LIBRARY) $(STUB_LIB_FILE) $(LIB_INSTALL_DIR)/$(STUB_LIB_FILE) ; (cd $(LIB_INSTALL_DIR) ; $(RANLIB) $(STUB_LIB_FILE))'
2162     fi
2163
2164
2165     AC_SUBST(DL_LIBS)
2166
2167     AC_SUBST(DL_OBJS)
2168     AC_SUBST(PLAT_OBJS)
2169     AC_SUBST(PLAT_SRCS)
2170     AC_SUBST(CFLAGS)
2171     AC_SUBST(CFLAGS_DEBUG)
2172     AC_SUBST(CFLAGS_OPTIMIZE)
2173     AC_SUBST(CFLAGS_WARNING)
2174
2175     AC_SUBST(LDFLAGS)
2176     AC_SUBST(LDFLAGS_DEBUG)
2177     AC_SUBST(LDFLAGS_OPTIMIZE)
2178     AC_SUBST(CC_SEARCH_FLAGS)
2179     AC_SUBST(LD_SEARCH_FLAGS)
2180
2181     AC_SUBST(STLIB_LD)
2182     AC_SUBST(SHLIB_LD)
2183     AC_SUBST(TCL_SHLIB_LD_EXTRAS)
2184     AC_SUBST(TK_SHLIB_LD_EXTRAS)
2185     AC_SUBST(SHLIB_LD_LIBS)
2186     AC_SUBST(SHLIB_CFLAGS)
2187     AC_SUBST(SHLIB_SUFFIX)
2188
2189     AC_SUBST(MAKE_LIB)
2190     AC_SUBST(MAKE_STUB_LIB)
2191     AC_SUBST(INSTALL_LIB)
2192     AC_SUBST(INSTALL_STUB_LIB)
2193     AC_SUBST(RANLIB)
2194 ])
2195
2196 #--------------------------------------------------------------------
2197 # SC_SERIAL_PORT
2198 #
2199 #       Determine which interface to use to talk to the serial port.
2200 #       Note that #include lines must begin in leftmost column for
2201 #       some compilers to recognize them as preprocessor directives,
2202 #       and some build environments have stdin not pointing at a
2203 #       pseudo-terminal (usually /dev/null instead.)
2204 #
2205 # Arguments:
2206 #       none
2207 #       
2208 # Results:
2209 #
2210 #       Defines only one of the following vars:
2211 #               HAVE_SYS_MODEM_H
2212 #               USE_TERMIOS
2213 #               USE_TERMIO
2214 #               USE_SGTTY
2215 #
2216 #--------------------------------------------------------------------
2217
2218 AC_DEFUN([SC_SERIAL_PORT], [
2219     AC_CHECK_HEADERS(sys/modem.h)
2220     AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [
2221     AC_TRY_RUN([
2222 #include <termios.h>
2223
2224 int main() {
2225     struct termios t;
2226     if (tcgetattr(0, &t) == 0) {
2227         cfsetospeed(&t, 0);
2228         t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
2229         return 0;
2230     }
2231     return 1;
2232 }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
2233     if test $tcl_cv_api_serial = no ; then
2234         AC_TRY_RUN([
2235 #include <termio.h>
2236
2237 int main() {
2238     struct termio t;
2239     if (ioctl(0, TCGETA, &t) == 0) {
2240         t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
2241         return 0;
2242     }
2243     return 1;
2244 }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
2245     fi
2246     if test $tcl_cv_api_serial = no ; then
2247         AC_TRY_RUN([
2248 #include <sgtty.h>
2249
2250 int main() {
2251     struct sgttyb t;
2252     if (ioctl(0, TIOCGETP, &t) == 0) {
2253         t.sg_ospeed = 0;
2254         t.sg_flags |= ODDP | EVENP | RAW;
2255         return 0;
2256     }
2257     return 1;
2258 }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
2259     fi
2260     if test $tcl_cv_api_serial = no ; then
2261         AC_TRY_RUN([
2262 #include <termios.h>
2263 #include <errno.h>
2264
2265 int main() {
2266     struct termios t;
2267     if (tcgetattr(0, &t) == 0
2268         || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
2269         cfsetospeed(&t, 0);
2270         t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
2271         return 0;
2272     }
2273     return 1;
2274 }], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
2275     fi
2276     if test $tcl_cv_api_serial = no; then
2277         AC_TRY_RUN([
2278 #include <termio.h>
2279 #include <errno.h>
2280
2281 int main() {
2282     struct termio t;
2283     if (ioctl(0, TCGETA, &t) == 0
2284         || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
2285         t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
2286         return 0;
2287     }
2288     return 1;
2289     }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no)
2290     fi
2291     if test $tcl_cv_api_serial = no; then
2292         AC_TRY_RUN([
2293 #include <sgtty.h>
2294 #include <errno.h>
2295
2296 int main() {
2297     struct sgttyb t;
2298     if (ioctl(0, TIOCGETP, &t) == 0
2299         || errno == ENOTTY || errno == ENXIO || errno == EINVAL) {
2300         t.sg_ospeed = 0;
2301         t.sg_flags |= ODDP | EVENP | RAW;
2302         return 0;
2303     }
2304     return 1;
2305 }], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none)
2306     fi])
2307     case $tcl_cv_api_serial in
2308         termios) AC_DEFINE(USE_TERMIOS);;
2309         termio)  AC_DEFINE(USE_TERMIO);;
2310         sgtty)   AC_DEFINE(USE_SGTTY);;
2311     esac
2312 ])
2313
2314 #--------------------------------------------------------------------
2315 # SC_MISSING_POSIX_HEADERS
2316 #
2317 #       Supply substitutes for missing POSIX header files.  Special
2318 #       notes:
2319 #           - stdlib.h doesn't define strtol, strtoul, or
2320 #             strtod insome versions of SunOS
2321 #           - some versions of string.h don't declare procedures such
2322 #             as strstr
2323 #
2324 # Arguments:
2325 #       none
2326 #       
2327 # Results:
2328 #
2329 #       Defines some of the following vars:
2330 #               NO_DIRENT_H
2331 #               NO_ERRNO_H
2332 #               NO_VALUES_H
2333 #               HAVE_LIMITS_H or NO_LIMITS_H
2334 #               NO_STDLIB_H
2335 #               NO_STRING_H
2336 #               NO_SYS_WAIT_H
2337 #               NO_DLFCN_H
2338 #               HAVE_UNISTD_H
2339 #               HAVE_SYS_PARAM_H
2340 #
2341 #               HAVE_STRING_H ?
2342 #
2343 #--------------------------------------------------------------------
2344
2345 AC_DEFUN([SC_MISSING_POSIX_HEADERS], [
2346     AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [
2347     AC_TRY_LINK([#include <sys/types.h>
2348 #include <dirent.h>], [
2349 #ifndef _POSIX_SOURCE
2350 #   ifdef __Lynx__
2351         /*
2352          * Generate compilation error to make the test fail:  Lynx headers
2353          * are only valid if really in the POSIX environment.
2354          */
2355
2356         missing_procedure();
2357 #   endif
2358 #endif
2359 DIR *d;
2360 struct dirent *entryPtr;
2361 char *p;
2362 d = opendir("foobar");
2363 entryPtr = readdir(d);
2364 p = entryPtr->d_name;
2365 closedir(d);
2366 ], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)])
2367
2368     if test $tcl_cv_dirent_h = no; then
2369         AC_DEFINE(NO_DIRENT_H)
2370     fi
2371
2372     AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H)])
2373     AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H)])
2374     AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H)])
2375     AC_CHECK_HEADER(limits.h,
2376         [AC_DEFINE(HAVE_LIMITS_H)], [AC_DEFINE(NO_LIMITS_H)])
2377     AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
2378     AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
2379     AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
2380     AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
2381     if test $tcl_ok = 0; then
2382         AC_DEFINE(NO_STDLIB_H)
2383     fi
2384     AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
2385     AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
2386     AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
2387
2388     # See also memmove check below for a place where NO_STRING_H can be
2389     # set and why.
2390
2391     if test $tcl_ok = 0; then
2392         AC_DEFINE(NO_STRING_H)
2393     fi
2394
2395     AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H)])
2396     AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H)])
2397
2398     # OS/390 lacks sys/param.h (and doesn't need it, by chance).
2399     AC_HAVE_HEADERS(unistd.h sys/param.h)
2400 ])
2401
2402 #--------------------------------------------------------------------
2403 # SC_PATH_X
2404 #
2405 #       Locate the X11 header files and the X11 library archive.  Try
2406 #       the ac_path_x macro first, but if it doesn't find the X stuff
2407 #       (e.g. because there's no xmkmf program) then check through
2408 #       a list of possible directories.  Under some conditions the
2409 #       autoconf macro will return an include directory that contains
2410 #       no include files, so double-check its result just to be safe.
2411 #
2412 # Arguments:
2413 #       none
2414 #       
2415 # Results:
2416 #
2417 #       Sets the the following vars:
2418 #               XINCLUDES
2419 #               XLIBSW
2420 #
2421 #--------------------------------------------------------------------
2422
2423 AC_DEFUN([SC_PATH_X], [
2424     AC_PATH_X
2425     not_really_there=""
2426     if test "$no_x" = ""; then
2427         if test "$x_includes" = ""; then
2428             AC_TRY_CPP([#include <X11/XIntrinsic.h>], , not_really_there="yes")
2429         else
2430             if test ! -r $x_includes/X11/Intrinsic.h; then
2431                 not_really_there="yes"
2432             fi
2433         fi
2434     fi
2435     if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
2436         AC_MSG_CHECKING([for X11 header files])
2437         found_xincludes="no"
2438         AC_TRY_CPP([#include <X11/Intrinsic.h>], found_xincludes="yes", found_xincludes="no")
2439         if test "$found_xincludes" = "no"; then
2440             dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include"
2441             for i in $dirs ; do
2442                 if test -r $i/X11/Intrinsic.h; then
2443                     AC_MSG_RESULT([$i])
2444                     XINCLUDES=" -I$i"
2445                     found_xincludes="yes"
2446                     break
2447                 fi
2448             done
2449         fi
2450     else
2451         if test "$x_includes" != ""; then
2452             XINCLUDES="-I$x_includes"
2453             found_xincludes="yes"
2454         fi
2455     fi
2456     if test found_xincludes = "no"; then
2457         AC_MSG_RESULT([couldn't find any!])
2458     fi
2459
2460     if test "$no_x" = yes; then
2461         AC_MSG_CHECKING([for X11 libraries])
2462         XLIBSW=nope
2463         dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib"
2464         for i in $dirs ; do
2465             if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl; then
2466                 AC_MSG_RESULT([$i])
2467                 XLIBSW="-L$i -lX11"
2468                 x_libraries="$i"
2469                 break
2470             fi
2471         done
2472     else
2473         if test "$x_libraries" = ""; then
2474             XLIBSW=-lX11
2475         else
2476             XLIBSW="-L$x_libraries -lX11"
2477         fi
2478     fi
2479     if test "$XLIBSW" = nope ; then
2480         AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
2481     fi
2482     if test "$XLIBSW" = nope ; then
2483         AC_MSG_RESULT([could not find any!  Using -lX11.])
2484         XLIBSW=-lX11
2485     fi
2486 ])
2487
2488 #--------------------------------------------------------------------
2489 # SC_BLOCKING_STYLE
2490 #
2491 #       The statements below check for systems where POSIX-style
2492 #       non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. 
2493 #       On these systems (mostly older ones), use the old BSD-style
2494 #       FIONBIO approach instead.
2495 #
2496 # Arguments:
2497 #       none
2498 #       
2499 # Results:
2500 #
2501 #       Defines some of the following vars:
2502 #               HAVE_SYS_IOCTL_H
2503 #               HAVE_SYS_FILIO_H
2504 #               USE_FIONBIO
2505 #               O_NONBLOCK
2506 #
2507 #--------------------------------------------------------------------
2508
2509 AC_DEFUN([SC_BLOCKING_STYLE], [
2510     AC_CHECK_HEADERS(sys/ioctl.h)
2511     AC_CHECK_HEADERS(sys/filio.h)
2512     SC_CONFIG_SYSTEM
2513     AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
2514     case $system in
2515         # There used to be code here to use FIONBIO under AIX.  However, it
2516         # was reported that FIONBIO doesn't work under AIX 3.2.5.  Since
2517         # using O_NONBLOCK seems fine under AIX 4.*, I removed the FIONBIO
2518         # code (JO, 5/31/97).
2519
2520         OSF*)
2521             AC_DEFINE(USE_FIONBIO)
2522             AC_MSG_RESULT([FIONBIO])
2523             ;;
2524         SunOS-4*)
2525             AC_DEFINE(USE_FIONBIO)
2526             AC_MSG_RESULT([FIONBIO])
2527             ;;
2528         ULTRIX-4.*)
2529             AC_DEFINE(USE_FIONBIO)
2530             AC_MSG_RESULT([FIONBIO])
2531             ;;
2532         *)
2533             AC_MSG_RESULT([O_NONBLOCK])
2534             ;;
2535     esac
2536 ])
2537
2538 #--------------------------------------------------------------------
2539 # SC_TIME_HANLDER
2540 #
2541 #       Checks how the system deals with time.h, what time structures
2542 #       are used on the system, and what fields the structures have.
2543 #
2544 # Arguments:
2545 #       none
2546 #       
2547 # Results:
2548 #
2549 #       Defines some of the following vars:
2550 #               USE_DELTA_FOR_TZ
2551 #               HAVE_TM_GMTOFF
2552 #               HAVE_TM_TZADJ
2553 #               HAVE_TIMEZONE_VAR
2554 #
2555 #--------------------------------------------------------------------
2556
2557 AC_DEFUN([SC_TIME_HANDLER], [
2558     AC_CHECK_HEADERS(sys/time.h)
2559     AC_HEADER_TIME
2560     AC_STRUCT_TIMEZONE
2561
2562     AC_CHECK_FUNCS(gmtime_r localtime_r)
2563
2564     AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [
2565         AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
2566             tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)])
2567     if test $tcl_cv_member_tm_tzadj = yes ; then
2568         AC_DEFINE(HAVE_TM_TZADJ)
2569     fi
2570
2571     AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [
2572         AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
2573             tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)])
2574     if test $tcl_cv_member_tm_gmtoff = yes ; then
2575         AC_DEFINE(HAVE_TM_GMTOFF)
2576     fi
2577
2578     #
2579     # Its important to include time.h in this check, as some systems
2580     # (like convex) have timezone functions, etc.
2581     #
2582     AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [
2583         AC_TRY_COMPILE([#include <time.h>],
2584             [extern long timezone;
2585             timezone += 1;
2586             exit (0);],
2587             tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)])
2588     if test $tcl_cv_timezone_long = yes ; then
2589         AC_DEFINE(HAVE_TIMEZONE_VAR)
2590     else
2591         #
2592         # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
2593         #
2594         AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [
2595             AC_TRY_COMPILE([#include <time.h>],
2596                 [extern time_t timezone;
2597                 timezone += 1;
2598                 exit (0);],
2599                 tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)])
2600         if test $tcl_cv_timezone_time = yes ; then
2601             AC_DEFINE(HAVE_TIMEZONE_VAR)
2602         fi
2603     fi
2604 ])
2605
2606 #--------------------------------------------------------------------
2607 # SC_BUGGY_STRTOD
2608 #
2609 #       Under Solaris 2.4, strtod returns the wrong value for the
2610 #       terminating character under some conditions.  Check for this
2611 #       and if the problem exists use a substitute procedure
2612 #       "fixstrtod" (provided by Tcl) that corrects the error.
2613 #       Also, on Compaq's Tru64 Unix 5.0,
2614 #       strtod(" ") returns 0.0 instead of a failure to convert.
2615 #
2616 # Arguments:
2617 #       none
2618 #       
2619 # Results:
2620 #
2621 #       Might defines some of the following vars:
2622 #               strtod (=fixstrtod)
2623 #
2624 #--------------------------------------------------------------------
2625
2626 AC_DEFUN([SC_BUGGY_STRTOD], [
2627     AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0)
2628     if test "$tcl_strtod" = 1; then
2629         AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[
2630             AC_TRY_RUN([
2631                 extern double strtod();
2632                 int main() {
2633                     char *infString="Inf", *nanString="NaN", *spaceString=" ";
2634                     char *term;
2635                     double value;
2636                     value = strtod(infString, &term);
2637                     if ((term != infString) && (term[-1] == 0)) {
2638                         exit(1);
2639                     }
2640                     value = strtod(nanString, &term);
2641                     if ((term != nanString) && (term[-1] == 0)) {
2642                         exit(1);
2643                     }
2644                     value = strtod(spaceString, &term);
2645                     if (term == (spaceString+1)) {
2646                         exit(1);
2647                     }
2648                     exit(0);
2649                 }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy,
2650                     tcl_cv_strtod_buggy=buggy)])
2651         if test "$tcl_cv_strtod_buggy" = buggy; then
2652             LIBOBJS="$LIBOBJS fixstrtod.o"
2653             AC_DEFINE(strtod, fixstrtod)
2654         fi
2655     fi
2656 ])
2657
2658 #--------------------------------------------------------------------
2659 # SC_TCL_LINK_LIBS
2660 #
2661 #       Search for the libraries needed to link the Tcl shell.
2662 #       Things like the math library (-lm) and socket stuff (-lsocket vs.
2663 #       -lnsl) are dealt with here.
2664 #
2665 # Arguments:
2666 #       Requires the following vars to be set in the Makefile:
2667 #               DL_LIBS
2668 #               LIBS
2669 #               MATH_LIBS
2670 #       
2671 # Results:
2672 #
2673 #       Subst's the following var:
2674 #               TCL_LIBS
2675 #               MATH_LIBS
2676 #
2677 #       Might append to the following vars:
2678 #               LIBS
2679 #
2680 #       Might define the following vars:
2681 #               HAVE_NET_ERRNO_H
2682 #
2683 #--------------------------------------------------------------------
2684
2685 AC_DEFUN([SC_TCL_LINK_LIBS], [
2686     #--------------------------------------------------------------------
2687     # On a few very rare systems, all of the libm.a stuff is
2688     # already in libc.a.  Set compiler flags accordingly.
2689     # Also, Linux requires the "ieee" library for math to work
2690     # right (and it must appear before "-lm").
2691     #--------------------------------------------------------------------
2692
2693     AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
2694     AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
2695
2696     #--------------------------------------------------------------------
2697     # Interactive UNIX requires -linet instead of -lsocket, plus it
2698     # needs net/errno.h to define the socket-related error codes.
2699     #--------------------------------------------------------------------
2700
2701     AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
2702     AC_CHECK_HEADER(net/errno.h, [AC_DEFINE(HAVE_NET_ERRNO_H)])
2703
2704     #--------------------------------------------------------------------
2705     #   Check for the existence of the -lsocket and -lnsl libraries.
2706     #   The order here is important, so that they end up in the right
2707     #   order in the command line generated by make.  Here are some
2708     #   special considerations:
2709     #   1. Use "connect" and "accept" to check for -lsocket, and
2710     #      "gethostbyname" to check for -lnsl.
2711     #   2. Use each function name only once:  can't redo a check because
2712     #      autoconf caches the results of the last check and won't redo it.
2713     #   3. Use -lnsl and -lsocket only if they supply procedures that
2714     #      aren't already present in the normal libraries.  This is because
2715     #      IRIX 5.2 has libraries, but they aren't needed and they're
2716     #      bogus:  they goof up name resolution if used.
2717     #   4. On some SVR4 systems, can't use -lsocket without -lnsl too.
2718     #      To get around this problem, check for both libraries together
2719     #      if -lsocket doesn't work by itself.
2720     #--------------------------------------------------------------------
2721
2722     tcl_checkBoth=0
2723     AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
2724     if test "$tcl_checkSocket" = 1; then
2725         AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt,
2726             LIBS="$LIBS -lsocket", tcl_checkBoth=1)])
2727     fi
2728     if test "$tcl_checkBoth" = 1; then
2729         tk_oldLibs=$LIBS
2730         LIBS="$LIBS -lsocket -lnsl"
2731         AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
2732     fi
2733     AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname,
2734             [LIBS="$LIBS -lnsl"])])
2735     
2736     # Don't perform the eval of the libraries here because DL_LIBS
2737     # won't be set until we call SC_CONFIG_CFLAGS
2738
2739     TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
2740     AC_SUBST(TCL_LIBS)
2741     AC_SUBST(MATH_LIBS)
2742 ])
2743
2744 #--------------------------------------------------------------------
2745 # SC_TCL_EARLY_FLAGS
2746 #
2747 #       Check for what flags are needed to be passed so the correct OS
2748 #       features are available.
2749 #
2750 # Arguments:
2751 #       None
2752 #       
2753 # Results:
2754 #
2755 #       Might define the following vars:
2756 #               _ISOC99_SOURCE
2757 #               _LARGEFILE64_SOURCE
2758 #               _LARGEFILE_SOURCE64
2759 #
2760 #--------------------------------------------------------------------
2761
2762 AC_DEFUN([SC_TCL_EARLY_FLAG],[
2763     AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]),
2764         AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no,
2765             AC_TRY_COMPILE([[#define ]$1[ 1
2766 ]$2], $3,
2767                 [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes,
2768                 [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no)))
2769     if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then
2770         AC_DEFINE($1)
2771         tcl_flags="$tcl_flags $1"
2772     fi
2773 ])
2774
2775 AC_DEFUN([SC_TCL_EARLY_FLAGS],[
2776     AC_MSG_CHECKING([for required early compiler flags])
2777     tcl_flags=""
2778     SC_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include <stdlib.h>],
2779         [char *p = (char *)strtoll; char *q = (char *)strtoull;])
2780     SC_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include <sys/stat.h>],
2781         [struct stat64 buf; int i = stat64("/", &buf);])
2782     SC_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include <sys/stat.h>],
2783         [char *p = (char *)open64;])
2784     if test "x${tcl_flags}" = "x" ; then
2785         AC_MSG_RESULT([none])
2786     else
2787         AC_MSG_RESULT([${tcl_flags}])
2788     fi
2789 ])
2790
2791 #--------------------------------------------------------------------
2792 # SC_TCL_64BIT_FLAGS
2793 #
2794 #       Check for what is defined in the way of 64-bit features.
2795 #
2796 # Arguments:
2797 #       None
2798 #       
2799 # Results:
2800 #
2801 #       Might define the following vars:
2802 #               TCL_WIDE_INT_IS_LONG
2803 #               TCL_WIDE_INT_TYPE
2804 #               HAVE_STRUCT_DIRENT64
2805 #               HAVE_STRUCT_STAT64
2806 #               HAVE_TYPE_OFF64_T
2807 #
2808 #--------------------------------------------------------------------
2809
2810 AC_DEFUN([SC_TCL_64BIT_FLAGS], [
2811     AC_MSG_CHECKING([for 64-bit integer type])
2812     AC_CACHE_VAL(tcl_cv_type_64bit,[
2813         tcl_cv_type_64bit=none
2814         # See if the compiler knows natively about __int64
2815         AC_TRY_COMPILE(,[__int64 value = (__int64) 0;],
2816             tcl_type_64bit=__int64, tcl_type_64bit="long long")
2817         # See if we should use long anyway  Note that we substitute in the
2818         # type that is our current guess for a 64-bit type inside this check
2819         # program, so it should be modified only carefully...
2820         AC_TRY_COMPILE(,[switch (0) { 
2821             case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; 
2822         }],tcl_cv_type_64bit=${tcl_type_64bit})])
2823     if test "${tcl_cv_type_64bit}" = none ; then
2824         AC_DEFINE(TCL_WIDE_INT_IS_LONG)
2825         AC_MSG_RESULT([using long])
2826     else
2827         AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit})
2828         AC_MSG_RESULT([${tcl_cv_type_64bit}])
2829
2830         # Now check for auxiliary declarations
2831         AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[
2832             AC_TRY_COMPILE([#include <sys/types.h>
2833 #include <sys/dirent.h>],[struct dirent64 p;],
2834                 tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)])
2835         if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then
2836             AC_DEFINE(HAVE_STRUCT_DIRENT64)
2837         fi
2838
2839         AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[
2840             AC_TRY_COMPILE([#include <sys/stat.h>],[struct stat64 p;
2841 ],
2842                 tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)])
2843         if test "x${tcl_cv_struct_stat64}" = "xyes" ; then
2844             AC_DEFINE(HAVE_STRUCT_STAT64)
2845         fi
2846
2847         AC_CHECK_FUNCS(open64 lseek64)
2848         AC_MSG_CHECKING([for off64_t])
2849         AC_CACHE_VAL(tcl_cv_type_off64_t,[
2850             AC_TRY_COMPILE([#include <sys/types.h>],[off64_t offset;
2851 ],
2852                 tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)])
2853         dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the
2854         dnl functions lseek64 and open64 are defined.
2855         if test "x${tcl_cv_type_off64_t}" = "xyes" && \
2856                 test "x${ac_cv_func_lseek64}" = "xyes" && \
2857                 test "x${ac_cv_func_open64}" = "xyes" ; then
2858             AC_DEFINE(HAVE_TYPE_OFF64_T)
2859             AC_MSG_RESULT([yes])
2860         else
2861             AC_MSG_RESULT([no])
2862         fi
2863     fi
2864 ])
2865
2866 #--------------------------------------------------------------------
2867 # SC_TCL_GETHOSTBYADDR_R
2868 #
2869 #       Check if we have MT-safe variant of gethostbyaddr().
2870 #
2871 # Arguments:
2872 #       None
2873 #       
2874 # Results:
2875 #
2876 #       Might define the following vars:
2877 #               HAVE_GETHOSTBYADDR_R
2878 #               HAVE_GETHOSTBYADDR_R_7
2879 #               HAVE_GETHOSTBYADDR_R_8
2880 #
2881 #--------------------------------------------------------------------
2882
2883 AC_DEFUN([SC_TCL_GETHOSTBYADDR_R], [AC_CHECK_FUNC(gethostbyaddr_r, [
2884     AC_CACHE_CHECK([for gethostbyaddr_r with 7 args], tcl_cv_api_gethostbyaddr_r_7, [
2885     AC_TRY_COMPILE([
2886         #include <netdb.h>
2887     ], [
2888         char *addr;
2889         int length;
2890         int type;
2891         struct hostent *result;
2892         char buffer[2048];
2893         int buflen = 2048;
2894         int h_errnop;
2895
2896         (void) gethostbyaddr_r(addr, length, type, result, buffer, buflen,
2897                                &h_errnop);
2898     ], tcl_cv_api_gethostbyaddr_r_7=yes, tcl_cv_api_gethostbyaddr_r_7=no)])
2899     tcl_ok=$tcl_cv_api_gethostbyaddr_r_7
2900     if test "$tcl_ok" = yes; then
2901         AC_DEFINE(HAVE_GETHOSTBYADDR_R_7)
2902     else
2903         AC_CACHE_CHECK([for gethostbyaddr_r with 8 args], tcl_cv_api_gethostbyaddr_r_8, [
2904         AC_TRY_COMPILE([
2905             #include <netdb.h>
2906         ], [
2907             char *addr;
2908             int length;
2909             int type;
2910             struct hostent *result, *resultp;
2911             char buffer[2048];
2912             int buflen = 2048;
2913             int h_errnop;
2914
2915             (void) gethostbyaddr_r(addr, length, type, result, buffer, buflen,
2916                                    &resultp, &h_errnop);
2917         ], tcl_cv_api_gethostbyaddr_r_8=yes, tcl_cv_api_gethostbyaddr_r_8=no)])
2918         tcl_ok=$tcl_cv_api_gethostbyaddr_r_8
2919         if test "$tcl_ok" = yes; then
2920             AC_DEFINE(HAVE_GETHOSTBYADDR_R_8)
2921         fi
2922     fi
2923     if test "$tcl_ok" = yes; then
2924         AC_DEFINE(HAVE_GETHOSTBYADDR_R)
2925     fi
2926 ])])
2927
2928 #--------------------------------------------------------------------
2929 # SC_TCL_GETHOSTBYNAME_R
2930 #
2931 #       Check to see what variant of gethostbyname_r() we have.
2932 #       Based on David Arnold's example from the comp.programming.threads
2933 #       FAQ Q213
2934 #
2935 # Arguments:
2936 #       None
2937 #       
2938 # Results:
2939 #
2940 #       Might define the following vars:
2941 #               HAVE_GETHOSTBYADDR_R
2942 #               HAVE_GETHOSTBYADDR_R_3
2943 #               HAVE_GETHOSTBYADDR_R_5
2944 #               HAVE_GETHOSTBYADDR_R_6
2945 #
2946 #--------------------------------------------------------------------
2947
2948 AC_DEFUN([SC_TCL_GETHOSTBYNAME_R], [AC_CHECK_FUNC(gethostbyname_r, [
2949     AC_CACHE_CHECK([for gethostbyname_r with 6 args], tcl_cv_api_gethostbyname_r_6, [
2950     AC_TRY_COMPILE([
2951         #include <netdb.h>
2952     ], [
2953         char *name;
2954         struct hostent *he, *res;
2955         char buffer[2048];
2956         int buflen = 2048;
2957         int h_errnop;
2958
2959         (void) gethostbyname_r(name, he, buffer, buflen, &res, &h_errnop);
2960     ], tcl_cv_api_gethostbyname_r_6=yes, tcl_cv_api_gethostbyname_r_6=no)])
2961     tcl_ok=$tcl_cv_api_gethostbyname_r_6
2962     if test "$tcl_ok" = yes; then
2963         AC_DEFINE(HAVE_GETHOSTBYNAME_R_6)
2964     else
2965         AC_CACHE_CHECK([for gethostbyname_r with 5 args], tcl_cv_api_gethostbyname_r_5, [
2966         AC_TRY_COMPILE([
2967             #include <netdb.h>
2968         ], [
2969             char *name;
2970             struct hostent *he;
2971             char buffer[2048];
2972             int buflen = 2048;
2973             int h_errnop;
2974
2975             (void) gethostbyname_r(name, he, buffer, buflen, &h_errnop);
2976         ], tcl_cv_api_gethostbyname_r_5=yes, tcl_cv_api_gethostbyname_r_5=no)])
2977         tcl_ok=$tcl_cv_api_gethostbyname_r_5
2978         if test "$tcl_ok" = yes; then
2979             AC_DEFINE(HAVE_GETHOSTBYNAME_R_5)
2980         else
2981             AC_CACHE_CHECK([for gethostbyname_r with 3 args], tcl_cv_api_gethostbyname_r_3, [
2982             AC_TRY_COMPILE([
2983                 #include <netdb.h>
2984             ], [
2985                 char *name;
2986                 struct hostent *he;
2987                 struct hostent_data data;
2988
2989                 (void) gethostbyname_r(name, he, &data);
2990             ], tcl_cv_api_gethostbyname_r_3=yes, tcl_cv_api_gethostbyname_r_3=no)])
2991             tcl_ok=$tcl_cv_api_gethostbyname_r_3
2992             if test "$tcl_ok" = yes; then
2993                 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3)
2994             fi
2995         fi
2996     fi
2997     if test "$tcl_ok" = yes; then
2998         AC_DEFINE(HAVE_GETHOSTBYNAME_R)
2999     fi
3000 ])])
3001
3002 #--------------------------------------------------------------------
3003 # SC_TCL_GETPWUID_R
3004 #
3005 #       Check if we have MT-safe variant of getpwuid() and if yes,
3006 #       which one exactly.
3007 #
3008 # Arguments:
3009 #       None
3010 #       
3011 # Results:
3012 #
3013 #       Might define the following vars:
3014 #               HAVE_GETPWUID_R
3015 #               HAVE_GETPWUID_R_4
3016 #               HAVE_GETPWUID_R_5
3017 #
3018 #--------------------------------------------------------------------
3019
3020 AC_DEFUN([SC_TCL_GETPWUID_R], [AC_CHECK_FUNC(getpwuid_r, [
3021     AC_CACHE_CHECK([for getpwuid_r with 5 args], tcl_cv_api_getpwuid_r_5, [
3022     AC_TRY_COMPILE([
3023         #include <sys/types.h>
3024         #include <pwd.h>
3025     ], [
3026         uid_t uid;
3027         struct passwd pw, *pwp;
3028         char buf[512];
3029         int buflen = 512;
3030
3031         (void) getpwuid_r(uid, &pw, buf, buflen, &pwp);
3032     ], tcl_cv_api_getpwuid_r_5=yes, tcl_cv_api_getpwuid_r_5=no)])
3033     tcl_ok=$tcl_cv_api_getpwuid_r_5
3034     if test "$tcl_ok" = yes; then
3035         AC_DEFINE(HAVE_GETPWUID_R_5)
3036     else
3037         AC_CACHE_CHECK([for getpwuid_r with 4 args], tcl_cv_api_getpwuid_r_4, [
3038         AC_TRY_COMPILE([
3039             #include <sys/types.h>
3040             #include <pwd.h>
3041         ], [
3042             uid_t uid;
3043             struct passwd pw;
3044             char buf[512];
3045             int buflen = 512;
3046
3047             (void)getpwnam_r(uid, &pw, buf, buflen);
3048         ], tcl_cv_api_getpwuid_r_4=yes, tcl_cv_api_getpwuid_r_4=no)])
3049         tcl_ok=$tcl_cv_api_getpwuid_r_4
3050         if test "$tcl_ok" = yes; then
3051             AC_DEFINE(HAVE_GETPWUID_R_4)
3052         fi
3053     fi
3054     if test "$tcl_ok" = yes; then
3055         AC_DEFINE(HAVE_GETPWUID_R)
3056     fi
3057 ])])
3058
3059 #--------------------------------------------------------------------
3060 # SC_TCL_GETPWNAM_R
3061 #
3062 #       Check if we have MT-safe variant of getpwnam() and if yes,
3063 #       which one exactly.
3064 #
3065 # Arguments:
3066 #       None
3067 #       
3068 # Results:
3069 #
3070 #       Might define the following vars:
3071 #               HAVE_GETPWNAM_R
3072 #               HAVE_GETPWNAM_R_4
3073 #               HAVE_GETPWNAM_R_5
3074 #
3075 #--------------------------------------------------------------------
3076
3077 AC_DEFUN([SC_TCL_GETPWNAM_R], [AC_CHECK_FUNC(getpwnam_r, [
3078     AC_CACHE_CHECK([for getpwnam_r with 5 args], tcl_cv_api_getpwnam_r_5, [
3079     AC_TRY_COMPILE([
3080         #include <sys/types.h>
3081         #include <pwd.h>
3082     ], [
3083         char *name;
3084         struct passwd pw, *pwp;
3085         char buf[512];
3086         int buflen = 512;
3087
3088         (void) getpwnam_r(name, &pw, buf, buflen, &pwp);
3089     ], tcl_cv_api_getpwnam_r_5=yes, tcl_cv_api_getpwnam_r_5=no)])
3090     tcl_ok=$tcl_cv_api_getpwnam_r_5
3091     if test "$tcl_ok" = yes; then
3092         AC_DEFINE(HAVE_GETPWNAM_R_5)
3093     else
3094         AC_CACHE_CHECK([for getpwnam_r with 4 args], tcl_cv_api_getpwnam_r_4, [
3095         AC_TRY_COMPILE([
3096             #include <sys/types.h>
3097             #include <pwd.h>
3098         ], [
3099             char *name;
3100             struct passwd pw;
3101             char buf[512];
3102             int buflen = 512;
3103
3104             (void)getpwnam_r(name, &pw, buf, buflen);
3105         ], tcl_cv_api_getpwnam_r_4=yes, tcl_cv_api_getpwnam_r_4=no)])
3106         tcl_ok=$tcl_cv_api_getpwnam_r_4
3107         if test "$tcl_ok" = yes; then
3108             AC_DEFINE(HAVE_GETPWNAM_R_4)
3109         fi
3110     fi
3111     if test "$tcl_ok" = yes; then
3112         AC_DEFINE(HAVE_GETPWNAM_R)
3113     fi
3114 ])])
3115
3116 #--------------------------------------------------------------------
3117 # SC_TCL_GETGRGID_R
3118 #
3119 #       Check if we have MT-safe variant of getgrgid() and if yes,
3120 #       which one exactly.
3121 #
3122 # Arguments:
3123 #       None
3124 #       
3125 # Results:
3126 #
3127 #       Might define the following vars:
3128 #               HAVE_GETGRGID_R
3129 #               HAVE_GETGRGID_R_4
3130 #               HAVE_GETGRGID_R_5
3131 #
3132 #--------------------------------------------------------------------
3133
3134 AC_DEFUN([SC_TCL_GETGRGID_R], [AC_CHECK_FUNC(getgrgid_r, [
3135     AC_CACHE_CHECK([for getgrgid_r with 5 args], tcl_cv_api_getgrgid_r_5, [
3136     AC_TRY_COMPILE([
3137         #include <sys/types.h>
3138         #include <grp.h>
3139     ], [
3140         gid_t gid;
3141         struct group gr, *grp;
3142         char buf[512];
3143         int buflen = 512;
3144
3145         (void) getgrgid_r(gid, &gr, buf, buflen, &grp);
3146     ], tcl_cv_api_getgrgid_r_5=yes, tcl_cv_api_getgrgid_r_5=no)])
3147     tcl_ok=$tcl_cv_api_getgrgid_r_5
3148     if test "$tcl_ok" = yes; then
3149         AC_DEFINE(HAVE_GETGRGID_R_5)
3150     else
3151         AC_CACHE_CHECK([for getgrgid_r with 4 args], tcl_cv_api_getgrgid_r_4, [
3152         AC_TRY_COMPILE([
3153             #include <sys/types.h>
3154             #include <grp.h>
3155         ], [
3156             gid_t gid;
3157             struct group gr;
3158             char buf[512];
3159             int buflen = 512;
3160
3161             (void)getgrgid_r(gid, &gr, buf, buflen);
3162         ], tcl_cv_api_getgrgid_r_4=yes, tcl_cv_api_getgrgid_r_4=no)])
3163         tcl_ok=$tcl_cv_api_getgrgid_r_4
3164         if test "$tcl_ok" = yes; then
3165             AC_DEFINE(HAVE_GETGRGID_R_4)
3166         fi
3167     fi
3168     if test "$tcl_ok" = yes; then
3169         AC_DEFINE(HAVE_GETGRGID_R)
3170     fi
3171 ])])
3172
3173 #--------------------------------------------------------------------
3174 # SC_TCL_GETGRNAM_R
3175 #
3176 #       Check if we have MT-safe variant of getgrnam() and if yes,
3177 #       which one exactly.
3178 #
3179 # Arguments:
3180 #       None
3181 #       
3182 # Results:
3183 #
3184 #       Might define the following vars:
3185 #               HAVE_GETGRNAM_R
3186 #               HAVE_GETGRNAM_R_4
3187 #               HAVE_GETGRNAM_R_5
3188 #
3189 #--------------------------------------------------------------------
3190
3191 AC_DEFUN([SC_TCL_GETGRNAM_R], [AC_CHECK_FUNC(getgrnam_r, [
3192     AC_CACHE_CHECK([for getgrnam_r with 5 args], tcl_cv_api_getgrnam_r_5, [
3193     AC_TRY_COMPILE([
3194         #include <sys/types.h>
3195         #include <grp.h>
3196     ], [
3197         char *name;
3198         struct group gr, *grp;
3199         char buf[512];
3200         int buflen = 512;
3201
3202         (void) getgrnam_r(name, &gr, buf, buflen, &grp);
3203     ], tcl_cv_api_getgrnam_r_5=yes, tcl_cv_api_getgrnam_r_5=no)])
3204     tcl_ok=$tcl_cv_api_getgrnam_r_5
3205     if test "$tcl_ok" = yes; then
3206         AC_DEFINE(HAVE_GETGRNAM_R_5)
3207     else
3208         AC_CACHE_CHECK([for getgrnam_r with 4 args], tcl_cv_api_getgrnam_r_4, [
3209         AC_TRY_COMPILE([
3210             #include <sys/types.h>
3211             #include <grp.h>
3212         ], [
3213             char *name;
3214             struct group gr;
3215             char buf[512];
3216             int buflen = 512;
3217
3218             (void)getgrnam_r(name, &gr, buf, buflen);
3219         ], tcl_cv_api_getgrnam_r_4=yes, tcl_cv_api_getgrnam_r_4=no)])
3220         tcl_ok=$tcl_cv_api_getgrnam_r_4
3221         if test "$tcl_ok" = yes; then
3222             AC_DEFINE(HAVE_GETGRNAM_R_4)
3223         fi
3224     fi
3225     if test "$tcl_ok" = yes; then
3226         AC_DEFINE(HAVE_GETGRNAM_R)
3227     fi
3228 ])])
3229
3230 #--------------------------------------------------------------------
3231 # SC_CONFIG_COMMANDS_PRE(CMDS)
3232 #
3233 #       Replacement for autoconf 2.5x AC_COMMANDS_PRE:
3234 #               Commands to run right before config.status is
3235 #               created. Accumulates.
3236 #
3237 #       Requires presence of SC_OUTPUT_COMMANDS_PRE at the end
3238 #       of configure.in (right before AC_OUTPUT).
3239 #
3240 #--------------------------------------------------------------------
3241
3242 AC_DEFUN([SC_CONFIG_COMMANDS_PRE], [
3243     define([SC_OUTPUT_COMMANDS_PRE], defn([SC_OUTPUT_COMMANDS_PRE])[$1
3244 ])])
3245 AC_DEFUN([SC_OUTPUT_COMMANDS_PRE])
3246