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
20AC_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,
31	    AS_HELP_STRING([--with-tcl],
32		[directory containing tcl configuration (tclConfig.sh)]),
33	    with_tclconfig="${withval}")
34	AC_MSG_CHECKING([for Tcl configuration])
35	AC_CACHE_VAL(ac_cv_c_tclconfig,[
36
37	    # First check to see if --with-tcl was specified.
38	    if test x"${with_tclconfig}" != x ; then
39		case "${with_tclconfig}" in
40		    */tclConfig.sh )
41			if test -f "${with_tclconfig}"; then
42			    AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself])
43			    with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`"
44			fi ;;
45		esac
46		if test -f "${with_tclconfig}/tclConfig.sh" ; then
47		    ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`"
48		else
49		    AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh])
50		fi
51	    fi
52
53	    # then check for a private Tcl installation
54	    if test x"${ac_cv_c_tclconfig}" = x ; then
55		for i in \
56			../tcl \
57			`ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
58			`ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \
59			`ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
60			../../tcl \
61			`ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
62			`ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
63			`ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \
64			../../../tcl \
65			`ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
66			`ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \
67			`ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
68		    if test -f "$i/win/tclConfig.sh" ; then
69			ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
70			break
71		    fi
72		done
73	    fi
74
75	    # check in a few common install locations
76	    if test x"${ac_cv_c_tclconfig}" = x ; then
77		for i in `ls -d ${libdir} 2>/dev/null` \
78			`ls -d ${exec_prefix}/lib 2>/dev/null` \
79			`ls -d ${prefix}/lib 2>/dev/null` \
80			`ls -d /cygdrive/c/Tcl/lib 2>/dev/null` \
81			`ls -d /cygdrive/c/Progra~1/Tcl/lib 2>/dev/null` \
82			`ls -d /c/Tcl/lib 2>/dev/null` \
83			`ls -d /c/Progra~1/Tcl/lib 2>/dev/null` \
84			`ls -d C:/Tcl/lib 2>/dev/null` \
85			`ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
86			; do
87		    if test -f "$i/tclConfig.sh" ; then
88			ac_cv_c_tclconfig="`(cd $i; pwd)`"
89			break
90		    fi
91		done
92	    fi
93
94	    # check in a few other private locations
95	    if test x"${ac_cv_c_tclconfig}" = x ; then
96		for i in \
97			${srcdir}/../tcl \
98			`ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
99			`ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \
100			`ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do
101		    if test -f "$i/win/tclConfig.sh" ; then
102		    ac_cv_c_tclconfig="`(cd $i/win; pwd)`"
103		    break
104		fi
105		done
106	    fi
107	])
108
109	if test x"${ac_cv_c_tclconfig}" = x ; then
110	    TCL_BIN_DIR="# no Tcl configs found"
111	    AC_MSG_ERROR([Can't find Tcl configuration definitions. Use --with-tcl to specify a directory containing tclConfig.sh])
112	else
113	    no_tcl=
114	    TCL_BIN_DIR="${ac_cv_c_tclconfig}"
115	    AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh])
116	fi
117    fi
118])
119
120#------------------------------------------------------------------------
121# SC_PATH_TKCONFIG --
122#
123#	Locate the tkConfig.sh file
124#
125# Arguments:
126#	none
127#
128# Results:
129#
130#	Adds the following arguments to configure:
131#		--with-tk=...
132#
133#	Defines the following vars:
134#		TK_BIN_DIR	Full path to the directory containing
135#				the tkConfig.sh file
136#------------------------------------------------------------------------
137
138AC_DEFUN([SC_PATH_TKCONFIG], [
139    #
140    # Ok, lets find the tk configuration
141    # First, look for one uninstalled.
142    # the alternative search directory is invoked by --with-tk
143    #
144
145    if test x"${no_tk}" = x ; then
146	# we reset no_tk in case something fails here
147	no_tk=true
148	AC_ARG_WITH(tk,
149	    AS_HELP_STRING([--with-tk],
150		[directory containing tk configuration (tkConfig.sh)]),
151	    with_tkconfig="${withval}")
152	AC_MSG_CHECKING([for Tk configuration])
153	AC_CACHE_VAL(ac_cv_c_tkconfig,[
154
155	    # First check to see if --with-tkconfig was specified.
156	    if test x"${with_tkconfig}" != x ; then
157		case "${with_tkconfig}" in
158		    */tkConfig.sh )
159			if test -f "${with_tkconfig}"; then
160			    AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself])
161			    with_tkconfig="`echo "${with_tkconfig}" | sed 's!/tkConfig\.sh$!!'`"
162			fi ;;
163		esac
164		if test -f "${with_tkconfig}/tkConfig.sh" ; then
165		    ac_cv_c_tkconfig="`(cd "${with_tkconfig}"; pwd)`"
166		else
167		    AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh])
168		fi
169	    fi
170
171	    # then check for a private Tk library
172	    if test x"${ac_cv_c_tkconfig}" = x ; then
173		for i in \
174			../tk \
175			`ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
176			`ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \
177			`ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \
178			../../tk \
179			`ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
180			`ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \
181			`ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \
182			../../../tk \
183			`ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
184			`ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \
185			`ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
186		    if test -f "$i/win/tkConfig.sh" ; then
187			ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
188			break
189		    fi
190		done
191	    fi
192
193	    # check in a few common install locations
194	    if test x"${ac_cv_c_tkconfig}" = x ; then
195		for i in `ls -d ${libdir} 2>/dev/null` \
196			`ls -d ${exec_prefix}/lib 2>/dev/null` \
197			`ls -d ${prefix}/lib 2>/dev/null` \
198			`ls -d /cygdrive/c/Tcl/lib 2>/dev/null` \
199			`ls -d /cygdrive/c/Progra~1/Tcl/lib 2>/dev/null` \
200			`ls -d /c/Tcl/lib 2>/dev/null` \
201			`ls -d /c/Progra~1/Tcl/lib 2>/dev/null` \
202			`ls -d C:/Tcl/lib 2>/dev/null` \
203			`ls -d C:/Progra~1/Tcl/lib 2>/dev/null` \
204			; do
205		    if test -f "$i/tkConfig.sh" ; then
206			ac_cv_c_tkconfig="`(cd $i; pwd)`"
207			break
208		    fi
209		done
210	    fi
211
212	    # check in a few other private locations
213	    if test x"${ac_cv_c_tkconfig}" = x ; then
214		for i in \
215			${srcdir}/../tk \
216			`ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \
217			`ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \
218			`ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do
219		    if test -f "$i/win/tkConfig.sh" ; then
220			ac_cv_c_tkconfig="`(cd $i/win; pwd)`"
221			break
222		    fi
223		done
224	    fi
225	])
226
227	if test x"${ac_cv_c_tkconfig}" = x ; then
228	    TK_BIN_DIR="# no Tk configs found"
229	    AC_MSG_ERROR([Can't find Tk configuration definitions. Use --with-tk to specify a directory containing tkConfig.sh])
230	else
231	    no_tk=
232	    TK_BIN_DIR="${ac_cv_c_tkconfig}"
233	    AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh])
234	fi
235    fi
236])
237
238#------------------------------------------------------------------------
239# SC_LOAD_TCLCONFIG --
240#
241#	Load the tclConfig.sh file.
242#
243# Arguments:
244#
245#	Requires the following vars to be set:
246#		TCL_BIN_DIR
247#
248# Results:
249#
250#	Substitutes the following vars:
251#		TCL_BIN_DIR
252#		TCL_SRC_DIR
253#		TCL_LIB_FILE
254#
255#------------------------------------------------------------------------
256
257AC_DEFUN([SC_LOAD_TCLCONFIG], [
258    AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh])
259
260    if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then
261        AC_MSG_RESULT([loading])
262	. "${TCL_BIN_DIR}/tclConfig.sh"
263    else
264        AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh])
265    fi
266
267    #
268    # If the TCL_BIN_DIR is the build directory (not the install directory),
269    # then set the common variable name to the value of the build variables.
270    # For example, the variable TCL_LIB_SPEC will be set to the value
271    # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC
272    # instead of TCL_BUILD_LIB_SPEC since it will work with both an
273    # installed and uninstalled version of Tcl.
274    #
275
276    if test -f $TCL_BIN_DIR/Makefile ; then
277        TCL_LIB_SPEC=${TCL_BUILD_LIB_SPEC}
278        TCL_STUB_LIB_SPEC=${TCL_BUILD_STUB_LIB_SPEC}
279        TCL_STUB_LIB_PATH=${TCL_BUILD_STUB_LIB_PATH}
280    fi
281
282    #
283    # eval is required to do the TCL_DBGX substitution
284    #
285
286    eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\""
287    eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\""
288    eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\""
289
290    eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\""
291    eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\""
292    eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\""
293
294    AC_SUBST(TCL_VERSION)
295    AC_SUBST(TCL_BIN_DIR)
296    AC_SUBST(TCL_SRC_DIR)
297
298    AC_SUBST(TCL_LIB_FILE)
299    AC_SUBST(TCL_LIB_FLAG)
300    AC_SUBST(TCL_LIB_SPEC)
301
302    AC_SUBST(TCL_STUB_LIB_FILE)
303    AC_SUBST(TCL_STUB_LIB_FLAG)
304    AC_SUBST(TCL_STUB_LIB_SPEC)
305
306    AC_SUBST(TCL_DEFS)
307])
308
309#------------------------------------------------------------------------
310# SC_LOAD_TKCONFIG --
311#
312#	Load the tkConfig.sh file
313#
314# Arguments:
315#
316#	Requires the following vars to be set:
317#		TK_BIN_DIR
318#
319# Results:
320#
321#	Sets the following vars that should be in tkConfig.sh:
322#		TK_BIN_DIR
323#------------------------------------------------------------------------
324
325AC_DEFUN([SC_LOAD_TKCONFIG], [
326    AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh])
327
328    if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then
329        AC_MSG_RESULT([loading])
330	. "${TK_BIN_DIR}/tkConfig.sh"
331    else
332        AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh])
333    fi
334
335
336    AC_SUBST(TK_BIN_DIR)
337    AC_SUBST(TK_SRC_DIR)
338    AC_SUBST(TK_LIB_FILE)
339])
340
341#------------------------------------------------------------------------
342# SC_ENABLE_SHARED --
343#
344#	Allows the building of shared libraries
345#
346# Arguments:
347#	none
348#
349# Results:
350#
351#	Adds the following arguments to configure:
352#		--enable-shared=yes|no
353#
354#	Defines the following vars:
355#		STATIC_BUILD	Used for building import/export libraries
356#				on Windows.
357#
358#	Sets the following vars:
359#		SHARED_BUILD	Value of 1 or 0
360#------------------------------------------------------------------------
361
362AC_DEFUN([SC_ENABLE_SHARED], [
363    AC_MSG_CHECKING([how to build libraries])
364    AC_ARG_ENABLE(shared,
365	[  --enable-shared         build and link with shared libraries (default: on)],
366	[tcl_ok=$enableval], [tcl_ok=yes])
367    if test "$tcl_ok" = "yes" ; then
368	AC_MSG_RESULT([shared])
369	SHARED_BUILD=1
370    else
371	AC_MSG_RESULT([static])
372	SHARED_BUILD=0
373	AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?])
374    fi
375])
376
377#------------------------------------------------------------------------
378# SC_ENABLE_THREADS --
379#
380#	Specify if thread support should be enabled
381#
382# Arguments:
383#	none
384#
385# Results:
386#
387#	Adds the following arguments to configure:
388#		--enable-threads=yes|no
389#
390#	Defines the following vars:
391#		TCL_THREADS
392#------------------------------------------------------------------------
393
394AC_DEFUN([SC_ENABLE_THREADS], [
395    AC_MSG_CHECKING(for building with threads)
396    AC_ARG_ENABLE(threads, [  --enable-threads        build with threads (default: on)],
397	[tcl_ok=$enableval], [tcl_ok=yes])
398
399    if test "$tcl_ok" = "yes"; then
400	AC_MSG_RESULT([yes (default)])
401	TCL_THREADS=1
402	AC_DEFINE(TCL_THREADS)
403	# USE_THREAD_ALLOC tells us to try the special thread-based
404	# allocator that significantly reduces lock contention
405	AC_DEFINE(USE_THREAD_ALLOC)
406    else
407	TCL_THREADS=0
408	AC_MSG_RESULT(no)
409    fi
410    AC_SUBST(TCL_THREADS)
411])
412
413#------------------------------------------------------------------------
414# SC_ENABLE_SYMBOLS --
415#
416#	Specify if debugging symbols should be used.
417#	Memory (TCL_MEM_DEBUG) and compile (TCL_COMPILE_DEBUG) debugging
418#	can also be enabled.
419#
420# Arguments:
421#	none
422#
423#	Requires the following vars to be set in the Makefile:
424#		CFLAGS_DEBUG
425#		CFLAGS_OPTIMIZE
426#
427# Results:
428#
429#	Adds the following arguments to configure:
430#		--enable-symbols
431#
432#	Defines the following vars:
433#		CFLAGS_DEFAULT	Sets to $(CFLAGS_DEBUG) if true
434#				Sets to $(CFLAGS_OPTIMIZE) if false
435#		LDFLAGS_DEFAULT	Sets to $(LDFLAGS_DEBUG) if true
436#				Sets to $(LDFLAGS_OPTIMIZE) if false
437#		DBGX		Debug library extension
438#
439#------------------------------------------------------------------------
440
441AC_DEFUN([SC_ENABLE_SYMBOLS], [
442    AC_MSG_CHECKING([for build with symbols])
443    AC_ARG_ENABLE(symbols, [  --enable-symbols        build with debugging symbols (default: off)],    [tcl_ok=$enableval], [tcl_ok=no])
444# FIXME: Currently, LDFLAGS_DEFAULT is not used, it should work like CFLAGS_DEFAULT.
445    if test "$tcl_ok" = "no"; then
446	CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)'
447	LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)'
448	DBGX=""
449	AC_DEFINE(NDEBUG, 1, [Is no debugging enabled?])
450	AC_MSG_RESULT([no])
451
452	AC_DEFINE(TCL_CFG_OPTIMIZED)
453    else
454	CFLAGS_DEFAULT='$(CFLAGS_DEBUG)'
455	LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)'
456	DBGX=g
457	if test "$tcl_ok" = "yes"; then
458	    AC_MSG_RESULT([yes (standard debugging)])
459	fi
460    fi
461    AC_SUBST(CFLAGS_DEFAULT)
462    AC_SUBST(LDFLAGS_DEFAULT)
463
464    if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then
465	AC_DEFINE(TCL_MEM_DEBUG, 1, [Is memory debugging enabled?])
466    fi
467
468    if test "$tcl_ok" = "compile" -o "$tcl_ok" = "all"; then
469	AC_DEFINE(TCL_COMPILE_DEBUG, 1, [Is bytecode debugging enabled?])
470	AC_DEFINE(TCL_COMPILE_STATS, 1, [Are bytecode statistics enabled?])
471    fi
472
473    if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then
474	if test "$tcl_ok" = "all"; then
475	    AC_MSG_RESULT([enabled symbols mem compile debugging])
476	else
477	    AC_MSG_RESULT([enabled $tcl_ok debugging])
478	fi
479    fi
480])
481
482#--------------------------------------------------------------------
483# SC_CONFIG_CFLAGS
484#
485#	Try to determine the proper flags to pass to the compiler
486#	for building shared libraries and other such nonsense.
487#
488#	NOTE: The backslashes in quotes below are substituted twice
489#	due to the fact that they are in a macro and then inlined
490#	in the final configure script.
491#
492# Arguments:
493#	none
494#
495# Results:
496#
497#	Can the following vars:
498#		EXTRA_CFLAGS
499#		CFLAGS_DEBUG
500#		CFLAGS_OPTIMIZE
501#		CFLAGS_WARNING
502#		CFLAGS_NOLTO
503#		LDFLAGS_DEBUG
504#		LDFLAGS_OPTIMIZE
505#		LDFLAGS_CONSOLE
506#		LDFLAGS_WINDOW
507#		CC_OBJNAME
508#		CC_EXENAME
509#		CYGPATH
510#		STLIB_LD
511#		SHLIB_LD
512#		SHLIB_LD_LIBS
513#		LIBS
514#		AR
515#		RC
516#		RES
517#
518#		MAKE_LIB
519#		MAKE_STUB_LIB
520#		MAKE_EXE
521#		MAKE_DLL
522#
523#		LIBSUFFIX
524#		LIBFLAGSUFFIX
525#		LIBPREFIX
526#		LIBRARIES
527#		EXESUFFIX
528#		DLLSUFFIX
529#
530#--------------------------------------------------------------------
531
532AC_DEFUN([SC_CONFIG_CFLAGS], [
533
534    # Step 0: Enable 64 bit support?
535
536    AC_MSG_CHECKING([if 64bit support is requested])
537    AC_ARG_ENABLE(64bit,[  --enable-64bit          enable 64bit support (where applicable)], [do64bit=$enableval], [do64bit=no])
538    AC_MSG_RESULT($do64bit)
539
540    # Cross-compiling options for Windows/CE builds
541
542    AC_MSG_CHECKING([if Windows/CE build is requested])
543    AC_ARG_ENABLE(wince,[  --enable-wince          enable Win/CE support (where applicable)], [doWince=$enableval], [doWince=no])
544    AC_MSG_RESULT($doWince)
545
546    AC_MSG_CHECKING([for Windows/CE celib directory])
547    AC_ARG_WITH(celib,[  --with-celib=DIR        use Windows/CE support library from DIR],
548	    CELIB_DIR=$withval, CELIB_DIR=NO_CELIB)
549    AC_MSG_RESULT([$CELIB_DIR])
550
551    # Set some defaults (may get changed below)
552    EXTRA_CFLAGS=""
553	AC_DEFINE(MODULE_SCOPE, [extern], [No need to mark inidividual symbols as hidden])
554
555    AC_CHECK_PROG(CYGPATH, cygpath, cygpath -m, echo)
556
557    SHLIB_SUFFIX=".dll"
558
559    # MACHINE is IX86 for LINK, but this is used by the manifest,
560    # which requires x86|amd64|ia64.
561    MACHINE="X86"
562
563    if test "$GCC" = "yes"; then
564
565      AC_CACHE_CHECK(for cross-compile version of gcc,
566	ac_cv_cross,
567	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
568	    #ifndef _WIN32
569		#error cross-compiler
570	    #endif
571	]], [[]])],
572	[ac_cv_cross=no],
573	[ac_cv_cross=yes])
574      )
575
576      if test "$ac_cv_cross" = "yes"; then
577	case "$do64bit" in
578	    amd64|x64|yes)
579		CC="x86_64-w64-mingw32-${CC}"
580		LD="x86_64-w64-mingw32-ld"
581		AR="x86_64-w64-mingw32-ar"
582		RANLIB="x86_64-w64-mingw32-ranlib"
583		RC="x86_64-w64-mingw32-windres"
584	    ;;
585	    *)
586		CC="i686-w64-mingw32-${CC}"
587		LD="i686-w64-mingw32-ld"
588		AR="i686-w64-mingw32-ar"
589		RANLIB="i686-w64-mingw32-ranlib"
590		RC="i686-w64-mingw32-windres"
591	    ;;
592	esac
593      fi
594    fi
595
596    # Check for a bug in gcc's windres that causes the
597    # compile to fail when a Windows native path is
598    # passed into windres. The mingw toolchain requires
599    # Windows native paths while Cygwin should work
600    # with both. Avoid the bug by passing a POSIX
601    # path when using the Cygwin toolchain.
602
603    if test "$GCC" = "yes" && test "$CYGPATH" != "echo" ; then
604	conftest=/tmp/conftest.rc
605	echo "STRINGTABLE BEGIN" > $conftest
606	echo "101 \"name\"" >> $conftest
607	echo "END" >> $conftest
608
609	AC_MSG_CHECKING([for Windows native path bug in windres])
610	cyg_conftest=`$CYGPATH $conftest`
611	if AC_TRY_COMMAND($RC -o conftest.res.o $cyg_conftest) ; then
612	    AC_MSG_RESULT([no])
613	else
614	    AC_MSG_RESULT([yes])
615	    CYGPATH=echo
616	fi
617	conftest=
618	cyg_conftest=
619    fi
620
621    if test "$CYGPATH" = "echo"; then
622        DEPARG='"$<"'
623    else
624        DEPARG='"$(shell $(CYGPATH) $<)"'
625    fi
626
627    # set various compiler flags depending on whether we are using gcc or cl
628
629    if test "${GCC}" = "yes" ; then
630	extra_cflags="-pipe"
631	extra_ldflags="-pipe -static-libgcc"
632	AC_CACHE_CHECK(for mingw32 version of gcc,
633	    ac_cv_win32,
634	    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
635		#ifdef _WIN32
636		    #error win32
637		#endif
638	    ]], [[]])],
639	    [ac_cv_win32=no],
640	    [ac_cv_win32=yes])
641	)
642	if test "$ac_cv_win32" != "yes"; then
643	    AC_MSG_ERROR([${CC} cannot produce win32 executables.])
644	fi
645
646	hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -mwindows -municode -Dmain=xxmain"
647	AC_CACHE_CHECK(for working -municode linker flag,
648	    ac_cv_municode,
649	AC_LINK_IFELSE([AC_LANG_PROGRAM([[
650	#include <windows.h>
651	int APIENTRY wWinMain(HINSTANCE a, HINSTANCE b, LPWSTR c, int d) {return 0;}
652	]], [[]])],
653	    [ac_cv_municode=yes],
654	    [ac_cv_municode=no])
655	)
656	CFLAGS=$hold_cflags
657	if test "$ac_cv_municode" = "yes" ; then
658	    extra_ldflags="$extra_ldflags -municode"
659	else
660	    extra_cflags="$extra_cflags -DTCL_BROKEN_MAINARGS"
661	fi
662	AC_CACHE_CHECK(for working -fno-lto,
663	    ac_cv_nolto,
664	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
665	    [ac_cv_nolto=yes],
666	    [ac_cv_nolto=no])
667	)
668	CFLAGS=$hold_cflags
669	if test "$ac_cv_nolto" = "yes" ; then
670	    CFLAGS_NOLTO="-fno-lto"
671	else
672	    CFLAGS_NOLTO=""
673	fi
674    fi
675
676    AC_MSG_CHECKING([compiler flags])
677    if test "${GCC}" = "yes" ; then
678	SHLIB_LD=""
679	SHLIB_LD_LIBS='${LIBS}'
680	LIBS="-lnetapi32 -lkernel32 -luser32 -ladvapi32 -luserenv -lws2_32"
681	# mingw needs to link ole32 and oleaut32 for [send], but MSVC doesn't
682	LIBS_GUI="-lgdi32 -lcomdlg32 -limm32 -lcomctl32 -lshell32 -luuid -lole32 -loleaut32"
683	STLIB_LD='${AR} cr'
684	RC_OUT=-o
685	RC_TYPE=
686	RC_INCLUDE=--include
687	RC_DEFINE=--define
688	RES=res.o
689	MAKE_LIB="\${STLIB_LD} \[$]@"
690	MAKE_STUB_LIB="\${STLIB_LD} \[$]@"
691	POST_MAKE_LIB="\${RANLIB} \[$]@"
692	MAKE_EXE="\${CC} -o \[$]@"
693	LIBPREFIX="lib"
694
695	if test "${SHARED_BUILD}" = "0" ; then
696	    # static
697            AC_MSG_RESULT([using static flags])
698	    runtime=
699	    LIBRARIES="\${STATIC_LIBRARIES}"
700	    EXESUFFIX="s\${DBGX}.exe"
701	else
702	    # dynamic
703            AC_MSG_RESULT([using shared flags])
704
705	    # ad-hoc check to see if CC supports -shared.
706	    if "${CC}" -shared 2>&1 | egrep ': -shared not supported' >/dev/null; then
707		AC_MSG_ERROR([${CC} does not support the -shared option.
708                You will need to upgrade to a newer version of the toolchain.])
709	    fi
710
711	    runtime=
712	    # Add SHLIB_LD_LIBS to the Make rule, not here.
713
714	    EXESUFFIX="\${DBGX}.exe"
715	    LIBRARIES="\${SHARED_LIBRARIES}"
716	fi
717	# Link with gcc since ld does not link to default libs like
718	# -luser32 and -lmsvcrt by default.
719	SHLIB_LD='${CC} -shared'
720	SHLIB_LD_LIBS='${LIBS}'
721	MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -o \[$]@ ${extra_ldflags} \
722	    -Wl,--out-implib,\$(patsubst %.dll,lib%.dll.a,\[$]@)"
723	# DLLSUFFIX is separate because it is the building block for
724	# users of tclConfig.sh that may build shared or static.
725	DLLSUFFIX="\${DBGX}.dll"
726	LIBSUFFIX="\${DBGX}.a"
727	LIBFLAGSUFFIX="\${DBGX}"
728	SHLIB_SUFFIX=.dll
729
730	EXTRA_CFLAGS="${extra_cflags}"
731
732	CFLAGS_DEBUG=-g
733	CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer"
734	CFLAGS_WARNING="-Wall -Wpointer-arith"
735	LDFLAGS_DEBUG=
736	LDFLAGS_OPTIMIZE=
737
738	case "${CC}" in
739	    *++)
740		CFLAGS_WARNING="${CFLAGS_WARNING} -Wno-format"
741		;;
742	    *)
743		CFLAGS_WARNING="${CFLAGS_WARNING} -Wdeclaration-after-statement"
744		;;
745	esac
746
747	# Specify the CC output file names based on the target name
748	CC_OBJNAME="-o \[$]@"
749	CC_EXENAME="-o \[$]@"
750
751	# Specify linker flags depending on the type of app being
752	# built -- Console vs. Window.
753	#
754	# ORIGINAL COMMENT:
755	# We need to pass -e _WinMain@16 so that ld will use
756	# WinMain() instead of main() as the entry point. We can't
757	# use autoconf to check for this case since it would need
758	# to run an executable and that does not work when
759	# cross compiling. Remove this -e workaround once we
760	# require a gcc that does not have this bug.
761	#
762	# MK NOTE: Tk should use a different mechanism. This causes
763	# interesting problems, such as wish dying at startup.
764	#LDFLAGS_WINDOW="-mwindows -e _WinMain@16 ${extra_ldflags}"
765	LDFLAGS_CONSOLE="-mconsole ${extra_ldflags}"
766	LDFLAGS_WINDOW="-mwindows ${extra_ldflags}"
767
768	case "$do64bit" in
769	    amd64|x64|yes)
770		MACHINE="AMD64" ; # assume AMD64 as default 64-bit build
771		AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
772		;;
773	    ia64)
774		MACHINE="IA64"
775		AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
776		;;
777	    *)
778		AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
779		    #ifndef _WIN64
780			#error 32-bit
781		    #endif
782		]], [[]])],
783			[tcl_win_64bit=yes],
784			[tcl_win_64bit=no]
785		)
786		if test "$tcl_win_64bit" = "yes" ; then
787			do64bit=amd64
788			MACHINE="AMD64"
789			AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
790		fi
791		;;
792	esac
793    else
794	if test "${SHARED_BUILD}" = "0" ; then
795	    # static
796            AC_MSG_RESULT([using static flags])
797	    runtime=-MT
798	    LIBRARIES="\${STATIC_LIBRARIES}"
799	    EXESUFFIX="s\${DBGX}.exe"
800	else
801	    # dynamic
802            AC_MSG_RESULT([using shared flags])
803	    runtime=-MD
804	    # Add SHLIB_LD_LIBS to the Make rule, not here.
805	    LIBRARIES="\${SHARED_LIBRARIES}"
806	    EXESUFFIX="\${DBGX}.exe"
807	    case "x`echo \${VisualStudioVersion}`" in
808		x1[[4-9]]*)
809		    lflags="${lflags} -nodefaultlib:libucrt.lib"
810		    ;;
811		*)
812		    ;;
813	    esac
814	fi
815	MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -out:\[$]@"
816	# DLLSUFFIX is separate because it is the building block for
817	# users of tclConfig.sh that may build shared or static.
818	DLLSUFFIX="\${DBGX}.dll"
819	LIBSUFFIX="\${DBGX}.lib"
820	LIBFLAGSUFFIX="\${DBGX}"
821
822	if test "$do64bit" != "no" ; then
823	    case "$do64bit" in
824		amd64|x64|yes)
825		    MACHINE="AMD64" ; # assume AMD64 as default 64-bit build
826		    ;;
827		ia64)
828		    MACHINE="IA64"
829		    ;;
830	    esac
831	    AC_MSG_RESULT([   Using 64-bit $MACHINE mode])
832	fi
833
834	LIBS="netapi32.lib kernel32.lib user32.lib advapi32.lib userenv.lib ws2_32.lib"
835
836	case "x`echo \${VisualStudioVersion}`" in
837		x1[[4-9]]*)
838		    LIBS="$LIBS ucrt.lib"
839		    ;;
840		*)
841		    ;;
842	esac
843
844	if test "$do64bit" != "no" ; then
845	    RC="rc"
846	    CFLAGS_DEBUG="-nologo -Zi -Od ${runtime}d"
847	    # Do not use -O2 for Win64 - this has proved buggy in code gen.
848	    CFLAGS_OPTIMIZE="-nologo -O1 ${runtime}"
849	    lflags="${lflags} -nologo -MACHINE:${MACHINE}"
850	    LINKBIN="link"
851	    # Avoid 'unresolved external symbol __security_cookie' errors.
852	    # c.f. http://support.microsoft.com/?id=894573
853	    LIBS="$LIBS bufferoverflowU.lib"
854	else
855	    RC="rc"
856	    # -Od - no optimization
857	    # -WX - warnings as errors
858	    CFLAGS_DEBUG="-nologo -Z7 -Od -WX ${runtime}d"
859	    # -O2 - create fast code (/Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy)
860	    CFLAGS_OPTIMIZE="-nologo -O2 ${runtime}"
861	    lflags="${lflags} -nologo"
862	    LINKBIN="link"
863	fi
864
865	if test "$doWince" != "no" ; then
866	    # Set defaults for common evc4/PPC2003 setup
867	    # Currently Tcl requires 300+, possibly 420+ for sockets
868	    CEVERSION=420; 		# could be 211 300 301 400 420 ...
869	    TARGETCPU=ARMV4;	# could be ARMV4 ARM MIPS SH3 X86 ...
870	    ARCH=ARM;		# could be ARM MIPS X86EM ...
871	    PLATFORM="Pocket PC 2003"; # or "Pocket PC 2002"
872	    if test "$doWince" != "yes"; then
873		# If !yes then the user specified something
874		# Reset ARCH to allow user to skip specifying it
875		ARCH=
876		eval `echo $doWince | awk -F "," '{ \
877	if (length([$]1)) { printf "CEVERSION=\"%s\"\n", [$]1; \
878	if ([$]1 < 400)	  { printf "PLATFORM=\"Pocket PC 2002\"\n" } }; \
879	if (length([$]2)) { printf "TARGETCPU=\"%s\"\n", toupper([$]2) }; \
880	if (length([$]3)) { printf "ARCH=\"%s\"\n", toupper([$]3) }; \
881	if (length([$]4)) { printf "PLATFORM=\"%s\"\n", [$]4 }; \
882		}'`
883		if test "x${ARCH}" = "x" ; then
884		    ARCH=$TARGETCPU;
885		fi
886	    fi
887	    OSVERSION=WCE$CEVERSION;
888	    if test "x${WCEROOT}" = "x" ; then
889		WCEROOT="C:/Program Files/Microsoft eMbedded C++ 4.0"
890		if test ! -d "${WCEROOT}" ; then
891		    WCEROOT="C:/Program Files/Microsoft eMbedded Tools"
892		fi
893	    fi
894	    if test "x${SDKROOT}" = "x" ; then
895		SDKROOT="C:/Program Files/Windows CE Tools"
896		if test ! -d "${SDKROOT}" ; then
897		    SDKROOT="C:/Windows CE Tools"
898		fi
899	    fi
900	    # The space-based-path will work for the Makefile, but will
901	    # not work if AC_TRY_COMPILE is called.
902	    WCEROOT=`echo "$WCEROOT" | sed -e 's!\\\!/!g'`
903	    SDKROOT=`echo "$SDKROOT" | sed -e 's!\\\!/!g'`
904	    CELIB_DIR=`echo "$CELIB_DIR" | sed -e 's!\\\!/!g'`
905	    if test ! -d "${CELIB_DIR}/inc"; then
906		AC_MSG_ERROR([Invalid celib directory "${CELIB_DIR}"])
907	    fi
908	    if test ! -d "${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"\
909		-o ! -d "${WCEROOT}/EVC/${OSVERSION}/bin"; then
910		AC_MSG_ERROR([could not find PocketPC SDK or target compiler to enable WinCE mode [$CEVERSION,$TARGETCPU,$ARCH,$PLATFORM]])
911	    else
912		CEINCLUDE="${SDKROOT}/${OSVERSION}/${PLATFORM}/include"
913		if test -d "${CEINCLUDE}/${TARGETCPU}" ; then
914		    CEINCLUDE="${CEINCLUDE}/${TARGETCPU}"
915		fi
916		CELIBPATH="${SDKROOT}/${OSVERSION}/${PLATFORM}/Lib/${TARGETCPU}"
917	    fi
918	fi
919
920	if test "$doWince" != "no" ; then
921	    CEBINROOT="${WCEROOT}/EVC/${OSVERSION}/bin"
922	    if test "${TARGETCPU}" = "X86"; then
923		CC="${CEBINROOT}/cl.exe"
924	    else
925		CC="${CEBINROOT}/cl${ARCH}.exe"
926	    fi
927	    CC="\"${CC}\" -I\"${CELIB_DIR}/inc\" -I\"${CEINCLUDE}\""
928	    RC="\"${WCEROOT}/Common/EVC/bin/rc.exe\""
929	    arch=`echo ${ARCH} | awk '{print tolower([$]0)}'`
930	    defs="${ARCH} _${ARCH}_ ${arch} PALM_SIZE _MT _DLL _WINDOWS"
931	    for i in $defs ; do
932		AC_DEFINE_UNQUOTED($i)
933	    done
934#	    if test "${ARCH}" = "X86EM"; then
935#		AC_DEFINE_UNQUOTED(_WIN32_WCE_EMULATION)
936#	    fi
937	    AC_DEFINE_UNQUOTED(_WIN32_WCE, $CEVERSION)
938	    AC_DEFINE_UNQUOTED(UNDER_CE, $CEVERSION)
939	    CFLAGS_DEBUG="-nologo -Zi -Od"
940	    CFLAGS_OPTIMIZE="-nologo -O2"
941	    lversion=`echo ${CEVERSION} | sed -e 's/\(.\)\(..\)/\1\.\2/'`
942	    lflags="-nodefaultlib -MACHINE:${ARCH} -LIBPATH:\"${CELIBPATH}\" -subsystem:windowsce,${lversion} -nologo"
943	    LINKBIN="\"${CEBINROOT}/link.exe\""
944	    AC_SUBST(CELIB_DIR)
945	    if test "${CEVERSION}" -lt 400 ; then
946		LIBS="coredll.lib corelibc.lib winsock.lib"
947	    else
948		LIBS="coredll.lib corelibc.lib ws2.lib"
949	    fi
950	    # celib currently stuck at wce300 status
951	    #LIBS="$LIBS \${CELIB_DIR}/wince-${ARCH}-pocket-${OSVERSION}-release/celib.lib"
952	    LIBS="$LIBS \"\${CELIB_DIR}/wince-${ARCH}-pocket-wce300-release/celib.lib\""
953	    LIBS_GUI="commctrl.lib commdlg.lib"
954	else
955	    LIBS_GUI="gdi32.lib comdlg32.lib imm32.lib comctl32.lib shell32.lib uuid.lib"
956	fi
957
958	SHLIB_LD="${LINKBIN} -dll -incremental:no ${lflags}"
959	SHLIB_LD_LIBS='${LIBS}'
960	# link -lib only works when -lib is the first arg
961	STLIB_LD="${LINKBIN} -lib ${lflags}"
962	RC_OUT=-fo
963	RC_TYPE=-r
964	RC_INCLUDE=-i
965	RC_DEFINE=-d
966	RES=res
967	MAKE_LIB="\${STLIB_LD} -out:\[$]@"
968	MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\[$]@"
969	POST_MAKE_LIB=
970	MAKE_EXE="\${CC} -Fe\[$]@"
971	LIBPREFIX=""
972
973	CFLAGS_DEBUG="${CFLAGS_DEBUG} -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE"
974	CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE"
975
976	EXTRA_CFLAGS=""
977	CFLAGS_WARNING="-W3"
978	LDFLAGS_DEBUG="-debug"
979	LDFLAGS_OPTIMIZE="-release"
980
981	# Specify the CC output file names based on the target name
982	CC_OBJNAME="-Fo\[$]@"
983	CC_EXENAME="-Fe\"\$(shell \$(CYGPATH) '\[$]@')\""
984
985	# Specify linker flags depending on the type of app being
986	# built -- Console vs. Window.
987	if test "$doWince" != "no" -a "${TARGETCPU}" != "X86"; then
988	    LDFLAGS_CONSOLE="-link ${lflags}"
989	    LDFLAGS_WINDOW=${LDFLAGS_CONSOLE}
990	else
991	    LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}"
992	    LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}"
993	fi
994    fi
995
996    if test "$do64bit" != "no" ; then
997	AC_DEFINE(TCL_CFG_DO64BIT)
998    fi
999
1000    if test "${GCC}" = "yes" ; then
1001	AC_CACHE_CHECK(for SEH support in compiler,
1002	    tcl_cv_seh,
1003	AC_RUN_IFELSE([AC_LANG_SOURCE([[
1004	    #define WIN32_LEAN_AND_MEAN
1005	    #include <windows.h>
1006	    #undef WIN32_LEAN_AND_MEAN
1007
1008	    int main(int argc, char** argv) {
1009		int a, b = 0;
1010		__try {
1011		    a = 666 / b;
1012		}
1013		__except (EXCEPTION_EXECUTE_HANDLER) {
1014		    return 0;
1015		}
1016		return 1;
1017	    }
1018	]])],
1019	    [tcl_cv_seh=yes],
1020	    [tcl_cv_seh=no],
1021	    [tcl_cv_seh=no])
1022	)
1023	if test "$tcl_cv_seh" = "no" ; then
1024	    AC_DEFINE(HAVE_NO_SEH, 1,
1025		    [Defined when mingw does not support SEH])
1026	fi
1027
1028	#
1029	# Check to see if the excpt.h include file provided contains the
1030	# definition for EXCEPTION_DISPOSITION; if not, which is the case
1031	# with Cygwin's version as of 2002-04-10, define it to be int,
1032	# sufficient for getting the current code to work.
1033	#
1034	AC_CACHE_CHECK(for EXCEPTION_DISPOSITION support in include files,
1035	    tcl_cv_eh_disposition,
1036	    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1037#	    define WIN32_LEAN_AND_MEAN
1038#	    include <windows.h>
1039#	    undef WIN32_LEAN_AND_MEAN
1040	    ]], [[
1041		EXCEPTION_DISPOSITION x;
1042	    ]])],
1043		[tcl_cv_eh_disposition=yes],
1044		[tcl_cv_eh_disposition=no])
1045	)
1046	if test "$tcl_cv_eh_disposition" = "no" ; then
1047	AC_DEFINE(EXCEPTION_DISPOSITION, int,
1048		[Defined when cygwin/mingw does not support EXCEPTION DISPOSITION])
1049	fi
1050
1051	# Check to see if winnt.h defines CHAR, SHORT, and LONG
1052	# even if VOID has already been #defined. The win32api
1053	# used by mingw and cygwin is known to do this.
1054
1055	AC_CACHE_CHECK(for winnt.h that ignores VOID define,
1056	    tcl_cv_winnt_ignore_void,
1057	    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1058		#define VOID void
1059		#define WIN32_LEAN_AND_MEAN
1060		#include <windows.h>
1061		#undef WIN32_LEAN_AND_MEAN
1062	    ]], [[
1063		CHAR c;
1064		SHORT s;
1065		LONG l;
1066	    ]])],
1067	    [tcl_cv_winnt_ignore_void=yes],
1068	    [tcl_cv_winnt_ignore_void=no])
1069	)
1070	if test "$tcl_cv_winnt_ignore_void" = "yes" ; then
1071	    AC_DEFINE(HAVE_WINNT_IGNORE_VOID, 1,
1072		    [Defined when cygwin/mingw ignores VOID define in winnt.h])
1073	fi
1074
1075	# See if the compiler supports casting to a union type.
1076	# This is used to stop gcc from printing a compiler
1077	# warning when initializing a union member.
1078
1079	AC_CACHE_CHECK(for cast to union support,
1080	    tcl_cv_cast_to_union,
1081	    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
1082		  union foo { int i; double d; };
1083		  union foo f = (union foo) (int) 0;
1084	    ]])],
1085	    [tcl_cv_cast_to_union=yes],
1086	    [tcl_cv_cast_to_union=no])
1087	)
1088	if test "$tcl_cv_cast_to_union" = "yes"; then
1089	    AC_DEFINE(HAVE_CAST_TO_UNION, 1,
1090		    [Defined when compiler supports casting to union type.])
1091	fi
1092    fi
1093
1094    # DL_LIBS is empty, but then we match the Unix version
1095    AC_SUBST(DL_LIBS)
1096    AC_SUBST(CFLAGS_DEBUG)
1097    AC_SUBST(CFLAGS_OPTIMIZE)
1098    AC_SUBST(CFLAGS_WARNING)
1099    AC_SUBST(CFLAGS_NOLTO)
1100])
1101
1102#------------------------------------------------------------------------
1103# SC_WITH_TCL --
1104#
1105#	Location of the Tcl build directory.
1106#
1107# Arguments:
1108#	none
1109#
1110# Results:
1111#
1112#	Adds the following arguments to configure:
1113#		--with-tcl=...
1114#
1115#	Defines the following vars:
1116#		TCL_BIN_DIR	Full path to the tcl build dir.
1117#------------------------------------------------------------------------
1118
1119AC_DEFUN([SC_WITH_TCL], [
1120    if test -d ../../tcl8.6$1/win;  then
1121	TCL_BIN_DEFAULT=../../tcl8.6$1/win
1122    else
1123	TCL_BIN_DEFAULT=../../tcl8.6/win
1124    fi
1125
1126    AC_ARG_WITH(tcl, [  --with-tcl=DIR          use Tcl 8.6 binaries from DIR],
1127	    TCL_BIN_DIR=$withval, TCL_BIN_DIR=`cd $TCL_BIN_DEFAULT; pwd`)
1128    if test ! -d $TCL_BIN_DIR; then
1129	AC_MSG_ERROR(Tcl directory $TCL_BIN_DIR does not exist)
1130    fi
1131    if test ! -f $TCL_BIN_DIR/Makefile; then
1132	AC_MSG_ERROR(There is no Makefile in $TCL_BIN_DIR:  perhaps you did not specify the Tcl *build* directory (not the toplevel Tcl directory) or you forgot to configure Tcl?)
1133    else
1134	echo "building against Tcl binaries in: $TCL_BIN_DIR"
1135    fi
1136    AC_SUBST(TCL_BIN_DIR)
1137])
1138
1139#------------------------------------------------------------------------
1140# SC_PROG_TCLSH
1141#	Locate a tclsh shell installed on the system path. This macro
1142#	will only find a Tcl shell that already exists on the system.
1143#	It will not find a Tcl shell in the Tcl build directory or
1144#	a Tcl shell that has been installed from the Tcl build directory.
1145#	If a Tcl shell can't be located on the PATH, then TCLSH_PROG will
1146#	be set to "". Extensions should take care not to create Makefile
1147#	rules that are run by default and depend on TCLSH_PROG. An
1148#	extension can't assume that an executable Tcl shell exists at
1149#	build time.
1150#
1151# Arguments
1152#	none
1153#
1154# Results
1155#	Subst's the following values:
1156#		TCLSH_PROG
1157#------------------------------------------------------------------------
1158
1159AC_DEFUN([SC_PROG_TCLSH], [
1160    AC_MSG_CHECKING([for tclsh])
1161
1162    AC_CACHE_VAL(ac_cv_path_tclsh, [
1163	search_path=`echo ${PATH} | sed -e 's/:/ /g'`
1164	for dir in $search_path ; do
1165	    for j in `ls -r $dir/tclsh[[8-9]]*.exe 2> /dev/null` \
1166		    `ls -r $dir/tclsh* 2> /dev/null` ; do
1167		if test x"$ac_cv_path_tclsh" = x ; then
1168		    if test -f "$j" ; then
1169			ac_cv_path_tclsh=$j
1170			break
1171		    fi
1172		fi
1173	    done
1174	done
1175    ])
1176
1177    if test -f "$ac_cv_path_tclsh" ; then
1178	TCLSH_PROG="$ac_cv_path_tclsh"
1179	AC_MSG_RESULT($TCLSH_PROG)
1180    else
1181	# It is not an error if an installed version of Tcl can't be located.
1182	TCLSH_PROG=""
1183	AC_MSG_RESULT([No tclsh found on PATH])
1184    fi
1185    AC_SUBST(TCLSH_PROG)
1186])
1187
1188#------------------------------------------------------------------------
1189# SC_BUILD_TCLSH
1190#	Determine the fully qualified path name of the tclsh executable
1191#	in the Tcl build directory. This macro will correctly determine
1192#	the name of the tclsh executable even if tclsh has not yet
1193#	been built in the build directory. The build tclsh must be used
1194#	when running tests from an extension build directory. It is not
1195#	correct to use the TCLSH_PROG in cases like this.
1196#
1197# Arguments
1198#	none
1199#
1200# Results
1201#	Subst's the following values:
1202#		BUILD_TCLSH
1203#------------------------------------------------------------------------
1204
1205AC_DEFUN([SC_BUILD_TCLSH], [
1206    AC_MSG_CHECKING([for tclsh in Tcl build directory])
1207    BUILD_TCLSH=${TCL_BIN_DIR}/tclsh${TCL_MAJOR_VERSION}${TCL_MINOR_VERSION}${TCL_DBGX}${EXEEXT}
1208    AC_MSG_RESULT($BUILD_TCLSH)
1209    AC_SUBST(BUILD_TCLSH)
1210])
1211
1212#--------------------------------------------------------------------
1213# SC_TCL_CFG_ENCODING	TIP #59
1214#
1215#	Declare the encoding to use for embedded configuration information.
1216#
1217# Arguments:
1218#	None.
1219#
1220# Results:
1221#	Might append to the following vars:
1222#		DEFS	(implicit)
1223#
1224#	Will define the following vars:
1225#		TCL_CFGVAL_ENCODING
1226#
1227#--------------------------------------------------------------------
1228
1229AC_DEFUN([SC_TCL_CFG_ENCODING], [
1230    AC_ARG_WITH(encoding, [  --with-encoding         encoding for configuration values], with_tcencoding=${withval})
1231
1232    if test x"${with_tcencoding}" != x ; then
1233	AC_DEFINE_UNQUOTED(TCL_CFGVAL_ENCODING,"${with_tcencoding}")
1234    else
1235	# Default encoding on windows is not "iso8859-1"
1236	AC_DEFINE(TCL_CFGVAL_ENCODING,"cp1252")
1237    fi
1238])
1239
1240#--------------------------------------------------------------------
1241# SC_EMBED_MANIFEST
1242#
1243#	Figure out if we can embed the manifest where necessary
1244#
1245# Arguments:
1246#	An optional manifest to merge into DLL/EXE.
1247#
1248# Results:
1249#	Will define the following vars:
1250#		VC_MANIFEST_EMBED_DLL
1251#		VC_MANIFEST_EMBED_EXE
1252#
1253#--------------------------------------------------------------------
1254
1255AC_DEFUN([SC_EMBED_MANIFEST], [
1256    AC_MSG_CHECKING(whether to embed manifest)
1257    AC_ARG_ENABLE(embedded-manifest,
1258	AS_HELP_STRING([--enable-embedded-manifest],
1259		[embed manifest if possible (default: yes)]),
1260	[embed_ok=$enableval], [embed_ok=yes])
1261
1262    VC_MANIFEST_EMBED_DLL=
1263    VC_MANIFEST_EMBED_EXE=
1264    result=no
1265    if test "$embed_ok" = "yes" -a "${SHARED_BUILD}" = "1" \
1266       -a "$GCC" != "yes" ; then
1267	# Add the magic to embed the manifest into the dll/exe
1268	AC_EGREP_CPP([manifest needed], [
1269#if defined(_MSC_VER) && _MSC_VER >= 1400
1270print("manifest needed")
1271#endif
1272	], [
1273	# Could do a CHECK_PROG for mt, but should always be with MSVC8+
1274	# Could add 'if test -f' check, but manifest should be created
1275	# in this compiler case
1276	# Add in a manifest argument that may be specified
1277	# XXX Needs improvement so that the test for existence accounts
1278	# XXX for a provided (known) manifest
1279	VC_MANIFEST_EMBED_DLL="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest $1 -outputresource:\[$]@\;2 ; fi"
1280	VC_MANIFEST_EMBED_EXE="if test -f \[$]@.manifest ; then mt.exe -nologo -manifest \[$]@.manifest $1 -outputresource:\[$]@\;1 ; fi"
1281	result=yes
1282	if test "x$1" != x ; then
1283	    result="yes ($1)"
1284	fi
1285	])
1286    fi
1287    AC_MSG_RESULT([$result])
1288    AC_SUBST(VC_MANIFEST_EMBED_DLL)
1289    AC_SUBST(VC_MANIFEST_EMBED_EXE)
1290])
1291