1# tcl.m4 --
2#
3#	This file provides a set of autoconf macros to help TEA-enable
4#	a Tcl extension.
5#
6# Copyright (c) 1999-2000 Ajuba Solutions.
7# All rights reserved.
8#
9# See the file "license.terms" for information on usage and redistribution
10# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
11
12#------------------------------------------------------------------------
13# SC_PATH_TCLCONFIG --
14#
15#	Locate the tclConfig.sh file and perform a sanity check on
16#	the Tcl compile flags
17#
18# Arguments:
19#	none
20#
21# Results:
22#
23#	Adds the following arguments to configure:
24#		--with-tcl=...
25#
26#	Defines the following vars:
27#		TCL_BIN_DIR	Full path to the directory containing
28#				the tclConfig.sh file
29#------------------------------------------------------------------------
30
31AC_DEFUN(SC_PATH_TCLCONFIG, [
32    #
33    # Ok, lets find the tcl configuration
34    # First, look for one uninstalled.
35    # the alternative search directory is invoked by --with-tcl
36    #
37
38    if test x"${no_tcl}" = x ; then
39	# we reset no_tcl in case something fails here
40	no_tcl=true
41	AC_ARG_WITH(tcl, [  --with-tcl              directory containing tcl configuration (tclConfig.sh)], with_tclconfig=${withval})
42	AC_MSG_CHECKING([for Tcl configuration])
43	AC_CACHE_VAL(ac_cv_c_tclconfig,[
44
45	    # First check to see if --with-tcl was specified.
46	    if test x"${with_tclconfig}" != x ; then
47		if test -f "${with_tclconfig}/tclConfig.sh" ; then
48		    ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)`
49		else
50		    AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
51		fi
52	    fi
53
54	    # then check for a private Tcl installation
55	    if test x"${ac_cv_c_tclconfig}" = x ; then
56		for i in \
57			../tcl \
58			`ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
59			../../tcl \
60			`ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
61			../../../tcl \
62			`ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
63		    if test -f "$i/unix/tclConfig.sh" ; then
64			ac_cv_c_tclconfig=`(cd $i/unix; pwd)`
65			break
66		    fi
67		done
68	    fi
69
70	    # check in a few common install locations
71	    if test x"${ac_cv_c_tclconfig}" = x ; then
72		for i in `ls -d ${prefix}/lib 2>/dev/null` \
73			`ls -d /usr/lib 2>/dev/null` \
74			`ls -d /usr/local/lib 2>/dev/null` ; do
75		    if test -f "$i/tclConfig.sh" ; then
76			ac_cv_c_tclconfig=`(cd $i; pwd)`
77			break
78		    fi
79		done
80	    fi
81
82	    # check in a few other private locations
83	    if test x"${ac_cv_c_tclconfig}" = x ; then
84		for i in \
85			${srcdir}/../tcl \
86			`ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
87		    if test -f "$i/unix/tclConfig.sh" ; then
88		    ac_cv_c_tclconfig=`(cd $i/unix; pwd)`
89		    break
90		fi
91		done
92	    fi
93	])
94
95	if test x"${ac_cv_c_tclconfig}" = x ; then
96	    TCL_BIN_DIR="# no Tcl configs found"
97	    AC_MSG_WARN(Can't find Tcl configuration definitions)
98	    exit 0
99	else
100	    no_tcl=
101	    TCL_BIN_DIR=${ac_cv_c_tclconfig}
102	    AC_MSG_RESULT(found $TCL_BIN_DIR/tclConfig.sh)
103	fi
104    fi
105])
106
107#------------------------------------------------------------------------
108# SC_PATH_TKCONFIG --
109#
110#	Locate the tkConfig.sh file
111#
112# Arguments:
113#	none
114#
115# Results:
116#
117#	Adds the following arguments to configure:
118#		--with-tk=...
119#
120#	Defines the following vars:
121#		TK_BIN_DIR	Full path to the directory containing
122#				the tkConfig.sh file
123#------------------------------------------------------------------------
124
125AC_DEFUN(SC_PATH_TKCONFIG, [
126    #
127    # Ok, lets find the tk configuration
128    # First, look for one uninstalled.
129    # the alternative search directory is invoked by --with-tk
130    #
131
132    if test x"${no_tk}" = x ; then
133	# we reset no_tk in case something fails here
134	no_tk=true
135	AC_ARG_WITH(tk, [  --with-tk               directory containing tk configuration (tkConfig.sh)], with_tkconfig=${withval})
136	AC_MSG_CHECKING([for Tk configuration])
137	AC_CACHE_VAL(ac_cv_c_tkconfig,[
138
139	    # First check to see if --with-tkconfig was specified.
140	    if test x"${with_tkconfig}" != x ; then
141		if test -f "${with_tkconfig}/tkConfig.sh" ; then
142		    ac_cv_c_tkconfig=`(cd ${with_tkconfig}; pwd)`
143		else
144		    AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
145		fi
146	    fi
147
148	    # then check for a private Tk library
149	    if test x"${ac_cv_c_tkconfig}" = x ; then
150		for i in \
151			../tk \
152			`ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
153			../../tk \
154			`ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
155			../../../tk \
156			`ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
157		    if test -f "$i/unix/tkConfig.sh" ; then
158			ac_cv_c_tkconfig=`(cd $i/unix; pwd)`
159			break
160		    fi
161		done
162	    fi
163	    # check in a few common install locations
164	    if test x"${ac_cv_c_tkconfig}" = x ; then
165		for i in `ls -d ${prefix}/lib 2>/dev/null` \
166			`ls -d /usr/lib 2>/dev/null` \
167			`ls -d /usr/local/lib 2>/dev/null` ; do
168		    if test -f "$i/tkConfig.sh" ; then
169			ac_cv_c_tkconfig=`(cd $i; pwd)`
170			break
171		    fi
172		done
173	    fi
174	    # check in a few other private locations
175	    if test x"${ac_cv_c_tkconfig}" = x ; then
176		for i in \
177			${srcdir}/../tk \
178			`ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
179		    if test -f "$i/unix/tkConfig.sh" ; then
180			ac_cv_c_tkconfig=`(cd $i/unix; pwd)`
181			break
182		    fi
183		done
184	    fi
185	])
186	if test x"${ac_cv_c_tkconfig}" = x ; then
187	    TK_BIN_DIR="# no Tk configs found"
188	    AC_MSG_WARN(Can't find Tk configuration definitions)
189	    exit 0
190	else
191	    no_tk=
192	    TK_BIN_DIR=${ac_cv_c_tkconfig}
193	    AC_MSG_RESULT(found $TK_BIN_DIR/tkConfig.sh)
194	fi
195    fi
196
197])
198
199#------------------------------------------------------------------------
200# SC_LOAD_TCLCONFIG --
201#
202#	Load the tclConfig.sh file
203#
204# Arguments:
205#
206#	Requires the following vars to be set:
207#		TCL_BIN_DIR
208#
209# Results:
210#
211#	Subst the following vars:
212#		TCL_BIN_DIR
213#		TCL_SRC_DIR
214#		TCL_LIB_FILE
215#
216#------------------------------------------------------------------------
217
218AC_DEFUN(SC_LOAD_TCLCONFIG, [
219    AC_MSG_CHECKING([for existence of $TCL_BIN_DIR/tclConfig.sh])
220
221    if test -f "$TCL_BIN_DIR/tclConfig.sh" ; then
222        AC_MSG_RESULT([loading])
223	. $TCL_BIN_DIR/tclConfig.sh
224    else
225        AC_MSG_RESULT([file not found])
226    fi
227
228    #
229    # The eval is required to do the TCL_DBGX substitution in the
230    # TCL_LIB_FILE variable
231    #
232
233    eval TCL_LIB_FILE=${TCL_LIB_FILE}
234    eval TCL_LIB_FLAG=${TCL_LIB_FLAG}
235
236    AC_SUBST(TCL_DBGX)
237    AC_SUBST(TCL_BIN_DIR)
238    AC_SUBST(TCL_SRC_DIR)
239    AC_SUBST(TCL_LIB_FILE)
240    AC_SUBST(TCL_LIBS)
241    AC_SUBST(TCL_DEFS)
242    AC_SUBST(TCL_SHLIB_LD_LIBS)
243    AC_SUBST(TCL_EXTRA_CFLAGS)
244    AC_SUBST(TCL_LD_FLAGS)
245    AC_SUBST(TCL_LIB_FILE)
246    AC_SUBST(TCL_STUB_LIB_FILE)
247    AC_SUBST(TCL_LIB_SPEC)
248    AC_SUBST(TCL_BUILD_LIB_SPEC)
249    AC_SUBST(TCL_STUB_LIB_SPEC)
250    AC_SUBST(TCL_BUILD_STUB_LIB_SPEC)
251])
252
253#------------------------------------------------------------------------
254# SC_LOAD_TKCONFIG --
255#
256#	Load the tkConfig.sh file
257#
258# Arguments:
259#
260#	Requires the following vars to be set:
261#		TK_BIN_DIR
262#
263# Results:
264#
265#	Sets the following vars that should be in tkConfig.sh:
266#		TK_BIN_DIR
267#------------------------------------------------------------------------
268
269AC_DEFUN(SC_LOAD_TKCONFIG, [
270    AC_MSG_CHECKING([for existence of $TK_BIN_DIR/tkConfig.sh])
271
272    if test -f "$TK_BIN_DIR/tkConfig.sh" ; then
273        AC_MSG_RESULT([loading])
274	. $TK_BIN_DIR/tkConfig.sh
275    else
276        AC_MSG_RESULT([could not find $TK_BIN_DIR/tkConfig.sh])
277    fi
278
279    AC_SUBST(TK_BIN_DIR)
280    AC_SUBST(TK_SRC_DIR)
281    AC_SUBST(TK_LIB_FILE)
282    AC_SUBST(TK_XINCLUDES)
283])
284
285#------------------------------------------------------------------------
286# SC_ENABLE_GCC --
287#
288#	Allows the use of GCC if available
289#
290# Arguments:
291#	none
292#
293# Results:
294#
295#	Adds the following arguments to configure:
296#		--enable-gcc
297#
298#	Sets the following vars:
299#		CC	Command to use for the compiler
300#------------------------------------------------------------------------
301
302AC_DEFUN(SC_ENABLE_GCC, [
303    AC_ARG_ENABLE(gcc, [  --enable-gcc            allow use of gcc if available [--disable-gcc]],
304	[ok=$enableval], [ok=no])
305    if test "$ok" = "yes"; then
306	CC=gcc
307    else
308	case "`uname -s`" in
309	    *win32* | *WIN32* | *CYGWIN_NT* | *CYGWIN_98* | *CYGWIN_95*)
310		CC=cl
311	    ;;
312	    *)
313		CC=${CC-cc}
314	    ;;
315	esac
316    fi
317    AC_PROG_CC
318])
319
320#------------------------------------------------------------------------
321# SC_ENABLE_SHARED --
322#
323#	Allows the building of shared libraries
324#
325# Arguments:
326#	none
327#
328# Results:
329#
330#	Adds the following arguments to configure:
331#		--enable-shared=yes|no
332#
333#	Defines the following vars:
334#		STATIC_BUILD	Used for building import/export libraries
335#				on Windows.
336#
337#	Sets the following vars:
338#		SHARED_BUILD	Value of 1 or 0
339#------------------------------------------------------------------------
340
341AC_DEFUN(SC_ENABLE_SHARED, [
342    AC_MSG_CHECKING([how to build libraries])
343    AC_ARG_ENABLE(shared,
344	[  --enable-shared         build and link with shared libraries [--enable-shared]],
345	[tcl_ok=$enableval], [tcl_ok=yes])
346
347    if test "${enable_shared+set}" = set; then
348	enableval="$enable_shared"
349	tcl_ok=$enableval
350    else
351	tcl_ok=yes
352    fi
353
354    if test "$tcl_ok" = "yes" ; then
355	AC_MSG_RESULT([shared])
356	SHARED_BUILD=1
357    else
358	AC_MSG_RESULT([static])
359	SHARED_BUILD=0
360	AC_DEFINE(STATIC_BUILD)
361    fi
362])
363
364#------------------------------------------------------------------------
365# SC_ENABLE_THREADS --
366#
367#	Specify if thread support should be enabled
368#
369# Arguments:
370#	none
371#
372# Results:
373#
374#	Adds the following arguments to configure:
375#		--enable-threads
376#
377#	Sets the following vars:
378#		THREADS_LIBS	Thread library(s)
379#
380#	Defines the following vars:
381#		TCL_THREADS
382#		_REENTRANT
383#
384#------------------------------------------------------------------------
385
386AC_DEFUN(SC_ENABLE_THREADS, [
387    AC_MSG_CHECKING(for building with threads)
388    AC_ARG_ENABLE(threads, [  --enable-threads        build with threads],
389	[tcl_ok=$enableval], [tcl_ok=no])
390
391    if test "$tcl_ok" = "yes"; then
392	TCL_THREADS=1
393	AC_DEFINE(TCL_THREADS)
394	AC_DEFINE(_REENTRANT)
395
396	case "`uname -s`" in
397	    *win32* | *WIN32* | *CYGWIN_NT* | *CYGWIN_98* | *CYGWIN_95*)
398		    AC_MSG_RESULT(yes)
399		;;
400	    *)
401		AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no)
402		if test "$tcl_ok" = "yes"; then
403		    # The space is needed
404		    THREADS_LIBS=" -lpthread"
405		    AC_MSG_RESULT(yes)
406		else
407		    TCL_THREADS=0
408		    AC_MSG_RESULT(no)
409		    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...")
410		fi
411		;;
412	esac
413    else
414	TCL_THREADS=0
415	AC_MSG_RESULT(no (default))
416    fi
417
418])
419
420#------------------------------------------------------------------------
421# SC_ENABLE_SYMBOLS --
422#
423#	Specify if debugging symbols should be used
424#
425# Arguments:
426#	none
427#
428#	Requires the following vars to be set:
429#		CFLAGS_DEBUG
430#		CFLAGS_OPTIMIZE
431#		LDFLAGS_DEBUG
432#		LDFLAGS_OPTIMIZE
433#
434# Results:
435#
436#	Adds the following arguments to configure:
437#		--enable-symbols
438#
439#	Defines the following vars:
440#		CFLAGS_DEFAULT	Sets to CFLAGS_DEBUG if true
441#				Sets to CFLAGS_OPTIMIZE if false
442#		LDFLAGS_DEFAULT	Sets to LDFLAGS_DEBUG if true
443#				Sets to LDFLAGS_OPTIMIZE if false
444#		DBGX		Debug library extension
445#
446#------------------------------------------------------------------------
447
448AC_DEFUN(SC_ENABLE_SYMBOLS, [
449    case "`uname -s`" in
450	*win32* | *WIN32* | *CYGWIN_NT* | *CYGWIN_98* | *CYGWIN_95*)
451	    tcl_dbgx=d
452	;;
453	*)
454	    tcl_dbgx=g
455	;;
456    esac
457
458    AC_MSG_CHECKING([for build with symbols])
459    AC_ARG_ENABLE(symbols, [  --enable-symbols        build with debugging symbols [--disable-symbols]],    [tcl_ok=$enableval], [tcl_ok=no])
460    if test "$tcl_ok" = "yes"; then
461	CFLAGS_DEFAULT="${CFLAGS_DEBUG}"
462	LDFLAGS_DEFAULT="${LDFLAGS_DEBUG}"
463	DBGX=${tcl_dbgx}
464	TCL_DBGX=${tcl_dbgx}
465	AC_MSG_RESULT([yes])
466    else
467	CFLAGS_DEFAULT="${CFLAGS_OPTIMIZE}"
468	LDFLAGS_DEFAULT="${LDFLAGS_OPTIMIZE}"
469	DBGX=""
470	TCL_DBGX=""
471	AC_MSG_RESULT([no])
472    fi
473
474    AC_SUBST(TCL_DBGX)
475    AC_SUBST(CFLAGS_DEFAULT)
476    AC_SUBST(LDFLAGS_DEFAULT)
477])
478
479#--------------------------------------------------------------------
480# SC_CONFIG_CFLAGS
481#
482#	Try to determine the proper flags to pass to the compiler
483#	for building shared libraries and other such nonsense.
484#
485# Arguments:
486#	none
487#
488# Results:
489#
490#	Defines the following vars:
491#
492#       DL_OBJS -       Name of the object file that implements dynamic
493#                       loading for Tcl on this system.
494#       DL_LIBS -       Library file(s) to include in tclsh and other base
495#                       applications in order for the "load" command to work.
496#       LDFLAGS -      Flags to pass to the compiler when linking object
497#                       files into an executable application binary such
498#                       as tclsh.
499#       LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib",
500#                       that tell the run-time dynamic linker where to look
501#                       for shared libraries such as libtcl.so.  Depends on
502#                       the variable LIB_RUNTIME_DIR in the Makefile.
503#       MAKE_LIB -      Command to execute to build the Tcl library;
504#                       differs depending on whether or not Tcl is being
505#                       compiled as a shared library.
506#       SHLIB_CFLAGS -  Flags to pass to cc when compiling the components
507#                       of a shared library (may request position-independent
508#                       code, among other things).
509#       SHLIB_LD -      Base command to use for combining object files
510#                       into a shared library.
511#       SHLIB_LD_LIBS - Dependent libraries for the linker to scan when
512#                       creating shared libraries.  This symbol typically
513#                       goes at the end of the "ld" commands that build
514#                       shared libraries. The value of the symbol is
515#                       "${LIBS}" if all of the dependent libraries should
516#                       be specified when creating a shared library.  If
517#                       dependent libraries should not be specified (as on
518#                       SunOS 4.x, where they cause the link to fail, or in
519#                       general if Tcl and Tk aren't themselves shared
520#                       libraries), then this symbol has an empty string
521#                       as its value.
522#       SHLIB_SUFFIX -  Suffix to use for the names of dynamically loadable
523#                       extensions.  An empty string means we don't know how
524#                       to use shared libraries on this platform.
525#       TCL_LIB_FILE -  Name of the file that contains the Tcl library, such
526#                       as libtcl7.8.so or libtcl7.8.a.
527#       TCL_LIB_SUFFIX -Specifies everything that comes after the "libtcl"
528#                       in the shared library name, using the $VERSION variable
529#                       to put the version in the right place.  This is used
530#                       by platforms that need non-standard library names.
531#                       Examples:  ${VERSION}.so.1.1 on NetBSD, since it needs
532#                       to have a version after the .so, and ${VERSION}.a
533#                       on AIX, since the Tcl shared library needs to have
534#                       a .a extension whereas shared objects for loadable
535#                       extensions have a .so extension.  Defaults to
536#                       ${VERSION}${SHLIB_SUFFIX}.
537#       TCL_NEEDS_EXP_FILE -
538#                       1 means that an export file is needed to link to a
539#                       shared library.
540#       TCL_EXP_FILE -  The name of the installed export / import file which
541#                       should be used to link to the Tcl shared library.
542#                       Empty if Tcl is unshared.
543#       TCL_BUILD_EXP_FILE -
544#                       The name of the built export / import file which
545#                       should be used to link to the Tcl shared library.
546#                       Empty if Tcl is unshared.
547#	CFLAGS_DEBUG -
548#			Flags used when running the compiler in debug mode
549#	CFLAGS_OPTIMIZE -
550#			Flags used when running the compiler in optimize mode
551#
552#	EXTRA_CFLAGS
553#
554#	Subst's the following vars:
555#		DL_LIBS
556#		CFLAGS_DEBUG
557#		CFLAGS_OPTIMIZE
558#--------------------------------------------------------------------
559
560AC_DEFUN(SC_CONFIG_CFLAGS, [
561
562    # Step 0: Enable 64 bit support?
563
564    AC_MSG_CHECKING([if 64bit support is enabled])
565    AC_ARG_ENABLE(64bit,[  --enable-64bit          enable 64bit support],,enableval="no")
566
567    if test "$enableval" = "yes"; then
568	AC_MSG_RESULT(Will compile with 64bit support)
569	do64bit=yes
570    else
571	do64bit=no
572    fi
573    AC_MSG_RESULT($do64bit)
574
575    # Step 1: set the variable "system" to hold the name and version number
576    # for the system.  This can usually be done via the "uname" command, but
577    # there are a few systems, like Next, where this doesn't work.
578
579    AC_MSG_CHECKING([system version (for dynamic loading)])
580    if test -f /usr/lib/NextStep/software_version; then
581	system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version`
582    else
583	system=`uname -s`-`uname -r`
584	if test "$?" -ne 0 ; then
585	    AC_MSG_RESULT([unknown (can't find uname command)])
586	    system=unknown
587	else
588	    # Special check for weird MP-RAS system (uname returns weird
589	    # results, and the version is kept in special file).
590
591	    if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then
592		system=MP-RAS-`awk '{print $3}' /etc/.relid'`
593	    fi
594	    if test "`uname -s`" = "AIX" ; then
595		system=AIX-`uname -v`.`uname -r`
596	    fi
597	    AC_MSG_RESULT($system)
598	fi
599    fi
600
601    # Step 2: check for existence of -ldl library.  This is needed because
602    # Linux can use either -ldl or -ldld for dynamic loading.
603
604    AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no)
605
606    # Step 3: set configuration options based on system name and version.
607
608    do64bit_ok=no
609    fullSrcDir=`cd $srcdir; pwd`
610    EXTRA_CFLAGS=""
611    TCL_EXPORT_FILE_SUFFIX=""
612    UNSHARED_LIB_SUFFIX=""
613    TCL_TRIM_DOTS='`echo ${VERSION} | tr -d .`'
614    ECHO_VERSION='`echo ${VERSION}`'
615    TCL_LIB_VERSIONS_OK=ok
616    CFLAGS_DEBUG=-g
617    CFLAGS_OPTIMIZE=-O
618    TCL_NEEDS_EXP_FILE=0
619    TCL_BUILD_EXP_FILE=""
620    TCL_EXP_FILE=""
621    STLIB_LD="ar cr"
622    case $system in
623	AIX-4.[[2-9]])
624	    SHLIB_CFLAGS=""
625	    SHLIB_LD="$fullSrcDir/ldAix /bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry"
626	    SHLIB_LD_LIBS='${LIBS}'
627	    SHLIB_SUFFIX=".so"
628	    DL_OBJS="tclLoadDl.o"
629	    DL_LIBS="-ldl"
630	    LDFLAGS=""
631	    LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
632	    TCL_NEEDS_EXP_FILE=1
633	    TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp'
634	    ;;
635	AIX-*)
636	    SHLIB_CFLAGS=""
637	    SHLIB_LD="$fullSrcDir/ldAix /bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512"
638	    SHLIB_LD_LIBS='${LIBS}'
639	    SHLIB_SUFFIX=".so"
640	    DL_OBJS="tclLoadDl.o"
641	    LIBOBJS="$LIBOBJS tclLoadAix.o"
642	    DL_LIBS="-lld"
643	    LDFLAGS=""
644	    LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
645	    TCL_NEEDS_EXP_FILE=1
646	    TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp'
647	    ;;
648	BSD/OS-2.1*|BSD/OS-3*)
649	    SHLIB_CFLAGS=""
650	    SHLIB_LD="shlicc -r"
651	    SHLIB_LD_LIBS='${LIBS}'
652	    SHLIB_SUFFIX=".so"
653	    DL_OBJS="tclLoadDl.o"
654	    DL_LIBS="-ldl"
655	    LDFLAGS=""
656	    LD_SEARCH_FLAGS=""
657	    ;;
658	BSD/OS-4.*)
659	    SHLIB_CFLAGS="-export-dynamic -fPIC"
660	    SHLIB_LD="cc -shared"
661	    SHLIB_LD_LIBS='${LIBS}'
662	    SHLIB_SUFFIX=".so"
663	    DL_OBJS="tclLoadDl.o"
664	    DL_LIBS="-ldl"
665	    LDFLAGS="-export-dynamic"
666	    LD_SEARCH_FLAGS=""
667	    ;;
668	*win32*|*WIN32*|CYGWIN_NT*|cygwin_nt*|*CYGWIN_98*|*CYGWIN_95*)
669	    CFLAGS_DEBUG="-nologo -Z7 -Od -WX ${runtime}d"
670	    CFLAGS_OPTIMIZE="-nologo -Oti -Gs -GD ${runtime}"
671	    LDFLAGS_CONSOLE="-subsystem:console"
672	    LDFLAGS_WINDOW="-subsystem:windows"
673	    LDFLAGS_DEBUG="-debug:full -debugtype:cv"
674	    LDFLAGS_OPTIMIZE="-release"
675	    EXTRA_CFLAGS="-YX"
676	    PATHTYPE=-w
677	    STLIB_LD="lib -nologo"
678	    SHLIB_LD="link -dll -nologo"
679	    SHLIB_LD_LIBS="user32.lib advapi32.lib"
680	    RC="rc"
681	    ;;
682	dgux*)
683	    SHLIB_CFLAGS="-K PIC"
684	    SHLIB_LD="cc -G"
685	    SHLIB_LD_LIBS=""
686	    SHLIB_SUFFIX=".so"
687	    DL_OBJS="tclLoadDl.o"
688	    DL_LIBS="-ldl"
689	    LDFLAGS=""
690	    LD_SEARCH_FLAGS=""
691	    ;;
692	HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*|HP-UX-*.11.*)
693	    SHLIB_SUFFIX=".sl"
694	    AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no)
695	    if test "$tcl_ok" = yes; then
696		SHLIB_CFLAGS="+z"
697		SHLIB_LD="ld -b"
698		SHLIB_LD_LIBS=""
699		DL_OBJS="tclLoadShl.o"
700		DL_LIBS="-ldld"
701		LDFLAGS="-Wl,-E"
702		LD_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.'
703	    fi
704	    ;;
705	IRIX-4.*)
706	    SHLIB_CFLAGS="-G 0"
707	    SHLIB_SUFFIX=".a"
708	    SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
709	    SHLIB_LD_LIBS='${LIBS}'
710	    DL_OBJS="tclLoadAout.o"
711	    DL_LIBS=""
712	    LDFLAGS="-Wl,-D,08000000"
713	    LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
714	    SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
715	    ;;
716	IRIX-5.*|IRIX-6.*|IRIX64-6.5*)
717	    SHLIB_CFLAGS=""
718	    SHLIB_LD="ld -n32 -shared -rdata_shared"
719	    SHLIB_LD_LIBS=""
720	    SHLIB_SUFFIX=".so"
721	    DL_OBJS="tclLoadDl.o"
722	    DL_LIBS=""
723	    LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
724	    if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then
725		EXTRA_CFLAGS="-mabi=n32"
726		LDFLAGS="-mabi=n32"
727	    else
728		case $system in
729		    IRIX-6.3)
730			# Use to build 6.2 compatible binaries on 6.3.
731			EXTRA_CFLAGS="-n32 -D_OLD_TERMIOS"
732			;;
733		    *)
734			EXTRA_CFLAGS="-n32"
735			;;
736		esac
737		LDFLAGS="-n32"
738	    fi
739	    ;;
740	IRIX64-6.*)
741	    SHLIB_CFLAGS=""
742	    SHLIB_LD="ld -32 -shared -rdata_shared"
743	    SHLIB_LD_LIBS='${LIBS}'
744	    SHLIB_SUFFIX=".so"
745	    DL_OBJS="tclLoadDl.o"
746	    DL_LIBS=""
747	    LDFLAGS=""
748	    LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
749	    ;;
750	Linux*)
751	    SHLIB_CFLAGS="-fPIC"
752	    SHLIB_LD_LIBS='${LIBS}'
753	    SHLIB_SUFFIX=".so"
754
755	    # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings
756	    # when you inline the string and math operations.  Turn this off to
757	    # get rid of the warnings.
758
759	    CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES"
760
761	    if test "$have_dl" = yes; then
762		SHLIB_LD="${CC} -shared"
763		DL_OBJS="tclLoadDl.o"
764		DL_LIBS="-ldl"
765		LDFLAGS="-rdynamic"
766		LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
767	    else
768		AC_CHECK_HEADER(dld.h, [
769		    SHLIB_LD="ld -shared"
770		    DL_OBJS="tclLoadDld.o"
771		    DL_LIBS="-ldld"
772		    LDFLAGS=""
773		    LD_SEARCH_FLAGS=""])
774	    fi
775	    if test "`uname -m`" = "alpha" ; then
776		EXTRA_CFLAGS="-mieee"
777	    fi
778	    ;;
779	MP-RAS-02*)
780	    SHLIB_CFLAGS="-K PIC"
781	    SHLIB_LD="cc -G"
782	    SHLIB_LD_LIBS=""
783	    SHLIB_SUFFIX=".so"
784	    DL_OBJS="tclLoadDl.o"
785	    DL_LIBS="-ldl"
786	    LDFLAGS=""
787	    LD_SEARCH_FLAGS=""
788	    ;;
789	MP-RAS-*)
790	    SHLIB_CFLAGS="-K PIC"
791	    SHLIB_LD="cc -G"
792	    SHLIB_LD_LIBS=""
793	    SHLIB_SUFFIX=".so"
794	    DL_OBJS="tclLoadDl.o"
795	    DL_LIBS="-ldl"
796	    LDFLAGS="-Wl,-Bexport"
797	    LD_SEARCH_FLAGS=""
798	    ;;
799	NetBSD-*|FreeBSD-[[12]].*|OpenBSD-*)
800	    # Not available on all versions:  check for include file.
801	    AC_CHECK_HEADER(dlfcn.h, [
802		SHLIB_CFLAGS="-fpic"
803		SHLIB_LD="ld -Bshareable -x"
804		SHLIB_LD_LIBS=""
805		SHLIB_SUFFIX=".so"
806		DL_OBJS="tclLoadDl.o"
807		DL_LIBS=""
808		LDFLAGS=""
809		LD_SEARCH_FLAGS=""
810		SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
811	    ], [
812		SHLIB_CFLAGS=""
813		SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r"
814		SHLIB_LD_LIBS='${LIBS}'
815		SHLIB_SUFFIX=".a"
816		DL_OBJS="tclLoadAout.o"
817		DL_LIBS=""
818		LDFLAGS=""
819		LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
820		SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
821	    ])
822
823	    # FreeBSD doesn't handle version numbers with dots.
824
825	    UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
826	    TCL_LIB_VERSIONS_OK=nodots
827	    ;;
828	FreeBSD-*)
829	    # FreeBSD 3.* and greater have ELF.
830	    SHLIB_CFLAGS="-fpic"
831	    SHLIB_LD="ld -Bshareable -x"
832	    SHLIB_LD_LIBS=""
833	    SHLIB_SUFFIX=".so"
834	    DL_OBJS="tclLoadDl.o"
835	    DL_LIBS=""
836	    LDFLAGS=""
837	    LD_SEARCH_FLAGS=""
838	    ;;
839	NEXTSTEP-*)
840	    SHLIB_CFLAGS=""
841	    SHLIB_LD="cc -nostdlib -r"
842	    SHLIB_LD_LIBS=""
843	    SHLIB_SUFFIX=".so"
844	    DL_OBJS="tclLoadNext.o"
845	    DL_LIBS=""
846	    LDFLAGS=""
847	    LD_SEARCH_FLAGS=""
848	    ;;
849	OS/390-*)
850	    CFLAGS_OPTIMIZE=""      # Optimizer is buggy
851	    AC_DEFINE(_OE_SOCKETS)  # needed in sys/socket.h
852	    ;;
853	OSF1-1.0|OSF1-1.1|OSF1-1.2)
854	    # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1
855	    SHLIB_CFLAGS=""
856	    # Hack: make package name same as library name
857	    SHLIB_LD='ld -R -export $@:'
858	    SHLIB_LD_LIBS=""
859	    SHLIB_SUFFIX=".so"
860	    DL_OBJS="tclLoadOSF.o"
861	    DL_LIBS=""
862	    LDFLAGS=""
863	    LD_SEARCH_FLAGS=""
864	    ;;
865	OSF1-1.*)
866	    # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2
867	    SHLIB_CFLAGS="-fpic"
868	    SHLIB_LD="ld -shared"
869	    SHLIB_LD_LIBS=""
870	    SHLIB_SUFFIX=".so"
871	    DL_OBJS="tclLoadDl.o"
872	    DL_LIBS=""
873	    LDFLAGS=""
874	    LD_SEARCH_FLAGS=""
875	    ;;
876	OSF1-V*)
877	    # Digital OSF/1
878	    SHLIB_CFLAGS=""
879	    SHLIB_LD='ld -shared -expect_unresolved "*"'
880	    SHLIB_LD_LIBS=""
881	    SHLIB_SUFFIX=".so"
882	    DL_OBJS="tclLoadDl.o"
883	    DL_LIBS=""
884	    LDFLAGS=""
885	    LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}'
886	    ;;
887	RISCos-*)
888	    SHLIB_CFLAGS="-G 0"
889	    SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
890	    SHLIB_LD_LIBS='${LIBS}'
891	    SHLIB_SUFFIX=".a"
892	    DL_OBJS="tclLoadAout.o"
893	    DL_LIBS=""
894	    LDFLAGS="-Wl,-D,08000000"
895	    LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
896	    ;;
897	SCO_SV-3.2*)
898	    # Note, dlopen is available only on SCO 3.2.5 and greater.  However,
899	    # this test works, since "uname -s" was non-standard in 3.2.4 and
900	    # below.
901	    SHLIB_CFLAGS="-Kpic -belf"
902	    SHLIB_LD="ld -G"
903	    SHLIB_LD_LIBS=""
904	    SHLIB_SUFFIX=".so"
905	    DL_OBJS="tclLoadDl.o"
906	    DL_LIBS=""
907	    LDFLAGS="-belf -Wl,-Bexport"
908	    LD_SEARCH_FLAGS=""
909	    ;;
910	SINIX*5.4*)
911	    SHLIB_CFLAGS="-K PIC"
912	    SHLIB_LD="cc -G"
913	    SHLIB_LD_LIBS=""
914	    SHLIB_SUFFIX=".so"
915	    DL_OBJS="tclLoadDl.o"
916	    DL_LIBS="-ldl"
917	    LDFLAGS=""
918	    LD_SEARCH_FLAGS=""
919	    ;;
920	SunOS-4*)
921	    SHLIB_CFLAGS="-PIC"
922	    SHLIB_LD="ld"
923	    SHLIB_LD_LIBS=""
924	    SHLIB_SUFFIX=".so"
925	    DL_OBJS="tclLoadDl.o"
926	    DL_LIBS="-ldl"
927	    LDFLAGS=""
928	    LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
929
930	    # SunOS can't handle version numbers with dots in them in library
931	    # specs, like -ltcl7.5, so use -ltcl75 instead.  Also, it
932	    # requires an extra version number at the end of .so file names.
933	    # So, the library has to have a name like libtcl75.so.1.0
934
935	    SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0'
936	    UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a'
937	    TCL_LIB_VERSIONS_OK=nodots
938	    ;;
939	SunOS-5.[[0-6]]*)
940	    SHLIB_CFLAGS="-KPIC"
941	    SHLIB_LD="/usr/ccs/bin/ld -G -z text"
942
943	    # Note: need the LIBS below, otherwise Tk won't find Tcl's
944	    # symbols when dynamically loaded into tclsh.
945
946	    SHLIB_LD_LIBS='${LIBS}'
947	    SHLIB_SUFFIX=".so"
948	    DL_OBJS="tclLoadDl.o"
949	    DL_LIBS="-ldl"
950	    LDFLAGS=""
951	    LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
952	    ;;
953	SunOS-5*)
954	    SHLIB_CFLAGS="-KPIC"
955	    SHLIB_LD="/usr/ccs/bin/ld -G -z text"
956	    LDFLAGS=""
957
958	    do64bit_ok=no
959	    if test "$do64bit" = "yes" ; then
960	    arch=`isainfo`
961	    if test "$arch" = "sparcv9 sparc" ; then
962		if test "$CC" != "gcc" -a `$CC -v 2>&1 | grep -c gcc` = "0" ; then
963		do64bit_ok=yes
964		EXTRA_CFLAGS="-xarch=v9"
965		LDFLAGS="-xarch=v9"
966		else
967		AC_MSG_WARN("64bit mode not supported using GCC on $system")
968		fi
969	    else
970		AC_MSG_WARN("64bit mode only supported sparcv9 system")
971	    fi
972	    fi
973
974	    # Note: need the LIBS below, otherwise Tk won't find Tcl's
975	    # symbols when dynamically loaded into tclsh.
976
977	    SHLIB_LD_LIBS='${LIBS}'
978	    SHLIB_SUFFIX=".so"
979	    DL_OBJS="tclLoadDl.o"
980	    DL_LIBS="-ldl"
981	    if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then
982		LD_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}'
983	    else
984		LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}'
985	    fi
986	    ;;
987	ULTRIX-4.*)
988	    SHLIB_CFLAGS="-G 0"
989	    SHLIB_SUFFIX=".a"
990	    SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0"
991	    SHLIB_LD_LIBS='${LIBS}'
992	    DL_OBJS="tclLoadAout.o"
993	    DL_LIBS=""
994	    LDFLAGS="-Wl,-D,08000000"
995	    LD_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}'
996	    ;;
997	UNIX_SV* | UnixWare-5*)
998	    SHLIB_CFLAGS="-KPIC"
999	    SHLIB_LD="cc -G"
1000	    SHLIB_LD_LIBS=""
1001	    SHLIB_SUFFIX=".so"
1002	    DL_OBJS="tclLoadDl.o"
1003	    DL_LIBS="-ldl"
1004	    # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers
1005	    # that don't grok the -Bexport option.  Test that it does.
1006	    hold_ldflags=$LDFLAGS
1007	    AC_MSG_CHECKING(for ld accepts -Bexport flag)
1008	    LDFLAGS="${LDFLAGS} -Wl,-Bexport"
1009	    AC_TRY_LINK(, [int i;], found=yes, found=no)
1010	    LDFLAGS=$hold_ldflags
1011	    AC_MSG_RESULT($found)
1012	    if test $found = yes; then
1013	    LDFLAGS="-Wl,-Bexport"
1014	    else
1015	    LDFLAGS=""
1016	    fi
1017	    LD_SEARCH_FLAGS=""
1018	    ;;
1019    esac
1020
1021    if test "$do64bit" = "yes" -a "$do64bit_ok" = "no" ; then
1022    AC_MSG_WARN("64bit support being disabled -- not supported on this platform")
1023    fi
1024
1025    # Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic
1026    # Loading for Tcl -- What Became of It?".  Proc. 2nd Tcl/Tk Workshop,
1027    # New Orleans, LA, Computerized Processes Unlimited, 1994), then we need
1028    # to determine which of several header files defines the a.out file
1029    # format (a.out.h, sys/exec.h, or sys/exec_aout.h).  At present, we
1030    # support only a file format that is more or less version-7-compatible.
1031    # In particular,
1032    #	- a.out files must begin with `struct exec'.
1033    #	- the N_TXTOFF on the `struct exec' must compute the seek address
1034    #	  of the text segment
1035    #	- The `struct exec' must contain a_magic, a_text, a_data, a_bss
1036    #	  and a_entry fields.
1037    # The following compilation should succeed if and only if either sys/exec.h
1038    # or a.out.h is usable for the purpose.
1039    #
1040    # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the
1041    # `struct exec' includes a second header that contains information that
1042    # duplicates the v7 fields that are needed.
1043
1044    if test "x$DL_OBJS" = "xtclLoadAout.o" ; then
1045	AC_MSG_CHECKING(sys/exec.h)
1046	AC_TRY_COMPILE([#include <sys/exec.h>],[
1047	    struct exec foo;
1048	    unsigned long seek;
1049	    int flag;
1050#if defined(__mips) || defined(mips)
1051	    seek = N_TXTOFF (foo.ex_f, foo.ex_o);
1052#else
1053	    seek = N_TXTOFF (foo);
1054#endif
1055	    flag = (foo.a_magic == OMAGIC);
1056	    return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
1057    ], tcl_ok=usable, tcl_ok=unusable)
1058	AC_MSG_RESULT($tcl_ok)
1059	if test $tcl_ok = usable; then
1060	    AC_DEFINE(USE_SYS_EXEC_H)
1061	else
1062	    AC_MSG_CHECKING(a.out.h)
1063	    AC_TRY_COMPILE([#include <a.out.h>],[
1064		struct exec foo;
1065		unsigned long seek;
1066		int flag;
1067#if defined(__mips) || defined(mips)
1068		seek = N_TXTOFF (foo.ex_f, foo.ex_o);
1069#else
1070		seek = N_TXTOFF (foo);
1071#endif
1072		flag = (foo.a_magic == OMAGIC);
1073		return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
1074	    ], tcl_ok=usable, tcl_ok=unusable)
1075	    AC_MSG_RESULT($tcl_ok)
1076	    if test $tcl_ok = usable; then
1077		AC_DEFINE(USE_A_OUT_H)
1078	    else
1079		AC_MSG_CHECKING(sys/exec_aout.h)
1080		AC_TRY_COMPILE([#include <sys/exec_aout.h>],[
1081		    struct exec foo;
1082		    unsigned long seek;
1083		    int flag;
1084#if defined(__mips) || defined(mips)
1085		    seek = N_TXTOFF (foo.ex_f, foo.ex_o);
1086#else
1087		    seek = N_TXTOFF (foo);
1088#endif
1089		    flag = (foo.a_midmag == OMAGIC);
1090		    return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry;
1091		], tcl_ok=usable, tcl_ok=unusable)
1092		AC_MSG_RESULT($tcl_ok)
1093		if test $tcl_ok = usable; then
1094		    AC_DEFINE(USE_SYS_EXEC_AOUT_H)
1095		else
1096		    DL_OBJS=""
1097		fi
1098	    fi
1099	fi
1100    fi
1101
1102    # Step 5: disable dynamic loading if requested via a command-line switch.
1103
1104    AC_ARG_ENABLE(load, [  --disable-load          disallow dynamic loading and "load" command],
1105	[tcl_ok=$enableval], [tcl_ok=yes])
1106    if test "$tcl_ok" = "no"; then
1107	DL_OBJS=""
1108    fi
1109
1110    if test "x$DL_OBJS" != "x" ; then
1111	BUILD_DLTEST="\$(DLTEST_TARGETS)"
1112    else
1113	echo "Can't figure out how to do dynamic loading or shared libraries"
1114	echo "on this system."
1115	SHLIB_CFLAGS=""
1116	SHLIB_LD=""
1117	SHLIB_SUFFIX=""
1118	DL_OBJS="tclLoadNone.o"
1119	DL_LIBS=""
1120	LDFLAGS=""
1121	LD_SEARCH_FLAGS=""
1122	BUILD_DLTEST=""
1123    fi
1124
1125    # If we're running gcc, then change the C flags for compiling shared
1126    # libraries to the right flags for gcc, instead of those for the
1127    # standard manufacturer compiler.
1128
1129    if test "$DL_OBJS" != "tclLoadNone.o" ; then
1130	if test "$CC" = "gcc" -o `$CC -v 2>&1 | grep -c gcc` != "0" ; then
1131	    case $system in
1132		AIX-*)
1133		    ;;
1134		BSD/OS*)
1135		    ;;
1136		IRIX*)
1137		    ;;
1138		NetBSD-*|FreeBSD-*|OpenBSD-*)
1139		    ;;
1140		RISCos-*)
1141		    ;;
1142		ULTRIX-4.*)
1143		    ;;
1144		*)
1145		    SHLIB_CFLAGS="-fPIC"
1146		    ;;
1147	    esac
1148	fi
1149    fi
1150
1151    if test "$SHARED_LIB_SUFFIX" = "" ; then
1152	SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}${SHLIB_SUFFIX}'
1153    fi
1154    if test "$UNSHARED_LIB_SUFFIX" = "" ; then
1155	UNSHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a'
1156    fi
1157
1158    AC_SUBST(STLIB_LD)
1159    AC_SUBST(SHLIB_LD)
1160    AC_SUBST(SHLIB_CFLAGS)
1161    AC_SUBST(SHLIB_LDFLAGS)
1162    AC_SUBST(DL_LIBS)
1163    AC_SUBST(CFLAGS_DEBUG)
1164    AC_SUBST(CFLAGS_OPTIMIZE)
1165    AC_SUBST(LDFLAGS_DEBUG)
1166    AC_SUBST(LDFLAGS_OPTIMIZE)
1167])
1168
1169#--------------------------------------------------------------------
1170# SC_SERIAL_PORT
1171#
1172#	Determine which interface to use to talk to the serial port.
1173#	Note that #include lines must begin in leftmost column for
1174#	some compilers to recognize them as preprocessor directives.
1175#
1176# Arguments:
1177#	none
1178#
1179# Results:
1180#
1181#	Defines only one of the following vars:
1182#		USE_TERMIOS
1183#		USE_TERMIO
1184#		USE_SGTTY
1185#
1186#--------------------------------------------------------------------
1187
1188AC_DEFUN(SC_SERIAL_PORT, [
1189    AC_MSG_CHECKING([termios vs. termio vs. sgtty])
1190
1191    AC_TRY_RUN([
1192#include <termios.h>
1193
1194main()
1195{
1196    struct termios t;
1197    if (tcgetattr(0, &t) == 0) {
1198	cfsetospeed(&t, 0);
1199	t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB;
1200	return 0;
1201    }
1202    return 1;
1203}], tk_ok=termios, tk_ok=no, tk_ok=no)
1204
1205    if test $tk_ok = termios; then
1206	AC_DEFINE(USE_TERMIOS)
1207    else
1208	AC_TRY_RUN([
1209#include <termio.h>
1210
1211main()
1212{
1213    struct termio t;
1214    if (ioctl(0, TCGETA, &t) == 0) {
1215	t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB;
1216	return 0;
1217    }
1218    return 1;
1219    }], tk_ok=termio, tk_ok=no, tk_ok=no)
1220
1221    if test $tk_ok = termio; then
1222	AC_DEFINE(USE_TERMIO)
1223    else
1224	AC_TRY_RUN([
1225#include <sgtty.h>
1226
1227main()
1228{
1229    struct sgttyb t;
1230    if (ioctl(0, TIOCGETP, &t) == 0) {
1231	t.sg_ospeed = 0;
1232	t.sg_flags |= ODDP | EVENP | RAW;
1233	return 0;
1234    }
1235    return 1;
1236}], tk_ok=sgtty, tk_ok=none, tk_ok=none)
1237    if test $tk_ok = sgtty; then
1238	AC_DEFINE(USE_SGTTY)
1239    fi
1240    fi
1241    fi
1242    AC_MSG_RESULT($tk_ok)
1243])
1244
1245#--------------------------------------------------------------------
1246# SC_MISSING_POSIX_HEADERS
1247#
1248#	Supply substitutes for missing POSIX header files.  Special
1249#	notes:
1250#	    - stdlib.h doesn't define strtol, strtoul, or
1251#	      strtod insome versions of SunOS
1252#	    - some versions of string.h don't declare procedures such
1253#	      as strstr
1254#
1255# Arguments:
1256#	none
1257#
1258# Results:
1259#
1260#	Defines some of the following vars:
1261#		NO_DIRENT_H
1262#		NO_ERRNO_H
1263#		NO_VALUES_H
1264#		NO_LIMITS_H
1265#		NO_STDLIB_H
1266#		NO_STRING_H
1267#		NO_SYS_WAIT_H
1268#		NO_DLFCN_H
1269#		HAVE_UNISTD_H
1270#		HAVE_SYS_PARAM_H
1271#
1272#		HAVE_STRING_H ?
1273#
1274#--------------------------------------------------------------------
1275
1276AC_DEFUN(SC_MISSING_POSIX_HEADERS, [
1277
1278    AC_MSG_CHECKING(dirent.h)
1279    AC_TRY_LINK([#include <sys/types.h>
1280#include <dirent.h>], [
1281#ifndef _POSIX_SOURCE
1282#   ifdef __Lynx__
1283	/*
1284	 * Generate compilation error to make the test fail:  Lynx headers
1285	 * are only valid if really in the POSIX environment.
1286	 */
1287
1288	missing_procedure();
1289#   endif
1290#endif
1291DIR *d;
1292struct dirent *entryPtr;
1293char *p;
1294d = opendir("foobar");
1295entryPtr = readdir(d);
1296p = entryPtr->d_name;
1297closedir(d);
1298], tcl_ok=yes, tcl_ok=no)
1299
1300    if test $tcl_ok = no; then
1301	AC_DEFINE(NO_DIRENT_H)
1302    fi
1303
1304    AC_MSG_RESULT($tcl_ok)
1305    AC_CHECK_HEADER(errno.h, , AC_DEFINE(NO_ERRNO_H))
1306    AC_CHECK_HEADER(float.h, , AC_DEFINE(NO_FLOAT_H))
1307    AC_CHECK_HEADER(values.h, , AC_DEFINE(NO_VALUES_H))
1308    AC_CHECK_HEADER(limits.h, , AC_DEFINE(NO_LIMITS_H))
1309    AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0)
1310    AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0)
1311    AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0)
1312    AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0)
1313    if test $tcl_ok = 0; then
1314	AC_DEFINE(NO_STDLIB_H)
1315    fi
1316    AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0)
1317    AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0)
1318    AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0)
1319
1320    # See also memmove check below for a place where NO_STRING_H can be
1321    # set and why.
1322
1323    if test $tcl_ok = 0; then
1324	AC_DEFINE(NO_STRING_H)
1325    fi
1326
1327    AC_CHECK_HEADER(sys/wait.h, , AC_DEFINE(NO_SYS_WAIT_H))
1328    AC_CHECK_HEADER(dlfcn.h, , AC_DEFINE(NO_DLFCN_H))
1329
1330    # OS/390 lacks sys/param.h (and doesn't need it, by chance).
1331
1332    AC_HAVE_HEADERS(unistd.h sys/param.h)
1333
1334])
1335
1336#--------------------------------------------------------------------
1337# SC_PATH_X
1338#
1339#	Locate the X11 header files and the X11 library archive.  Try
1340#	the ac_path_x macro first, but if it doesn't find the X stuff
1341#	(e.g. because there's no xmkmf program) then check through
1342#	a list of possible directories.  Under some conditions the
1343#	autoconf macro will return an include directory that contains
1344#	no include files, so double-check its result just to be safe.
1345#
1346# Arguments:
1347#	none
1348#
1349# Results:
1350#
1351#	Sets the the following vars:
1352#		XINCLUDES
1353#		XLIBSW
1354#
1355#--------------------------------------------------------------------
1356
1357AC_DEFUN(SC_PATH_X, [
1358    AC_PATH_X
1359    not_really_there=""
1360    if test "$no_x" = ""; then
1361	if test "$x_includes" = ""; then
1362	    AC_TRY_CPP([#include <X11/XIntrinsic.h>], , not_really_there="yes")
1363	else
1364	    if test ! -r $x_includes/X11/Intrinsic.h; then
1365		not_really_there="yes"
1366	    fi
1367	fi
1368    fi
1369    if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then
1370	AC_MSG_CHECKING(for X11 header files)
1371	XINCLUDES="# no special path needed"
1372	AC_TRY_CPP([#include <X11/Intrinsic.h>], , XINCLUDES="nope")
1373	if test "$XINCLUDES" = nope; then
1374	    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"
1375	    for i in $dirs ; do
1376		if test -r $i/X11/Intrinsic.h; then
1377		    AC_MSG_RESULT($i)
1378		    XINCLUDES=" -I$i"
1379		    break
1380		fi
1381	    done
1382	fi
1383    else
1384	if test "$x_includes" != ""; then
1385	    XINCLUDES=-I$x_includes
1386	else
1387	    XINCLUDES="# no special path needed"
1388	fi
1389    fi
1390    if test "$XINCLUDES" = nope; then
1391	AC_MSG_RESULT(couldn't find any!)
1392	XINCLUDES="# no include files found"
1393    fi
1394
1395    if test "$no_x" = yes; then
1396	AC_MSG_CHECKING(for X11 libraries)
1397	XLIBSW=nope
1398	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"
1399	for i in $dirs ; do
1400	    if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl; then
1401		AC_MSG_RESULT($i)
1402		XLIBSW="-L$i -lX11"
1403		x_libraries="$i"
1404		break
1405	    fi
1406	done
1407    else
1408	if test "$x_libraries" = ""; then
1409	    XLIBSW=-lX11
1410	else
1411	    XLIBSW="-L$x_libraries -lX11"
1412	fi
1413    fi
1414    if test "$XLIBSW" = nope ; then
1415	AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow)
1416    fi
1417    if test "$XLIBSW" = nope ; then
1418	AC_MSG_RESULT(couldn't find any!  Using -lX11.)
1419	XLIBSW=-lX11
1420    fi
1421])
1422#--------------------------------------------------------------------
1423# SC_BLOCKING_STYLE
1424#
1425#	The statements below check for systems where POSIX-style
1426#	non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented.
1427#	On these systems (mostly older ones), use the old BSD-style
1428#	FIONBIO approach instead.
1429#
1430# Arguments:
1431#	none
1432#
1433# Results:
1434#
1435#	Defines some of the following vars:
1436#		HAVE_SYS_IOCTL_H
1437#		HAVE_SYS_FILIO_H
1438#		USE_FIONBIO
1439#		O_NONBLOCK
1440#
1441#--------------------------------------------------------------------
1442
1443AC_DEFUN(SC_BLOCKING_STYLE, [
1444    AC_CHECK_HEADERS(sys/ioctl.h)
1445    AC_CHECK_HEADERS(sys/filio.h)
1446    AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O])
1447    if test -f /usr/lib/NextStep/software_version; then
1448	system=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version`
1449    else
1450	system=`uname -s`-`uname -r`
1451	if test "$?" -ne 0 ; then
1452	    system=unknown
1453	else
1454	    # Special check for weird MP-RAS system (uname returns weird
1455	    # results, and the version is kept in special file).
1456
1457	    if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then
1458		system=MP-RAS-`awk '{print $3}' /etc/.relid'`
1459	    fi
1460	    if test "`uname -s`" = "AIX" ; then
1461		system=AIX-`uname -v`.`uname -r`
1462	    fi
1463	fi
1464    fi
1465    case $system in
1466	# There used to be code here to use FIONBIO under AIX.  However, it
1467	# was reported that FIONBIO doesn't work under AIX 3.2.5.  Since
1468	# using O_NONBLOCK seems fine under AIX 4.*, I removed the FIONBIO
1469	# code (JO, 5/31/97).
1470
1471	OSF*)
1472	    AC_DEFINE(USE_FIONBIO)
1473	    AC_MSG_RESULT(FIONBIO)
1474	    ;;
1475	SunOS-4*)
1476	    AC_DEFINE(USE_FIONBIO)
1477	    AC_MSG_RESULT(FIONBIO)
1478	    ;;
1479	ULTRIX-4.*)
1480	    AC_DEFINE(USE_FIONBIO)
1481	    AC_MSG_RESULT(FIONBIO)
1482	    ;;
1483	*)
1484	    AC_MSG_RESULT(O_NONBLOCK)
1485	    ;;
1486    esac
1487])
1488
1489#--------------------------------------------------------------------
1490# SC_HAVE_VFORK
1491#
1492#	Check to see whether the system provides a vfork kernel call.
1493#	If not, then use fork instead.  Also, check for a problem with
1494#	vforks and signals that can cause core dumps if a vforked child
1495#	resets a signal handler.  If the problem exists, then use fork
1496#	instead of vfork.
1497#
1498# Arguments:
1499#	none
1500#
1501# Results:
1502#
1503#	Defines some of the following vars:
1504#		vfork (=fork)
1505#
1506#--------------------------------------------------------------------
1507
1508AC_DEFUN(SC_HAVE_VFORK, [
1509    AC_TYPE_SIGNAL()
1510    AC_CHECK_FUNC(vfork, tcl_ok=1, tcl_ok=0)
1511    if test "$tcl_ok" = 1; then
1512	AC_MSG_CHECKING([vfork/signal bug]);
1513	AC_TRY_RUN([
1514#include <stdio.h>
1515#include <signal.h>
1516#include <sys/wait.h>
1517int gotSignal = 0;
1518sigProc(sig)
1519    int sig;
1520{
1521    gotSignal = 1;
1522}
1523main()
1524{
1525    int pid, sts;
1526    (void) signal(SIGCHLD, sigProc);
1527    pid = vfork();
1528    if (pid <  0) {
1529	exit(1);
1530    } else if (pid == 0) {
1531	(void) signal(SIGCHLD, SIG_DFL);
1532	_exit(0);
1533    } else {
1534	(void) wait(&sts);
1535    }
1536    exit((gotSignal) ? 0 : 1);
1537}], tcl_ok=1, tcl_ok=0, tcl_ok=0)
1538
1539	if test "$tcl_ok" = 1; then
1540	    AC_MSG_RESULT(ok)
1541	else
1542	    AC_MSG_RESULT([buggy, using fork instead])
1543	fi
1544    fi
1545    rm -f core
1546    if test "$tcl_ok" = 0; then
1547	AC_DEFINE(vfork, fork)
1548    fi
1549])
1550
1551#--------------------------------------------------------------------
1552# SC_TIME_HANLDER
1553#
1554#	Checks how the system deals with time.h, what time structures
1555#	are used on the system, and what fields the structures have.
1556#
1557# Arguments:
1558#	none
1559#
1560# Results:
1561#
1562#	Defines some of the following vars:
1563#		USE_DELTA_FOR_TZ
1564#		HAVE_TM_GMTOFF
1565#		HAVE_TM_TZADJ
1566#		HAVE_TIMEZONE_VAR
1567#
1568#--------------------------------------------------------------------
1569
1570AC_DEFUN(SC_TIME_HANDLER, [
1571    AC_CHECK_HEADERS(sys/time.h)
1572    AC_HEADER_TIME
1573    AC_STRUCT_TIMEZONE
1574
1575    AC_MSG_CHECKING([tm_tzadj in struct tm])
1576    AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_tzadj;],
1577	    [AC_DEFINE(HAVE_TM_TZADJ)
1578	    AC_MSG_RESULT(yes)],
1579	    AC_MSG_RESULT(no))
1580
1581    AC_MSG_CHECKING([tm_gmtoff in struct tm])
1582    AC_TRY_COMPILE([#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
1583	    [AC_DEFINE(HAVE_TM_GMTOFF)
1584	    AC_MSG_RESULT(yes)],
1585	    AC_MSG_RESULT(no))
1586
1587    #
1588    # Its important to include time.h in this check, as some systems
1589    # (like convex) have timezone functions, etc.
1590    #
1591    have_timezone=no
1592    AC_MSG_CHECKING([long timezone variable])
1593    AC_TRY_COMPILE([#include <time.h>],
1594	    [extern long timezone;
1595	    timezone += 1;
1596	    exit (0);],
1597	    [have_timezone=yes
1598	    AC_DEFINE(HAVE_TIMEZONE_VAR)
1599	    AC_MSG_RESULT(yes)],
1600	    AC_MSG_RESULT(no))
1601
1602    #
1603    # On some systems (eg IRIX 6.2), timezone is a time_t and not a long.
1604    #
1605    if test "$have_timezone" = no; then
1606    AC_MSG_CHECKING([time_t timezone variable])
1607    AC_TRY_COMPILE([#include <time.h>],
1608	    [extern time_t timezone;
1609	    timezone += 1;
1610	    exit (0);],
1611	    [AC_DEFINE(HAVE_TIMEZONE_VAR)
1612	    AC_MSG_RESULT(yes)],
1613	    AC_MSG_RESULT(no))
1614    fi
1615
1616    #
1617    # AIX does not have a timezone field in struct tm. When the AIX bsd
1618    # library is used, the timezone global and the gettimeofday methods are
1619    # to be avoided for timezone deduction instead, we deduce the timezone
1620    # by comparing the localtime result on a known GMT value.
1621    #
1622
1623    if test "`uname -s`" = "AIX" ; then
1624	AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes)
1625	if test $libbsd = yes; then
1626	    AC_DEFINE(USE_DELTA_FOR_TZ)
1627	fi
1628    fi
1629])
1630
1631#--------------------------------------------------------------------
1632# SC_BUGGY_STRTOD
1633#
1634#	Under Solaris 2.4, strtod returns the wrong value for the
1635#	terminating character under some conditions.  Check for this
1636#	and if the problem exists use a substitute procedure
1637#	"fixstrtod" (provided by Tcl) that corrects the error.
1638#
1639# Arguments:
1640#	none
1641#
1642# Results:
1643#
1644#	Might defines some of the following vars:
1645#		strtod (=fixstrtod)
1646#
1647#--------------------------------------------------------------------
1648
1649AC_DEFUN(SC_BUGGY_STRTOD, [
1650    AC_CHECK_FUNC(strtod, tk_strtod=1, tk_strtod=0)
1651    if test "$tk_strtod" = 1; then
1652	AC_MSG_CHECKING([for Solaris 2.4 strtod bug])
1653	AC_TRY_RUN([
1654	    extern double strtod();
1655	    int main()
1656	    {
1657		char *string = "NaN";
1658		char *term;
1659		strtod(string, &term);
1660		if ((term != string) && (term[-1] == 0)) {
1661		    exit(1);
1662		}
1663		exit(0);
1664	    }], tk_ok=1, tk_ok=0, tk_ok=0)
1665	if test "$tk_ok" = 1; then
1666	    AC_MSG_RESULT(ok)
1667	else
1668	    AC_MSG_RESULT(buggy)
1669	    AC_DEFINE(strtod, fixstrtod)
1670	fi
1671    fi
1672])
1673
1674#--------------------------------------------------------------------
1675# SC_TCL_LINK_LIBS
1676#
1677#	Search for the libraries needed to link the Tcl shell.
1678#	Things like the math library (-lm) and socket stuff (-lsocket vs.
1679#	-lnsl) are dealt with here.
1680#
1681# Arguments:
1682#	Requires the following vars to be set in the Makefile:
1683#		DL_LIBS
1684#		LIBS
1685#		MATH_LIBS
1686#
1687# Results:
1688#
1689#	Subst's the following var:
1690#		TCL_LIBS
1691#		MATH_LIBS
1692#
1693#	Might append to the following vars:
1694#		LIBS
1695#
1696#	Might define the following vars:
1697#		HAVE_NET_ERRNO_H
1698#
1699#--------------------------------------------------------------------
1700
1701AC_DEFUN(SC_TCL_LINK_LIBS, [
1702    #--------------------------------------------------------------------
1703    # On a few very rare systems, all of the libm.a stuff is
1704    # already in libc.a.  Set compiler flags accordingly.
1705    # Also, Linux requires the "ieee" library for math to work
1706    # right (and it must appear before "-lm").
1707    #--------------------------------------------------------------------
1708
1709    AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm")
1710    AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"])
1711
1712    #--------------------------------------------------------------------
1713    # On AIX systems, libbsd.a has to be linked in to support
1714    # non-blocking file IO.  This library has to be linked in after
1715    # the MATH_LIBS or it breaks the pow() function.  The way to
1716    # insure proper sequencing, is to add it to the tail of MATH_LIBS.
1717    # This library also supplies gettimeofday.
1718    #--------------------------------------------------------------------
1719
1720    libbsd=no
1721    if test "`uname -s`" = "AIX" ; then
1722	AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes)
1723	if test $libbsd = yes; then
1724	    MATH_LIBS="$MATH_LIBS -lbsd"
1725	fi
1726    fi
1727
1728
1729    #--------------------------------------------------------------------
1730    # Interactive UNIX requires -linet instead of -lsocket, plus it
1731    # needs net/errno.h to define the socket-related error codes.
1732    #--------------------------------------------------------------------
1733
1734    AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"])
1735    AC_CHECK_HEADER(net/errno.h, AC_DEFINE(HAVE_NET_ERRNO_H))
1736
1737    #--------------------------------------------------------------------
1738    #	Check for the existence of the -lsocket and -lnsl libraries.
1739    #	The order here is important, so that they end up in the right
1740    #	order in the command line generated by make.  Here are some
1741    #	special considerations:
1742    #	1. Use "connect" and "accept" to check for -lsocket, and
1743    #	   "gethostbyname" to check for -lnsl.
1744    #	2. Use each function name only once:  can't redo a check because
1745    #	   autoconf caches the results of the last check and won't redo it.
1746    #	3. Use -lnsl and -lsocket only if they supply procedures that
1747    #	   aren't already present in the normal libraries.  This is because
1748    #	   IRIX 5.2 has libraries, but they aren't needed and they're
1749    #	   bogus:  they goof up name resolution if used.
1750    #	4. On some SVR4 systems, can't use -lsocket without -lnsl too.
1751    #	   To get around this problem, check for both libraries together
1752    #	   if -lsocket doesn't work by itself.
1753    #--------------------------------------------------------------------
1754
1755    tcl_checkBoth=0
1756    AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1)
1757    if test "$tcl_checkSocket" = 1; then
1758	AC_CHECK_LIB(socket, main, LIBS="$LIBS -lsocket", tcl_checkBoth=1)
1759    fi
1760    if test "$tcl_checkBoth" = 1; then
1761	tk_oldLibs=$LIBS
1762	LIBS="$LIBS -lsocket -lnsl"
1763	AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs])
1764    fi
1765    AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, main,
1766	    [LIBS="$LIBS -lnsl"]))
1767
1768    # Don't perform the eval of the libraries here because DL_LIBS
1769    # won't be set until we call SC_CONFIG_CFLAGS
1770
1771    TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}'
1772    AC_SUBST(TCL_LIBS)
1773    AC_SUBST(MATH_LIBS)
1774])
1775
1776#------------------------------------------------------------------------
1777# SC_MAKE_LIB --
1778#
1779#	Generate a line that can be used to build a shared/unshared library
1780#	in a platform independent manner.
1781#
1782# Arguments:
1783#	none
1784#
1785#	Requires:
1786#
1787# Results:
1788#
1789#	Defines the following vars:
1790#		MAKE_LIB	Makefile rule for building a library
1791#		MAKE_SHARED_LIB	Makefile rule for building a shared library
1792#		MAKE_UNSHARED_LIB	Makefile rule for building a static
1793#				library
1794#------------------------------------------------------------------------
1795
1796AC_DEFUN(SC_MAKE_LIB, [
1797    case "`uname -s`" in
1798	*win32* | *WIN32* | *CYGWIN_NT* |*CYGWIN_98*|*CYGWIN_95*)
1799	    if test "${CC-cc}" = "cl"; then
1800		MAKE_STATIC_LIB="\${STLIB_LD} -out:\[$]@ \$(\[$]@_OBJECTS) "
1801		MAKE_SHARED_LIB="\${SHLIB_LD} \${SHLIB_LDFLAGS} \${SHLIB_LD_LIBS} \$(LDFLAGS) -out:\[$]@ \$(\[$]@_OBJECTS) "
1802	    fi
1803	    ;;
1804	*)
1805	    MAKE_STATIC_LIB="\${STLIB_LD} \[$]@ \$(\[$]@_OBJECTS)"
1806	    MAKE_SHARED_LIB="\${SHLIB_LD} -o \[$]@ \$(\[$]@_OBJECTS) \${SHLIB_LDFLAGS} \${SHLIB_LD_LIBS}"
1807	    ;;
1808    esac
1809
1810    if test "${SHARED_BUILD}" = "1" ; then
1811	MAKE_LIB=${MAKE_SHARED_LIB}
1812    else
1813	MAKE_LIB=${MAKE_STATIC_LIB}
1814    fi
1815
1816    AC_SUBST(MAKE_LIB)
1817    AC_SUBST(MAKE_SHARED_LIB)
1818    AC_SUBST(MAKE_STATIC_LIB)
1819])
1820
1821#------------------------------------------------------------------------
1822# SC_LIB_SPEC --
1823#
1824#	Compute the name of an existing object library located in libdir
1825#	from the given base name and produce the appropriate linker flags.
1826#
1827# Arguments:
1828#	basename	The base name of the library without version
1829#			numbers, extensions, or "lib" prefixes.
1830#	extra_dir	Extra directory in which to search for the
1831#			library.  This location is used first, then
1832#			$prefix/$exec-prefix, then some defaults.
1833#
1834# Requires:
1835#	CYGPATH		command used to generate native style paths
1836#
1837# Results:
1838#
1839#	Defines the following vars:
1840#		${basename}_LIB_NAME	The computed library name.
1841#		${basename}_LIB_SPEC	The computed linker flags.
1842#------------------------------------------------------------------------
1843
1844AC_DEFUN(SC_LIB_SPEC, [
1845    AC_MSG_CHECKING(for $1 library)
1846
1847    # Look in exec-prefix and prefix for the library.  If neither of
1848    # these were specified, look in libdir.  It doesn't matter if libdir
1849    # wasn't specified since a search in the unspecified directory will
1850    # fail (NONE/lib)
1851
1852    if test x"${exec_prefix}" != x"NONE" ; then
1853	sc_lib_name_dir="${exec_prefix}/lib"
1854    elif test x"${prefix}" != "NONE" ; then
1855	sc_lib_name_dir="${prefix}/lib"
1856    else
1857	eval "sc_lib_name_dir=${libdir}"
1858    fi
1859
1860    if test x"$2" != x ; then
1861	sc_extra_lib_dir=$2
1862    else
1863	sc_extra_lib_dir=NONE
1864    fi
1865
1866    for i in \
1867	    `ls -dr ${sc_extra_lib_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
1868	    `ls -dr ${sc_extra_lib_dir}/$1.lib 2>/dev/null ` \
1869	    `ls -dr ${sc_extra_lib_dir}/lib$1[[0-9]]* 2>/dev/null ` \
1870	    `ls -dr ${sc_extra_lib_dir}/lib$1.* 2>/dev/null ` \
1871	    `ls -dr ${sc_lib_name_dir}/$1[[0-9]]*.lib 2>/dev/null ` \
1872	    `ls -dr ${sc_lib_name_dir}/$1.lib 2>/dev/null ` \
1873	    `ls -dr ${sc_lib_name_dir}/lib$1[[0-9]]* 2>/dev/null ` \
1874	    `ls -dr ${sc_lib_name_dir}/lib$1.* 2>/dev/null ` \
1875	    `ls -dr /usr/lib/$1[[0-9]]*.lib 2>/dev/null ` \
1876	    `ls -dr /usr/lib/$1.lib 2>/dev/null ` \
1877	    `ls -dr /usr/lib/lib$1[[0-9]]* 2>/dev/null ` \
1878	    `ls -dr /usr/lib/lib$1.* 2>/dev/null ` \
1879	    `ls -dr /usr/local/lib/$1[[0-9]]*.lib 2>/dev/null ` \
1880	    `ls -dr /usr/local/lib/$1.lib 2>/dev/null ` \
1881	    `ls -dr /usr/local/lib/lib$1[[0-9]]* 2>/dev/null ` \
1882	    `ls -dr /usr/local/lib/lib$1.* 2>/dev/null ` ; do
1883	if test -f "$i" ; then
1884
1885	    sc_lib_name_dir=`dirname $i`
1886	    $1_LIB_NAME=`basename $i`
1887	    $1_LIB_PATH_NAME=$i
1888	    break
1889	fi
1890    done
1891
1892    case "`uname -s`" in
1893	*win32* | *WIN32* | *CYGWIN_NT* |*CYGWIN_98*|*CYGWIN_95*)
1894	    $1_LIB_SPEC=\"`${CYGPATH} ${$1_LIB_PATH_NAME}`\"
1895	    ;;
1896	*)
1897	    # Strip off the leading "lib" and trailing ".a" or ".so"
1898
1899	    sc_lib_name_lib=`echo ${$1_LIB_NAME}|sed -e 's/^lib//' -e 's/\.[[^.]]*$//' -e 's/\.so.*//'`
1900	    $1_LIB_SPEC="-L${sc_lib_name_dir} -l${sc_lib_name_lib}"
1901	    ;;
1902    esac
1903
1904    if test "x${$1_LIB_NAME}" = x ; then
1905	AC_MSG_ERROR(not found)
1906    else
1907	AC_MSG_RESULT(${$1_LIB_SPEC})
1908    fi
1909])
1910
1911#------------------------------------------------------------------------
1912# SC_PRIVATE_TCL_HEADERS --
1913#
1914#	Locate the private Tcl include files
1915#
1916# Arguments:
1917#
1918#	Requires:
1919#		TCL_SRC_DIR	Assumes that SC_LOAD_TCLCONFIG has
1920#				 already been called.
1921#
1922# Results:
1923#
1924#	Substs the following vars:
1925#		TCL_TOP_DIR_NATIVE
1926#		TCL_GENERIC_DIR_NATIVE
1927#		TCL_UNIX_DIR_NATIVE
1928#		TCL_WIN_DIR_NATIVE
1929#		TCL_BMAP_DIR_NATIVE
1930#		TCL_TOOL_DIR_NATIVE
1931#		TCL_PLATFORM_DIR_NATIVE
1932#		TCL_BIN_DIR_NATIVE
1933#		TCL_INCLUDES
1934#------------------------------------------------------------------------
1935
1936AC_DEFUN(SC_PRIVATE_TCL_HEADERS, [
1937    AC_MSG_CHECKING(for Tcl private include files)
1938
1939    case "`uname -s`" in
1940	*win32* | *WIN32* | *CYGWIN_NT* |*CYGWIN_98*|*CYGWIN_95*)
1941	    TCL_TOP_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}`\"
1942	    TCL_GENERIC_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/generic`\"
1943	    TCL_UNIX_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/unix`\"
1944	    TCL_WIN_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/win`\"
1945	    TCL_BMAP_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/bitmaps`\"
1946	    TCL_TOOL_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/tools`\"
1947	    TCL_COMPAT_DIR_NATIVE=\"`${CYGPATH} ${TCL_SRC_DIR}/compat`\"
1948	    TCL_PLATFORM_DIR_NATIVE=${TCL_WIN_DIR_NATIVE}
1949	;;
1950	*)
1951	    TCL_TOP_DIR_NATIVE='$(TCL_SRC_DIR)'
1952	    TCL_GENERIC_DIR_NATIVE='$(TCL_TOP_DIR_NATIVE)/generic'
1953	    TCL_UNIX_DIR_NATIVE='$(TCL_TOP_DIR_NATIVE)/unix'
1954	    TCL_WIN_DIR_NATIVE='$(TCL_TOP_DIR_NATIVE)/win'
1955	    TCL_BMAP_DIR_NATIVE='$(TCL_TOP_DIR_NATIVE)/bitmaps'
1956	    TCL_TOOL_DIR_NATIVE='$(TCL_TOP_DIR_NATIVE)/tools'
1957	    TCL_COMPAT_DIR_NATIVE='$(TCL_TOP_DIR_NATIVE)/compat'
1958	    TCL_PLATFORM_DIR_NATIVE=${TCL_UNIX_DIR_NATIVE}
1959	;;
1960    esac
1961
1962    AC_SUBST(TCL_TOP_DIR_NATIVE)
1963    AC_SUBST(TCL_GENERIC_DIR_NATIVE)
1964    AC_SUBST(TCL_UNIX_DIR_NATIVE)
1965    AC_SUBST(TCL_WIN_DIR_NATIVE)
1966    AC_SUBST(TCL_BMAP_DIR_NATIVE)
1967    AC_SUBST(TCL_TOOL_DIR_NATIVE)
1968    AC_SUBST(TCL_PLATFORM_DIR_NATIVE)
1969
1970    TCL_INCLUDES="-I${TCL_GENERIC_DIR_NATIVE} -I${TCL_PLATFORM_DIR_NATIVE}"
1971    AC_SUBST(TCL_INCLUDES)
1972    AC_MSG_RESULT(Using srcdir found in tclConfig.sh)
1973])
1974
1975#------------------------------------------------------------------------
1976# SC_PUBLIC_TCL_HEADERS --
1977#
1978#	Locate the installed public Tcl header files
1979#
1980# Arguments:
1981#	None.
1982#
1983# Requires:
1984#	CYGPATH must be set
1985#
1986# Results:
1987#
1988#	Adds a --with-tclinclude switch to configure.
1989#	Result is cached.
1990#
1991#	Substs the following vars:
1992#		TCL_INCLUDES
1993#------------------------------------------------------------------------
1994
1995AC_DEFUN(SC_PUBLIC_TCL_HEADERS, [
1996    AC_MSG_CHECKING(for Tcl public headers)
1997
1998    AC_ARG_WITH(tclinclude, [ --with-tclinclude      directory containing the public Tcl header files.], with_tclinclude=${withval})
1999
2000    if test x"${with_tclinclude}" != x ; then
2001	if test -f "${with_tclinclude}/tcl.h" ; then
2002	    ac_cv_c_tclh=${with_tclinclude}
2003	else
2004	    AC_MSG_ERROR([${with_tclinclude} directory does not contain Tcl public header file tcl.h])
2005	fi
2006    else
2007	AC_CACHE_VAL(ac_cv_c_tclh, [
2008	    # Use the value from --with-tclinclude, if it was given
2009
2010	    if test x"${with_tclinclude}" != x ; then
2011		ac_cv_c_tclh=${with_tclinclude}
2012	    else
2013		# Check in the includedir, if --prefix was specified
2014
2015		eval "temp_includedir=${includedir}"
2016		for i in \
2017			`ls -d ${TCL_PREFIX}/include 2>/dev/null` \
2018			`ls -d ${temp_includedir} 2>/dev/null` \
2019			`ls -d ${TCL_BIN_DIR}/../include 2>/dev/null` \
2020			/usr/local/include /usr/include ; do
2021		    if test -f "$i/tcl.h" ; then
2022			ac_cv_c_tclh=$i
2023			break
2024		    fi
2025		done
2026	    fi
2027	])
2028    fi
2029
2030    # Print a message based on how we determined the include path
2031
2032    if test x"${ac_cv_c_tclh}" = x ; then
2033	AC_MSG_ERROR(tcl.h not found.  Please specify its location with --with-tclinclude)
2034    else
2035	AC_MSG_RESULT(${ac_cv_c_tclh})
2036    fi
2037
2038    # Convert to a native path and substitute into the output files.
2039
2040    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tclh}`
2041
2042    TCL_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
2043
2044    AC_SUBST(TCL_INCLUDES)
2045])
2046
2047#------------------------------------------------------------------------
2048# SC_PRIVATE_TK_HEADERS --
2049#
2050#	Locate the private Tk include files
2051#
2052# Arguments:
2053#
2054#	Requires:
2055#		TK_SRC_DIR	Assumes that SC_LOAD_TKCONFIG has
2056#				 already been called.
2057#
2058# Results:
2059#
2060#	Substs the following vars:
2061#		TK_INCLUDES
2062#------------------------------------------------------------------------
2063
2064AC_DEFUN(SC_PRIVATE_TK_HEADERS, [
2065    AC_MSG_CHECKING(for Tk private include files)
2066
2067    case "`uname -s`" in
2068	*win32* | *WIN32* | *CYGWIN_NT* |*CYGWIN_98*|*CYGWIN_95*)
2069	    TK_TOP_DIR_NATIVE=\"`${CYGPATH} ${TK_SRC_DIR}`\"
2070	    TK_UNIX_DIR_NATIVE=\"`${CYGPATH} ${TK_SRC_DIR}/unix`\"
2071	    TK_WIN_DIR_NATIVE=\"`${CYGPATH} ${TK_SRC_DIR}/win`\"
2072	    TK_GENERIC_DIR_NATIVE=\"`${CYGPATH} ${TK_SRC_DIR}/generic`\"
2073	    TK_XLIB_DIR_NATIVE=\"`${CYGPATH} ${TK_SRC_DIR}/xlib`\"
2074	    TK_PLATFORM_DIR_NATIVE=${TK_WIN_DIR_NATIVE}
2075
2076	    TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE} -I${TK_XLIB_DIR_NATIVE}"
2077	;;
2078	*)
2079	    TK_TOP_DIR_NATIVE='$(TK_SRC_DIR)'
2080	    TK_GENERIC_DIR_NATIVE='$(TK_TOP_DIR_NATIVE)/generic'
2081	    TK_UNIX_DIR_NATIVE='$(TK_TOP_DIR_NATIVE)/unix'
2082	    TK_WIN_DIR_NATIVE='$(TK_TOP_DIR_NATIVE)/win'
2083	    TK_PLATFORM_DIR_NATIVE=${TK_UNIX_DIR_NATIVE}
2084
2085	    TK_INCLUDES="-I${TK_GENERIC_DIR_NATIVE} -I${TK_PLATFORM_DIR_NATIVE}"
2086	;;
2087    esac
2088
2089    AC_SUBST(TK_TOP_DIR_NATIVE)
2090    AC_SUBST(TK_UNIX_DIR_NATIVE)
2091    AC_SUBST(TK_WIN_DIR_NATIVE)
2092    AC_SUBST(TK_GENERIC_DIR_NATIVE)
2093    AC_SUBST(TK_XLIB_DIR_NATIVE)
2094    AC_SUBST(TK_PLATFORM_DIR_NATIVE)
2095
2096    AC_SUBST(TK_INCLUDES)
2097    AC_MSG_RESULT(Using srcdir found in tkConfig.sh)
2098])
2099
2100#------------------------------------------------------------------------
2101# SC_PUBLIC_TK_HEADERS --
2102#
2103#	Locate the installed public Tk header files
2104#
2105# Arguments:
2106#	None.
2107#
2108# Requires:
2109#	CYGPATH must be set
2110#
2111# Results:
2112#
2113#	Adds a --with-tkinclude switch to configure.
2114#	Result is cached.
2115#
2116#	Substs the following vars:
2117#		TK_INCLUDES
2118#------------------------------------------------------------------------
2119
2120AC_DEFUN(SC_PUBLIC_TK_HEADERS, [
2121    AC_MSG_CHECKING(for Tk public headers)
2122
2123    AC_ARG_WITH(tkinclude, [ --with-tkinclude      directory containing the public Tk header files.], with_tkinclude=${withval})
2124
2125    if test x"${with_tkinclude}" != x ; then
2126	if test -f "${with_tkinclude}/tk.h" ; then
2127	    ac_cv_c_tkh=${with_tkinclude}
2128	else
2129	    AC_MSG_ERROR([${with_tkinclude} directory does not contain Tk public header file tk.h])
2130	fi
2131    else
2132	AC_CACHE_VAL(ac_cv_c_tkh, [
2133	    # Use the value from --with-tkinclude, if it was given
2134
2135	    if test x"${with_tkinclude}" != x ; then
2136		ac_cv_c_tkh=${with_tkinclude}
2137	    else
2138		# Check in the includedir, if --prefix was specified
2139
2140		eval "temp_includedir=${includedir}"
2141		for i in \
2142			`ls -d ${TCL_PREFIX}/include 2>/dev/null` \
2143			`ls -d ${temp_includedir} 2>/dev/null` \
2144			`ls -d ${TCL_BIN_DIR}/../include 2>/dev/null` \
2145			/usr/local/include /usr/include ; do
2146		    if test -f "$i/tk.h" ; then
2147			ac_cv_c_tkh=$i
2148			break
2149		    fi
2150		done
2151	    fi
2152	])
2153    fi
2154
2155    # Print a message based on how we determined the include path
2156
2157    if test x"${ac_cv_c_tkh}" = x ; then
2158	AC_MSG_ERROR(tk.h not found.  Please specify its location with --with-tkinclude)
2159    else
2160	AC_MSG_RESULT(${ac_cv_c_tkh})
2161    fi
2162
2163    # Convert to a native path and substitute into the output files.
2164
2165    INCLUDE_DIR_NATIVE=`${CYGPATH} ${ac_cv_c_tkh}`
2166
2167    TK_INCLUDES=-I\"${INCLUDE_DIR_NATIVE}\"
2168
2169    AC_SUBST(TK_INCLUDES)
2170])
2171
2172#------------------------------------------------------------------------
2173# SC_SIMPLE_EXEEXT
2174#	Select the executable extension based on the host type.  This
2175#	is a lightweight replacement for AC_EXEEXT that doesn't require
2176#	a compiler.
2177#
2178# Arguments
2179#	none
2180#
2181# Results
2182#	Subst's the following values:
2183#		EXEEXT
2184#------------------------------------------------------------------------
2185
2186AC_DEFUN(SC_SIMPLE_EXEEXT, [
2187    AC_MSG_CHECKING(executable extension based on host type)
2188
2189    case "`uname -s`" in
2190	*win32* | *WIN32* | *CYGWIN_NT* |*CYGWIN_98*|*CYGWIN_95*)
2191	    EXEEXT=".exe"
2192	;;
2193	*)
2194	    EXEEXT=""
2195	;;
2196    esac
2197
2198    AC_MSG_RESULT(${EXEEXT})
2199    AC_SUBST(EXEEXT)
2200])
2201
2202#------------------------------------------------------------------------
2203# SC_PROG_TCLSH
2204#	Locate a tclsh shell in the following directories:
2205#		${exec_prefix}/bin
2206#		${prefix}/bin
2207#		${TCL_BIN_DIR}
2208#		${TCL_BIN_DIR}/../bin
2209#		${PATH}
2210#
2211# Arguments
2212#	none
2213#
2214# Results
2215#	Subst's the following values:
2216#		TCLSH_PROG
2217#------------------------------------------------------------------------
2218
2219AC_DEFUN(SC_PROG_TCLSH, [
2220    AC_MSG_CHECKING([for tclsh])
2221
2222    AC_CACHE_VAL(ac_cv_path_tclsh, [
2223	search_path=`echo ${exec_prefix}/bin:${prefix}/bin:${TCL_BIN_DIR}:${TCL_BIN_DIR}/../bin:${PATH} | sed -e 's/:/ /g'`
2224	for dir in $search_path ; do
2225	    for j in `ls -r $dir/tclsh[[8-9]]*${EXEEXT} 2> /dev/null` \
2226		    `ls -r $dir/tclsh*${EXEEXT} 2> /dev/null` ; do
2227		if test x"$ac_cv_path_tclsh" = x ; then
2228		    if test -f "$j" ; then
2229			ac_cv_path_tclsh=$j
2230			break
2231		    fi
2232		fi
2233	    done
2234	done
2235    ])
2236
2237    if test -f "$ac_cv_path_tclsh" ; then
2238	TCLSH_PROG=$ac_cv_path_tclsh
2239	AC_MSG_RESULT($TCLSH_PROG)
2240    else
2241	AC_MSG_ERROR(No tclsh found in PATH:  $search_path)
2242    fi
2243    AC_SUBST(TCLSH_PROG)
2244])
2245
2246#------------------------------------------------------------------------
2247# SC_PROG_WISH
2248#	Locate a wish shell in the following directories:
2249#		${exec_prefix}/bin
2250#		${prefix}/bin
2251#		${TCL_BIN_DIR}
2252#		${TCL_BIN_DIR}/../bin
2253#		${PATH}
2254#
2255# Arguments
2256#	none
2257#
2258# Results
2259#	Subst's the following values:
2260#		WISH_PROG
2261#------------------------------------------------------------------------
2262
2263AC_DEFUN(SC_PROG_WISH, [
2264    AC_MSG_CHECKING([for wish])
2265
2266    AC_CACHE_VAL(ac_cv_path_wish, [
2267	search_path=`echo ${exec_prefix}/bin:${prefix}/bin:${TCL_BIN_DIR}:${TCL_BIN_DIR}/../bin:${PATH} | sed -e 's/:/ /g'`
2268	for dir in $search_path ; do
2269	    for j in `ls -r $dir/wish[[8-9]]*${EXEEXT} 2> /dev/null` \
2270		    `ls -r $dir/wish*${EXEEXT} 2> /dev/null` ; do
2271		if test x"$ac_cv_path_wish" = x ; then
2272		    if test -f "$j" ; then
2273			ac_cv_path_wish=$j
2274			break
2275		    fi
2276		fi
2277	    done
2278	done
2279    ])
2280
2281    if test -f "$ac_cv_path_wish" ; then
2282	WISH_PROG=$ac_cv_path_wish
2283	AC_MSG_RESULT($WISH_PROG)
2284    else
2285	AC_MSG_ERROR(No wish found in PATH:  $search_path)
2286    fi
2287    AC_SUBST(WISH_PROG)
2288])
2289
2290